Назад | Перейти на главную страницу

Как указать разные хосты для разных playbook в одном скрипте ansible

Насколько я понимаю, каждый playbook принимает одну запись hosts. Я хочу знать, что если я создам контейнерную книгу воспроизведения, включающую другие книги воспроизведения, могу ли я параметризовать хосты для каждой книги воспроизведения. Так что-то вроде

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

Я могу поместить все разные playbooks в один сценарий и вызвать, но тогда я не могу повторно использовать некоторый set_fact из одного playbook в другой, и, следовательно, существует много дублирования задач.

Еще одно следствие вопроса: могу ли я запустить ec2s на Amazon, который

hosts: localhost

и конфигурация запущенных ec2, которые в основном настраивали инвентарь из -i ec2.py, и хосты указаны как

hosts: tag_<some_tag>

происходит с помощью одного и того же сценария или набора включенных сценариев (разные роли)?

Фактически, у вас может быть более одного host: section на playbook. Похоже, что хозяева: начинает новую игру. Видеть http://www.tecmint.com/use-ansible-playbooks-to-automate-complex-tasks-on-multiple-linux-servers/, например.

Что-то вроде этого работает для меня (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'

Итак, помещайте hosts: вверху каждого включенного .yml, а не после include :.

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

... Есть и другие места, откуда могут поступать переменные, но это тип переменных, которые обнаруживаются, а не устанавливаются пользователем.

Факты - это информация, полученная из разговоров с вашими удаленными системами ...

Факты получены с ваших удаленных хостов. Вот почему обычно вы можете поделиться факты между вашими разными хостами, когда ваш * .yml Файл имеет несколько пьесы.

Теперь вы можете получить доступ к фактам с других хостов, если сделаете что-то подобное в другой части вашей playbook:

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

но в этом случае вам нужно помнить, что вам нужно получить факты перед вы используете это. Затем вы можете настроить первую часть в своей playbook, которая будет получать все факты для всех хостов или использовать для этого кеширование фактов (см. http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching)

Теперь, если вам нравится делиться вариантами в своих playbooks, возможно, будет лучше переосмыслить информацию, чтобы ввести переменные, и с этим вы можете «поделиться» своими переменными с тем же include инструкция, посмотрите вот это:

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