Supongamos que tengo un host que es, entre otras cosas, un servidor web, donde se instala el rol Ansible relacionado nginx
, realiza una configuración esencial /etc/nginx
y abre los puertos 80 y 443 en el firewall.
En algún momento quiero que ese host en particular ya no sea un servidor web, porque por alguna razón mudé ese servicio a otra parte. Simplemente eliminar el servidor del [webservers]
inventario dejaría basura en el servidor. Idealmente, me gustaría desinstalar nginx
, eliminar el /etc/nginx
directorio (y algunos otros directorios) y cerrar los puertos 80 y 443 en el firewall.
En Puppet puedo hacer esto. Un host que es un servidor web tendrá algo como esto en su configuración:
class { 'nginx':
ensure => present,
}
y todo lo que tengo que hacer es reemplazar "presente" con "ausente". Si la nginx
clase está bien escrita, deshacerá los cambios que ha realizado. (Normalmente, un administrador reemplazará "presente" por "ausente", y más tarde, cuando esté seguro de que todos los hosts afectados hayan deshecho la configuración, eliminará el elemento del manifiesto).
Además, creo que el módulo de firewall Puppet elimina automáticamente las reglas de firewall que ya no se pueden encontrar en el manifiesto; así que creo que, para el cortafuegos, ni siquiera necesita hacer esa cosa "ausente" anterior, el cortafuegos se cerrará automáticamente de todos modos.
¿Cómo puedo lograr estas cosas con Ansible?
ensure => present
aensure => absent
que también ... Cómo hacer lo mismo con ansible", etc. Idealmente con un ejemplo de cualquier cosa que ya hayas probado.Respuestas:
Con Ansible, realmente no haría esto de manera diferente a como lo haría con Puppet.
En su ejemplo donde establecería
confía en que el autor de ese módulo títere haya escrito el código necesario para tratar de eliminar todo. No todos los módulos de marionetas tienen esto.
Del mismo modo, con Ansible, es posible que tenga roles que tengan los pasos necesarios para instalarlo y eliminarlo. La diferencia está solo en cómo invocar a los dos.
Un enfoque podría ser uno en el que el rol en cuestión exponga una variable para alternar el comportamiento. Por ejemplo, ese rol nginx podría tomar una variable
nginx_state
que toma los valoresinstalled
yabsent
.En los roles
tasks/main.yml
, el autor del rol podría tener algo parecido a .....con la respectiva lógica de instalación / desinstalación dividida entre esos dos archivos incluidos condicionalmente.
Los roles de respuesta también se pueden anidar. Como otra forma de hacer lo mismo, un autor de roles podría, por ejemplo, proporcionar un rol
nginx
con otro rol dentro de él, llamadouninstalled
. Entonces podrías hacer:Ansible, en comparación con Puppet, podría decirse que tiene menos reglas y pautas sobre cómo deben hacerse las cosas, por lo que las prácticas varían un poco más en la naturaleza, pero se aplican los mismos conceptos.
fuente
- { role: nginx, state: absent }
), pero me parece extremadamente detallado. El único inconveniente del rol anidado que he visto fue que necesitaba vincular los valores predeterminados del padre.roles: -nginx/uninstalled
trabajar? He buscado por todas partes, pero no puedo encontrar ninguna documentación sobre los roles de anidación de una manera que me permita hacer eso.Dado que tiene su configuración / aprovisionamiento en Ansible, simplemente puede volar todo el servidor, reinstalar / aprovisionar uno nuevo y tener un buen estado limpio y conocido para que funcione.
Si realmente desea "reconfigurarlo" para otros fines, deberá crear un nuevo libro de jugadas que realice las tareas de limpieza necesarias.
Que yo sepa, todos los módulos de empaquetado de Ansible son compatibles
state=absent
para garantizar que un paquete determinado no esté instalado en su servidor. Además, elapt
módulo tiene unpurge=yes
parámetro que limpiará los archivos de configuración personalizados restantes.También puede crear tareas para confirmar que el puerto 80 tiene firewall. Sin embargo, dado que no tendrá ningún proceso ejecutándose en ese puerto, el firewall no hará ninguna diferencia en la seguridad de su servidor.
fuente
state=absent
agregado. Existe una buena posibilidad de que elimine o deshaga una buena mayoría de los cambios de configuración que ha realizado. Dependiendo de cuán grande sea el rol, esto podría ser un verdadero PITA para probar.