Chef-client 11.12.8을 실행하고 있습니다.Bash 스크립트는 터미널에서 제대로 작동하지만 Chef에서 같은 스크립트가 실행되지 않습니다.
aws s3 ls s3://my-bucket/prod-builds/
나는 단지 S3 버킷에서 파일 목록을 얻기 위해 awscli
도구를 사용하고 있습니다 : 나는 다음 줄을 포함하는 bash는 스크립트를 작성했습니다. 요리사 클라이언트가 printf
문을 사용하여,이 같은 라인으로 bash는 스크립트를 실행할 때
2014-10-10 21:27:50 42081271 aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz
그러나, 나는 bash는 스크립트가 볼 : 내 터미널에서 수동 (우분투 14.04 LTS) 다음을 실행하면,이 출력을 얻을 출력 만 :
2014-10-10
명령 출력에 공백이 있으면 chef-client가 혼란 스러울 수 있습니다. 나는이
execute "Download latest build" do
command "bash /path/to/my/script"
creates "/file/that/gets/created"
user "aragorn"
action :run
end
어떤 생각을 해결할 수있는 방법 :
여기 bash는 스크립트를 실행 내 요리사 조리법에서 선이다?
업데이트 : 요청으로, 여기에 내 스크립트의 일부입니다 :이 라인이 실행 있음을 확인했습니다
if [ -z "$gitCommitId" ]; then
# Take a filename like "aragorn-38d5afe23f1fa09a991c4cdbcb8461ed8709d15f.tgz" and extract the commitId from it
# Note that we take the topmost result
gitCommitId=$(aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1)
fi
(printf
문이 출력을 사용),하지만 이상한 것은 내가 실행할 때이다 내 터미널에 직접 aws s3 ls s3://my-bucket/prod-builds/ | sort -r | head -2 | sed -n '1!p' | awk -F "aragorn-" '{print $2}' | cut -d'.' -f 1
명령 (또는 수동으로 내 터미널에서 스크립트를 실행), 잘 작동합니다. 하지만 요리사가 운영하는 gitCommitId
은 아무 것도 설정하지 않습니다.
업데이트 # 2 : 나는 요리사와 터미널 간의 차이점을 테스트하기 위해 간단한 bash 스크립트를 작성했습니다. 나는 Chef run이 터미널에서 호출 할 때보 다 aws s3 ls s3://my-bucket/prod-builds
을 호출하는 것과는 다른 결과를 출력한다는 것을 확인했습니다. 특히 터미널 통화에 있던 폴더를 S3 버킷에 두지 않았습니다. 나는 아직도 이것을 설명 할 수 없다.
aws s3 ls s3://my-bucket/prod-builds/ | grep aragorn | sort -r | head -1 | cut -d'-' -f 4 | cut -d'.' -f 1
특별 감사 방향!
더 많은 정보가 필요합니다. 이것이 쉐프와 관련된 문제에 관해서는 루비 문제 일 가능성이 높지만 스크립트에 문제가있는 것은 거의 확실합니다. 우리가 전체 대본을 가지고 있다면 우리는 도울 수있을 것입니다. –
제안 해 주셔서 감사합니다. 스크립트의 관련 부분으로 질문이 업데이트되었습니다. –
'echo $ gitCommitId >>/tmp/testme'을'gitCommitId = .....'줄 바로 뒤에 추가합니다. 파일에 무엇이 들어 있는지 확인하십시오. 나는 가변적 인 범위 설정 문제에 직면하고 있다고 생각하고있다. –