almaops.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 }}"
示例剧本
这个代码片段将包含 playbook_dir/vars/dev 中的所有 *.yml
文件:
- hosts: 包含所有开发环境主机的组
roles:
- role: almaops.vars
vars_root: "{{ playbook_dir }}/vars"
vars_group: "dev"
这个代码片段将包含 /home/user/my-env 中的所有 *.yml
文件:
- hosts: 包含所有开发环境主机的组
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
```yaml --- playbook.yml ---
- hosts: 包含所有开发环境主机的组
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/包含所有开发环境主机组.yml --- credentials_library: "dev" env_group_name: "dev" env_name: "my-dev-env"
许可证
MIT