如何使用Puppet exec的返回值?

时间:2015-09-04 18:17:48

标签: puppet

如何使以下逻辑工作?我的目的是比较自定义事实$环境的值和文件/etc/facter/facts.d/oldvalue的内容。

如果自定义事实$ environment不等于文件/etc/facter/facts.d/oldvalue的内容,则执行以下代码。

exec {'catenvchange' :
   command => "/bin/cat /root/oldvalue"}

if $environment != exec['catenvchange'] {#code#}

1 个答案:

答案 0 :(得分:2)

Exec资源无法正常工作。实际上, no 资源就是这样,或者像这样远程工作。此外,目录/etc/facter/facts.d/有一个特殊用途,您对如何在其中使用文件的期望与此目的不一致。

您所描述的想要做的事情看起来有点像设置外部事实并测试其价值。如果您通过某种方式删除名为/etc/facter/facts.d/anything可执行脚本(手动,插件同步,File资源,...),那么该脚本将在每个Puppet运行之前执行收集节点事实的过程的一部分。脚本生成的标准输出将被解析为key=value对,每个对定义一个事实名称及其值。如此指定的事实,例如名为" last_environment"将在目录构建期间提供。然后你可以像这样使用它:

if $::environment != $::last_environment {
    # ...
}

<强>更新

使用此机制来记录特定事实(例如$::environment)在一次运行中具有的值以便在下次运行时可以回读的一种方法是声明File资源管理外部事实脚本。例如,

file { '/etc/facter/facts.d/oldvalues':
  ensure  => 'file',
  owner   => 'root',
  group   => 'root',
  mode    => '0755',
  content => "#!/bin/bash\necho 'last_environment=${::environment}'\n"
}