Возможность присваивать элементы переменной с помощью with_items - PullRequest
0 голосов
/ 09 декабря 2018

Я использую роль PM2 из Ansible Galaxy.Роль выглядит следующим образом:

roles:
  - role: weareinteractive.pm2
    vars:
      pm2_apps:
        - run: pm2.json
          path: "{{ project_root }}/auth"
          cmd: startOrGracefulReload
        - run: pm2.json
          path: "{{ project_root }}/graphql"
          cmd ...

          etc..

В pm2_apps я могу назначить несколько модулей для запуска.Как я могу заполнить эту структуру следующими элементами:

app_modules:
- { module: "auth", "run": 1 }, 
- { module: "graphql", "run": 2 }, 
- { module: "upload", "run": 3 }

Я хочу изменить только путь pm2_apps на:

path: "{{ project_root }}/{{ item.module }}"

Из многих вещей, которые я пробовал:

pm2_apps:
  - run: pm2.json
    path: "{{ project_root }}/{{ item.module }}"
    cmd: startOrGracefulReload
    with_items: "{{ app_modules }}"

Поскольку это роль, я не хочу переписывать ее задачи.

1 Ответ

0 голосов
/ 09 декабря 2018

Поскольку pm2_apps - это переменная, а не действие, я уверен, что вам просто нужно сгенерировать эту структуру, используя цикл for или некоторые из map и combine игрушек Джинджи:

vars:
  app_modules:
  - { module: "auth", "run": 1 }
  # **definitely** don't put the trailing comma like you have in your question

  pm2_apps: |
    {% set results = [] %}
    {% for am in app_modules %}
    {%   set it = am | combine({"cmd": "startOrGracefulReload"}) %}
    {%   set _ = it.update({"path": project_root + "/" + it.module}) %}
    {%   set _ = results.append(it) %}
    {% endfor %}
    {{ results }}
...