Насколько я понимаю, каждый 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
инструкция, посмотрите вот это: