Jak Mogę zmienić plik za pomocą Chef?

Mam 7 plików i 1 wojnę. Muszę zmienić wartości, kiedy je rozmieszczam. Mam to:

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

Muszę skomentować kilka linijek i odkomentować kilka innych linijek. Następnie muszę zrobić siedem szablonów i umieścić zmienne w zależności od środowiska i utworzyć plik w przepisie.

Jak mogę to zrobić?
Author: codeforester, 2013-02-13

3 answers

Z założenia nie modyfikujesz plików za pomocą Chef. Zamiast tego umieszczasz w szablonach plików symbole zastępcze (<%= ..%>), które są następnie zastępowane wartościami dynamicznymi (tzw. atrybutami).

 -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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 21:54:25

Chef rzeczywiście pozwala i używa tego. Przykład można znaleźć w 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
Oto przykład użycia. Po instalacji ze źródła musiałem odkomentować linie w jakimś utworzonym pliku konfiguracyjnym, które nie były takie same we wszystkich wersjach oprogramowania, dlatego użycie szablonów nie było odpowiednie. Metody, których użyłem to:
  • (Object) search_file_replace (regex, replace)
  • (Object) search_file_replace_line(regex, newline)
Pełna dokumentacja znajduje się tutaj:

Dla podkreślenia: ta metoda ma być używana tylko wtedy, gdy używanie szablonów i częściowych jest niewłaściwe. Jak już powiedział @StephenKing, szablony są powszechnym sposobem na to.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-23 20:49:30

Oto przykład użycia programu Chef do odkomentowania linii w pliku konfiguracyjnym. ruby_block jest chroniony za pomocą ::File::grep. Test Debiana jest tylko dla Zabawy.

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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-18 21:54:13