software que pricing learn hace definicion cocina automate chef

que - learn chef



Chef, cómo ejecutar una plantilla que crea un script init.d antes de que se cree el servicio (3)

A continuación se muestra mi templete para nginx.

Me enfrento a un retén 22. Necesito instalar una plantilla init.d. Así que tengo una plantilla erb de nginx que coloco en /etc/init.d/nginx.

Incluso intenté colocar el código encima de la receta. La receta depende del archivo init.d pero no se ejecuta hasta que es demasiado tarde y como resultado recibo este error:

STDERR: update-rc.d: /etc/init.d/nginx: file does not exist ---- End output of "bash" "/tmp/chef-script20120330-26326-3ologp-0" ---- Ran "bash" "/tmp/chef-script20120330-26326-3ologp-0" returned 1 [Fri, 30 Mar 2012 06:22:15 +0000] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out [Fri, 30 Mar 2012 06:22:15 +0000] ERROR: Sleeping for 60 seconds before trying again

En la próxima ejecución de chef cliente, las cosas funcionan porque entonces se creó el templete.

¿Cómo ejecuto una plantilla inmediatamente antes de registrar el recurso de servicio para nginx? Una solución rápida es que creo una receta que ejecutará la plantilla antes de nginx para instalar la plantilla, pero eso parece bastante absurdo.

Esta temperatura debe instalarse antes de que se registre el servicio.

template "nginx" do path "/etc/init.d/nginx" source "nginx.erb" owner "root" group "root" mode "0755" end

Entonces registra el servidor.

service "nginx" do supports :restart => true, :start => true, :stop => true, :reload => true action [ :enable, :start] end #################################### #Install Nginx #################################### #http://wiki.nginx.org/HttpLuaModule#Installation version = node[:nginx][:version] package "libpcre3" do action :install end package "libpcre3-dev" do action :install end package "libpcre++-dev" do action :install end package "openssl" do action :install end template "nginx" do path "/etc/init.d/nginx" source "nginx.erb" owner "root" group "root" mode "0755" end #mkdir /var/log/nginx directory "/var/log/nginx" do owner "root" group "root" mode "0755" action :create #not_if "test -f /etc/nginx/lock" end remote_file "/tmp/nginx-#{version}.tar.gz" do source "http://nginx.org/download/nginx-#{version}.tar.gz" checksum node[:nginx][:checksum] action :create_if_missing notifies :run, "bash[install_nginx]", :immediately end bash "install_nginx" do user "root" cwd "/tmp" code <<-EOH tar -xvf nginx-#{version}.tar.gz cd nginx-#{version} ./configure --with-http_stub_status_module make -j2 make install ln -s /usr/local/nginx/conf/ /etc/nginx /usr/sbin/update-rc.d -f nginx defaults EOH action :nothing creates "/usr/sbin/nginx" notifies :restart, "service[nginx]" #not_if "test -f /etc/redis/lock" end service "nginx" do supports :restart => true, :start => true, :stop => true, :reload => true action [ :enable, :start] end #ln -s /usr/local/nginx/conf/ /etc/nginx #link "/usr/local/nginx/conf/" do # to "/etc/nginx" # link_type :hard #end link "/usr/local/nginx/logs/access.log" do to "/var/log/nginx/access.log" end link "/usr/local/nginx/logs/error.log" do to "/var/log/nginx/error.log" end file "/etc/nginx/lock" do owner "root" group "root" mode "0755" action :create_if_missing end template "nginx.conf" do path "/etc/nginx/nginx.conf" source "nginx.conf.erb" owner "root" group "root" mode "0644" #notifies :reload, "service[nginx]" notifies :reload, resources(:service => "nginx"), :immediately end

Gracias


Mientras que usar notifies es mejor en este caso, en otros casos no tienes ese lujo. Aquí le indicamos cómo instruir a Chef para que cree la plantilla de inmediato:

tpl = template "nginx" do action :nothing path "/etc/init.d/nginx" source "nginx.erb" owner "root" group "root" mode "0755" end tpl.run_action(:create)


Puede configurar la acción en el servicio para: nada. Luego haga que la plantilla notifique al servicio para habilitar. De esa manera, la plantilla se procesará y luego se habilitará el servicio:

service "nginx" do supports :restart => true, :start => true, :stop => true, :reload => true action :nothing end template "nginx" do path "/etc/init.d/nginx" source "nginx.erb" owner "root" group "root" mode "0755" notifies :enable, "service[nginx]" notifies :start, "service[nginx]" end

Entonces el servicio esperará hasta que la plantilla se haya procesado.


template "nginx" do path "/etc/init.d/nginx" source "nginx.erb" owner "root" group "root" mode "0755" end service "nginx" do supports :restart => true, :start => true, :stop => true, :reload => true action [ :enable, :start ] subscribes :restart, "template[nginx]", :immediately end