Подтвердить что ты не робот

Перезагрузка Необычные динамические ресурсы

Я использую Ansible для установки экземпляров EC2 и развертывания приложения. Там есть хосты script, который собирает теги, связанные с серверами и информацией о группах. Я хотел бы запустить эти действия в виде одной пьесы, поэтому

  • При необходимости создаются новые экземпляры
  • Хосты script загружают инвентарь (включая факты серверов)
  • Развертывание playbook works

Однако ресурсы загружаются заранее, поэтому нет данных о серверах/группах, если серверы созданы/обновлены во время игры. Я могу: 1) отдельные игровые приставки для обеспечения и развертывания; 2) использовать трюк add_host для эмуляции динамических ресурсов при обновлении серверов, но есть недостатки в этих подходах.

Могу ли я заставить Ansible перезагрузить инвентарь? Мои тестовые файлы: hosts script:

#!/bin/sh
echo `date` >> log.log
echo "{\"standalone\":[\"localhost\"]}"

Пример playbook.yml:

---
- hosts: all
  tasks:
    - name: show inventory_hostname
      command: echo {{ inventory_hostname }}

Я запустил его ansible-playbook -i hosts playbook.yml -v и просмотрел два:

$> cat log.log
Thu Mar 12 09:43:16 SAMT 2015
Thu Mar 12 09:43:16 SAMT 2015

но я не нашел команду, чтобы удвоить его.

4b9b3361

Ответ 1

С помощью Ansible 2.0+ вы можете обновить среднюю игру вашего инвентаря, выполнив задачу :

- meta: refresh_inventory

Ответ 2

Я обнаружил, что meta: refresh_inventory недостаточно. Я должен был сначала добавить явный вызов ec2.py --refresh-cache.

- name: refresh inventory
  hosts: localhost
  connection: local
  gather_facts: False
  tasks:
    - name: Refresh EC2 cache
      command: /etc/ansible/ec2.py --refresh-cache
    - name: Refresh in-memory EC2 cache
      meta: refresh_inventory

Ответ 3

Ansible в настоящее время не поддерживает это. Если вы посмотрите на исходный код команд ansible или ansible-playbook, вы увидите, что инвентарь загружен первым, а затем объект инвентаризации передается команде ansible, которая запускает задание или книгу. Перемещение обработки инвентаря, чтобы оно происходило в обработчиках задач/воспроизведения, вероятно, было бы довольно серьезным делом по ряду причин.

Лучше всего сделать что-то вроде этого: просто сложить свою игру на две части и обернуть их вызовы в оболочке script, которую нужно вызвать только один раз.

Ответ 4

Посмотрите add_host.

Он добавляет хост (и, альтернативно, группу) в инвентарь памяти in-playbook в памяти