0

私は人形に以下のコードを持っています

if $::operatingsystemmajrelease < 7 {

     file { '/etc/sudoers' :
      ensure  => present,
      owner   => 'root',
      group   => 'root',
      mode    => '0440',
      content => template('sudo/sudoers.erb'),
    }
  }

私はこれのためにserverspecを書きました

require 'spec_helper'

if os[:release] == '6'

  describe file('/etc/sudoers') do
    it { should exist }
    it { should be_owned_by 'root' }
    it { should be_grouped_into 'root' }
    it { should be_mode 440 }
    its(:content) { should match /Defaults    requiretty/}
  end
end

1) メッセージの下に表示される理由

No examples found.

Finished in 0.00038 seconds (files took 0.44176 seconds to load)
0 examples, 0 failures

私のOSバージョンは6なので、serverspecコードをコンパイルする必要がありますが、すべての例を実行できないのはなぜですか.

に変更すると、serverspecは機能していますif os[:release] < '7'

2) } 4 オクテット マッチングit { should be_mode 440 }を指定した場合もサポートしません。it { should be_mode 0440

エラーを下回る

File "/etc/sudoers" should be mode 288
     On host `localhost'
     Failure/Error: it { should be_mode 0440 }
       expected `File "/etc/sudoers".mode?(288)` to return true, got false
       /bin/sh -c stat\ -c\ \%a\ /etc/sudoers\ \|\ grep\ --\ \\\^288\\\$

     # ./spec/localhost/sudo_spec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.05873 seconds (files took 0.48314 seconds to load)
4

1 に答える 1

2

1) 通常os[:release]、 のような値が含まれます'6.5'。したがって、比較を行う正しい方法は、たとえば次のようになります。

if os[:release].to_i == 6

または:

if os[:release].split('.')[0] == '6'

2) 先頭にゼロが付いた数値は、Ruby によって 8 進数 ( 0440) から 10進数 ( ) に変換され288、Serverspec (Specinfra) はそれを10 進数から文字列への形式で基になるgrepコマンドに渡すためです。

于 2016-01-03T11:03:37.200 に答える