I have 7 files and 1 war. I need to change values when I deploy them. I have this:
##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
I need to comment some lines and uncomment some other lines. Then I need to make seven templates and put variables depending on the environments and create a file in the recipe.
How can I do this?
Use ruby_block and inside use ::File. Rename(src,dst). Chef framework doesn't have file rename (or at least didn't had until 0.10.
Use the cookbook_file resource to transfer files from a sub-directory of COOKBOOK_NAME/files/ to a specified path located on a host that is running the chef-client.
Chef actually allows and uses this. You can find an example in the 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
Here's the use-case. After the installation from source I had to uncomment lines in some created configuration file that hadn't been the same in all versions of software, therefore use of templates hadn't been appropriate. The methods I used were:
You may find the full documentation here:
TO STRESS: This method is to be used only when using templates and partials is inappropriate. As @StephenKing already said, templates are common way of doing this.
Here is an example of how you can use Chef to uncomment a line in a configuration file. The ruby_block
is protected with a ::File::grep
. The test for Debian is just for fun.
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')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With