var_loader

freehck.var_loader

Эта роль включает переменные из определенной директории.

Идея

При разработке 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), так что вы всегда знаете, где искать параметры вашей среды.

Переменные роли

var_loader_root: здесь хранятся директории с окружениями

var_loader_group_name: директория с переменными окружения, этот путь является относительным от var_loader_root

var_loader_src: если указано, роль загрузит переменные только из этой директории

Параметры по умолчанию

var_loader_src: "{{ var_loader_root }}/{{ var_loader_group_name }}"

Пример плейбука

Этот фрагмент будет включать все файлы *.yml из playbook_dir/vars/dev:

- hosts: group-containing-all-hosts-for-dev-env
  roles:
    - role: freehck.var_loader
      var_loader_root: "{{ playbook_dir }}/vars"
      var_loader_group_name: "dev"

Этот фрагмент будет включать все файлы *.yml из /home/user/my-env:

- hosts: group-containing-all-hosts-for-dev-env
  roles:
    - role: freehck.var_loader
      var_loader_src: "/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: freehck.var_loader
      var_loader_root: "{{ playbook_dir }}/creds"
      var_loader_group_name: "{{ credentials_library }}"
    # загрузить переменные, специфичные для этой группы окружения (группы сходных окружений)
    - role: freehck.var_loader
      var_loader_root: "{{ playbook_dir }}/common-vars"
      var_loader_group_name: "{{ env_group_name }}"
    # загрузить переменные, специфичные для окружения
    - role: freehck.var_loader
      var_loader_root: "{{ playbook_dir }}/env-vars"
      var_loader_group_name: "{{ 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

Информация об авторе

Дмитрий Кашин, freehck@freehck.ru

О проекте

loader for environment variables

Установить
ansible-galaxy install freehck/ansible-role-var-loader
Лицензия
Unknown
Загрузки
2500
Владелец