仅当输出文件发生更改时才运行 puppet exec 命令

仅当输出文件发生更改时才运行 puppet exec 命令

我正在使用 exec 命令运行一个 shell 脚本,该脚本会修改其他软件包的某些配置文件。每当输入参数(例如 ip 地址、端口或 url)发生更改,或者 shell 脚本本身发生更改时,都会触发 exec 命令。

我必须使用 shell 脚本,因为软件包的配置文件在不同版本之间略有不同。我认为通过 sed 脚本更新配置文件比为每个特定版本提供不同的 puppet 模板更容易。

但是这种配置无法检测配置文件是否在 puppet 之外被修改。Puppet 不知道哪些文件被 shell 脚本修改了。

我正在寻找一种使 exec 命令依赖于任意其他文件的校验和的方法:

exec { "my_command.sh":
  only_if_file_has_changed => [ 
    "/etc/mysoftware/config.xml", 
    "/etc/othersoftware/defaults", 
  ]
}

这可能吗?请指教。

答案1

它的工作原理如下:

exec { 'my_command.sh':
  command   => '/bin/my_command.sh',
  subscribe => [ 
    File['/etc/mysoftware/config.xml'], 
    File['/etc/othersoftware/defaults'], 
  ],
  refreshonly => true,
}

这里明显的限制是,文件/etc/mysoftware/config.xml/etc/othersoftware/defaults也必须通过 Puppet 进行更改。
如果它们被其他东西(Puppet 之外的东西)更改,请参阅 Felix 的回答。当然,
您也可以订阅或任何其他更合适的依赖项。Package['xxx']

答案2

Puppet 可以通过其审计元参数。

file { [ "/etc/mysoftware/config.xml", 
         "/etc/othersoftware/defaults" ]:
    audit => 'content',
    notify => Exec['my_command'],
}

相关内容