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:获取指定用户的服务列表的主要内容,如果未能解决你的问题,请参考以下文章

ansible应用程序命令

Ansible传递列表作为变量

ansible应用

ansible-playbook未找到命令怎么解决

ansible的简单使用格式:

ansible的简单使用格式