python - Ansible jinja2 将列表合并到单个列表
问题描述
我正在尝试迭代一个列表 ["abc","def","ghi"] & 每次迭代都会生成一个列表,我需要将其设置为 ansible 中的变量。
这是我当前的脚本:
- name: add checks
set_fact:
CHECKS: "{% for cKey in checkKey %} {{ CHECKS|default([]) }} + {{ CHECKSMAP | map(attribute=cKey ) | list |join(',')}} {% endfor %}"
它生成以下输出,它是一个字符串而不是一个列表我如何在 for 循环中附加到类似于 list += temp_list 的单个列表
ok: [127.0.0.1] => {
"msg": "System [] + [{u'check': u'system_checks'}, {u'check': u'lms_server_health'}] [] + [{u'check': u'system_checks'}, {u'check': u'config-service_server_health'}, {u'check': u'config-service_server_restart'}] " }
解决方案
它生成以下输出,它是一个字符串而不是一个列表
它是一个字符串有两个原因:首先,您" + "
在表情中间嵌入了一些文本,其次是因为您打电话join(',')
,而 jinja 高兴地按照您的要求做。
如何在 for 循环中附加到类似于 list += temp_list 的单个列表
答案是完全按照你说的做,并使用一个中间变量:
CHECKS: >-
{%- set tmp = CHECKS | default([]) -%}
{%- for cKey in checkKey -%}
{%- set _ = tmp.extend(CHECKSMAP | map(attribute=cKey ) | list) -%}
{%- endfor -%}
{{ tmp }}
AFAIK,您必须使用该.extend
技巧,因为 aset tmp = tmp +
将在循环内声明一个新tmp
的,而不是分配tmp
循环外
推荐阅读
- r - 如何使用 Purrr 将因子的级别作为参数传递给函数
- javascript - 在页面加载和单选输入点击上运行 jQuery 函数
- node.js - 如何在 React 上使用 Material Ui。收到错误无效的挂钩调用
- javascript - 信封:无法读取sails.js 中未定义的属性“id”
- angular - 增加垫表角度中垫子行之间的间隙
- data-science - 使用 ARIMA 进行多特征预测
- javascript - 发生未处理的异常:在 Angular 9 的构建产品上超出了调用重试次数
- c - remove() 返回文件未找到错误(errno = 2),当我之前使用相同的文件字符串打开文件时
- amazon-web-services - AWS ECS 部署:内存不足
- .net - ORA-08103: .net 中不再存在对象