ansible - 访问变量中的变量
问题描述
我 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'
推荐阅读
- android - 片段中的 Lateinit 属性尚未初始化
- c# - Dotfuscator - 无法解析 System.Reflection.BindingFlags
- python - Keras 中的计划采样
- gremlin - 在 Gremlin 中,如何在一个属性上查询两个或多个具有相同值的顶点?
- c# - 输入字符串的格式不正确。不知道如何转换输入字符串c#
- jhipster - zsh:找不到命令:jhipster Catalina mac
- json - 用于 Angular 的 RestFul API 的 JSON 数据列表的最佳架构
- node.js - 无法返回链式承诺结果
- html - html type="number" : 在点之后总是显示 2 位数字?
- javascript - 是否有任何用于 React 的日期选择器允许自由格式化的自由输入以及日历选择器