ansible - 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" }
我如何确保选择了正确的变量。
解决方案
问题是,无论您如何设置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
推荐阅读
- python - 通过多列合并多个数据框
- arima - 如何在 R 中实现带有 ARIMA 错误的回归的 Breusch-Godfrey 检验
- html - Oracle Apex 中不可读的 html 字符
- r - R:如何成功拆分和修剪数据
- java - java中ArrayList中的ArrayList
- path - 在 env 中识别 python
- javascript - 如何使用 jQuery 在 Kendo Grid 中获取选定的行
- python - 如何在python中实现概率分布的合并?
- python - 5.51 GiB 已分配;417.00 MiB 免费;PyTorch CUDA 总共保留 5.53 GiB 内存不足
- sql - 基于三张有限制的表的SQL查询