ansible - ansible-playbook with_flattened 迁移到循环
问题描述
我正在尝试将我以前使用的旧剧本迁移with_flattened
到loop
.
我试图遵循ansible 用户指南,但没有这样做。
这是我的 host_var:
- hosts: example.com
vars:
- configureddisks:
- xvdb
- xvdc
- btrfsdisks:
- xvdf
- xvdg
我的原始任务及其输出如下:
# Task
- debug:
msg: "{{ item }}"
with_flattened:
- "{{ configureddisks | select('defined') | list }}"
- "{{ btrfsdisks | select('defined') | list }}"
# ansible-playbook output
TASK [devices : debug] **********************************************************************************************************************************************************************************************************************
ok: [example.com] => (item=xvdb) => {
"msg": "xvdb"
}
ok: [example.com] => (item=xvdc) => {
"msg": "xvdc"
}
ok: [example.com] => (item=xvdf) => {
"msg": "xvdf"
}
ok: [example.com] => (item=xvdg) => {
"msg": "xvdg"
}
我的新任务及其输出如下:
# Task
- debug:
msg: "{{ item }}"
loop:
- "{{ configureddisks | select('defined') | list | flatten }}"
- "{{ btrfsdisks | select('defined') | list | flatten }}"
# ansible-playbook output
ok: [example.com] => (item=[u'xvdb', u'xvdc']) => {
"msg": [
"xvdb",
"xvdc"
]
}
ok: [example.com] => (item=[u'xvdf', u'xvdg']) => {
"msg": [
"xvdf",
"xvdg"
]
}
我应该如何使用循环编写新任务,使其具有与旧任务相同的输出?
解决方案
你误用了flatten
过滤器。当你写这个:
loop:
- "{{ configureddisks | select('defined') | list | flatten }}"
- "{{ btrfsdisks | select('defined') | list | flatten }}"
过滤器flatten
没有效果:您提供的输入(两次)已经展平的列表。您需要将过滤器应用于生成的列表,但不是这样做,您可以重写您的表达式,以便不需要展平:
- debug:
msg: "{{ item }}"
loop: "{{ (configureddisks + btrfsdisks) | select('defined') | list }}"
如果你真的想走“建立一个列表并将其展平”的路线,那可能看起来像:
- debug:
msg: "{{ item }}"
loop: >-
{{
(
(configureddisks | select('defined') | list) +
(btrfsdisks | select('defined') | list)
)|flatten
}}
请注意,为了便于阅读,我已将其分布在多行中,但您也可以轻松地将其全部写在一行上:
loop: "{{ ((configureddisks | select('defined') | list) + (btrfsdisks | select('defined') | list))|flatten }}"
推荐阅读
- virtual-machine - 即使我将 AHK 脚本最小化,它会在虚拟机上运行吗?
- runtime-error - 运行时错误“62”:输入超过文件末尾
- unity3d - 为什么这里的物体有些停电?
- pytorch - Siamese Network 不能在 pytroch 中学习
- java - 从客户端套接字向服务器套接字发送消息时出现问题
- c# - 如何在 .net C# 应用程序中使用 Reporting API 响应中返回的 @odata.nextlink 参数
- google-apps-script - How do i deal with getRange() Class error in Google Script?
- nginx - grpc_send_timeout 不起作用,Nginx 意外关闭 GRPC 流
- ios - 位置权限对话框在 1 秒后消失
- c++ - 从文件中读取矩阵