对于具有多个变量的每个循环
For each loop with multiple variables
我是 运行 一个带有 shell 模块的 java 程序,用于遍历用户列表,对于每个用户,我想遍历多个组以添加到每个用户。
我不希望将新的 users/groups 添加到 OS,而是添加到在服务器上运行的程序。
USER_LIST 中的所有用户应添加到 GROUP_LIST 中的所有组。
无效示例:
vars:
GROUP_LIST:
- DATA
- ONE
- TWO
USER_LIST:
- USER1
- USER2
- USER3
- name: add all users to all groups
shell:
cmd: |
java -jar /opt/alt/Manager.jar mod -g {{GROUP_LIST}} {{item}}
loop: {{USER_LIST}}
你应该使用过滤器 product:
- name: add all users to all groups
shell:
cmd: |
java -jar /opt/alt/Manager.jar mod -g {{item.1}} {{item.0}}
loop: {{USER_LIST | product(GROUP_LIST) | list}}
例如:
tasks:
- name: list to dict
debug:
msg: "java -jar /opt/alt/Manager.jar mod -g {{item.1}} {{item.0}}"
loop: "{{ USER_LIST | product(GROUP_LIST) | list }}"
给出:
ok: [localhost] => (item=['USER1', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER1"
}
ok: [localhost] => (item=['USER1', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER1"
}
ok: [localhost] => (item=['USER1', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER1"
}
ok: [localhost] => (item=['USER2', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER2"
}
ok: [localhost] => (item=['USER2', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER2"
}
ok: [localhost] => (item=['USER2', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER2"
}
ok: [localhost] => (item=['USER3', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER3"
}
ok: [localhost] => (item=['USER3', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER3"
}
ok: [localhost] => (item=['USER3', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER3"
}
在ansible版本之后,你有,不用加| list
我是 运行 一个带有 shell 模块的 java 程序,用于遍历用户列表,对于每个用户,我想遍历多个组以添加到每个用户。
我不希望将新的 users/groups 添加到 OS,而是添加到在服务器上运行的程序。
USER_LIST 中的所有用户应添加到 GROUP_LIST 中的所有组。
无效示例:
vars:
GROUP_LIST:
- DATA
- ONE
- TWO
USER_LIST:
- USER1
- USER2
- USER3
- name: add all users to all groups
shell:
cmd: |
java -jar /opt/alt/Manager.jar mod -g {{GROUP_LIST}} {{item}}
loop: {{USER_LIST}}
你应该使用过滤器 product:
- name: add all users to all groups
shell:
cmd: |
java -jar /opt/alt/Manager.jar mod -g {{item.1}} {{item.0}}
loop: {{USER_LIST | product(GROUP_LIST) | list}}
例如:
tasks:
- name: list to dict
debug:
msg: "java -jar /opt/alt/Manager.jar mod -g {{item.1}} {{item.0}}"
loop: "{{ USER_LIST | product(GROUP_LIST) | list }}"
给出:
ok: [localhost] => (item=['USER1', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER1"
}
ok: [localhost] => (item=['USER1', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER1"
}
ok: [localhost] => (item=['USER1', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER1"
}
ok: [localhost] => (item=['USER2', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER2"
}
ok: [localhost] => (item=['USER2', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER2"
}
ok: [localhost] => (item=['USER2', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER2"
}
ok: [localhost] => (item=['USER3', 'DATA']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g DATA USER3"
}
ok: [localhost] => (item=['USER3', 'ONE']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g ONE USER3"
}
ok: [localhost] => (item=['USER3', 'TWO']) => {
"msg": "java -jar /opt/alt/Manager.jar mod -g TWO USER3"
}
在ansible版本之后,你有,不用加| list