对于具有多个变量的每个循环

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