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/nginxy 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/nginxdirectorio (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 nginxclase 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 => presentaensure => absentque 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_stateque toma los valoresinstalledyabsent.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
nginxcon 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/uninstalledtrabajar? 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=absentpara garantizar que un paquete determinado no esté instalado en su servidor. Además, elaptmódulo tiene unpurge=yespará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=absentagregado. 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.