我们使用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