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
的内容,但还没有得到它。因此,现在我必须明确地了解更多关于该内容。