¿Hay alguna manera de obligar a la marioneta a hacer ciertas cosas primero? Por ejemplo, necesito que instale un RPM en todos los servidores para agregar un repositorio yum (Comunidad IUS) antes de instalar cualquiera de los paquetes.
26
Respuestas:
Si desea asegurarse de que hay un repositorio instalado en todo su servidor, le sugiero algo como esto
Luego, para cualquier nodo que se extienda
base
, puede decirEsto asegurará que
bar
no se instalará a menos que se defina el repositorio IUSfuente
Aunque las etapas pueden manejar esto y también las dependencias específicas de repositorio de yum, es mejor declarar la relación genéricamente.
Simplemente ponga
Yumrepo <| |> -> Package <| provider != 'rpm' |>
en su manifiesto de marionetas.Esto hace que todos los tipos de yumrepo se procesen antes que cualquier paquete que no tenga 'rpm' como proveedor. Esa última exclusión es para que pueda usar (por ejemplo) el paquete RPM epel-release para ayudar a instalar el repositorio yum.
fuente
(Encontré esta pregunta después de responder casi lo mismo ... así que pensé que mi respuesta también se aplica aquí y vale la pena repetirla (es más seguro tener una respuesta en dos lugares ...)
Según tengo entendido, esto es exactamente para lo que son las etapas : le permiten agrupar y ordenar ejecuciones de clase. Utilizo "etapas" para actualizar y configurar APT en los servidores Debian, lo que debería ser muy similar a lo que va a hacer con YUM.
En primer lugar, declara la etapa "yum" en el nivel superior (arriba de "nodos"), de modo que las clases en la etapa "yum" se ejecutarán antes que las "principales":
Luego, asignas escenario a las clases. Puede hacer esto directamente en su definición de nodo:
fuente
Podrías usar etiquetas . Esto le permitiría etiquetar el instalador de repositorios con
firstrun
o algo así,entonces corre
y solo ejecutaría los módulos / declaraciones que coinciden con la etiqueta.
fuente
La clave que necesita usar es la palabra clave require : "Evalúe una o más clases, agregando la clase requerida como una dependencia".
Un ejemplo usando un repositorio apt podría ser:
(Adaptado de este ejemplo de arranque de marionetas ).
Entonces puede ver cómo cada etapa requiere que la anterior se haga primero. Te dejaré que averigües cómo aplicar esto a yum, ya que no estoy familiarizado con dónde almacena sus archivos.
fuente
Puppet lee la configuración de arriba a abajo, por lo que si incluye una clase con el repositorio yum primero en esa clase, este repositorio se agregará antes que nada.
Si usa la configuración requerida en un paquete, se asegurará de que el tipo de recurso requerido esté presente antes de agregar el paquete, como tal:
Este código anterior agregará el repositorio antes de agregar el paquete.
fuente
require
palabra clave, lo que ha hecho en la segunda parte.Algo como esto funcionó para mí:
Incluí algo como esto en mysite.pp. De esta manera, sus módulos de títeres están libres de referencias a repositorios yum.
fuente