List Ansible使用with_项将项分配给变量
我在使用Ansible Galaxy的PM2角色。角色如下所示:List Ansible使用with_项将项分配给变量,list,loops,dictionary,ansible,variable-assignment,List,Loops,Dictionary,Ansible,Variable Assignment,我在使用Ansible Galaxy的PM2角色。角色如下所示: roles: - role: weareinteractive.pm2 vars: pm2_apps: - run: pm2.json path: "{{ project_root }}/auth" cmd: startOrGracefulReload - run: pm2.json path: "{{ projec
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_应用程序下,我可以分配多个要运行的模块。如何使用以下项目填充此结构:
app_modules:
- { module: "auth", "run": 1 },
- { module: "graphql", "run": 2 },
- { module: "upload", "run": 3 }
我只想将pm2_应用程序的路径更改为:
path: "{{ project_root }}/{{ item.module }}"
在许多事情中,我尝试了:
pm2_apps:
- run: pm2.json
path: "{{ project_root }}/{{ item.module }}"
cmd: startOrGracefulReload
with_items: "{{ app_modules }}"
因为它是一个角色,我不想重写它的任务。因为
pm2_应用程序
是一个变量,而不是一个动作,我非常确定您只需要使用for
循环或一些jinja的映射和组合
玩具来生成该结构:
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 }}