¿Cómo puedo cambiar un archivo con Chef?


Tengo 7 archivos y 1 guerra. Necesito cambiar los valores cuando los implemente. Tengo esto:

##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

Necesito comentar algunas líneas y descomentar otras líneas. Luego necesito hacer siete plantillas y poner variables dependiendo de los entornos y crear un archivo en la receta.

¿Cómo puedo hacer esto?

Author: codeforester, 2013-02-13

3 answers

Por diseño, no se modifican archivos con Chef. En su lugar, coloca marcadores de posición (<%= ..%>) en las plantillas de archivo, que luego se reemplazan con los valores dinámicos (los llamados atributos).

 -4
Author: StephenKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 21:54:25

Chef realmente permite y usa esto. Puede encontrar un ejemplo en la

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

Aquí está el caso de uso. Después de la instalación desde el código fuente tuve que descomentar líneas en algún archivo de configuración creado que no había sido el mismo en todas las versiones de software, por lo tanto el uso de plantillas no había sido apropiado. Los métodos que utilicé fueron:

  • (Object) search_file_replace (regex, replace)
  • (Object) search_file_replace_line(regex, nueva línea)

Puede encontrar la documentación completa aquí:

PARA ENFATIZAR: Este método se debe usar solo cuando el uso de plantillas y parciales es inapropiado. Como ya dijo @ StephenKing, las plantillas son una forma común de hacer esto.

 74
Author: Konzula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-23 20:49:30

Aquí hay un ejemplo de cómo puede usar Chef para descomentar una línea en un archivo de configuración. El ruby_block está protegido con un ::File::grep. La prueba para Debian es solo por diversión.

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')
 17
Author: Stuart Pook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-18 21:54:13