Ansible如何过滤getent_passwd字典值获取符合要求的用户列表
你的代码存在三处需要修正的地方:
- 采集用户数据的getent任务参数错误,
database的有效值是passwd,你写成了passed,会导致无法正确获取用户列表 - 条件判断逻辑语法错误:
- 你需要判断的是用户属性数组中是否存在包含nologin的元素,而不是精确匹配等于nologin的元素,原写法逻辑不匹配
- 第二个判断的
search in是无效语法,Ansible中没有这种写法
- 变量赋值逻辑错误,原写法每次符合条件都会覆盖
my_users变量,最终只会得到最后一个符合条件的用户名,无法得到数组
完整修正后的代码
首先是正确的用户采集任务:
- name: 获取系统用户信息 getent: database: passwd
然后是筛选用户的任务:
- name: 生成符合要求的用户列表 set_fact: my_users: "{{ my_users | default([]) + [item.key] }}" when: # 不存在包含nologin的属性项 - item.value | select('search', 'nologin') | list | length == 0 # 存在包含/home的属性项 - item.value | select('search', '/home') | list | length > 0 loop: "{{ getent_passwd | dict2items }}"
内容的提问来源于stack exchange,提问作者Shaghayegh Tavakoli
相关产品推荐
相关产品推荐

