Ansible循环子列表

时间:2015-05-15 19:50:24

标签: loops nested-loops ansible

我有一个用于创建用户的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  

如何循环浏览要添加给用户的组?

2 个答案:

答案 0 :(得分:0)

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

尝试使用users变量:

 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。

此外,您可能会发现this users role有帮助。

答案 1 :(得分: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