안녕하세요. 코미야입니다.
Chef에서 여러 작업을 자동화하다 보면, 중간에 변경된 값이나 변수를 사용하고 싶을 때가 있을 것입니다. 예를 들어, 멩등원이 아닌 이상한 현상을 해결하고 싶을 때가 올 것입니다. 예를 들어 처음에는 작동하지 않고 두 번째는 작동하는 경우입니다. 이런 경우, 오하이로 값을 얻을 수 있다면, 그것을 사용하거나 직접 오하이 플러그인을 만들거나, 루비_block를 작성하거나, 알림이나 "즉시" 같은 것으로 호출해야 합니다.
무슨 말씀인지 모르겠어요! 만약 그렇게 생각한다면, 아래 링크에 셰프가 처형되는 순서에 대해 적혀 있으니, 한 번 살펴보는 게 좋을 것 같아요. 셰프의 레시피가 처음부터 끝까지 완성된다는 오해 | 엔진 야드 블로그 JP
이 말이 다소 불친절할 수 있으니 다음 내용을 참고해 주세요.
템플릿 "/etc/profile.d/rbenv.sh"
not_if "grep rbenv /etc/profile.d/rbenv.sh"
출처 "rbenv.sh.erb"
행동 :Create
알림 :create, "ruby_block[initialize_rbenv]", :즉시
끝
ruby_block "initialize_rbenv"이 그렇다
블록 두
ENV['RBENV_ROOT'] = node[:rbenv][:root]
ENV['PATH'] = "#{node[:rbenv][:root]}/bin:#{node[:rbenv][:root]}/shims:#{node[:ruby_build][:bin_path]}:#{ENV['PATH']}"
끝
액션 :아무 문제
끝
조금 설명하자면, 레시피 중 변경을 가정하는 처리는 chef에서 쉽지 않은 것 같고, 루비로 작성된 처리는 수렴 전에 이루어져서 중간 변경 사항이 그때는 인식되지 않는 것 같습니다. 루비_block 리소스(두 번째 성공 시 성공)는 수렴 타이밍과 동시에 실행되는 것 같습니다. 특정 리소스가 처리될 때만 실행하고 싶다면, 해당 리소스의 알림 타이밍을 지정할 수 있습니다. 이 경우 루비_block 리소스의 동작에 대해 아무것도 지정하지 않고, 템플릿 리소스에서 프로필 설정을 설정한 뒤 :immediately를 notifyes로 지정하면, 변수 재로드가 즉시 수행됩니다. (레시피를 분리할 때 notify를 사용하면 -o로 개별적으로 실행하기 어렵습니다.) )
PATH의 좋은 점은 이 작업 후에 실행될 bash 리소스에서 ruby-build로 처리하는 것이 첫 번째 레시피 애플리케이션부터 제대로 작동♪한다는 것입니다. He(^o^He)(ノ^o^)ノ ♪ 하지만 ruby-build나 chef로 하면 패키지 리소스와 함께 배치될 뿐만 아니라 Make Brew도 실행되기 때문에 시간이 걸리기 때문입니다. 그래서 개인적으로는 패커나 rpm이 직접 만드는 방식으로 처리하는 것을 선호합니다.
Ohai에서 호스트네임을 다시 불러오는 방법에 대한 자세한 정보는 아래 링크를 방문해 주세요. 저는 Ohai용 플러그인을 직접 만들어본 적이 없습니다. chef-solo - Ohai에서 호스트네임 사용하는 방법 - Qiita.
참고용으로는 다음 자료도 참고했습니다. 정말 감사합니다. Ruby - Chesi 블로그의 Ruby_block에서 리소스를 실행할 때 Ches - Qiita에서 리소스를 호출할 때 유용해 보입니다.
읽어주셔서 감사합니다.