ansible with_items,逗号分隔的item.values

时间:2018-10-11 13:34:18

标签: ansible

我试图以某种方式在Ansible中创建一个用逗号分隔的item.values的嵌套循环。     vars:     -my_resources       -{名称:'share1',编号:'user1,user2,user3'}       -{名称:'share2',编号:'user4'}

- name: Create users files
  copy:
  dest: "/etc/vsftpd_users/{{ item.id }}"
  content: |
    local_root=/vol/{{ item.name }}
  with_items: 
  - "{{ my_resources.split(',') }}" 

我的期望应该如下所示,就像每个文件都在内部包含适当的内容一样被创建。

$ cat user1
share1

$ cat user2
share1

$ cat user4
share2

但是,使用上述脚本通过以下方式创建的文件

-rw-r--r-- 1 root root 22 Oct 11 08:15 [u'user1', u'user2', u'user3']
-rw-r--r-- 1 root root 29 Oct 11 08:15 [u'user4']

有什么办法可以解决此问题?

2 个答案:

答案 0 :(得分:1)

可以使用loopsubelements lookup/query(自2.5版开始受支持)实现

- hosts: localhost
  vars:
    users:
      - name: 'share1'
        id: "{{'user1,user2,user3'.split(',')}}"
      - name: 'share2'
        id: "{{'user4'.split(',')}}"

  tasks:
  - name: Create users file with content
    copy:
      dest: "/etc/vsftpd_users/{{ item.1 }}"
      content: |
        local_root=/vol/{{ item.0.name }}
    loop: "{{lookup('subelements', users, 'id', skip_missing=True)}}"

答案 1 :(得分:0)

如果没有脚本,Ansible不能用于过于复杂的数据结构; 为了简化操作,您应将用户数据重构为具有单个ID的字典列表,例如:

- name: Create users file with content
  copy:
  dest: "/etc/vsftpd_users/{{ item.id }}"
  content: |
    local_root=/vol/{{ item.name }}
  with_items:
  - { name: 'share1', id: 'user1' }
  - { name: 'share1', id: 'user2' }
  - { name: 'share1', id: 'user3' }
  - { name: 'share2', id: 'user4' }