Gurus,我正在学习ansible,并试图理解如何使用变量,我在剧本下面写过文章,但我不理解如何根据我在其中定义的变量将特定的组分配给特定的用户vars
我在下面的游戏中,我想创建用户anika
和rigved
并将其分配给docker
组,而ayush
和eshant
应该分配了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 }}"
您的数据结构方式并未显示用户和组之间的任何关系。一种选择是像这样构造它:
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