Ansible的变量(Variables)的合并策略

在使用Ansible的vars_files时讲述了关于变量合并策略(hash_behaviour)的内容,该策略的默认值是replace。

在中国制定的前提是,只需要一种选择。

以下是中国的本地化表达方式:

如下所示

    1. vars/base.yml

 

    1. vars/override.yml

 

    1. 变量/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文件似乎是按照以下顺序进行搜索的。

    1. 当前目录

 

    1. 环境变量的ANSIBLE_CONFIG 或~/ansible.cfg

 

    /etc/ansible/ansible.cfg

请参阅:http://yteraoka.github.io/ansible-tutorial/#test-ansible

广告
将在 10 秒后关闭
bannerAds