Ansible:通过额外的var选择dict元素
Ansible: selecting dict element by extra var
我正在尝试创建一个剧本来设置日志收集守护进程。我有一个带有要设置的参数的字典(在模板中使用)。像这样
logservers:
prod:
ipaddress: 10.10.44.79
envname: "Productive servers"
other_data: "important prod data"
test:
ipaddress: 10.20.44.79
envname: "Testing servers"
other_data: "data for testing"
dev:
ipaddress: 10.30.44.79
envname: "Developement servers"
other_data: "developers data"
是否可以使用额外的变量,例如 运行 剧本中的 -e env=prod
并在模板化时使用字典中的 select “prod” 元素?
或者,在Ansible中实现这个的方法是什么?
最后一点:我需要这个来让 Ansible 的一个相当老的 dist 在 (2.4) 上工作
有很多方法可以做到这一点:
一种方法是使用一个新变量 server
,它在额外的变量之后有想要的数据:
- name: configure app servers
hosts: localhost
vars:
logservers:
prod:
ipaddress: 10.10.44.79
envname: "Productive servers"
other_data: "important prod data"
test:
ipaddress: 10.20.44.79
envname: "Testing servers"
other_data: "data for testing"
dev:
ipaddress: 10.30.44.79
envname: "Developement servers"
other_data: "developers data"
server: "{{ logservers[env] }}"
tasks:
- name: display "{{ env }}"
debug:
msg: "{{ server }}"
您启动剧本:
ansible-playbook play.yml -e env=dev
结果:
TASK [display "dev"] ****************************************************************
ok: [localhost] => {
"msg": {
"envname": "Developement servers",
"ipaddress": "10.30.44.79"
"other_data": "developers data"
}
}
您启动剧本:
ansible-playbook play.yml -e env=prod
结果:
TASK [display "prod"] ***************************************************************
ok: [localhost] => {
"msg": {
"envname": "Productive servers",
"ipaddress": "10.10.44.79"
"other_data": "important prod data"
}
}
我正在尝试创建一个剧本来设置日志收集守护进程。我有一个带有要设置的参数的字典(在模板中使用)。像这样
logservers:
prod:
ipaddress: 10.10.44.79
envname: "Productive servers"
other_data: "important prod data"
test:
ipaddress: 10.20.44.79
envname: "Testing servers"
other_data: "data for testing"
dev:
ipaddress: 10.30.44.79
envname: "Developement servers"
other_data: "developers data"
是否可以使用额外的变量,例如 运行 剧本中的 -e env=prod
并在模板化时使用字典中的 select “prod” 元素?
或者,在Ansible中实现这个的方法是什么?
最后一点:我需要这个来让 Ansible 的一个相当老的 dist 在 (2.4) 上工作
有很多方法可以做到这一点:
一种方法是使用一个新变量 server
,它在额外的变量之后有想要的数据:
- name: configure app servers
hosts: localhost
vars:
logservers:
prod:
ipaddress: 10.10.44.79
envname: "Productive servers"
other_data: "important prod data"
test:
ipaddress: 10.20.44.79
envname: "Testing servers"
other_data: "data for testing"
dev:
ipaddress: 10.30.44.79
envname: "Developement servers"
other_data: "developers data"
server: "{{ logservers[env] }}"
tasks:
- name: display "{{ env }}"
debug:
msg: "{{ server }}"
您启动剧本:
ansible-playbook play.yml -e env=dev
结果:
TASK [display "dev"] ****************************************************************
ok: [localhost] => {
"msg": {
"envname": "Developement servers",
"ipaddress": "10.30.44.79"
"other_data": "developers data"
}
}
您启动剧本:
ansible-playbook play.yml -e env=prod
结果:
TASK [display "prod"] ***************************************************************
ok: [localhost] => {
"msg": {
"envname": "Productive servers",
"ipaddress": "10.10.44.79"
"other_data": "important prod data"
}
}