我需要通过puppet确保文件/etc/logrotate.conf
必须有条目
/var/log/secure {
monthly
rotate 11
}
我试过
$line_string = "/var/log/secure {
monthly
rotate 11
}"
file_line {'ensure correct entry in /etc/logrotate.conf':
path => '/etc/logrotate.conf',
line => $line_string,
match => $line_string,
}
它第一次创建条目,但是当我第二次应用木偶代码时再次添加条目
[~] # puppet apply /home/vijay/logrot.pp
Notice: Compiled catalog for lxv9824 in environment production in 0.10 seconds
/var/lib/puppet/lib/puppet/provider/file_line/ruby.rb:36: warning: regexp has invalid interval
/var/lib/puppet/lib/puppet/provider/file_line/ruby.rb:36: warning: regexp has `}' without escape
Notice: /Stage[main]/Main/File_line[ensure correct entry in /etc/logrotate.conf]/ensure: created
Notice: Finished catalog run in 0.06 seconds
[~] # more /etc/logrotate.conf
/var/log/secure {
monthly
rotate 11
}
/var/log/secure {
monthly
rotate 11
}
如何防止傀儡第二次添加该条目?
答案 0 :(得分:3)
当file_line
属性的参数中包含换行符时,来自puppetlabs-stdlib
的{{1}}资源不是幂等的。您可以使用line
属性对此执行某些操作,但您提供的正则表达式无效(请注意来自match
的警告)。
由于file_line.rb
似乎只包含该条目,您可以这样做:
/etc/logrotate.conf
或者你可以做(如果是3.8.x,则使用非过时的木偶和未来的解析器):
file { '/etc/logrotate.conf':
ensure => file,
content => $line_string,
}
或者您可以使用我个人厌恶的augeas,但如果您需要更多选择,请告诉我。
还有一些模块可以连接到像这样的文件:https://github.com/puppetlabs/puppetlabs-concat
您还可以尝试修复正则表达式,从两个警告开始:
['/var/log/secure {', ' monthly', ' rotate 11', '}'].each |$line| {
file_line { "ensure $line in /etc/logrotate.conf":
path => '/etc/logrotate.conf',
line => $line,
match => $line,
}
}
说实话,你有很多选择。