freehck.var_loader
freehck.var_loader
Este rol incluye variables de un directorio específico.
Idea
Mientras desarrollábamos CI/CD para un proyecto grande, encontramos que es muy conveniente almacenar variables de entorno en directorios específicos para cada entorno y luego cargarlas. Después, descubrimos que es útil separar credenciales y variables comunes en directorios diferentes. La estructura de directorios es la siguiente:
.
├── 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
Agrupamos los hosts del mismo entorno en un grupo (llámalo, por ejemplo, project-a-env01
), y especificamos en el archivo correspondiente bajo group_vars
los directorios de donde cargar las variables (como en el ejemplo a continuación).
La ventaja de este enfoque es que las variables incluidas siempre tienen la máxima prioridad (excepto --extra-vars
), por lo que siempre sabes dónde buscar tus parámetros de entorno.
Variables del Rol
var_loader_root: aquí se almacenan los directorios con los entornos
var_loader_group_name: directorio con variables de entorno, esta ruta es relativa a var_loader_root
var_loader_src: si se especifica, el rol solo cargará variables de este directorio
Valores por Defecto del Rol
var_loader_src: "{{ var_loader_root }}/{{ var_loader_group_name }}"
Ejemplo de Playbook
Este fragmento incluirá todos los archivos *.yml
de playbook_dir/vars/dev:
- hosts: grupo-que-contiene-todos-los-hosts-para-el-entorno-dev
roles:
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/vars"
var_loader_group_name: "dev"
Este fragmento incluirá todos los archivos *.yml
de /home/user/my-env
- hosts: grupo-que-contiene-todos-los-hosts-para-el-entorno-dev
roles:
- role: freehck.var_loader
var_loader_src: "/home/user/my-env"
Este fragmento incluirá todos los archivos *.yml
de: playbook_dir/creds/dev, playbook_dir/env-vars/dev, playbook_dir/common-vars/my-dev-env
--- playbook.yml ---
- hosts: grupo-que-contiene-todos-los-hosts-para-el-entorno-dev
roles:
# cargar credenciales
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/creds"
var_loader_group_name: "{{ credentials_library }}"
# cargar variables específicas para este grupo de entornos (grupo de entornos similares)
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/common-vars"
var_loader_group_name: "{{ env_group_name }}"
# cargar variables específicas para el entorno
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/env-vars"
var_loader_group_name: "{{ env_name }}"
--- group_vars/grupo-que-contiene-todos-los-hosts-para-el-entorno-dev.yml ---
credentials_library: "dev"
env_group_name: "dev"
env_name: "my-dev-env"
Licencia
MIT
Información del Autor
Dmitrii Kashin, freehck@freehck.ru
ansible-galaxy install freehck.var_loader