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

如有必要,也可以针对感兴趣的用户更改行为。