Cuando ejecuta Ansible a través de un comando ad hoc o ejecutando un libro de jugadas, debe elegir contra qué nodos o grupos administrados desea ejecutar. Los patrones le permiten ejecutar comandos y libros de jugadas contra hosts y / o grupos específicos en su inventario. Un patrón de Ansible puede referirse a un solo host, una dirección IP, un grupo de inventario, un conjunto de grupos o todos los hosts de su inventario. Los patrones son muy flexibles: puede excluir o requerir subconjuntos de hosts, usar comodines o expresiones regulares, y más. Ansible se ejecuta en todos los hosts de inventario incluidos en el patrón.

  • Usando patrones
  • Patrones comunes
  • Limitaciones de patrones
  • Opciones de patrón avanzadas

    • Usar variables en patrones
    • Usar la posición del grupo en patrones
    • Usar expresiones regulares en patrones
  • Patrones y banderas de ansible-playbook

Usando patrones

Usas un patrón casi siempre que ejecutas un comando ad hoc o un libro de jugadas. El patrón es el único elemento de una comando ad hoc que no tiene bandera. Suele ser el segundo elemento:

ansible >-m >-a ">"

Por ejemplo:

ansible webservers -m service -a "name=httpd state=restarted"

En un libro de jugadas, el patrón es el contenido del hosts: línea para cada obra:

-name: >hosts: >

Por ejemplo:

-name: restart webservers
  hosts: webservers

Dado que a menudo desea ejecutar un comando o un libro de jugadas contra varios hosts a la vez, los patrones a menudo se refieren a grupos de inventario. Tanto el comando ad hoc como el libro de jugadas anterior se ejecutarán en todas las máquinas en el webservers grupo.

Patrones comunes

En esta tabla, se enumeran los patrones comunes para la segmentación de grupos y hosts de inventario.

Descripción

Patrones)

Objetivos

Todos los anfitriones

todos (o *)

Un anfitrión

host1

Varios hosts

host1: host2 (o host1, host2)

Un grupo

servidores web

Varios grupos

servidores web: dbservers

todos los hosts en servidores web más todos los hosts en dbservers

Excluyendo grupos

servidores web:! atlanta

todos los hosts en los servidores web excepto los de atlanta

Intersección de grupos

servidores web: y puesta en escena

cualquier host en servidores web que también estén en fase de preparación

Nota

Puede usar una coma (,) o dos puntos (:) para separar una lista de hosts. Se prefiere la coma cuando se trata de rangos y direcciones IPv6.

Una vez que conozca los patrones básicos, puede combinarlos. Este ejemplo:

webservers:dbservers:&staging:!phoenix

apunta a todas las máquinas de los grupos ‘webservers’ y ‘dbservers’ que también están en el grupo ‘staging’, excepto las máquinas del grupo ‘phoenix’.

Puede usar patrones comodín con FQDN o direcciones IP, siempre que los hosts estén nombrados en su inventario por FQDN o dirección IP:

192.0.*
*.example.com
*.com

Puede mezclar grupos y patrones de comodines al mismo tiempo:

one*.com:dbservers

Limitaciones de patrones

Los patrones dependen del inventario. Si un anfitrión o grupo no está incluido en su inventario, no puede usar un patrón para orientarlo. Si su patrón incluye una dirección IP o un nombre de host que no aparece en su inventario, verá un error como este:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: *.not_in_inventory.com

Su patrón debe coincidir con la sintaxis de su inventario. Si define un host como alias:

atlanta:host1:http_port:80maxRequestsPerChild:808host: 127.0.0.2

debe utilizar el alias en su patrón. En el ejemplo anterior, debe utilizar host1 en tu patrón. Si usa la dirección IP, una vez más obtendrá el error:

[WARNING]: Could not match supplied host pattern,ignoring: 127.0.0.2

Opciones de patrón avanzadas

Los patrones comunes descritos anteriormente satisfarán la mayoría de sus necesidades, pero Ansible ofrece varias otras formas de definir los hosts y grupos a los que desea dirigirse.

Usar variables en patrones

Puede utilizar variables para habilitar el paso de especificadores de grupo a través del -e argumento para ansible-playbook:

webservers:! excluded :& required 

Usar la posición del grupo en patrones

Puede definir un host o un subconjunto de hosts por su posición en un grupo. Por ejemplo, dado el siguiente grupo:

[webservers]
cobweb
webbing
weber

puede usar subíndices para seleccionar hosts individuales o rangos dentro del grupo de servidores web:

webservers[0]# == cobweb
webservers[-1]# == weber
webservers[0:2]# == webservers[0],webservers[1]# == cobweb,webbing
webservers[1:]# == webbing,weber
webservers[:3]# == cobweb,webbing,weber

Usar expresiones regulares en patrones

Puede especificar un patrón como una expresión regular comenzando el patrón con ~:

~(web|db).*.example.com

Patrones y banderas de ansible-playbook

Puede cambiar el comportamiento de los patrones definidos en los libros de jugadas mediante las opciones de la línea de comandos. Por ejemplo, puede ejecutar un libro de jugadas que defina hosts: all en un solo host especificando -i 127.0.0.2, (tenga en cuenta la coma final). Esto funciona incluso si el host al que se dirige no está definido en su inventario. También puede limitar los hosts a los que se dirige en una ejecución en particular con el --limit bandera:

ansible-playbook site.yml --limit datacenter2

Finalmente, puedes usar --limit para leer la lista de hosts de un archivo prefijando el nombre del archivo con @:

ansible-playbook site.yml --limit @retry_hosts.txt

Si RETRY_FILES_ENABLED se establece en True, a .retry El archivo se creará después de la ansible-playbook ejecución que contiene una lista de hosts fallidos de todas las jugadas. Este archivo se sobrescribe cada vez ansible-playbook termina de correr.

ansible-playbook site.yml –limit @ site.retry

Para aplicar su conocimiento de patrones con los comandos y los libros de jugadas de Ansible, lea Introducción a los comandos ad hoc y Introducción a los libros de jugadas.

Ver también

Introducción a los comandos ad hoc

Ejemplos de comandos básicos

Trabajar con libros de jugadas

Aprender el lenguaje de gestión de la configuración de Ansible

Lista de correo

¿Preguntas? ¿Ayudar? Ideas? Pasa por la lista de Grupos de Google

irc.freenode.net

#ansible canal de chat de IRC