2016-11-07 3 views
1

私はrubyでシェフのInSpecテストを書いて、 'umask 077'のファイル内容を確認しています。問題は、私が探している配列の中のいくつかのファイルが存在しないことです。私はnilファイルを除外して再プッシュしようとしていますが、とにかくすべてのファイルをチェックしようとしているようです。何かご意見は? 、存在する場合、InSpecでファイルの内容を確認してください。

control 'auth-default-umask' do 
    impact 0.5 
    title 'Default umask' 
    desc 'DISA RHEL6 STIG (V1R2)' 

    %w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file| 
    filecheck = [] 
    unless umask_file == nil 
     filecheck.push(umask_file) 
     describe directory(filecheck) do 
     its('content') { should match /umask 077/ } 
     end 
    end 
    end 
end 

答えて

1

ファイル名はそれが決している、nilである場合は、チェックしているので、当然それはすべてのそれらの時間を実行します:

は、ここに私のコードです。ファイルが存在しない場合は除外しようとしていますか?

また、ディレクトリのリストではなく、ディレクトリのリストを記述したかったので、それも変更しました。

はここで確定結果です:あなたは正しくやった

control 'auth-default-umask' do 
    impact 0.5 
    title 'Default umask' 
    desc 'DISA RHEL6 STIG (V1R2)' 

    %w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file| 
    filecheck = [] 
    if File.exists?(umask_file) # check file existence 
     filecheck.push(umask_file) 
     describe directory(umask_file) do # describe this directory 
     its('content') { should match /umask 077/ } 
     end 
    end 
    end 
end 

単に内部の各単語を取り、(あなたの入力パスの)文字列の配列を作る%w()を使用してファイル名の配列を作成しています。これらは単独では意味を持ちませんが、ファイルシステムのコンテキストでは意味をなさないように、例えばFileなどのクラスで使用できます。

File.exists?(filename)は、ファイルが存在するかどうかを確認します。あなたが使用することができます

ファイルを読み取るには、File.open

File.open(filename, 'r') do |file| 
    until file.eof? 
    line = file.gets 
    # do something with line 
    end 
end 
+0

は迅速な対応をありがとう!これはうまくいきますが、私はまだそれがなぜわかりません。もともと私は、ファイルチェックの変数が、存在していたファイルをすべて保持することを望んでいましたが、それを確認しましたが、ここでは起こっていないようです。 filecheckは今このコードで何をしているのですか? – Blooze

+0

@Blooze存在するすべてのファイルを保持しています。機能的には、実際には何も役に立たず、コードから安全に削除することができます。 @Casrafこの質問は実際シェフに関連するものではなく、 'describe directory'は実際には'記述ファイル 'でなければなりません(RSpecマッチャーと同じように動作しますが、' file'がこのために推奨されるServerspecです)。 –

+0

@Blooze私は答えにいくつかの明確さを追加:) – casraf

関連する問題