2015-10-21 64 views
1

TLDR后Exec的链命令:木偶 - 不能只执行一次的命令通知

我无法配置木偶“执行”的命令链命令只运行一次。

详情:

我想利用流浪汉,木偶模块需要安装虚拟机安装技术管理平台,并加载到它的一些样本数据。 我使用https://forge.puppetlabs.com/johanek/redmine,它工作得很好 - Redmine已安装并可以正常工作。

我的目标:
现在我想用REST API样本数据加载到管理平台:

  1. 创建1个测试项目
  2. 导入2个问题到这个项目

我想要运行2个简单的“执行”,一个又一个,只有一次,但我无法实现这一点,因此这个问题。

我目前的工作:
我试图订阅的最新步骤之一管理平台安装

订阅=> [执行[ 'rails_migrations']

和然后导入数据,但第一步“create-project1”总是通知第二步“导入问题”,因此它会创建重复的数据。 而且如果几次运行流浪者,“导入问题”会造成这些问题的重复。 这里是我的代码:

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

你几乎在那里'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 - 你应该能够发挥一点与达到你想要

+0

我测试这个解决方案 - 它阻止'command'执行,但'notify'仍然触发刷新到下一个事件。真正的问题是,这个'通知'可以停止/不定期通知下一个'exec'吗?将来,当我有例如10位连锁高管,我可能需要为他们添加'onlyif'? – ljader