Las acciones Ansible
Objetivos del capítulo y requisitos
1. Contexto y requisitos
Si ha llegado hasta este capítulo, ya ha visto diferentes aspectos del funcionamiento interno de Ansible. Ha tratado los playbooks, los roles, los módulos y, finalmente, los filtros y lookup.
Las acciones han sido creadas para dar solución a un problema: realizar tareas antes de la ejecución de un módulo.
2. Archivos para descargar
Puede encontrar los ejemplos de los directorios inventarios y variables en el archivo comprimido capitulo-14.tar.gz que se encuentra en la página del libro en el sitio de Ediciones ENI.
Descubriendo las acciones Ansible
1. Funcionamiento de las acciones Ansible
La noción de módulo se ha visto en el capítulo Escritura de módulos. Este mecanismo se ejecuta en una máquina remota y envía el resultado de las operaciones a Ansible bajo la forma de un objeto JSON.
En función de los módulos, algunas operaciones se deben realizar antes de su lanzamiento. Para algunos de ellos, no tendrá ninguna instrucción en el mismo módulo como, por ejemplo, en el caso del módulo fetch. Si toma este módulo y echa un ojo a su código (archivo lib/ansible/modules/files/fetch.py en la arborescencia de Ansible), se dará cuenta de que este último no contiene ninguna instrucción de Python. En realidad, este archivo solamente contiene metadatos (ayuda, autor del módulo, etc.).
De hecho, este módulo está vinculado a un módulo acción que lleva el mismo nombre (archivo lib/ansible/plugins/action/fetch.py). En este archivo se encuentran todas las instrucciones de Python. También encontrará las acciones copy y template para los módulos del mismo nombre que tomarán en cuenta la copia de archivos remotos.
2. Certificados SSL con Java
Cuando se establece una comunicación segura entre dos servidores a través del protocolo TLS (también SSL), deberá seguir unas etapas:
-
El cliente, primero, recuperará un certificado del servidor. Este certificado contiene la clave pública del servidor así como un cierto número de metadatos (nombre de la sociedad, dirección e-mail, etc.).
-
El cliente comprobará si el certificado presentado por el servidor ha sido firmado por una autoridad de certificación cuya clave pública se encuentra en un almacén de certificados de confianza....
Creación del módulo de acción java_cert
La importación se ha desarrollado correctamente. Sin embargo, se han realizado tres operaciones donde en realidad solamente una es necesaria. Si busca en los módulos de Ansible, verá que el módulo unarchive tiene un comportamiento más apropiado para este caso. Este último puede descomprimir un archivo local (o remoto) sin tener que gestionar la copia. Para poder llevar a cabo la copia, el módulo usará la opción remote_src.
1. Ubicación del archivo de acción
Para reproducir el mecanismo, creará un módulo acción. Este deberá tener el mismo nombre que el módulo al que usted quiere cambiarle el comportamiento. El módulo lleva el nombre java_cert, el archivo de acción asociado a este módulo se llamará java_cert.py.
Como siempre hemos visto hasta ahora, este archivo tiene que ser accesible para Ansible, de esta manera podrá ser usado. Para ello tendrá las opciones siguientes:
-
la configuración de Ansible con el campo action_plugins;
-
la variable de entorno ANSIBLE_ACTION_PLUGINS;
-
el uso del directorio action_plugins.
Trabajará en el archivo action_plugins/java_cert.py.
2. Estructura del módulo de acción java_cert
Usted sabe dónde almacenar este módulo. Con respecto a su contenido, va a respetar un cierto número de indicaciones:
-
Declarar una clase ActionModule heredada de la clase ActionBase.
-
En esta clase, sobrecargará el método run para cambiar su comportamiento.
El método run ejecutado por defecto para todos los módulos está definido en el archivo lib/ansible/plugins/action/normal.py en los archivos de Ansible. Resumiendo, este método realizará las operaciones siguientes:
-
llamada al motor de templating de Ansible para disponer de los valores finales de las diferentes variables de la tarea que se está desarrollando;
-
ejecución de la llamada al módulo en la máquina remota;
-
envío...