首页 > 解决方案 > Ansible - 使用同一变量的多个值部署到同一主机

问题描述

Ansible 版本:2.4.2.0

我正在使用一个目录作为我的清单,其中有 2 个文件 - a , b

归档一个
[frontend] hostname001 [frontend:vars] envt=frontend

文件 b
[backend] hostname001 [backend:vars] envt=backend

变量的值被覆盖,只有后端仍然存在。

剧本样本
- name: Sample play hosts: '{{ group }}' connection: local tasks: - name: "Do a demo" debug: msg: 'The envt is {{envt}}'

当我尝试通过将 group=frontend 作为 extravar 来部署前端时,输出如下

ok: [hostname001] => { "msg": "The envt is backend" }


我如何确保选择了正确的变量。

标签: ansibleansible-2.xansible-inventory

解决方案


问题是,无论您如何设置group变量,您的主机hostname001仍然是这两个组的成员。您将需要使用不同的方法来解决此问题。

一种选择是简单地将变量从库存中移出,并使用几个单独的变量文件与该-e选项一起使用。例如,您可能会ansible-playbook这样调用:

ansible-playbook playbook.yml -e @config1.yml

或者:

ansible-playbook playbook.yml -e @config2.yml

或者,也许您可​​以设置变量 per-play 而不是 per-group。

作为最后一个选项,您可以在每个组中为目标主机指定不同的名称。例如,类似:

[backend]
hostname001-backend ansible_host=hostname001

[backend:vars]
envt=backend

[frontend]
hostname001-frontend ansible_host=hostname001

[frontend:vars]
envt=frontend

使用该库存,我们看到:

$ ansible-playbook playbook.yml -e group=frontend

PLAY [Sample play] ***************************************************************************

TASK [Do a demo] *****************************************************************************
ok: [hostname001-frontend] => {
    "msg": "The envt is frontend"
}

PLAY RECAP ***********************************************************************************
hostname001-frontend       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

$ ansible-playbook playbook.yml -e group=backend

PLAY [Sample play] ***************************************************************************

TASK [Do a demo] *****************************************************************************
ok: [hostname001-backend] => {
    "msg": "The envt is backend"
}

PLAY RECAP ***********************************************************************************
hostname001-backend        : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

推荐阅读