Ansible 循环遍历子列表

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

我有一个用于创建用户的 yaml。

 users:  
   username:  
    uid: 12345  
    gid: 6789  
    secggroups:  
         - group1  
         - group3  
    gecos: user_for_xyz  
    home: /home/username  

我还有一个只有

usernames
的文件,叫做
users_list
。创建用户的剧本如下:

---  
\- name: create users
  user: name="{{ item }}" uid={{ users[item]['uid'] }} group={{ users[item][gid] }} comment="{{ users[item]['gecos'] }}" home={{ users[item]['home' }} expires=0  
  with_items:  
    \- users_list  

如何遍历要添加到用户的组?

loops nested-loops ansible
2个回答
0
投票

你的剧本走在正确的轨道上。

为用户变量尝试这个:

 users:  
   - username: someusername  
     uid: 12345   
     gid: 6789  
     groups:  
         - group1  
         - group3  
     gecos: "Some user"  
     home: /home/someusername  
   - username: someusername  
     ... etc ...

这是给用户玩的

- name: User creation
  user: 
    name:"{{item.username}}"
    groups: "{{item.groups | join(',')}}"
    comment: "{{item.name}}"
    uid: "{{item.uid}}"
  with_items: users

请注意,我修改了您的语法以不使用内联 YAML。

您可能还会发现这个用户角色很有帮助。


0
投票

你可以使用这样的子元素来解决这个问题:


- name: User creation
   user:
    name:"{{item.0.username}}"
    groups: "{{item.1 }}"
  with_subelements:
    - "{{ users }}"
    - groups

这里是一个调试示例,就像一个目录树:


vars:
  test:
    - name: Testing subelements loop
      dir: dir0
subdir: - subdir0 - subdir1 - subdir2 tasks: - name: Subelements loop sample debug: msg: "{{ item.0.dir }}/{{ item.1 }}" with_subelements: - "{{ test }}" - subdir

您可以在这里找到更多信息:http://docs.ansible.com/ansible/playbooks_loops.html#standard-loops

© www.soinside.com 2019 - 2024. All rights reserved.