我有一个变量,我在很早的阶段设置,变量是布尔值,然后在某些时候我想exec
一个基于事实的命令,如果这个变量是真或假,这样的话:
exec { 'update-to-latest-core':
command => "do something",
user => 'root',
refreshonly => true,
path => [ "/bin/bash", "sbin/" , "/usr/bin/", "/usr/sbin/" ],
onlyif => 'test ${latest} = true',
notify => Exec["update-to-latest-database"],
}
所以这个命令不起作用(onlyif => ['test ${latest} = true'],
)我也尝试了其他几种方法,但是没有用。这么简单的东西不是那么难做。有人可以帮助我解决这个问题,并解释在onlyif
关闭内执行命令的规则。 (我也不能在更高级别上使用if-close,因为我有其他依赖项)
答案 0 :(得分:0)
由于<th style="text-align: center"> Table </th>
是 Puppet 变量,因此在应用目录之前推迟检查其值是没有用的。从技术上讲,事实上,你不能这样做:Puppet会将变量的值插入到$latest
资源的目录表示中,因此在应用目录时没有剩下的变量,只有字面意思。
由于有问题的资源是由另一个资源通知的,因此您不能完全禁止它。如果您问题中显示的代码不起作用,则可能是因为Exec
的插值与您预期的不同 - 例如,&#39; 1&#39;而不是&#39; true&#39;。以$latest
模式运行代理程序应该会显示正在执行的命令的详细信息。
或者,您可以采用不同的方式:
--debug
只要exec { 'update-to-latest-core':
command => $latest ? { true => "do something", default => '/bin/true' },
user => 'root',
refreshonly => true,
path => [ "/bin/bash", "sbin/" , "/usr/bin/", "/usr/sbin/" ],
notify => Exec["update-to-latest-database"],
}
为$latest
,它就会执行(成功且无外部影响),只要false
为do something
,它就会运行$latest
命令}。在目录构建期间选择命令。