Неиспользуемый словарь не работает, когда в списке несколько строк - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть словарь для зацикливания нескольких строк в списке, если я укажу 2 или более, он всегда читает последнее значение в списке, пожалуйста, предложите мне.

- 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

Первый - это set_fact, где он имеет отображение. Вторая задача должна быть в состоянии выполнить цикл, когда у нас есть несколько строк в переменной, определенной "MICROSERVICE_NAMES"

Запущена команда ansible, она всегда читает последнюю строку в списке (служба чтения), пожалуйста, помогите мне, спасибо.

ansible-playbook generate_values_files.yml -i hosts  --extra-vars "@generate_values_files_variable.yml" --extra-vars="{"'"MICROSERVICE_NAMES"'":{'processor-create','processor-update','read-service'}}" '--extra-vars={"MICROSERVICE_ENV_MAP":{}}'



    Varibales:

    dir_path: /jenkins
    EXEC_ENV: dd
    EXEC_REGION: west


     Basically we have multiple directories
     1. /jenkins/helm/processor-create/values-template.yml
     2.  /jenkins/helm/processor-update/values-template.yml
     3.  /jenkins/helm/read-service/values-template.yml
    Each folder has values-template.yml file init when i run above script it has to create multiple files based above template file in each folder.
      1. /jenkins/helm/processor-create/values-template.yml
         values-dd-west.yml
         values-mm-west.yml
         values-gg-west.yml
      2. /jenkins/helm/processor-update/values-template.yml
         values-dd-west.yml
         values-mm-west.yml
         values-gg-west.yml
      3. /jenkins/helm/read-service/values-template.yml
         values-dd-west.yml
        values-mm-west.yml
        values-gg-west.yml

Проблема здесь в том, что когда я запускаю над заданиями, которые нужно выполнить, всегда создаются файлы для последней службы в списке: «служба чтения».

1 Ответ

0 голосов
/ 11 апреля 2019

Я подозреваю, что вы нашли хорошо известный (тем, кому не повезло, найти его) WTF Джинджи2.

Если вы установите некоторые переменные внутри цикла, они будут жить только внутри этого цикла. Вам нужно инициализировать контейнер (list или dict) вне цикла и добавлять в него элементы, чтобы получить что-то из цикла.

...