我需要根据名称和包含要创建的文件数的变量创建一定数量的systemd单元文件,例如:
app-name@1.service
app-name@2.service
app-name@3.service
script-name@1.service
script-name@2.service
script-name@3.service
script-name@4.service
它与使用范围函数的嵌套循环一起工作,但我不了解如何将循环变量(item.1.workers)用于range()参数。
- hosts: localhost
vars:
apps:
- name: app-name
workers: 3
- name: script-name
workers: 5
connection: local
tasks:
- name: test
debug:
msg: "{{ item.1.name }}@{{ item.0 }}.service"
loop: "{{ range(1, 3) | product(apps) | list }}"
答案 0 :(得分:0)
让我们在第一个任务中创建 workers 的列表,并在第二个任务中与 subelements 循环
- set_fact:
apps1: "{{ apps1|default([]) +
[{'name': item.name,
'workers': range(1, item.workers + 1)|list}] }}"
loop: "{{ apps }}"
- debug:
msg: "{{ item.0.name }}@{{ item.1 }}.service"
loop: "{{ apps1|subelements('workers') }}"
给予
msg: app-name@1.service
msg: app-name@2.service
msg: app-name@3.service
msg: script-name@1.service
msg: script-name@2.service
msg: script-name@3.service
msg: script-name@4.service
msg: script-name@5.service