1

このレイアウトはシェフの仕様テスト用ですが、ルビーを利用してファイルの内容を取得します。ただし、このテストでは、実際にはファイルに対してテストしていないため、それを説明する方法を理解しようとしています。コードは次のとおりです。

%w(/etc/bashrc /etc/profile).each do |path|
file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 
 BASELINE = '0027'
 (1..3).each do |i| # leading char is '0' octal indicator
    describe umask[i].to_i do
        it { should be <= BASELINE[i].to_i }
     end
    end
   end
  end
end

これが私に問題を引き起こしている行です

file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask|
4

2 に答える 2

0

エラーに関する限り、つまり「nil:NilClass の未定義のメソッド 'scan'」というエラーは、inspec の実行中に、渡されたファイルが存在しないか読み取れない場合にのみ発生します。ファイルシステム上。

また、提供された情報は完全ではありません。両方のファイルに設定されている umask が不明であるためです。つまり、3 桁または 4 桁ですか?

スキャン中に 3 桁の umask " scan(/^\s umask\s+(\d{3})\b/)* " を探しており、4 桁の " BASELINE = '0027' " を設定しているためです。 . したがって、問題が発生することは間違いありません。

ファイルに「umask 027」がある場合は、次のようになります。BASELINE = '027'を確認し、3 桁の umask を検索します

%w(/etc/bashrc /etc/profile).each do |path|
  file(path).content.scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask| 
   BASELINE = '027'
   (1..3).each do |i| # leading char is '0' octal indicator
      describe umask[i].to_i do
        it { should be <= BASELINE[i].to_i }
      end
   end
 end
end

それ以外の場合、ファイルに「umask 0027」がある場合は、次のようになります。

scan(/^\s*umask\s+(\d{4})\b/)をチェックし、4桁のumaskを検索

%w(/etc/bashrc /etc/profile).each do |path|
  file(path).content.scan(/^\s*umask\s+(\d{4})\b/).flatten.each do |umask| 
   BASELINE = '027'
   (1..3).each do |i| # leading char is '0' octal indicator
      describe umask[i].to_i do
        it { should be <= BASELINE[i].to_i }
      end
   end
 end
end
于 2016-08-19T06:13:41.773 に答える
0

file(path).contentファイルの内容が何であれ、一致する文字列に変更できます。

"Sample_string".scan(/^\s*umask\s+(\d{3})\b/).flatten.each do |umask|

その理由は、実際のファイルに対してテストしていない場合にfile(path).content返されるためです。メソッドがないためnil、エラーが発生しています。nilscan

于 2016-08-17T15:51:29.747 に答える