Si tiene un libro de jugadas grande, puede ser útil ejecutar solo partes específicas del mismo en lugar de ejecutar el libro de jugadas completo. Puede hacer esto con las etiquetas Ansible. El uso de etiquetas para ejecutar u omitir tareas seleccionadas es un proceso de dos pasos:
- Agregue etiquetas a sus tareas, ya sea individualmente o con la herencia de etiquetas de un bloque, juego, rol o importación.
- Seleccione u omita etiquetas cuando ejecute su libro de jugadas.
-
Agregar etiquetas con la palabra clave tags
- Agregar etiquetas a tareas individuales
- Agregar etiquetas a las inclusiones
-
Herencia de etiquetas: agregar etiquetas a varias tareas
- Agregar etiquetas a bloques
- Agregar etiquetas a las obras
- Agregar etiquetas a roles
- Agregar etiquetas a las importaciones
- Herencia de etiquetas para incluye: bloques y el
apply
palabra clave
- Etiquetas especiales: siempre y nunca
-
Seleccionar u omitir etiquetas cuando ejecuta un libro de jugadas
- Vista previa de los resultados del uso de etiquetas
- Ejecución selectiva de tareas etiquetadas en archivos reutilizables
- Configurar etiquetas globalmente
Agregar etiquetas con la palabra clave tags
Puede agregar etiquetas a una sola tarea o incluirlas. También puede agregar etiquetas a varias tareas definiéndolas en el nivel de un bloque, juego, rol o importación. La palabra clave tags
aborda todos estos casos de uso. los tags
la palabra clave siempre define etiquetas y las agrega a las tareas; no selecciona ni omite tareas para su ejecución. Solo puede seleccionar u omitir tareas basadas en etiquetas en la línea de comando cuando ejecuta un libro de jugadas. Ver Seleccionar u omitir etiquetas cuando ejecuta un libro de jugadas para más detalles.
Agregar etiquetas a tareas individuales
En el nivel más simple, puede aplicar una o más etiquetas a una tarea individual. Puede agregar etiquetas a las tareas en los libros de jugadas, en los archivos de tareas o dentro de un rol. A continuación, se muestra un ejemplo que etiqueta dos tareas con etiquetas diferentes:
tasks:-name: Install the servers ansible.builtin.yum:name:- httpd - memcached state: present tags:- packages - webservers -name: Configure the service ansible.builtin.template:src: templates/src.j2 dest: /etc/foo.conf tags:- configuration
Puede aplicar la misma etiqueta a más de una tarea individual. Este ejemplo etiqueta varias tareas con la misma etiqueta, “ntp”:
---# file: roles/common/tasks/main.yml-name: Install ntp ansible.builtin.yum:name: ntp state: present tags: ntp -name: Configure ntp ansible.builtin.template:src: ntp.conf.j2 dest: /etc/ntp.conf notify:- restart ntpd tags: ntp -name: Enable and run ntpd ansible.builtin.service:name: ntpd state: started enabled: yes tags: ntp -name: Install NFS utils ansible.builtin.yum:name:- nfs-utils - nfs-util-lib state: present tags: filesharing
Si ejecutó estas cuatro tareas en un libro de jugadas con --tags ntp
, Ansible ejecutaría las tres tareas etiquetadas ntp
y omita la única tarea que no tiene esa etiqueta.
Agregar etiquetas a las inclusiones
Puede aplicar etiquetas a inclusiones dinámicas en un libro de jugadas. Al igual que con las etiquetas de una tarea individual, las etiquetas de una include_*
La tarea se aplica solo a la inclusión en sí, no a ninguna tarea dentro del archivo o rol incluido. Si agrega mytag
a una inclusión dinámica, luego ejecute ese libro de jugadas con --tags mytag
, Ansible ejecuta el include en sí mismo, ejecuta cualquier tarea dentro del archivo incluido o rol etiquetado con mytag
y omite cualquier tarea dentro del archivo o rol incluido sin esa etiqueta. Ver Ejecución selectiva de tareas etiquetadas en archivos reutilizables para más detalles.
Agrega etiquetas a incluye de la misma manera que agrega etiquetas a cualquier otra tarea:
---# file: roles/common/tasks/main.yml-name: Dynamic re-use of database tasks include_tasks: db.yml tags: db
Puede agregar una etiqueta solo a la inclusión dinámica de un rol. En este ejemplo, el foo
etiqueta será not
aplicar a tareas dentro del bar
papel:
----hosts: webservers tasks:-name: Include the bar role include_role:name: bar tags:- foo
Con jugadas, bloques, el role
palabra clave y static importa, Ansible aplica la herencia de etiquetas, agregando las etiquetas que usted define a cada tarea dentro de la obra, bloque, rol o archivo importado. Sin embargo, la herencia de etiquetas no no aplicar a la reutilización dinámica con include_role
y include_tasks
. Con la reutilización dinámica (inclusiones), las etiquetas que defina se aplican solo a la inclusión en sí. Si necesita herencia de etiquetas, use un static importar. Si no puede utilizar una importación porque el resto de los usos de su libro de jugadas incluye, consulte Herencia de etiquetas para incluye: bloques y la palabra clave aplicar para encontrar formas de evitar este comportamiento.
Herencia de etiquetas: agregar etiquetas a varias tareas
Si desea aplicar la misma etiqueta o etiquetas a varias tareas sin agregar una tags
línea a cada tarea, puede definir las etiquetas al nivel de su juego o bloque, o cuando agrega un rol o importa un archivo. Ansible aplica las etiquetas a lo largo de la cadena de dependencia a todas las tareas secundarias. Con roles e importaciones, Ansible agrega las etiquetas establecidas por el roles
sección o importar a cualquier etiqueta establecida en tareas individuales o bloques dentro del rol o archivo importado. Esto se llama herencia de etiquetas. La herencia de etiquetas es conveniente, porque no es necesario etiquetar todas las tareas. Sin embargo, las etiquetas se siguen aplicando a las tareas de forma individual.
Agregar etiquetas a bloques
Si desea aplicar una etiqueta a muchas, pero no a todas, las tareas de su juego, utilice un cuadra y definir las etiquetas en ese nivel. Por ejemplo, podríamos editar el ejemplo de NTP que se muestra arriba para usar un bloque:
# myrole/tasks/main.ymltasks:-name: ntp tasks tags: ntp block:-name: Install ntp ansible.builtin.yum:name: ntp state: present -name: Configure ntp ansible.builtin.template:src: ntp.conf.j2 dest: /etc/ntp.conf notify:- restart ntpd -name: Enable and run ntpd ansible.builtin.service:name: ntpd state: started enabled: yes -name: Install NFS utils ansible.builtin.yum:name:- nfs-utils - nfs-util-lib state: present tags: filesharing
Agregar etiquetas a las obras
Si todas las tareas de una obra deben tener la misma etiqueta, puede agregar la etiqueta al nivel de la obra. Por ejemplo, si tuvieras una jugada con solo las tareas NTP, podrías etiquetar toda la jugada:
-hosts: all tags: ntp tasks:-name: Install ntp ansible.builtin.yum:name: ntp state: present -name: Configure ntp ansible.builtin.template:src: ntp.conf.j2 dest: /etc/ntp.conf notify:- restart ntpd -name: Enable and run ntpd ansible.builtin.service:name: ntpd state: started enabled: yes -hosts: fileservers tags: filesharing tasks:...
Agregar etiquetas a roles
Hay tres formas de agregar etiquetas a los roles:
- Agregue la misma etiqueta o etiquetas a todas las tareas del rol configurando etiquetas en
roles
. Vea ejemplos en esta sección. - Agregue la misma etiqueta o etiquetas a todas las tareas en el rol estableciendo etiquetas en un static
import_role
en su libro de jugadas. Ver ejemplos en Agregar etiquetas a las importaciones. - Agregue una etiqueta o etiquetas a tareas o bloques individuales dentro del rol en sí. Este es el único enfoque que le permite seleccionar u omitir algunas tareas dentro del rol. Para seleccionar u omitir tareas dentro del rol, debe tener etiquetas configuradas en tareas o bloques individuales, use la dinámica
include_role
en su libro de jugadas y agregue la misma etiqueta o etiquetas a la inclusión. Cuando usa este enfoque y luego ejecuta su libro de jugadas con--tags foo
, Ansible ejecuta el include en sí mismo más cualquier tarea en el rol que también tenga la etiquetafoo
. Ver Agregar etiquetas a las inclusiones para detalles.
Cuando incorporas un rol en tu libro de jugadas de forma estática con el roles
palabra clave, Ansible agrega cualquier etiqueta que defina a todas las tareas en el rol. Por ejemplo:
roles:-role: webserver vars:port:5000tags:[ web, foo ]
o:
----hosts: webservers roles:-role: foo tags:- bar - baz # using YAML shorthand, this is equivalent to:# - role: foo, tags: ["bar", "baz"]
Agregar etiquetas a las importaciones
También puede aplicar una etiqueta o etiquetas a todas las tareas importadas por el static import_role
y import_tasks
declaraciones:
----hosts: webservers tasks:-name: Import the foo role import_role:name: foo tags:- bar - baz -name: Import tasks from foo.yml import_tasks: foo.yml tags:[ web, foo ]
Herencia de etiquetas para incluye: bloques y el apply
palabra clave
De forma predeterminada, Ansible no se aplica herencia de etiquetas para reutilización dinámica con include_role
y include_tasks
. Si agrega etiquetas a una inclusión, se aplican solo a la inclusión en sí, no a ninguna tarea en el archivo o rol incluido. Esto le permite ejecutar tareas seleccionadas dentro de un rol o archivo de tareas; consulte Ejecución selectiva de tareas etiquetadas en archivos reutilizables cuando ejecuta su libro de jugadas.
Si desea la herencia de etiquetas, probablemente desee utilizar importaciones. Sin embargo, el uso de inclusiones e importaciones en un solo libro de jugadas puede generar errores difíciles de diagnosticar. Por esta razón, si su libro de jugadas usa include_*
para reutilizar roles o tareas, y necesita la herencia de etiquetas en una inclusión, Ansible ofrece dos soluciones. Puedes usar el apply
palabra clave:
-name: Apply the db tag to the include and to all tasks in db.yaml include_tasks:file: db.yml # adds 'db' tag to tasks within db.ymlapply:tags: db # adds 'db' tag to this 'include_tasks' itselftags: db
O puedes usar un bloque:
-block:-name: Include tasks from db.yml include_tasks: db.yml tags: db
Etiquetas especiales: siempre y nunca
Ansible reserva dos nombres de etiquetas para un comportamiento especial: siempre y nunca. Si asigna el always
etiqueta a una tarea o juego, Ansible siempre ejecutará esa tarea o juego, a menos que lo omitas específicamente (--skip-tags always
).
Por ejemplo:
tasks:-name: Print a message ansible.builtin.debug:msg:"Always runs"tags:- always -name: Print a message ansible.builtin.debug:msg:"runs when you use tag1"tags:- tag1
Advertencia
- La recopilación de datos está etiquetada con “siempre” de forma predeterminada. Solo se omite si aplica una etiqueta y luego usa una etiqueta diferente en
--tags
o la misma etiqueta en--skip-tags
.
Nuevo en la versión 2.5.
Si asigna el never
etiqueta a una tarea o juego, Ansible se saltará esa tarea o juego a menos que usted lo solicite específicamente (--tags never
).
Por ejemplo:
tasks:-name: Run the rarely-used debug task ansible.builtin.debug:msg:' showmevar 'tags:[ never, debug ]
La tarea de depuración que se usa con poca frecuencia en el ejemplo anterior solo se ejecuta cuando solicita específicamente la debug
o never
etiquetas.
Seleccionar u omitir etiquetas cuando ejecuta un libro de jugadas
Una vez que haya agregado etiquetas a sus tareas, incluye, bloques, juegos, roles e importaciones, puede ejecutar u omitir tareas de manera selectiva en función de sus etiquetas cuando ejecuta ansible-playbook. Ansible ejecuta u omite todas las tareas con etiquetas que coinciden con las etiquetas que pasa en la línea de comando. Si ha agregado una etiqueta en el nivel de bloque o de juego, con roles
, o con una importación, esa etiqueta se aplica a todas las tareas dentro del bloque, juego, rol o rol o archivo importado. Si tiene un rol con muchas etiquetas y desea llamar a subconjuntos del rol en diferentes momentos, úsalo con incluye dinámicaso dividir el rol en varios roles.
ansible-playbook ofrece cinco opciones de línea de comandos relacionadas con etiquetas:
--tags all
– ejecutar todas las tareas, ignorar las etiquetas (comportamiento predeterminado)--tags [tag1, tag2]
– ejecutar solo tareas con las etiquetastag1
ytag2
--skip-tags [tag3, tag4]
– ejecutar todas las tareas excepto aquellas con las etiquetastag3
ytag4
--tags tagged
– ejecutar solo tareas con al menos una etiqueta--tags untagged
– ejecutar solo tareas sin etiquetas
Por ejemplo, para ejecutar solo tareas y bloques etiquetados configuration
y packages
en un libro de jugadas muy largo:
ansible-playbook example.yml --tags "configuration,packages"
Para ejecutar todas las tareas excepto las etiquetadas packages
:
ansible-playbook example.yml --skip-tags "packages"
Vista previa de los resultados del uso de etiquetas
Cuando ejecuta un rol o un libro de jugadas, es posible que no sepa o recuerde qué tareas tienen qué etiquetas, o qué etiquetas existen en absoluto. Ansible ofrece dos indicadores de línea de comandos para ansible-playbook que lo ayudan a administrar los libros de jugadas etiquetados:
--list-tags
– generar una lista de etiquetas disponibles--list-tasks
– cuando se usa con--tags tagname
o--skip-tags tagname
, generar una vista previa de las tareas etiquetadas
Por ejemplo, si no sabe si la etiqueta para las tareas de configuración es config
o conf
en un libro de jugadas, rol o archivo de tareas, puede mostrar todas las etiquetas disponibles sin ejecutar ninguna tarea:
ansible-playbook example.yml --list-tags
Si no sabe qué tareas tienen las etiquetas configuration
y packages
, puede pasar esas etiquetas y agregar --list-tasks
. Ansible enumera las tareas pero no ejecuta ninguna de ellas.
ansible-playbook example.yml --tags "configuration,packages" --list-tasks
Estos indicadores de línea de comandos tienen una limitación: no pueden mostrar etiquetas o tareas dentro de archivos o roles incluidos dinámicamente. Ver Comparación de inclusiones e importaciones: dinámicas y static reutilizar para obtener más información sobre las diferencias entre static importaciones e incluye dinámicas.
Ejecución selectiva de tareas etiquetadas en archivos reutilizables
Si tiene un rol o un archivo de tareas con etiquetas definidas en el nivel de tarea o bloque, puede ejecutar u omitir selectivamente esas tareas etiquetadas en un libro de jugadas. si usa una inclusión dinámica en lugar de una static importar. Debe utilizar la misma etiqueta en las tareas incluidas y en la propia declaración de inclusión. Por ejemplo, puede crear un archivo con algunas tareas etiquetadas y otras sin etiquetar:
# mixed.ymltasks:-name: Run the task with no tags ansible.builtin.debug:msg: this task has no tags -name: Run the tagged task ansible.builtin.debug:msg: this task is tagged with mytag tags: mytag -block:-name: Run the first block task with mytag ...-name: Run the second block task with mytag ...tags:- mytag
Y puede incluir el archivo de tareas anterior en un libro de jugadas:
# myplaybook.yml-hosts: all tasks:-name: Run tasks from mixed.yml include_tasks:name: mixed.yml tags: mytag
Cuando ejecuta el libro de jugadas con ansible-playbook -i hosts myplaybook.yml --tags "mytag"
, Ansible omite la tarea sin etiquetas, ejecuta la tarea individual etiquetada y ejecuta las dos tareas en el bloque.
Configurar etiquetas globalmente
Si ejecuta u omite determinadas etiquetas de forma predeterminada, puede utilizar el TAGS_RUN y TAGS_SKIP opciones en la configuración de Ansible para establecer esos valores predeterminados.
Ver también
- Introducción a los libros de jugadas
-
Introducción a los libros de jugadas
- Roles
-
Organización del libro de jugadas por roles
- Lista de correo de usuarios
-
¿Tengo una pregunta? ¡Pasa por el grupo de google!
- irc.freenode.net
-
Canal de chat de IRC #ansible