可创建用户并将其基于vars分配给特定的组

问题描述 投票:0回答:1

Gurus,我正在学习ansible,并试图理解如何使用变量,我在剧本下面写过文章,但我不理解如何根据我在其中定义的变量将特定的组分配给特定的用户vars

下用户和组的播放

我在下面的游戏中,我想创建用户anikarigved并将其分配给docker组,而ayusheshant应该分配了test组。

到目前为止,我还没有实现这一目标的想法。但是,到目前为止,它在运行时会创建用户并将这两个组都分配给所有用户。

$ cat nested_playbook-1.yml
---
- name: testing nested play
  hosts: localhost
  vars:
    users:
      - anika
      - rigved
      - ayush
      - eshant
    grps:
      - docker
      - test
  tasks:
    - name: make users members of groups
      user:
        name: "{{ item[0] }}"
        state: present
        groups: "{{ item[0] }}"
      with_nested:
        - "{{ users }}"
        - "{{ grps }}"
linux ansible centos7 ansible-2.x
1个回答
0
投票

您的数据结构方式并未显示用户和组之间的任何关系。一种选择是像这样构造它:

grps:
  - name: docker
    users:
      - anika
      - rigved
  - name: test
    users:
      - ayush
      - eshant

通过这种结构,您可以使用grps过滤器在subelements上循环,如下所示:

---
- name: testing nested play
  gather_facts: false
  hosts: localhost
  vars:
    grps:
      - name: docker
        users:
          - anika
          - rigved
      - name: test
        users:
          - ayush
          - eshant
  tasks:
    - debug:
        msg:
          user:
            name: "{{ item.1 }}"
            state: present
            groups: "{{ item.0.name }}"
      loop: "{{ grps|subelements('users') }}"
      loop_control:
        label: "{{ item.1 }}"

我将您的user:任务包装在debug:任务中,因为我实际上并不想在系统上创建用户,但是您可以从输出中看到这满足您的要求:


PLAY [testing nested play] *******************************************************************

TASK [debug] *********************************************************************************
ok: [localhost] => (item=anika) => {
    "msg": {
        "user": {
            "groups": "docker",
            "name": "anika",
            "state": "present"
        }
    }
}
ok: [localhost] => (item=rigved) => {
    "msg": {
        "user": {
            "groups": "docker",
            "name": "rigved",
            "state": "present"
        }
    }
}
ok: [localhost] => (item=ayush) => {
    "msg": {
        "user": {
            "groups": "test",
            "name": "ayush",
            "state": "present"
        }
    }
}
ok: [localhost] => (item=eshant) => {
    "msg": {
        "user": {
            "groups": "test",
            "name": "eshant",
            "state": "present"
        }
    }
}

PLAY RECAP ***********************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
© www.soinside.com 2019 - 2024. All rights reserved.