我的要求是:
我的代码是这样的:
exec { 'exec3':
command => 'command3',
require => File['file'],
}
exec { 'exec2':
command => 'command2',
require => Exec['exec3'],
}
exec { 'exec1':
command => 'command1',
require => Exec['exec2'],
subscribe => File['file'],
refreshonly => true,
}
但是,无论是否对/ tmp / file进行了更改,command3和command2始终会运行。我该如何预防呢?当/ tmp / file没有变化时,我不希望在exec1中运行“require”。
答案 0 :(得分:4)
您需要:首先,为所有高管订阅文件资源;其次,对于每个人也需要他们先前的执行资源;第三,每个exec设置为refreshonly
。
以下是一些代码:
file { 'file':
ensure => file,
path => '/tmp/file',
content => "some content\n",
}
exec { 'exec1':
command => 'command1',
subscribe => File['file'],
refreshonly => true,
}
exec { 'exec2':
command => 'command2',
subscribe => File['file'],
require => Exec['exec1'],
refreshonly => true,
}
exec { 'exec3':
command => 'command3',
subscribe => File['file'],
require => Exec['exec2'],
refreshonly => true,
}
这是如何运作的:
使用exec的refreshonly机制,exec1仅在刷新事件时触发,当且仅当file1的内容发生更改时才会发送刷新事件。
所有exec事件都需要由文件内容的更改类似地触发,因此他们都订阅了该文件。
但是exec需要以特定的方式排序,因此exec2需要exec1,而exec3需要exec2。
另见reasons为什么需要小心使用refreshonly。