我有字典来循环列表中的多个字符串,如果我提供2个或更多,则它总是读取列表中的最后一个值,请建议我。
with open('read.txt') as f:
for line in f:
# read values
a, b = line.replace("\n", "").split('\t')
# get and parse values
e = ''.join(("(",str(2*int(a)),",",str(3*int(b)),")"))
print(e)
第一个是set_fact,它具有映射。 当我们在定义为“ MICROSERVICE_NAMES”的变量中包含多个字符串时,第二个任务应该可以循环
有一个正在运行的命令,它始终在读取List(读取服务)中的最后一个字符串,请帮助我,谢谢。
- set_fact:
env_microservice_variable_map: |
{% set res = [] -%}
{% for microservice_name in MICROSERVICE_NAMES -%}
{% if microservice_name in MICROSERVICE_ENV_MAP -%}
{% set microservice_envs = MICROSERVICE_ENV_MAP[microservice_name] -%}
{% else -%}
{% set microservice_envs = env_variable_map.keys() -%}
{% endif -%}
{% for env in microservice_envs -%}
{% set variables = env_variable_map[env] -%}
{% set ignored = variables.__setitem__("MICROSERVICE_NAME", microservice_name) -%}
{% set ignored = res.extend([variables]) -%}
{%- endfor %}
{%- endfor %}
{{ res }}
- name: Copy values file
command: cp {{dir_path}}/helm/{{item.MICROSERVICE_NAME}}/values-template.yaml {{dir_path}}/helm/{{item.MICROSERVICE_NAME}}/values-{{item.EXEC_ENV}}-{{item.EXEC_REGION}}.yaml
with_items: "{{ env_microservice_variable_map }}"
become_user: jenkins
这里的问题是,当我执行艰巨的任务时,它总是为列表中的最后一项服务生成文件:“读取服务”。
答案 0 :(得分:0)
我怀疑您发现了Jinja2的著名(对于不幸的人来说)WTF。
如果您在循环内设置了一些变量,则它们仅存在于该循环内。您需要在循环外部初始化一个容器(列表或字典),并在其中添加项目以使某些内容脱离循环。