2015-02-03 2 views
2

레시피에 두 개의 리소스가 있습니다. 첫 번째는 사용자 uid/gid/home 디렉토리 등을 설정하는 user 리소스이며 supports :manage_home => true을 사용합니다.요리법 - 사용자 리소스가 manage_home 인 경우에만 리소스를 실행하는 방법

내 두 번째 리소스는 bash 리소스입니다. 현재 스크립트는 약간의 불필요한 모든 요리사 - 클라이언트 실행에서 실행됩니다. 사용자 리소스를 실행할 때 manage_home이 호출 된 경우에만 스크립트를 실행하고 싶습니다. 예를 들어 사용자의 홈 디렉토리가 변경되고 파일이 이동 된 경우 스크립트를 실행합니다. 그렇지 않으면 아무것도 수행하지 않습니다.

순수 루비 조건 (예 : 특정 파일이있는 경우, 노드에 실행 목록에 특정 요소가있는 경우 등)을 사용하여 only_if을 사용하는 예제를 찾을 수 있었지만 수행하고 싶은 작업 조건은 다른 요리사 자원의 결과와 연결되어야합니다. 나는 사용자 리소스가 usermod (또는 useradd)으로 실행된다는 것을 알고 있는데, 이는 홈 디렉토리가 이동되었는지 여부를 알려주지 않는 것으로 보인다. 그래서 이것도 가능합니까?

+1

실행 전후에 차이점을 확인할 수 있습니까? 'node [: blah] = \'ls -la/home/blah \'와 같은 노드에 명령의 값을 할당 할 수 있습니다. http://stackoverflow.com/questions/16309808/how-cani-i- 쉐프가 실행되는 리소스 넣기 –

+0

도움을 주셔서 감사합니다! – tytk

답변

3

리소스는 상태 변화에 따라 notify 다른 리소스를 사용할 수 있습니다.

user "whatever" do 
    action :modify 
    notifies :run, "bash[modify user]", :immediately 
end 

당신은 다음 리소스 만 통지에서 실행, :nothing에 자원의 기본 동작을 변경할 수 있습니다. 자원의 내부 제어되는 "상태 변경"을 구성하지만, 전혀 조치가 자원이 찍은 경우는 일반적으로 트리거해야합니까

bash "modify user" do 
    command "ls" 
    action :nothing 
end 

(이것은 자원의 플래그 설정은 updated_by_last_action라고도 함). 정확히 manage_home 요구 사항을 충족하지 못할 수도 있지만 항상 실행중인 bash보다 좋습니다.

+0

고마워, 나는 그걸 몰랐다. – tytk

0

@Matt 그런데 여기서 bash 자원은 사용자 자원이 실행될 때만 실행됩니다. 리소스를 사용하는 것이 현재까지 가능하다면 bash 리소스는 제대로 실행되지 않습니다. 그렇다면 그것을 뒤집는 방법. 즉, bash 자원은 사용자 자원이 실행되지 않는 경우에만 실행됩니까 ?? 우리가 이것을위한 조건을 어디에 두어야합니까?

관련 문제