list
은 실제로 dict
의 키 목록입니다. 그리고이 list
키로 필터링 된 dict
으로 연결된 문자열을 가져 와서 모듈 옵션에 사용하고 싶습니다.Ansible - 키 목록으로 사전을 필터링하십시오.
나의 사용 사례는 authorized_keys 파일을 생성하기 위해 공개 키의 이름 목록이있는 사용자입니다. 당신이 여기에서 볼 수 있듯이
1 ---
2 - hosts: localhost
3 become: false
4 vars:
5 pub_keys:
6 key01: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]5/ [email protected]
7 key02: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]ea [email protected]
8 key03: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ[…]dN [email protected]
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)
으로 시도해하지만 실패합니다.
디버그 모듈에 <generator object select_or_reject at 0x…>
을 가져오고 물론 authorized_key 모듈에 invalid key specified
을 얻는 것. 다른 시도처럼
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: "}
(with_subelements
, lookup('template'
는 ...) selectattr
솔루션을 보인다되지 않습니다. 제안 사항이 있으십니까? 여기
답변 해 주셔서 감사합니다. 검색 할 때'map'을 조금 읽었지만 아직 찾지 못했습니다. 이제 결정적으로, 저는 그것에 대해 더 많이 배워야합니다. – xenlo