Як вказати різних хостів для різних ігрових книг в одному ансібі сценарії


9

Наскільки я розумію, кожна книжка має одну запис хостів. Я хочу знати, що якщо я створю контейнерну книжку, яка включає інші ігрові книги, чи можу я параметризувати хости для кожної книги, включаючи. Так щось на кшталт

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

Я в змозі помістити всі різні ігрові книги в один сценарій і зателефонувати, але тоді я не в змозі повторно використати деякий set_fact з однієї книжки в іншу, а значить, є багато дублювання завдань.

Інший наслідок питання полягає в тому, чи можу я запустити ec2 на Amazon, який би мав

hosts: localhost

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

hosts: tag_<some_tag>

відбувається через одну і ту ж книжку чи набір включених ігор (різних ролей)?


чи знаєте ви, що hosts:у вашій ямлі може бути більше одного розділу, а по суті, у вашому інвентарі є кілька ігор, використовуючи різні групи господарів?
Йонсі Соліс

Відповіді:


4

Насправді у вас може бути кілька хостів: розділ на кожну книжку. Здається, що хост: починає нову гру. Наприклад, див. 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'

Отже, поставте хости: у верхній частині кожного включеного .yml, а не після include:.


4

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

... Є й інші місця, з яких можуть надходити змінні, але це тип змінної, яка виявляється, а не встановлюється користувачем.

Факти - це інформація, отримана від розмови з віддаленими системами ...

Факти виходять з ваших віддалених хостів. Так це і є причина , чому зазвичай ви можете поділитися фактами між вашими різними хостами , коли ваш * .yml файлу є кілька playbooks .

Тепер ви можете отримати доступ до фактів від інших хостів, якщо ви зробите щось подібне в іншій частині своєї ігрової книги:

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

але в цьому випадку вам потрібно пам’ятати, що вам потрібно отримати факти, перш ніж використовувати це. Тоді ви можете налаштувати першу частину вашої книги, яка отримує всі факти для всіх хостів, або використовувати кешування фактів для цього (див .: http://docs.ansible.com/ansible/playbooks_variables.html#fact-caching )

Тепер, якщо вам подобається ділитися параметрами у своїх ігрових книгах, можливо, буде краще переосмислити інформацію, щоб ввести змінні, і, використовуючи це, ви можете "поділитися" своїми змінними за допомогою тієї ж includeінструкції, подивіться на це:

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


2
Моє запитання було дуже специфічним для хостів, а не змінних загалом. Моя потреба полягає в тому, щоб я міг створити основну програму, яка не має хоста, але кожен включений програвач або містить хоста в ньому, або може бути поданий до нього як параметр. Я завжди можу запускати їх як окремі ігрові книги, але факти, отримані в одній, не переносять на наступну, і тому є надмірність
Pankaj Lal

читайте вище, будь ласка, знову: "Тепер ви можете отримати доступ до фактів від інших хостів, якщо ви зробите щось подібне в іншій частині своєї ігрової книги: ... але в цьому випадку вам потрібно пам'ятати, що вам потрібно отримати факти, перш ніж використовувати це "так, так, ви можете поділитися своїми фактами між включеними ігровими книгами у вашій головній програмі.
Йонсі Соліс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.