Ansible getent模块';s循环输出结果解析
我试图使用Ansible getent模块';s循环输出结果解析,ansible,ansible-filter,Ansible,Ansible Filter,我试图使用getent模块检查托管节点中是否存在大量用户,并创建一个不存在的用户列表。 这段代码是: - getent: database: passwd key: "{{ item }}" fail_key: no register: x loop: - "user1" - "user2" - debug: var=x.results - set_fact: fail_list: "{{ x.results | }}" 我被困在这一
getent
模块检查托管节点中是否存在大量用户,并创建一个不存在的用户列表。
这段代码是:
- getent:
database: passwd
key: "{{ item }}"
fail_key: no
register: x
loop:
- "user1"
- "user2"
- debug: var=x.results
- set_fact:
fail_list: "{{ x.results | }}"
我被困在这一点上。是否有任何方法可以将未出现在变量fail_列表中的用户保存为
列表
?在上面的示例中,
user1
不存在,而user2
存在于托管节点中。我使用的ansible版本是2.9,调试输出是DICT列表,如下所示:
"x.results": [
{
"ansible_facts": {
"getent_passwd": {
"user1": null
}
},
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"database": "passwd",
"fail_key": false,
"key": "user1",
"service": null,
"split": null
}
},
"item": "user1",
"msg": "One or more supplied key could not be found in the database."
},
{
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python",
"getent_passwd": {
"user2": [
"x",
"0",
"0",
"user2",
"/home/user2",
"/bin/bash"
]
}
},
"ansible_loop_var": "item",
"changed": false,
"failed": false,
"invocation": {
"module_args": {
"database": "passwd",
"fail_key": false,
"key": "user2",
"service": null,
"split": null
}
},
"item": "user2"
},
运行getent
一次并搜索用户列表。比如说
-hosts:localhost
任务:
-格滕:
数据库:passwd
-调试:
msg:用户{{item}}存在。
循环:
-根
-用户1
-用户2
何时:my_用户中的项目
变量:
my_用户:{{getent_passwd.keys()| list}}”
给予
ok:[localhost]=>(item=root)=>{
“msg”:“存在用户根目录。”
}
正在跳过:[localhost]=>(项=user1)
正在跳过:[localhost]=>(项=user2)