Ansible的变量(Variables)的合并策略
在使用Ansible的vars_files时讲述了关于变量合并策略(hash_behaviour)的内容,该策略的默认值是replace。
在中国制定的前提是,只需要一种选择。
以下是中国的本地化表达方式:
如下所示
-
- vars/base.yml
-
- vars/override.yml
-
- 变量/base.yml
- 变量/override.yml
让我们按顺序加载这些内容。
---
- hosts: all
vars_files:
- vars/base.yml
- vars/override.yml
tasks:
- name: "でばっぐ"
debug: msg="{{ git }}"
---
git:
repo: xxx
branch: yyyy
---
git:
branch: override
默认行为
$ ansible-playbook -i host/local test.yml
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [でばっぐ] **********************************************************
ok: [127.0.0.1] => {
"msg": "{'branch': 'override'}"
}
哎呀哎呀, git.repo=xxxx 被删除了呢。
由于替换策略,根据git这个键被覆盖,变成了git = {branch: override}。
如果在ansible.cfg中设置hash_behaviour=merge的情况下
让我们将ansible.cfg文件放置在执行ansible-playbook命令的当前目录中试试看。
[defaults]
hash_behaviour=merge
$ ansible-playbook -i host/local test.yml
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [でばっぐ] **********************************************************
ok: [127.0.0.1] => {
"msg": "{'repo': 'xxx', 'branch': 'override'}"
}
只有git.branch被覆写了,是吧。
顺便提一句,ansible.cfg文件似乎是按照以下顺序进行搜索的。
-
- 当前目录
-
- 环境变量的ANSIBLE_CONFIG 或~/ansible.cfg
- /etc/ansible/ansible.cfg
请参阅:http://yteraoka.github.io/ansible-tutorial/#test-ansible