Ansible变量优先

时间:2016-07-17 13:51:42

标签: ansible

所以我有这个剧本,在这本剧本中我有一个变量,让我们称之为the_var 现在,此变量应始终具有相同的值default,但某些库存应为not_default

这就是我在group_vars/all.yml the_var: default inventories/my_special_invthe_var=not_default[all:vars] ansible-playbook -i inventories/my_special_inv not_defaultdefault

当我运行awk ' { name = text = $0 sub(/:.*/,"",name) sub(/[^:]+:/,"",text) cmd = "trans args \"" text "\"" if ( (cmd | getline rslt) > 0 ) { print name ":" rslt } close(cmd) } ' file 时,我希望变量值为void f(int unused) { unused = unused; } (因为我用库存文件覆盖了默认行为)。但它设置为-W{all,extra,pedantic}

如何正确实现此行为?

1 个答案:

答案 0 :(得分:0)

我给你的工作示例将帮助你更好地理解它:

.
|-- default
|   |-- group_vars
|   |   `-- server.yml
|   `-- inventory
|-- site.yml
|-- special
|   |-- group_vars
|   |   `-- server.yml
|   `-- inventory

在这个例子中,我刚刚对localhost主机进行了测试,所以在special/inventorydefault/inventory内,我有这个组,但你可以根据需要放置任何东西:

[server]
localhost

重要的是组名称,它应该匹配default/group_varsspecial/group_vars文件名(在我的情况下它是server但在你的情况下它可以是任何东西):< / p>

所以在default/group_vars,我已经放置了:

---
the_var: default

并在special/group_vars中,我放置了:

---
the_var: not_default

在我的测试手册中(在这种情况下为site.yml)有:

---
 - hosts: all
   gather_facts: no
   tasks:
     - debug:
         msg: "{{ the_var }}"

现在,当我针对默认库存调用playbook时,得到了这个值:

anansible-playbook -i default site.yml -c local                                      

PLAY [all] *********************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "default"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

当我针对特殊库存调用剧本时,得到了这个值:

ansible-playbook -i special site.yml -c local

PLAY [all] *********************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "not_default"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

-c local用于您在实时环境中不需要的localhost连接,我确信您正在使用ssh连接的远程主机,这是默认设置。希望对你有所帮助。