J'ai 7 fichiers et 1 guerre. Je dois changer des valeurs lorsque je les déploie. J'ai ceci:
##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
Je dois commenter certaines lignes et décommenter d'autres lignes. Ensuite, je dois créer sept modèles et mettre des variables en fonction des environnements et créer un fichier dans la recette.
Comment puis-je faire ceci?
Le chef le permet et l'utilise. Vous pouvez trouver un exemple dans le 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
Voici le cas d'utilisation. Après l'installation à partir de la source, j'ai dû décommenter les lignes d'un fichier de configuration créé qui n'était pas le même dans toutes les versions du logiciel, donc l'utilisation de modèles n'avait pas été appropriée. Les méthodes que j'ai utilisées étaient les suivantes:
Vous pouvez trouver la documentation complète ici:
POUR SOULIGNER: Cette méthode doit être utilisée uniquement lorsque l'utilisation de modèles et de partiels est inappropriée. Comme @StephenKing l'a déjà dit, les modèles sont un moyen courant de le faire.
Voici un exemple d'utilisation de Chef pour supprimer la mise en commentaire d'une ligne dans un fichier de configuration. Le Ruby_block
est protégé par un ::File::grep
. Le test pour Debian est juste pour le plaisir.
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')