ansible - Ansible 循环遍历从 dict 中提取的列表
问题描述
我在 RHEL 7.7 上使用 Ansible 2.9,我正在尝试遍历一个列表,该列表是来自 dict 元素的值。到目前为止,我有这个 var 文件并播放:
ssh_keys:
account: blah
permissions: 600
keys:
- qa-publickeys['1']
- qa-publickeys['2']
- qa-publickeys['3']
表演:
- name: Traversing ssh keys
debug:
msg: "Here's: {{ item }}"
loop: "{{ ['keys'] | map('extract', ssh_keys) | list }}"
问题是,msg
是"msg": "Here's: [u\"qa-publickeys['1']\", u\"qa-publickeys['2']\", u\"qa-publickeys['3']\"]"
为什么它不给我三个输出,Here's: qa-publickeys['1']
作为第一个输出,Here's: qa-publickeys['2']
作为第二个输出,最后一个Here's: qa-publickeys['3']
?
我在这部剧中呈现给 的列表loop
并没有被循环,它只是在一个块中迭代一次。
解决方案
您似乎无缘无故地让自己变得非常复杂。
Ansible 中的字典可以通过.
点表示法或[]
方括号表示法访问。
现在因为.keys()
确实是 Python 中字典的内置方法,所以不能使用第一种表示法,但可以使用后一种表示法。
鉴于剧本:
- hosts: all
gather_facts: no
tasks:
- debug:
msg: "Here's: {{ item }}"
loop: "{{ ssh_keys['keys'] }}"
vars:
ssh_keys:
account: blah
permissions: 600
keys:
- qa-publickeys['1']
- qa-publickeys['2']
- qa-publickeys['3']
这产生了回顾:
PLAY [all] *******************************************************************************************************
TASK [debug] *****************************************************************************************************
ok: [localhost] => (item=qa-publickeys['1']) =>
msg: 'Here''s: qa-publickeys[''1'']'
ok: [localhost] => (item=qa-publickeys['2']) =>
msg: 'Here''s: qa-publickeys[''2'']'
ok: [localhost] => (item=qa-publickeys['3']) =>
msg: 'Here''s: qa-publickeys[''3'']'
PLAY RECAP *******************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
推荐阅读
- node.js - 创建 Ionic 项目的问题
- render - 如何使用 cairo 在 Linux wxWidgets 上绘制自定义控件,就像在 Windows wxWidgets 上使用 GDI+ 一样?
- arrays - 根据嵌套属性值返回对象的位置
- java - 使用 Java 更新和删除特定行 CSV 文件
- python - 在我的 Pycharm 和 CLI 中指向不同的 Python
- javascript - 从 js 购物车中提取数据并发送 php 电子邮件
- mongodb - 如果条件总是返回真正的弹簧数据 mongodb
- javascript - 在多个部分提交之前的jquery验证表单?
- java - 如何在java中打印数学时间表(某个数字的整个时间表)
- android - Gradle 升级后 Koush ION 崩溃