Ansible:获取指定用户的服务列表
Ansible: get list of services by specified users
对于我的实验室,我想为特定用户检查多台服务器上的服务。最好有以下数据
- 用户
- 状态
- 服务名称
不幸的是,Ansible 没有本地方法来完成此操作。使用 bash 可以:ps -u user1,user2,user3 -xco user,stat,command
按预期工作。
但是PS没那么简单。如果一个用户不存在,它不会检查用户的服务。能否请您以正确的方式指导我,也许我在这里让事情变得更难了。
我理解你的问题,你不是在特定用户下寻找, but 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 没有本地方法来完成此操作。使用 bash 可以:ps -u user1,user2,user3 -xco user,stat,command
按预期工作。
但是PS没那么简单。如果一个用户不存在,它不会检查用户的服务。能否请您以正确的方式指导我,也许我在这里让事情变得更难了。
我理解你的问题,你不是在特定用户下寻找
您可以使用以下方法收集所有可用的本地用户
---
- 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
如有必要,也可以针对感兴趣的用户更改行为。