Cómo trabajar con las dependencias de Puppet al instalar Nginx 1.0.5 en Ubuntu 11.04
ubuntu-11.04 (2)
Aquí hay dos enfoques para solucionar esto:
1)
exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
creates => "/etc/apt/sources.list.d/nginx-stable-natty.list",
}
Eso le dirá al ejecutivo que solo se ejecute si ese archivo no existe. Si hay alguna otra manera de verificar que el ejecutivo se haya ejecutado correctamente, puede tener un onlyif =>
o unless =>
para especificar un comando para verificar.
2)
exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
refreshonly => true,
subscribe => Package["python-software-properties"],
}
Eso le indicará al ejecutor que solo se ejecute si recibe una notificación, y le dirá a ese paquete que notifique al ejecutivo que debe ejecutarse. (En su lugar, podría especificar notify => Exec["nginx_repository"]
en la stanza del paquete python-software-properties; el efecto de una notificación en un extremo de una relación es lo mismo que una suscripción en el otro extremo de la relación).
La desventaja del segundo enfoque es que si algo sale mal, el títere nunca lo resolverá, y si el paquete se instala de otra manera que no sea a través de esa regla títere (por ejemplo, como una dependencia en otro lugar) nunca ejecutará al ejecutivo. (y la instalación del paquete nginx seguirá fallando).
En otras palabras, el primer enfoque de hacer que el ejecutivo tenga alguna manera de verificar si ya se ha ejecutado es mucho más preferible.
Soy nuevo en Puppet y tengo una pregunta sobre cómo trabajar con dependencias.
Estoy usando Puppet para instalar Nginx 1.0.5 en Ubuntu 11.04. Requiere agregar un nuevo repositorio apt ya que Natty normalmente viene con Nginx 0.8. En la línea de comando, la instalación es así:
# apt-get install python-software-properties
# add-apt-repository ppa:nginx/stable
# apt-get update
# apt-get install nginx
Así que escribí este guion de Puppet:
class nginx::install {
package { "nginx":
ensure => present,
require => Exec["nginx_repository"],
}
exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
}
package { "python-software-properties":
ensure => installed,
}
}
El script funciona, pero la directiva exec {} se ejecuta siempre, en lugar de solo cuando nginx se está instalando realmente. Idealmente, me gustaría que los comandos "apt" se ejecuten solo antes de la instalación real de nginx, no cuando la instalación de nginx simplemente se está verificando.
Tengo una comprensión rudimentaria del modelo de notificación / suscripción, pero no estaba seguro de cómo hacer que la directiva nginx envíe una señal de "notificación" solo cuando se instala nginx.
Puede garantizar la independencia de la versión utilizando la variable lsbdistcodename
como en la siguiente modificación del atributo creates
en el código de freiheit:
exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
creates => "/etc/apt/sources.list.d/nginx-stable-${lsbdistcodename}.list",
}
Para Ubuntu 12.04 Lucid esto se expande a:
creates => "/etc/apt/sources.list.d/nginx-stable-lucid.list",