Puppet:创建exec只能由require调用



我们使用Boxen/Ppuppet来自动构建我们的Mac开发笔记本电脑,其中一步是安装rabbitmq,声明vhosts并添加用户。

但是rabbitmq需要更多的时间来准备vhosts声明和添加新用户,所以我们总是要运行boxen两次。

这是我的逻辑

通过运行以下命令检查rabbitmq是否准备就绪 rabbitmqadmin list vhost 但我们需要安装并运行rabbitmq,所以我添加了 require => Service['dev.rabbitmq'] 如果以上命令有效,那么我们就知道rabbit正在接受连接。

给,让我们把所有的东西放在一起。

  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没有。如果仅由CCD_ 5来调用它。

这可能吗?

感谢

你在exec上的做法不对。您需要有一个条件来停止exec的运行。

exec { "Wait for rabbitmq":
  command => "rabbitmqadmin list vhosts",
  tries   => 2,
  try_sleep => 30,
  unless    => 'some command which returns "0" that tells you rabbitmq is already ready for vhosts',
  require   => Service['dev.rabbitmq']

}

除非你告诉你的执行官出于某种原因不要运行,否则它总是会运行的。

有关exec资源,请参阅Puppet Type Reference,并查找unlessonlyif

至于这个问题的题目,我原来忽略了。require意味着传递给require的资源必须在调用资源之前应用。所以在这种情况下

Service['dev.rabbitmq']

将在之前应用

Exec['Wait for rabbitmq']

require不会确保exec资源不会运行。

最新更新