2016-11-07 7 views
1

나는 umask 077에 대한 파일의 내용을 확인하기 위해 루비에 CheS InSpec 테스트를 작성하고 있습니다. 문제는 내가 찾고있는 배열에있는 파일 중 일부가 존재하지 않는다는 것입니다. 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 변수가 존재했는지 확인한 다음 모든 파일을 보유하고 싶었지만 여기서는 발생하지 않는 것으로 보입니다. filecheck가이 코드로 정확히 무엇을하고 있습니까? – Blooze

+0

@Blooze 존재하는 모든 파일을 보유하고 있습니다. 기능적으로 실제로는 아무 것도 유용하지 않으며 코드에서 안전하게 제거 할 수 있습니다. @Casraf이 질문은 실제로 셰프와 관련이 없으며'describe directory'는 실제로'describe file'이어야합니다 (RSpec matcher와 마찬가지로 작동 할지라도'file'가 이에 대한 기본 설정입니다). –

+0

@Blooze 답변에 선명도를 추가했습니다. :) – casraf