【问题标题】:Ansible assign items to variable using with_itemsAnsible 使用 with_items 将项目分配给变量
【发布时间】:2019-05-10 10:49:47
【问题描述】:

我正在使用 Ansible Galaxy 的 PM2 角色。角色如下所示:

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 }}"

既然是角色,我不想重写它的任务。

【问题讨论】:

    标签: list loops dictionary ansible variable-assignment


    【解决方案1】:

    由于pm2_apps 是一个变量,而不是一个动作,我很确定您只需要使用for 循环或一些jinja 的mapcombine 玩具来生成该结构:

    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 }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多