A continuación se muestra mi templete para nginx.Chef, cómo ejecutar una plantilla que crea una secuencia de comandos init.d antes de que se cree el servicio
Estoy frente a una captura 22. Necesito instalar una plantilla init.d. Así que tengo una plantilla nginx erb que coloco en /etc/init.d/nginx.
I Incluso intenté colocar el código en la parte superior de la receta. La receta depende del archivo de init.d pero no es exectued hasta que es demasiado tarde y como resultado me sale 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 siguiente ejecución del cliente cocinero, las cosas funcionan porque entonces el templete fue creado.
¿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 parece bastante absurdo.
Este tempate 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
A continuación, registre 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
Si el recurso de plantilla decide que no necesita ejecutar (es decir, si el archivo no se puede cambiar) entonces los 'notifies' no lo hacen ocurrir. Por lo tanto, con este enfoque es posible, dependiendo de su aplicación, que su servicio nunca se configure o inicie incluso con su aplicación completamente configurada y lista para funcionar. – wberry
, para evitar eso tendrías otra llamada de "servicio" nginx "do..' debajo de la llamada de plantilla que hace una acción' iniciar' ¿no? ¿Es esa la forma preferida de manejar el posible problema que describió o hay una manera más elegante? – red888