Подтвердить что ты не робот

Как я могу изменить файл с шеф-поваром?

У меня есть 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

Мне нужно прокомментировать некоторые строки и раскомментировать некоторые другие строки. Затем мне нужно сделать семь шаблонов и поместить переменные в зависимости от среды и создать файл в рецепте.

Как я могу это сделать?

4b9b3361

Ответ 1

По дизайну вы не изменяете файлы с шеф-поваром. Вместо этого вы помещаете заполнители (<%= ..%>) в шаблоны файлов, которые затем заменяются динамическими значениями (так называемыми атрибутами).

Ответ 2

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

Вот прецедент. После установки из исходного кода мне пришлось раскомментировать строки в каком-то созданном файле конфигурации, который не был одинаковым во всех версиях программного обеспечения, поэтому использование шаблонов было неуместным. Используемые мной методы:

  • (Object) search_file_replace (regex, replace)
  • (Object) search_file_replace_line (regex, newline)

Здесь вы можете найти полную документацию:

TO STRESS: этот метод должен использоваться только при неправильном использовании шаблонов и партикулов. Как уже сказал @StephenKing, шаблоны - это общий способ сделать это.

Ответ 3

Вот пример того, как вы можете использовать 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')