我們使用Boxen/Puppet自動構建Mac開發筆記本電腦,一步是安裝rabbitmq,聲明虛擬主機並添加用戶。木偶:只能通過require調用創建一個exec
但是它需要更多的時間讓rabbitmq準備虛擬主機聲明並添加新用戶,所以我們總是必須運行boxen兩次。
這裏是我的邏輯
察看RabbitMQ的是通過運行以下命令 rabbitmqadmin list vhost
準備好,但我們需要安裝並運行了,所以我說 require => Service['dev.rabbitmq']
如果上面的命令工作,然後我們知道兔子正在接受連接的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'和'subscribe'服務來嘗試,而不是僅僅需要它。但我不確定重試語義是否適用於「刷新」操作,而不是您現在正在執行的實際同步操作。如果沒有,您可以通過執行內部執行失敗/睡眠/重試循環的包裝腳本來解決此問題。 – 2014-08-29 08:52:33
'refreshonly' /'subscribe'也有一個好處,就是如果Puppet不必(重新)啓動服務,那麼Exec就不會運行。但我也不知道Puppet是否會在「執行」刷新上重試。我猜它會做,但我不知道。你能否使用shell提供程序和exec「sleep 30; rabbitmqadmin list vhosts」? – 2014-08-29 15:55:36