Como especificar diferentes hosts para diferentes playbooks em um único script ansible

6

Pelo que entendi, cada playbook recebe uma entrada de host. Eu quero saber que, se eu criar um livro de contêineres que inclua outras apostilas, posso parametrizar os anfitriões para cada lista de livros incluso. Então, algo parecido com

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

Eu posso colocar todos os playbooks diferentes em um script e chamar, mas dessa forma não consigo reutilizar algum set_fact de um playbook para outro e, portanto, há muita duplicação de tarefas.

Outro corolário da questão é, posso lançar ec2s na amazon que teria

hosts: localhost

e configuração dos ec2s lançados, que basicamente configurariam o inventário de -i ec2.py , e teriam hosts especificados como

hosts: tag_<some_tag>

acontecendo através da mesma cartilha ou um conjunto de playbooks incluídos (papéis diferentes)?

    
por Pankaj Lal 02.04.2016 / 12:29

2 respostas

2

link

... There are other places where variables can come from, but these are a type of variable that are discovered, not set by the user.

Facts are information derived from speaking with your remote systems...

Os fatos são derivados de seus hosts remotos. Portanto, esta é a razão pela qual normalmente você pode compartilhar fatos entre seus hosts diferentes quando o seu arquivo *. Yml tem vários livros de reprodução .

Agora, você pode acessar os fatos de outros hosts se fizer algo assim em outra parte do seu manual:

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

mas, neste caso, você precisa lembrar que precisa obter os fatos antes de usá-los. Então você pode configurar uma primeira parte em seu playbook que obtenha todos os fatos para todos os hosts ou usar o cache de fatos para isso (veja: link )

Agora, se você gosta de compartilhar opções em suas playbooks, talvez seja melhor repensar as informações e inserir variáveis. Você pode "compartilhar" suas variáveis com a mesma instrução include , veja isto:

link

    
por 02.04.2016 / 20:14
2

Na verdade, você pode ter mais de um host: seção por playbook. Parece que um hosts: inicia um novo jogo. Veja link , por exemplo.

Algo assim funciona para mim (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'

Então, coloque hosts: no topo de cada um incluído .yml, não depois da inclusão:.

    
por 11.01.2017 / 18:20

Tags