Ответ 1
По дизайну вы не изменяете файлы с шеф-поваром. Вместо этого вы помещаете заполнители (<%= ..%>
) в шаблоны файлов, которые затем заменяются динамическими значениями (так называемыми атрибутами).
У меня есть 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
Мне нужно прокомментировать некоторые строки и раскомментировать некоторые другие строки. Затем мне нужно сделать семь шаблонов и поместить переменные в зависимости от среды и создать файл в рецепте.
Как я могу это сделать?
По дизайну вы не изменяете файлы с шеф-поваром. Вместо этого вы помещаете заполнители (<%= ..%>
) в шаблоны файлов, которые затем заменяются динамическими значениями (так называемыми атрибутами).
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
Вот прецедент. После установки из исходного кода мне пришлось раскомментировать строки в каком-то созданном файле конфигурации, который не был одинаковым во всех версиях программного обеспечения, поэтому использование шаблонов было неуместным. Используемые мной методы:
Здесь вы можете найти полную документацию:
TO STRESS: этот метод должен использоваться только при неправильном использовании шаблонов и партикулов. Как уже сказал @StephenKing, шаблоны - это общий способ сделать это.
Вот пример того, как вы можете использовать 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')