如何解决如果校验和不同,如何替换文件然后重新启动服务?
如果校验和与源(从 Puppet Master 中提取的目录)不同,我如何比较租户 VM 中的文件并替换它?如果文件被替换,随后重新启动服务。如果文件相同,则不执行任何操作。
租户 VM /etc/rsyslog.d/proxy.conf
中的文件。我有以下代码,但它没有替换(编辑 /etc/rsyslog.d/proxy.conf
然后执行 puppet agent -t
),也没有重新启动服务。
class lin_proxy::service {
service { 'syslog':
ensure => 'running',enable => true,}
file { '/etc/rsyslog.d/proxy.conf':
notify => Service['syslog']
ensure => present,path => '/etc/rsyslog.d/proxy.conf'
replace => 'yes',source => 'puppet:///modules/lin_proxy/proxy.conf',checksum => 'md5'
checksum_value => 'dcb0c65283e52fe7aff25cd69200eb69'
mode => '0644',owner => 'root',group => 'root'
}
}
解决方法
如果校验和是,我如何比较租户虚拟机中的文件并替换它 与来源不同(从傀儡大师中提取的目录)? 如果文件被替换,随后重新启动服务。如果什么都不做 文件是一样的。
提供的类应该可以完成工作,前提是它实际应用于目标节点,并且所有细节实际上都是正确的(尤其是服务名称和校验和值)。
然而,在资源声明中表达校验和值而不是让 Puppet 在需要时计算它是非常不寻常的,并且在任何其他情况下指定特定校验和算法的情况并不常见。显式指定 replace => 'yes'
也是不常见的,这是默认值,ensure => present
可能没有您想要的那么强。在风格上,在可行的情况下使用链接箭头来表达关系也很常见,并且在与资源标题匹配时显式指定 path
属性是不常见的。
总的来说,我会这样写你的代码:
class lin_proxy::service {
file { '/etc/rsyslog.d/proxy.conf':
ensure => 'file',source => 'puppet:///modules/lin_proxy/proxy.conf',mode => '0644',owner => 'root',group => 'root',}
~> service { 'syslog':
ensure => 'running',enable => true,}
}
但是,我不希望该版本能够解决您的问题,这很可能是由于您的班级没有首先分配给目标节点,或者可能是由于环境超时导致 Puppet 无法识别您的班级变化。您可以通过查看节点目录的缓存副本来检查该类和两个资源是否实际存在,以及它们是否具有您期望的属性。
,我会稍作更改并使用元参数而不是链接箭头。
class lin_proxy::service {
file { '/etc/rsyslog.d/proxy.conf':
ensure => 'file',notify => Service['syslog'],}
service { 'syslog':
ensure => 'running',}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。