我目前正在学习木偶,我正在尝试拥有一个
exec
,它将通知另一个执行人员,但前提是第一个执行人员成功。然而目前我正在努力弄清楚如何做到这一点。现在我有:
exec { 'first command':
command => "some command"
path => '/usr/bin',
notify => Exec["second command"],
}
exec { 'second command':
command => "run another command if first command was succesfull",
path => '/usr/bin',
refreshonly => true,
}
如何修改,以便仅在第一个命令成功时才运行第二个命令,因为当前无论第一个命令之后发生什么,它都会运行?
是的,这正是它应该如何工作的。以下代码将创建 2 个文件,
/tmp/foo
,然后是 /tmp/bar
:
Exec {
path => '/usr/bin',
}
exec {'foo':
command => 'touch /tmp/foo',
notify => Exec["bar"],
}
exec {'bar':
command => 'touch /tmp/bar',
refreshonly => true,
}
将其另存为文件并应用:
$ puppet apply exec.pp
Notice: /Stage[main]/Main/Exec[foo]/returns: executed successfully
Notice: /Stage[main]/Main/Exec[bar]: Triggered 'refresh' from 1 event
两个
exec
都会运行每个木偶运行,这通常是不受欢迎的行为。
您可以通过在运行第一个 exec 之前添加条件来改进它
exec {'foo':
command => 'touch /tmp/foo',
unless => 'test -f /tmp/foo',
notify => Exec["bar"],
}
这将检查
/tmp/foo
是否存在,如果删除/tmp/bar
,它将不会再次创建,因为代码仅检查/tmp/foo
文件是否存在。