ansible - 又一次 Ansible 迭代
问题描述
我总是在 Ansible 的迭代中挣扎,这次也不例外。
无论如何,我有一个自定义事实作为字典列表返回my_list
,我需要对其进行迭代以构建一个以key = 'name'
[localhost] => {
"ansible_facts": {
"my_list": [
{
"name": "asd-ASX030-vc-0",
"key_2": [
"A",
"B"
]
},
{
"name": "asd-ASX030-vc-1",
"key_2": [
"C",
"D"
]
}
]
}
...
}
我可以运行单个列表索引。
tasks:
- set_fact: set_fact: {"{{item[1]['name'].split('-')[2:] | join('_')}}":"{{item[1]['key_2']}}"}
loop: "{{ my_list }}"
我追求的是。
vc_0 = ["A", "B"]
vc_1 = ["C", "D"]
简单的:
set_fact: {"{{item['name'].split('-')[2:] | `enter code here`join('_')}}":"{{item['key_2']}}"}
loop: "{{ my_list }}"
不起作用:
"The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'key_2'
我想避免硬编码列表索引,我怎样才能动态地做到这一点?
解决方案
这是您要查找的代码(无格式)吗?
shell> cat play.yml
- hosts: localhost
vars:
my_list:
- name: "asd-ASX030-vc-0"
key_2: ["A", "B"]
- name: "asd-ASX030-vc-1"
key_2: ["C", "D"]
tasks:
- debug:
msg: "{{ item.name }} = {{ item.key_2 }}"
loop: "{{ my_list }}"
shell> ansible-playbook play.yml | grep msg
msg: asd-ASX030-vc-0 = [u'A', u'B']
msg: asd-ASX030-vc-1 = [u'C', u'D']
推荐阅读
- android - Gradle 版本 4.6 - 设置输出文件名时不支持绝对路径
- awk - 移动平均线和差异
- react-native - React Native Ios 视频安装 npm
- javascript - 角度变化专注于输入反应形式
- opencv - 检测照片上的四边形(不是矩形)
- c# - 幻影异常停止子方法的执行,但不会冒泡
- autodesk-forge - 拥有 100 多个项目的集线器分页
- ruby-on-rails - 禁用校验和轨道活动存储回形针迁移 aws s3
- scheme - 卫生宏的实施
- python - cx_Oracle on Windows Subsystem for Linux (WSL) 与现有的 Windows Oracle 安装