Mar*_*ama 26 chef-infra chef-recipe
我有7个文件和1个战争.我需要在部署它时更改值.我有这个:
##usuario
#alfresco.user=*****
alfresco.user=********
##pass
#alfresco.password= sfsfs
alfresco.password=sfgsf
alfresco.rutaAnexos=/gthtfdh/dfgdf/cm:
#atributo.type.anexo=ANEXO_INFO_OBJETO
atributo.type.anexo=AN
atributo.type.observaciones=OBSERVACIONES
Run Code Online (Sandbox Code Playgroud)
我需要评论一些行并取消注释其他一些行.然后我需要制作七个模板并根据环境放置变量并在配方中创建一个文件.
我怎样才能做到这一点?
Kon*_*lic 78
Chef实际上允许并使用它.你可以在opscode中找到一个例子
cookbooks/chef-server/recipes/default.rb:
ruby_block "ensure node can resolve API FQDN" do
block do
fe = Chef::Util::FileEdit.new("/etc/hosts")
fe.insert_line_if_no_match(/#{node['chef-server']['api_fqdn']}/,
"127.0.0.1 #{node['chef-server']['api_fqdn']}")
fe.write_file
end
not_if { Resolv.getaddress(node['chef-server']['api_fqdn']) rescue false }
end
Run Code Online (Sandbox Code Playgroud)
这是用例.从源代码安装后,我必须取消注释某些已创建的配置文件中的行,这些行在所有版本的软件中都不相同,因此使用模板不合适.我使用的方法是:
您可以在此处找到完整的文档:
应力:此方法仅在使用模板和部分不合适时使用.正如@StephenKing所说,模板是这样做的常用方法.
Stu*_*ook 17
以下是如何使用Chef取消注释配置文件中的行的示例.该ruby_block保护带::File::grep.Debian的测试只是为了好玩.
pam_config = "/etc/pam.d/su"
commented_limits = /^#\s+(session\s+\w+\s+pam_limits\.so)\b/m
ruby_block "add pam_limits to su" do
block do
sed = Chef::Util::FileEdit.new(pam_config)
sed.search_file_replace(commented_limits, '\1')
sed.write_file
end
only_if { ::File.readlines(pam_config).grep(commented_limits).any? }
end if platform_family?('debian')
Run Code Online (Sandbox Code Playgroud)
自 2020 年起,不鼓励使用所提供的解决方案 - 请参阅此处和此处。
执行文件手动编辑的现代方式是使用官方的、由社区维护的说明书行。
例子:
replace_or_add "why hello" do
path "/some/file"
pattern "Why hello there.*"
line "Why hello there, you beautiful person, you."
end
Run Code Online (Sandbox Code Playgroud)
在使用这种策略之前,100% 确定确实需要手动编辑是至关重要的,但这完全取决于用例。
Ste*_*ing -5
按照设计,您不会使用 Chef 修改文件。相反,您将占位符 ( <%= ..%>) 放入文件模板中,然后将其替换为动态值(所谓的属性)。