У меня есть 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
группа.
Решение этой проблемы будет иметь следующие ограничения:
group_vars
потому что у меня разные инвентарь с одинаковыми названиями групп.Единственный вариант, который я вижу на данный момент, - это определить {{ 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