我想只在另一个来自不同类的Exec成功执行时才调用Exec。
class mysql {
exec { 'load-sql':
command => 'mysql -uadmi -pxxx general < /vagrant/sites/ddbb/general.sql',
path => ['/bin', '/usr/bin'],
timeout => 0,
onlyif => "test -f /vagrant/sites/ddbb/general.sql",
}
exec { 'delete-general-sql':
command => 'sudo rm /vagrant/sites/ddbb/general.sql',
path => ['/bin', '/usr/bin'],
onlyif => "test -f /vagrant/sites/ddbb/general.sql",
require => Exec['load-sql'],
}
}
class sphinx {
exec { 'sphinx-create-all-index':
command => 'sudo indexer -c /etc/sphinxsearch/sphinx.conf --all --rotate',
require => Exec['load-sql'],
path => '/usr/bin/';
}
}
命令&#39; delete-general-sql&#39;只有当'load-sql&#39;已成功执行,但&#39; sphinx-create-all-index&#39;忽略&#39; load-sql&#39; ...
的结果提前致谢!
答案 0 :(得分:1)
你搞砸了require
和onlyif
。
阅读puppet ordering。
<强>需要强>
导致在目标资源之后应用资源。
所以
require => Exec['load-sql'],
表示在执行exec{'load-sql':}
资源后执行资源。
另一方面,exec
中的onlyif
表示:
如果设置了此参数,则仅当命令的退出代码为0时,此exec才会运行。
因此,您必须将onlyif
与适当的测试(可能是onlyif => "test -f /vagrant/sites/ddbb/general.sql
)添加到'sphinx-create-all-index'
。
答案 1 :(得分:0)
要使依赖exec
运行仅在上一次运行,您可以使用subscribe
和refreshonly
。
exec { 'sphinx-create-all-index':
command => 'sudo indexer -c /etc/sphinxsearch/sphinx.conf --all --rotate',
subscribe => Exec['load-sql'],
refreshonly => true,
path => '/usr/bin/';
}
这有一些注意事项 - 如果第一次出现问题,您可能很难让Puppet再次执行此任务。