在我的剧本中,我想获取 UI 超过 14000 的所有本地用户的列表
我在 /etc/passwd 或 ansible.builtin.getent 上使用了 ansible.builtin.slurp,但真正的问题是我得到的 UID 值是字符串而不是整数,所以我无法正确过滤,并且我得到的所有结果都是空的,或者因为不是整数而抱怨。
- name: Get all users from /etc/passwd
ansible.builtin.getent:
database: passwd
register: users_info
- name: Filter users with UID greater than 14000
set_fact:
filtered_users: >-
{{
users_info.ansible_facts.getent_passwd |
dict2items |
selectattr('value.1', 'int') |
selectattr('value.1', >, 14000) |
map(attribute='key') |
list
}}
我以为selectattr('value.1', 'int')
会转换为 int,但结果总是空。(我的字典中确实有一些高于 14000 的 UID)
这里是 getent 提供的用户字典,所有 UID 都用引号引起来,所以它们是字符串
root:
- x
- '0'
- '0'
- root
- /root
- /bin/bash
shutdown:
- x
- '6'
- '0'
- shutdown
- /sbin
- /sbin/shutdown
sshd:
- x
- '74'
- '74'
- Privilege-separated SSH
- /usr/share/empty.sshd
- /sbin/nologin
我没有其他选择,只能运行一些我会避免的 shell cmd。
干杯,