Vagrant Puppet:当从另一个类执行成功时从类执行

Vagrant Puppet:当从另一个类执行成功时从类执行,vagrant,puppet,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 => "te

我只想在来自不同类的另一个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/';
    }
}
classmysql{
exec{'load sql':
command=>'mysql-uadmi-pxxx-general['/bin','/usr/bin'],
超时=>0,
onlyif=>“test-f/vagrant/sites/ddbb/general.sql”,
}
exec{'delete general sql':
command=>'sudorm/vagrant/sites/ddbb/general.sql',
路径=>['/bin','/usr/bin'],
onlyif=>“test-f/vagrant/sites/ddbb/general.sql”,
require=>Exec['load-sql'],
}
}
斯芬克斯类{
exec{'sphinx创建所有索引':
command=>'sudo indexer-c/etc/sphinxsearch/sphinx.conf--all--rotate',
require=>Exec['load-sql'],
路径=>'/usr/bin/';
}
}
仅当“加载sql”成功执行,但“sphinx-create-all-index”忽略“加载sql”的结果时,才会执行命令“delete general sql”


提前谢谢

你搞砸了
require
onlyif
。 了解

要求

导致在目标资源之后应用资源

所以

表示在执行
exec{'load-sql':}
resource之后执行resource

另一方面,
only如果
in意味着:

如果设置了此参数,则仅当命令的退出代码为0时,此exec才会运行


因此,您必须在
'sphinx-create-all-index'
中添加带有适当测试的
onlyif
(可能是
onlyif=>“test-f/vagrant/sites/ddbb/general.sql
)以使依赖的
exec
仅在前一个运行时运行,您可以使用
订阅
刷新

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

exec { 'sphinx-create-all-index':
    command => 'sudo indexer -c /etc/sphinxsearch/sphinx.conf --all --rotate',
    subscribe => Exec['load-sql'],
    refreshonly => true,
    path => '/usr/bin/';
}