取消注释Puppet中的一行

Lud*_*udo 7 puppet

我正在进入Puppet,并喜欢它,但我用一个小东西撞在墙上,我肯定必须比我做的更容易.

我希望在.bashrc用户中取消注释这一行:

#force_color_prompt=yes
Run Code Online (Sandbox Code Playgroud)

我一直在使用augeas做很多事情,但似乎这对它不起作用.

我注意到有一个file_line资源可用于确保文件中存在一行,但我需要将该行保留在同一位置.

我不希望.bashrc完全替换我自己的副本,尽管看到这种模式在Puppet中很流行,但它对我来说没有意义,因为我不想在升级之间维护我自己的版本.

在sed我用这个:

sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

cze*_*vik 6

您可以使用grep将除外选项添加sed命令到exec.像这样(未经测试):

exec { 'force_color_prompt':
  command   => 'sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" .bashrc'
  cwd       => '/home/user',
  shell     => true,
  unless    => 'grep -Fxq "force_color_prompt=yes" .bashrc',
}
Run Code Online (Sandbox Code Playgroud)

或者使用您提到的file_line资源(我相信Puppet Labs stdlib模块的一部分)添加未注释的行并保持注释行不变.


小智 6

根据我的经验,file_line将替换与正则表达式匹配的行.

因此,要获得force_color_prompt=yes#force_color_prompt=yes您可以:

file_line {
    'color_prompt':
        path        => '/home/<youruser>/.bashrc',
        match       => 'force_color_prompt',
        line        => "force_color_prompt=yes",
}
Run Code Online (Sandbox Code Playgroud)

重要的是,如果正则表达式匹配,则替换发生适当位置,即.它会改变线条,而不是线条的位置.如果正则表达式并没有然而相符,该线路将被附加到文件的末尾.

这种体验与Puppet 3.1有关.

参考:https://forge.puppetlabs.com/puppetlabs/stdlib