A veces, es posible que desee ejecutar tareas específicas en lugar de ejecutar un archivo de libro de jugadas completo. Esto ayuda a reducir el tiempo total de ejecución del libro de jugadas, especialmente cuando se trata de un archivo de libro de jugadas grande.
Entonces, ¿qué son las etiquetas?
Las etiquetas en los libros de jugadas son piezas de metadatos que se adjuntan a las tareas en un archivo de libro de jugadas. Se hace referencia a ellos cuando se ejecutan libros de jugadas y le permiten apuntar selectivamente a ciertas tareas en tiempo de ejecución. Básicamente, le indica a Ansible que ejecute (o no ejecute) tareas específicas dentro del archivo del libro de jugadas.
Por lo general, las tareas que se omiten se han llevado a cabo y, por lo tanto, no es necesario volver a realizarlas. De esta forma, las etiquetas evitan la repetición y optimizan el tiempo de ejecución del playbook. Son útiles cuando desea ejecutar ciertas tareas bajo demanda.
En esta guía, profundizaremos en las etiquetas de Ansible y demostraremos cómo puede adjuntar etiquetas a las tareas para determinar la ejecución del libro de jugadas.
Ejecutar una tarea específica en un libro de jugadas
Tomemos un ejemplo de un archivo de libro de jugadas que ejecuta tres tareas como se muestra. Las etiquetas se especifican utilizando la etiqueta de etiquetas al final de cada tarea.
--- - name: Ansible Tags example hosts: localhost gather_facts: False tasks: - name: Hello World tag example debug: msg: "Hello World!" tags: - hello - name: Welcome to Ansible Tags tag example debug: msg: "How are you?" tags: - welcome - name: Enjoy tag example debug: msg: "Enjoy!" tags: - enjoy
En este libro de jugadas, tenemos tres etiquetas:hola, bienvenido y disfrute.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --list-tags
Como se mencionó anteriormente, puede usar etiquetas para controlar la ejecución de los libros de jugadas de Ansible. Para especificar qué tarea ejecutar, use el indicador -t o –tags.
En el siguiente comando, le indicamos a Ansible que ejecute solo la primera tarea que se ha etiquetado como hola.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --tags hello
Omitir etiquetas específicas en un Playbook
También puede indicarle a Ansible que omita etiquetas específicas usando el indicador –skip-tags. Al hacerlo, Ansible ejecutará el resto de las tareas en el archivo Playbook con la excepción de la tarea provista.
En este ejemplo, Ansible ignora la última tarea etiquetada como disfrutar y ejecuta el resto de las tareas definidas en el libro de jugadas.
$ sudo ansible-playbook /etc/ansible/ansible-01-tags.yml --skip-tags enjoy
Asegúrese de que una tarea siempre (o nunca) se ejecute
Incluso cuando usa etiquetas para determinar qué tareas se ejecutarán en un archivo de libro de jugadas, a veces, encuentra que hay tareas que necesita ejecutar. Tomemos, por ejemplo, un libro de jugadas que instala Apache en el servidor web remoto.
El libro de jugadas tiene 3 tareas. Primero actualiza las listas de paquetes en el host remoto, instala Apache y lo reinicia. Sin embargo, antes de instalar Apache, es necesario actualizar las listas de paquetes o actualizar los repositorios.
Dado que actualizar los repositorios es un requisito previo, etiquetaremos esta tarea con la etiqueta siempre.
--- - name: install Apache webserver hosts: webserver tasks: - name: Update and upgrade apt packages apt: update_cache: yes tags: - always - name: install Apache on Ubuntu apt: name: apache2 state: latest tags: - install_apache - name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache
Sin ninguna etiqueta, el libro de jugadas se ejecuta como se esperaba.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
Si especificamos ejecutar una tarea específica distinta a la que es obligatoria (que en este caso es la primera tarea) Ansible también ejecutará la tarea que lleva la etiqueta 'siempre'.
En este ejemplo, le indicamos a Ansible que reinicie Apache, que lleva la etiqueta "restart_apache". Sin embargo, la tarea 'actualizar repositorio apt' aún se ejecuta ya que tiene la etiqueta 'siempre'.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
De la misma manera, puede decirle a Ansible que nunca ejecute una tarea, y para esto, usamos la etiqueta 'nunca'. Esto es exactamente lo contrario de la etiqueta "siempre".
Volvamos a nuestro libro de jugadas. Suponga que no desea reiniciar Apache después de la instalación. Para lograr esto, simplemente pase la etiqueta nunca como se muestra.
- name: Restart Apache Webserver service: name: apache2 state: restarted tags: - restart_apache - never
Esto también se puede etiquetar de la siguiente manera usando corchetes dobles:
tags: [ restart_apache, never ]
Cuando el libro de jugadas se ejecuta sin ninguna etiqueta, se omitirá la tarea.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml
En el resultado, puede ver que se ha omitido la tarea de reinicio de apache.
NOTA:
Una tarea etiquetada como 'nunca' aún se ejecutará cuando se la llame explícitamente en el comando ansible-playbook. Por ejemplo, la tarea que reinicia Apache aún se ejecutará ya que se definió explícitamente en el comando.
$ sudo ansible-playbook /etc/ansible/ansible-02-tags.yml --tags restart_apache
Concluyendo
Las etiquetas de Ansible son útiles y brindan la flexibilidad necesaria para ejecutar playbooks de Ansible. Puede ejecutar u omitir la ejecución de tareas específicas en un libro de jugadas. Esto proporciona un mejor control de sus libros de jugadas durante el tiempo de ejecución del libro de jugadas.
Lea también :Cómo usar Ansible Vault para proteger datos confidenciales