【发布时间】:2019-11-08 21:12:51
【问题描述】:
我尝试根据给定的类型动态构建一个数组(我初始化为空的 fe_components)——这些类型来自现实生活中的配置文件。
每个给定类型的数组也来自配置文件。
为了简化我的考试,我把所有的变量都写在一个剧本里。
我遍历类型并建立相应数组的名称,我想将其内容捆绑在一起。
- hosts : all
vars:
# types and fe_components_XX come in real life from different config files
types:
- rs
- gg
fe_components_gg:
- gg_frontend'
fe_components_rs:
- rs_frontend_1
- rs_frontend_2
- storybook
# init empty array to dynamically fill in
fe_components: []
tasks:
# This is what I want to get (written in a static statement)
- debug: msg="{{ fe_components_rs + fe_components_gg }}"
# My dynamic approach fails:
# try to dynamically build up the array for given types
- set_fact:
my_dyn_var: >-
{% for item in types -%}
{% set varname = 'fe_components_' ~ item -%}
{{ fe_components + varname }}
{% endfor -%}
- name: test it
debug:
msg: " {{ my_dyn_var }}"
当我运行它时,我的连接以 “只能将列表(而不是 \"unicode\")连接到列表” 消息结束 .
fatal: [frank-lap]: FAILED! => {"msg": "Unexpected templating type error occurred on ({% for item in types -%}\n {% set varname = 'fe_components_' ~ item -%}\n {{ fe_components + varname }}\n{% endfor -%}): can only concatenate list (not \"unicode\") to list"}
我做错了什么?
【问题讨论】: