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).