vars
ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ
Эта роль Ansible устарела в пользу коллекции almaops.common
.
almaops.vars
Эта роль включает переменные из определённой директории.
Идея
При разработке CI/CD для довольно крупного проекта, мы обнаружили, что очень удобно хранить переменные в директориях, специфичных для каждой среды, а затем загружать их. Также мы выяснили, что полезно разделить учетные данные и общие переменные на отдельные директории. Директории имеют следующую структуру:
.
├── common-vars
│ ├── project-A
│ │ └── dev
│ └── project-B
│ └── dev
├── credentials
│ ├── project-A
│ │ ├── dev
│ │ └── prod
│ └── project-B
│ ├── dev
│ └── prod
└── env-vars
├── project-A-env01
├── project-A-env02
├── project-A-prod
├── project-B-env01
├── project-B-env02
└── project-B-prod
Мы группируем хосты из одной среды в одну группу (назовем её, например, project-a-env01
) и указываем в соответствующем файле под group_vars
директории, из которых нужно загружать переменные (как в примере ниже).
Преимущество этого подхода в том, что включённые переменные всегда имеют максимальный приоритет (кроме --extra-vars
), поэтому вы всегда знаете, где искать параметры вашей среды.
Переменные роли
vars_root: здесь хранятся директории с окружениями
vars_group: директория с переменными окружения, этот путь относителен к vars_root
vars_source: если указано, роль будет загружать переменные только из этой директории
По умолчанию роли
vars_source: "{{ vars_root }}/{{ vars_group }}"
Пример плейбука
Этот фрагмент загрузит все файлы *.yml
из playbook_dir/vars/dev:
- hosts: group-containing-all-hosts-for-dev-env
roles:
- role: almaops.vars
vars_root: "{{ playbook_dir }}/vars"
vars_group: "dev"
Этот фрагмент загрузит все файлы *.yml
из /home/user/my-env:
- hosts: group-containing-all-hosts-for-dev-env
roles:
- role: almaops.vars
vars_source: "/home/user/my-env"
Этот фрагмент загрузит все файлы *.yml
из: playbook_dir/creds/dev, playbook_dir/env-vars/dev, playbook_dir/common-vars/my-dev-env
--- playbook.yml ---
- hosts: group-containing-all-hosts-for-dev-env
roles:
# загрузить учетные данные
- role: almaops.vars
vars_root: "{{ playbook_dir }}/creds"
vars_group: "{{ credentials_library }}"
# загрузить переменные, специфичные для этой группы окружений (группы схожих окружений)
- role: almaops.vars
vars_root: "{{ playbook_dir }}/common-vars"
vars_group: "{{ env_group_name }}"
# загрузить переменные, специфичные для данной среды
- role: almaops.vars
vars_root: "{{ playbook_dir }}/env-vars"
vars_group: "{{ env_name }}"
--- group_vars/group-containing-all-hosts-for-dev-env.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "my-dev-env"
Лицензия
MIT
ansible-galaxy install almaops/ansible-role-vars