我用文件行来自 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
,问题就会消失。所以最好打电话文件行两次以上并回车。