在 Chef 里“管配置文件”通常是指:用 Cookbook 把配置文件从模板/属性生成出来,并管理其内容和权限,避免手动改服务器。下面按“从入门到可用”的方式讲。
Chef 管配置文件的常见方式有三种:
.erb 模板attributes 动态生成配置cookbooks/myapp/
├── attributes/
│ └── default.rb
├── templates/
│ └── default/
│ └── myapp.conf.erb
└── recipes/
└── default.rb
default['myapp']['port'] = 8080
default['myapp']['log_level'] = 'info'
port = <%= node['myapp']['port'] %>
log_level = <%= node['myapp']['log_level'] %>
template '/etc/myapp/myapp.conf' do
source 'myapp.conf.erb'
owner 'root'
group 'root'
mode '0644'
notifies :restart, 'service[myapp]'
end
service 'myapp' do
action [:enable, :start]
end
✅ 每次修改属性 → 重新 converge → 配置文件自动更新
适合不常变的配置:
cookbook_file '/etc/myapp/static.conf' do
source 'static.conf'
mode '0644'
owner 'root'
group 'root'
end
文件放在:
cookbooks/myapp/files/default/static.conf
ruby_block 'set max_clients' do
block do
file = Chef::Util::FileEdit.new('/etc/myapp/myapp.conf')
file.insert_line_if_no_match(
/^max_clients/,
'max_clients = 100'
)
file.write_file
end
end
或用社区 cookbook:line / ini / xml
✅ 配置走 attributes / role / environment / policy
✅ 模板里不要写死密码(用 chef-vault 或 encrypted databag)
✅ 用 notifies 触发服务重启
✅ 用 only_if / not_if 控制条件
✅ 测试用 chef-client --local-mode 或 Test Kitchen
template '/etc/nginx/conf.d/site.conf' do
source 'site.conf.erb'
variables(
server_name: node['site']['domain'],
port: 80
)
end
如果你愿意,可以告诉我:
我可以直接帮你写一个可落地 Cookbook。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。