freehck.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 }}"
示例剧本
此代码片段将包含来自 playbook_dir/vars/dev 的所有 *.yml
文件:
- hosts: group-containing-all-hosts-for-dev-env
roles:
- role: freehck.var_loader
var_loader_root: "{{ playbook_dir }}/vars"
var_loader_group_name: "dev"
此代码片段将包含来自 /home/user/my-env 的所有 *.yml
文件:
- 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
作者信息
Dmitrii Kashin, freehck@freehck.ru
安装
ansible-galaxy install freehck.var_loader
许可证
Unknown
下载
2.5k
拥有者