当列表中有多个字符串时,Ansible词典不起作用

时间:2019-04-10 23:36:10

标签: ansible ansible-template

我有字典来循环列表中的多个字符串,如果我提供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

这里的问题是,当我执行艰巨的任务时,它总是为列表中的最后一项服务生成文件:“读取服务”。

1 个答案:

答案 0 :(得分:0)

我怀疑您发现了Jinja2的著名(对于不幸的人来说)WTF。

如果您在循环内设置了一些变量,则它们仅存在于该循环内。您需要在循环外部初始化一个容器(列表或字典),并在其中添加项目以使某些内容脱离循环。