Ansible - 通过对同一变量使用多个值来部署到同一主机

Ansible - Deploy to same host with using mutiple values for same variable

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 传递来部署前端时,输出如下

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


我怎样才能确保选择了正确的变量。

问题是无论您如何设置 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