Gui*_*ros 11 linux chef-infra chef-recipe
我正在尝试创建一个Chef配方,将多行(20-30)附加到特定的配置文件中.
我知道推荐的模式是更改整个配置文件而不是仅仅附加到文件,但出于多种原因我不喜欢这种方法.
到目前为止,我找到的唯一解决方案是使用a cookbook_file然后使用bash资源来执行:
cat lines_to_append >> /path/configfile
显然这不会正常工作,因为每次运行chef-client时它都会反复追加文件.我必须首先创建一个小的bash脚本来检查特定的字符串,如果没有找到,则附加到该文件.
但这似乎打败了使用Chef的目的.肯定有更好的办法.
一个有希望的解决方案是来自OpsCode社区的系列食谱.它旨在解决这个确切的问题.不幸的是,功能不完整,错误,代码只是一个快速的黑客.远非一个坚实的解决方案.
我评估的另一个选择是augeas.看起来非常强大,但它还为系统添加了另一层抽象.在我的情况下,矫枉过正.
鉴于这是任何系统管理员最明显的任务之一,是否有任何简单而美观的解决方案与厨师,我没有看到?
编辑:这是我到目前为止解决它的方式:
cookbook_file "/tmp/parms_to_append.conf" do
source "parms_to_append.conf"
end
bash "append_to_config" do
user "root"
code <<-EOF
cat /tmp/parms_to_append.conf >> /etc/config
rm /tmp/parms_to_append.conf
EOF
not_if "grep -q MY_IDENTIFIER /etc/config"
end
Run Code Online (Sandbox Code Playgroud)
它有效,但不确定这是推荐的Chef模式.
如前所述,使用模板和部分是常见的方法,但是厨师允许附加文件,甚至更改(编辑)文件行.使用以下函数执行Appendind:
您可能会发现和例如这里的计算器,以及完整的文档rubydoc.info
请谨慎使用,并且仅在部分和模板不合适时使用.
我做了这样的事情:
monit_overwrites/templates/default/monitrc.erb:
#---FLOWDOCK-START
set mail-format { from: monit@ourservice.com }
#---FLOWDOCK-END
Run Code Online (Sandbox Code Playgroud)
在我的食谱中,我这样做了:
monit_overwrites/recipes/default.rb:
execute "Clean up monitrc from earlier runs" do
user "root"
command "sed '/#---FLOWDOCK-START/,/#---FLOWDOCK-END/d' > /etc/monitrc"
end
template "/tmp/monitrc_append.conf" do
source "monitrc_append.erb"
end
execute "Setup monit to push notifications into flowdock" do
user "root"
command "cat /tmp/monitrc_append.conf >> /etc/monitrc"
end
execute "Remove monitrc_append" do
command "rm /tmp/monitrc_append.conf"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42344 次 |
| 最近记录: |