Boxen/Puppet을 사용하여 Mac 개발 랩톱의 빌드를 자동화합니다. 한 단계는 rabbitmq을 설치하고, 가상 호스트를 선언하고, 사용자를 추가하는 것입니다.꼭두각시 : 필요한 경우에만 exec를 생성 할 수 있습니다.
그러나 우리는 항상 boxen을 두 번 실행해야하므로 vhosts 선언 및 새로운 사용자 추가를 준비하는 데 rabbitmq에 약간의 시간이 걸립니다.
은 여기 내 논리
rabbitmq는 다음 명령을 rabbitmqadmin list vhost
을 실행하여 준비가되어 있는지 확인입니다 그러나 우리는 rabbitmq를 설치하고 위의 명령은 우리가 토끼가 연결을 허용 알고 다음 일을하면 내가 require => Service['dev.rabbitmq']
을 추가 실행이 필요합니다.
여기 모두를 정리해 보겠습니다.
exec { "Wait for rabbitmq":
command => "rabbitmqadmin list vhosts",
tries => 2,
try_sleep => 30,
require => Service['dev.rabbitmq']
}
dev::rabbitmq::vhost { '/clearvh':
require => Exec['Wait for rabbitmq']
}
dev::rabbitmq::user { 'clear': password => 'password' }
dev::rabbitmq::permission { [ 'guest', 'clear' ]: vhost => '/clearvh' }
}
잘 작동
하지만 Exec {"Wait for rabbit"}
는 dev::rabbit::vhost
이없는 경우에도, 때마다 호출지고 있습니다. 그것은 dev::rabbitmq::vhost
에 의해서만 호출되는 것이 좋습니다.
그럴 수 있습니까?
감사
단지 'refreshonly => true'로 시도해보고 서비스를 요구하는 대신'구독 '할 수 있습니다. 하지만 재시도 의미가 현재 수행중인 실제 동기화와 달리'새로 고침 '작업에 적용되는지 여부는 확실하지 않습니다. 그렇지 않은 경우 내부적으로 fail/sleep/retry 루프를 수행하는 래퍼 스크립트를 실행하여이 문제를 해결할 수 있습니다. –
'refreshonly' /'subscribe'는 또한 꼭두각시가 서비스를 (다시) 시작할 필요가 없다면'Exec'가 실행되지 않는다는 장점이 있습니다. 그러나 Puppet이 'Exec'새로 고침을 다시 시도할지 여부를 알지 못합니다. 나는 그것이 할 것 같아요,하지만 난 모르겠다. 대신 셸 공급자와 exec "sleep 30; rabbitmqadmin list vhosts"를 사용할 수 있습니까? –