Puppet:当来自另一个类的Exec成功时,来自类的Exec

时间:2015-01-07 16:17:18

标签: vagrant puppet

我想只在另一个来自不同类的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; ...

的结果

提前致谢!

2 个答案:

答案 0 :(得分:1)

你搞砸了requireonlyif。 阅读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运行仅在上一次运行,您可以使用subscriberefreshonly

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再次执行此任务。