programming language how chef chef-recipe

language - how to use chef



¿Cómo puedo cambiar un archivo con Chef? (3)

Chef realmente permite y utiliza esto. Puedes encontrar un ejemplo en el opscode''s.

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 la fuente tuve que descomentar las líneas en un 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:

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

Puede encontrar la documentación completa aquí:

PARA ESTRÉS: este método se debe usar solo cuando el uso de plantillas y parciales no es apropiado. Como ya dijo @StephenKing, las plantillas son una forma común de hacer esto.

Tengo 7 archivos y 1 guerra. Necesito cambiar los valores cuando los despliegue. 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 algunas otras líneas. Luego necesito hacer siete plantillas y colocar variables según los entornos y crear un archivo en la receta.

¿Cómo puedo hacer esto?


Este es 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'')


Por diseño, no modificas 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 (denominados atributos).