TLDR:
我无法将Puppet“Exec”命令的有序链配置为仅运行ONCE。
详细信息:
我想使用Vagrant和Puppet模块来设置安装了Redmine的VM以及加载到其中的一些示例数据。 我正在使用https://forge.puppetlabs.com/johanek/redmine并且效果很好 - 安装了Redmine并且它可以工作。
我的目标:
现在我想使用REST API将示例数据加载到Redmine中:
我想要一个接一个地运行2个简单的“Exec”并且只运行一次,但我无法实现这一点,因此问题。
我目前的努力:
我试图订阅redmine安装的最新步骤之一
subscribe => [执行[ 'rails_migrations']]
然后导入数据,但第一步“create-project1”总是通知第二步“导入问题”,因此它会创建重复数据。 如果几次运行vagrant配置,“import-issues”会产生重复的问题。 这是我的代码:
exec {'create-project1':
subscribe => [Exec['rails_migrations']],
path => ['/usr/bin', '/usr/sbin', '/bin'],
creates => "$redmine_install_dir/.data_loaded",
command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded",
notify => [Exec['import-issues']],
} ->
exec {'import-issues':
path => ['/usr/bin', '/usr/sbin', '/bin'],
command => "curl WHICH_IMPORTS_ISSUES",
refreshonly => true,
}
问题:
如何配置这些Exec命令在链中运行并且仅运行?
我也在考虑在不久的将来将这个链扩展到5个命令,所以请记住这一点。
答案 0 :(得分:0)
你差不多只有'ONLY ONCE' - Puppet有onlyif个属性,你可以在你的exec块中包含这些属性来测试文件是否已经存在。
然后,您可以执行类似的操作exec {'create-project1':
subscribe => [Exec['rails_migrations']],
path => ['/usr/bin', '/usr/sbin', '/bin'],
onlyif => "test ! -f $redmine_install_dir/.data_loaded"
command => "curl WHICH_CREATES_PROJECT && touch $redmine_install_dir/.data_loaded",
notify => [Exec['import-issues']],
对$redmine_install_dir/.data_loaded
存在的测试 - 你应该能够用它来实现你想要的东西