我试图以某种方式在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']
有什么办法可以解决此问题?
答案 0 :(得分:1)
可以使用loop和subelements 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' }