Cómo especificar diferentes hosts para diferentes playbooks en un script ansible


9

Según tengo entendido, cada libro de jugadas tiene una entrada de hosts. Quiero saber que si creo un libro de jugadas contenedor que incluye otros libros de jugadas, ¿puedo parametrizar los hosts para cada libro de jugadas incluido? Entonces algo como

---
- include playbook_1.yml
    hosts: tag_postgres
- include: playbook_2.yml
    hosts: tag_rabbitmq

Puedo poner todos los libros de jugadas diferentes en una secuencia de comandos y llamar, pero de esta manera no puedo reutilizar algunos set_fact de un libro de jugadas en otro y, por lo tanto, hay mucha duplicación de tareas.

Otro corolario de la pregunta es, ¿puedo iniciar ec2s en Amazon que tendría

hosts: localhost

y la configuración de los ec2 iniciados, que básicamente configurarían el inventario -i ec2.pyy tienen hosts especificados como

hosts: tag_<some_tag>

pasando por el mismo libro de jugadas o un conjunto de libros de jugadas incluidos (diferentes roles)?


¿sabe que puede tener más de una hosts:sección en su yaml y, en esencia, tener varios libros de jugadas utilizando diferentes grupos de hosts en su inventario?
Yonsy Solis

Respuestas:


4

En realidad, puede tener más de un host: sección por libro de jugadas. Parece que un host: comienza una nueva jugada. Ver http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/ , por ejemplo.

Algo como esto funciona para mí (ansible 2.2):

---
- hosts: localhost 
  connection: local
  roles:
    - { role: ec2,
        tag: 'master',
        instance_type: t2.2xlarge,
        count: 1
      }
  tasks:
  - shell: hostname # reports localhost

- hosts: tag_master
  tasks:
  - shell: hostname # reports instance(s) with tag 'master'

Por lo tanto, coloque hosts: en la parte superior de cada .yml incluido, no después de incluir :.


4

http://docs.ansible.com/ansible/playbooks_variables.html#information-discovered-from-systems-facts

... Hay otros lugares de donde pueden provenir las variables, pero estos son un tipo de variable que se descubre, no establecida por el usuario.

Los hechos son información derivada de hablar con sus sistemas remotos ...

Los hechos se derivan de sus hosts remotos. Esta es la razón por la que normalmente puede compartir datos entre sus diferentes hosts cuando su archivo * .yml tiene varios libros de jugadas .

Ahora, puede acceder a datos de otros hosts si hace algo como esto en otra parte de su libro de jugadas:

{{ hostvars['server01.example.com']['ansible_eth0']['ipv4']['address'] }}
...
...
{{ hostvars[groups['servers'][0]]['ansible_eth0']['ipv4']['address'] }}

pero en este caso, debe recordar que necesita obtener los hechos antes de usar esto. Luego, puede configurar una primera parte en su libro de jugadas que obtenga todos los hechos para todos los hosts o use el almacenamiento en caché de hechos para esto (consulte: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Ahora, si le gusta compartir opciones en sus libros de jugadas, tal vez sea mejor repensar la información para incluir variables y, con esto, puede "compartir" sus variables con la misma includeinstrucción, mire esto:

http://docs.ansible.com/ansible/playbooks_variables.html#variables-defined-from-included-files-and-roles


2
Mi pregunta era muy específica para los hosts, y no para las variables en general. Mi necesidad es poder crear un libro de jugadas maestro que no tenga un host, pero cada libro de jugadas incluido contiene un host o se le puede suministrar como parámetro. Siempre puedo ejecutarlos como libros de jugadas separados, pero los hechos obtenidos en uno no se trasladan al siguiente y, por lo tanto, hay mucha redundancia
Pankaj Lal

lea de nuevo más arriba, por favor: "Ahora, puede acceder a datos de otros anfitriones si hace algo como esto en otra parte de su libro de jugadas: ... pero en este caso, debe recordar que necesita obtener los datos antes de usar esto "así que sí, puede compartir sus datos entre los libros de jugadas incluidos en su libro de jugadas maestro.
Yonsy Solis
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.