2016-10-20 1 views
0

나는 Ruby로 작성된 커스텀 리소스를 가지고있다. 이 명령은 Puppet을 설치하기를 원하는 RPM 패키지에서 가져옵니다. 리소스가 실행되기 전에 카탈로그가 컴파일되는 동안 command 메서드가 평가되므로 올바른 종속성이 있다고 생각하더라도이 방법은 작동하지 않습니다. 적어도 그것은 그것이 나의 이해입니다.Puppet은 나중에 사용자 지정 리소스에서 사용할 명령을 설치할 수 있습니까?

이 방법을 사용할 수 있습니까? 에이전트없는 설정에서 두 개의 별도 매니페스트를 실행할 수는 있지만 인형 서버에서는 어떻게 작동할까요?

+2

디버그 로그 및 공급자 코드를 표시 할 수 있습니까? 이것은 내가 기억하고 신속한 테스트에서 작동합니다. 실행 중에 명령이 사용 가능하게 될 때 중지해야하는 "file/usr/bin/example does not exist"디버그가 표시되어야합니다. 카탈로그 컴파일은 공급 업체의 가용성에 영향을받지 않아야하며, 평가 중에는 상담원 측에만 해당됩니다. –

+0

종속 패키지를 설치 한 코드를 살펴본 결과 작동하지 않았을 것입니다! 그러나 디버그 출력은 시도를 보여 주며, 이는 당신의 요점을 증명합니다. 그러므로 "제대로 작동하면 작동합니다"라고 대답하면 받아 들일 것입니다 :-) –

+0

다행히 생각해보세요. 답변! –

답변

2

commands 지시어 (예 : commands :foo => '/usr/bin/foo')를 사용하면 파일이 존재할 때 리소스에 대한 사용이 자동으로 시작됩니다. 다른 작동중인 제공자가없는 경우 제공됩니다.

commands은 내부적으로 "제한"지시문을 생성하며 파일이있을 때만 실행되도록 공급자를 제한합니다. 비슷한 것들은 "feature"를위한 것입니다. 특정 Ruby 라이브러리 ("feature")가로드되어야합니다. 다른 모든 작업 제공자가없는 카탈로그에 자원이있을 때 공급자에 대한 Puppet 에이전트는 이러한 모든 항목을 지속적으로 재평가해야합니다. --debug으로 실행할 때

당신은 에이전트에서이 같은 메시지를 볼 수 있습니다 : 파일이 나타납니다

Debug: Puppet::Type::Example::ProviderExample: file /usr/bin/foo does not exist 

되면, 메시지를 중지해야하고 공급자를 사용하는 모든 리소스를 실행해야합니다. 파일이 표시되지 않는 경우,이 메시지가 실행 에이전트의 끝으로 나타납니다

Error: Could not find a suitable provider for example 
제공이 고려되기 전에

카탈로그는 항상 마스터에 컴파일해야하고 에이전트가있는만큼 실행하려고한다 그 자원에 실패하기 전에 할 수있다.

"올바르게 작동하면 작동합니다!"

관련 문제