Puppet:仅在关闭时评估变量

时间:2016-06-28 11:09:20

标签: puppet

我有一个变量,我在很早的阶段设置,变量是布尔值,然后在某些时候我想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,因为我有其他依赖项)

1 个答案:

答案 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,它就会执行(成功且无外部影响),只要falsedo something,它就会运行$latest命令}。在目录构建期间选择命令。