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

Ansible: делитесь переменной инвентаря между группами

У меня есть playbook с двумя играми, одной локальной и одной удаленной. У меня есть два инвентаря, один для тестирования, а другой для производства. Каждый инвентарь определяет переменную для удаленной группы, но я хотел бы использовать эту переменную в локальной игре без использования делегирования. Возможно ли это и как мне это сделать?

Пример пособия:

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ archive_name }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ archive_name }} dest=/deploy_dir

Тестовый инвентарь:

[local]
127.0.0.1

[remote]
test.example.com

[remote:vars]
archive_name=/tmp/test-build.tgz

Производственный инвентарь:

[local]
127.0.0.1

[remote]
www.example.com

[remote:vars]
archive_name=/tmp/production-build.tgz

Этот пример не работает, потому что {{ archive_name }} не определено для local группа.

Решение этой проблемы будет иметь следующие ограничения:

Единственный вариант, который я вижу на данный момент, - это определить {{ archive_name }} снова для local группа, но это подвержено ошибкам.

Вы должны иметь доступ к значению archive_name через hostvars:

- hosts: local
  tasks:
    # ... lots of local build steps here
    - command: tar -czf {{ hostvars[groups['remote'][0]]['archive_name'] }} /build_dir
- hosts: remote
  tasks:
    - unarchive: src={{ hostvars[groups['remote'][0]]['archive_name'] }} dest=/deploy_dir