检查并在木偶中添加多行

时间:2016-07-23 07:09:55

标签: puppet

我需要通过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
}

如何防止傀儡第二次添加该条目?

1 个答案:

答案 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,
  }
}

说实话,你有很多选择。