如何防止Puppet的file_line资源一直触发事件?

如何防止Puppet的file_line资源一直触发事件?

我用文件行来自 puppetlabs/stdlib 的资源,使用 Puppet 向文件添加行。我想在以下情况下触发服务重新加载:文件行实际上会更改文件。以下是我尝试过的方法:

第一次尝试

service { 'test-service':
  ensure => 'running',
  enable => true
}
file_line { 'test':
  path   => '/file'
  line   => 'test parameter'
  notify => Service['test-service']
}

第二次尝试

service { 'test-service':
  ensure => 'running',
  enable => true
}
file_line { 'test':
  path   => '/file'
  line   => 'test parameter'
}~>Service['test-service']

或者与File_line['test']~>Service['test-service']标题类似。

第三次尝试

file { '/file':
  path   => '/file',
  notify => Service['test-service']
}
service { 'test-service':
  ensure => 'running',
  enable => true
}
file_line { 'test':
  path   => '/file'
  line   => 'test parameter'
}

第四次尝试

service { 'test-service':
  ensure    => 'running',
  enable    => true,
  subscribe => File_line['test']
}
file_line { 'test':
  path   => '/file'
  line   => 'test parameter'
}

在每种情况下,文件行总是触发服务重新加载,即使文件中没有任何变化。似乎文件行是先删除所有行,然后重新添加。玩弄匹配选项并没有改变这种行为。

如何让它触发服务重新加载仅有的如果文件已经改变?

编辑:这是输出puppet agent --test

Notice: /Stage[main]/Profile::testprofile/File_line[test]/ensure: created
Info: /Stage[main]/Profile::testprofile/File_line[test]: Scheduling refresh of Service[test-service]
Notice: /Stage[main]/Profile::testprofile/Service[test-service]: Triggered 'refresh' from 1 events

答案1

好吧,我认为这与我写入文件的内容有关!如果您尝试使用以下方法添加回车符文件行,它将始终触发刷新:

file_line { 'test':
  path => '/file',
  line => 'first param\nsecond param'
}

如果我删除\n,问题就会消失。所以最好打电话文件行两次以上并回车。

相关内容