访问变量中的变量
access a variable in a variable
我 90% 肯定这行不通,因为我做错了,但我不知道什么是“正确的方法”,我希望你能明白我的意思:
我正在尝试访问某个接口的 ipv4,我的主机文件中有 interface_lan = enp4s0
因为我需要它作为一个角色,所以我想我可能只是用它来获取该接口的 IP 地址:
"{{hostvars[inventory_hostname]['ansible_{{interface_lan}']['ipv4.address']}}"
使用该命令,他正在寻找 "ansible_{{interface_lan}}"
但我希望他寻找
"ansible_"{{interface_lan}}""
并将 "{{interface_lan}}"
视为变量,而不是字符串。
我尽力解释,对不起,如果你不明白你可以在没有帮助我的情况下享受你剩下的一天,我几天来一直忽略这条线。
谢谢!
连接属性的名称并在索引中使用它。例如
- hosts: localhost
gather_facts: false
vars:
interface_lan: enp4s0
ansible_enp4s0:
ipv4:
address: 10.1.0.10
tasks:
- set_fact:
ansible_enp4s0: "{{ ansible_enp4s0 }}"
- debug:
msg: "{{ hostvars[inventory_hostname][my_ifc]['ipv4']['address'] }}"
vars:
my_ifc: "{{ 'ansible_' ~ interface_lan }}"
给出(删节)
msg: 10.1.0.10
注:示例中需要set_fact
将字典ansible_enp4s0
放入hostvars
.
没有 hostvars
的变量间接寻址可以通过查找插件 vars 实现。例如
- hosts: localhost
vars:
test_eth0: 10.1.0.10
test_eth1: 10.1.0.11
tasks:
- debug:
msg: "{{ item }}: {{ lookup('vars', 'test_' ~ item ) }}"
loop:
- eth0
- eth1
给出(删节)
msg: 'eth0: 10.1.0.10'
msg: 'eth1: 10.1.0.11'
我 90% 肯定这行不通,因为我做错了,但我不知道什么是“正确的方法”,我希望你能明白我的意思:
我正在尝试访问某个接口的 ipv4,我的主机文件中有 interface_lan = enp4s0
因为我需要它作为一个角色,所以我想我可能只是用它来获取该接口的 IP 地址:
"{{hostvars[inventory_hostname]['ansible_{{interface_lan}']['ipv4.address']}}"
使用该命令,他正在寻找 "ansible_{{interface_lan}}"
但我希望他寻找
"ansible_"{{interface_lan}}""
并将 "{{interface_lan}}"
视为变量,而不是字符串。
我尽力解释,对不起,如果你不明白你可以在没有帮助我的情况下享受你剩下的一天,我几天来一直忽略这条线。
谢谢!
连接属性的名称并在索引中使用它。例如
- hosts: localhost
gather_facts: false
vars:
interface_lan: enp4s0
ansible_enp4s0:
ipv4:
address: 10.1.0.10
tasks:
- set_fact:
ansible_enp4s0: "{{ ansible_enp4s0 }}"
- debug:
msg: "{{ hostvars[inventory_hostname][my_ifc]['ipv4']['address'] }}"
vars:
my_ifc: "{{ 'ansible_' ~ interface_lan }}"
给出(删节)
msg: 10.1.0.10
注:示例中需要set_fact
将字典ansible_enp4s0
放入hostvars
.
没有 hostvars
的变量间接寻址可以通过查找插件 vars 实现。例如
- hosts: localhost
vars:
test_eth0: 10.1.0.10
test_eth1: 10.1.0.11
tasks:
- debug:
msg: "{{ item }}: {{ lookup('vars', 'test_' ~ item ) }}"
loop:
- eth0
- eth1
给出(删节)
msg: 'eth0: 10.1.0.10'
msg: 'eth1: 10.1.0.11'