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