Ansible 可与带有逗号分隔的item.values的_项连用

Ansible 可与带有逗号分隔的item.values的_项连用,ansible,Ansible,我试图以某种方式创建一个嵌套循环,在Ansible中使用逗号分隔的item.values。 变量: -我的资源 -{name:'share1',id:'user1,user2,user3'} -{name:'share2',id:'user4'} - name: Create users files copy: dest: "/etc/vsftpd_users/{{ item.id }}" content: | local_root=/vol/{{ item.name }}

我试图以某种方式创建一个嵌套循环,在Ansible中使用逗号分隔的item.values。 变量: -我的资源 -{name:'share1',id:'user1,user2,user3'} -{name:'share2',id:'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']

有没有办法解决这个问题?

没有脚本,Ansible无法处理太复杂的数据结构; 为方便起见,您应将您的用户数据重新构建为具有单个ID的dict列表,如:

- 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' }
它可以使用和来实现,自版本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)}}"

重构你的数据。根据这应该是可能的。但是现在我发现,
'list object'没有属性“split”
如果不使用jina2脚本,您将无法使用数据结构。Ansible不能处理每个任务的多个活动。这里有一个关于dictionary iteraction的例子:这在@Ignacio中非常有效。谢谢。请根据您共享的链接,使用
with_list
更新
loop
。使用
loop
获取错误。不客气!这可能是因为ansible版本的循环是2.5版的一个新特性