我正在进入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)
有任何想法吗?
您可以使用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