Loops Ansible-使用键列表筛选dict

Loops Ansible-使用键列表筛选dict,loops,ansible,Loops,Ansible,我有一个列表,它实际上是一个目录的键列表。我想得到一个串接字符串,其中的dict在键列表中过滤,并在模块选项中使用它 这里我的用例是拥有公钥名称列表以生成授权密钥文件的用户 1 --- 2 - hosts: localhost 3 become: false 4 vars: 5 pub_keys: 6 key01: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]5/ someuser@somehost 7

我有一个
列表
,它实际上是一个
目录
的键列表。我想得到一个串接字符串,其中的
dict
键列表
中过滤,并在模块选项中使用它

这里我的用例是拥有公钥名称列表以生成授权密钥文件的用户

 1 ---
 2 - hosts: localhost
 3   become: false
 4   vars:
 5     pub_keys:
 6       key01: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]5/ someuser@somehost
 7       key02: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]ea otheruser@somewher
 8       key03: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]dN anyser@anyhost
 9     users:
10       root:
11         home: /root
12         shell: /bin/bash
13         authorized_keys:
14           - key01
15       mgmtusr:
16         home: /home/mgmtusr
17         shell: /bin/bash
18         authorized_keys:
19           - key01
20           - key02
21           - key03
22
23   tasks:
24     - name: Debug Authorized Keys
25       debug:
26         msg: "USER:{{ item.key }} AUTHKEYSLIST:{{ pub_keys|selectattr(item.authorized_keys) }}"
27       with_dict: "{{ users }}"
28
29     - name: Manage users Authorized Keys
30       authorized_key:
31         user: "{{ item.key }}"
32         key: "{{ pub_keys|selectattr(item.authorized_keys) }}"
33         exclusive: yes
34       with_dict: "{{ users }}"
35
正如您在这里看到的,我使用
dict | selectattr(list)
尝试了一下,但失败了

在调试模块中获取
,当然在授权密钥模块中指定了
无效密钥

TASK [Debug Authorized Keys] ************************************************************************************************************************************************************************************************************************************************** ok: [localhost] => (item={'key': u'mgmtusr', 'value': {u'home': u'/home/mgmtusr', u'shell': u'/bin/bash', u'authorized_keys': [u'key01', u'key02', u'key03']}}) => { "item": { "key": "mgmtusr", "value": { "authorized_keys": [ "key01", "key02", "key03" ], "home": "/home/mgmtusr", "shell": "/bin/bash" } }, "msg": "USER:mgmtusr AUTHKEYSLIST:" } ok: [localhost] => (item={'key': u'root', 'value': {u'home': u'/root', u'shell': u'/bin/bash', u'authorized_keys': [u'key01']}}) => { "item": { "key": "root", "value": { "authorized_keys": [ "key01" ], "home": "/root", "shell": "/bin/bash" } }, "msg": "USER:root AUTHKEYSLIST:" } TASK [Manage users Authorized Keys] ******************************************************************************************************************************************************************************************************************************************* failed: [localhost] (item={'key': u'mgmtusr', 'value': {u'home': u'/home/mgmtusr', u'shell': u'/bin/bash', u'authorized_keys': [u'key01', u'key02', u'key03']}}) => {"changed": false, "failed": true, "item": {"key": "mgmtusr", "value": {"authorized_keys": ["key01", "key02", "key03"], "home": "/home/mgmtusr", "shell": "/bin/bash"}}, "msg": "Failed to lookup user mgmtusr: 'getpwnam(): name not found: mgmtusr'"} failed: [localhost] (item={'key': u'root', 'value': {u'home': u'/root', u'shell': u'/bin/bash', u'authorized_keys': [u'key01']}}) => {"changed": false, "failed": true, "item": {"key": "root", "value": {"authorized_keys": ["key01"], "home": "/root", "shell": "/bin/bash"}}, "msg": "invalid key specified: "} 任务[调试授权密钥]************************************************************************************************************************************************************************************************************************************************** 确定:[localhost]=>(item={'key':u'mgmtusr','value':{u'home':u'/home/mgmtusr',u'shell':u'/bin/bash',u'authorized_keys':[u'key01',u'key02',u'key03'])=>{ “项目”:{ “密钥”:“mgmtusr”, “价值”:{ “授权密钥”:[ “key01”, “key02”, “密钥03” ], “主页”:“/home/mgmtusr”, “shell”:“/bin/bash” } }, “msg”:“用户:mgmtusr AUTHKEYSLIST:” } 确定:[localhost]=>(项={'key':u'root','value':{u'home':u'/root',u'shell':u'/bin/bash',u'authorized_keys':[u'key01']})=>{ “项目”:{ “键”:“根”, “价值”:{ “授权密钥”:[ “键01” ], “主”:“/根”, “shell”:“/bin/bash” } }, “msg”:“用户:根验证密钥列表:” } 任务[管理用户授权密钥]******************************************************************************************************************************************************************************************************************************************* 失败:[localhost](item={key':u'mgmtusr',value':{u'home':u'/home/mgmtusr',u'shell':u'/bin/bash',u'authorized_keys':[u'key01',u'key02',u'key03']}}=>{changed':false,“failed”:true,“item”:{“key”:“mgmtusr”,“value”:{“authorized(keys”:[“key01”,“key02”,“key03”,“home”:“/mgmtusr”,“shell”:/bin/bash”},msg}“未能查找用户mgmtusr:'getpwnam():未找到名称:mgmtusr'”} 失败:[localhost](item={'key':u'root','value':{u'home':u'/root',u'shell':u'/bin/bash',u'authorized_keys':[u'key01']}})=>{changed:false,“failed”:true,“item”:{“key”:“root”,“value”:{“authorized_keys”:[“key01”],“home”:“/root”,“shell”:“/bin/bash”},“msg”:“指定的密钥无效:”} 与其他尝试一样(
使用_subelements
查找('template'
,…)
selectattr
似乎不是解决方案。 有什么建议吗?

给你:

- name: Manage users Authorized Keys
  authorized_key:
    user: "{{ item.key }}"
    key: "{{ item.value.authorized_keys | map('extract',pub_keys) | list | join('\n') }}"
    exclusive: yes
  with_dict: "{{ users }}"
请参阅筛选器用法


另外,当您使用
map
时,您应该几乎总是将其键入
列表
,以防止
生成器对象
值。

谢谢您的回答!我在搜索时读了一些关于
map
的内容,但还没有得到它。因此,现在我必须明确地了解更多关于该内容。