You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible如何过滤getent_passwd字典值获取符合要求的用户列表

你的代码存在三处需要修正的地方:

  1. 采集用户数据的getent任务参数错误,database的有效值是passwd,你写成了passed,会导致无法正确获取用户列表
  2. 条件判断逻辑语法错误:
    • 你需要判断的是用户属性数组中是否存在包含nologin的元素,而不是精确匹配等于nologin的元素,原写法逻辑不匹配
    • 第二个判断的search in是无效语法,Ansible中没有这种写法
  3. 变量赋值逻辑错误,原写法每次符合条件都会覆盖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:12:02