Ansible:获取指定用户的服务列表
Posted
技术标签:
【中文标题】Ansible:获取指定用户的服务列表【英文标题】:Ansible: get list of services by specified users 【发布时间】:2022-01-23 18:17:10 【问题描述】:对于我的实验室,我想为特定用户检查多台服务器上的服务。最好有以下数据
用户 状态 服务名称不幸的是,没有使用 Ansible 实现此目的的本地方法。使用 bash 可以:ps -u user1,user2,user3 -xco user,stat,command
按预期工作。
但是PS没那么简单。如果一个用户不存在,它不会检查用户的服务。您能否以正确的方式指导我,也许我在这里让事情变得更难。
【问题讨论】:
创建一个产生你想要的输出的脚本(例如 bash)。然后通过 Ansible 调用它。通过解析 /etc/passwd,您的脚本只能处理现有用户。 【参考方案1】:我理解您的问题,您不是在寻找how to get services in specific status,而是在特定用户下运行the state of processes。
您可以使用以下方法收集所有可用的本地用户
---
- hosts: localhost
become: yes
gather_facts: false
vars:
SERVICES_IN_INTEREST: # here Ansible Tower only
- "nginx"
- "awx"
tasks:
- name: Gather available local users
getent:
database: passwd
# Debugging output to get familar with the data structure
- name: Show all gathered local user information
debug:
var: getent_passwd
- name: Show gathered local user names only
debug:
msg: " item "
loop: " getent_passwd.keys() | list "
由于人们可能对在 root 或其他用户下运行的所有进程感兴趣,但对特定服务感兴趣,因此介绍了感兴趣的服务列表。
- name: Get list of processes of all available local users
shell:
cmd: "ps -u item -o user,stat,command --no-header | sort | uniq"
loop: " getent_passwd.keys() | list " # all local users
when: item in SERVICES_IN_INTEREST
register: result
changed_when: false
- name: Show result
debug:
msg: " item.stdout "
with_items: " result.results "
when: item.item in SERVICES_IN_INTEREST
如有必要,行为也可以更改为感兴趣的用户。
【讨论】:
以上是关于Ansible:获取指定用户的服务列表的主要内容,如果未能解决你的问题,请参考以下文章