如何在多个Linux主机上检查已安装软件包的版本

86次阅读
没有评论

问题描述

需要在100多台服务器上检查snapd软件包的安装情况,但是他不喜欢输出结果的格式。他整天都在寻找不同的选项,但没有找到合适的解决方案。附上了ansible-playbook的输出结果。请问有什么提示吗?
如何在多个Linux主机上检查已安装软件包的版本

--- 
- hosts: centos   
  become: true   
  tasks:    
    - name: Check Hostname      
      command: /usr/bin/hostname    
    - name: Check for package if is installed      
      yum:        
        list: snapd      
      register: result

为了检查软件包的版本,我尝试了以下playbook,但是Ansible不喜欢这个语法:

--- 
- hosts: test2   
  become: true   
  tasks:    
    - name: Check Hostname      
      command: /usr/bin/hostname    
    - name: Check for package if is installed      
      yum:        
        list: snapd      
      register: package_name_version    
    - name: set package version      
      set_fact:        
        package_name_version: "{{ package_name_version.results|selectattr('yumstate','equalto','installed')|map(attribute='version')|list|first }}"

谢谢!

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

使用Ansible的shell模块可以在多个Linux主机上检查已安装软件包的版本。以下是具体步骤:
1. 使用以下命令运行Ansible playbook:

ansible -i <inventory> <target group, lets' say some CentOS systems> -m shell -a "rpm -qa | grep <package name>"

请将<inventory>替换为您的Ansible inventory文件的路径,将<target group>替换为您要检查的目标主机组,将<package name>替换为您要检查的软件包名称。
2. 运行上述命令后,将显示一个包含服务器名称和软件包版本的列表。

方案2

如果您希望将上述命令包装到Ansible playbook中,可以使用以下步骤:
1. 创建一个新的Ansible playbook文件,例如check_package_version.yml
2. 在该文件中定义主机组和任务:

--- 
- hosts: <target group, lets' say some CentOS systems>   
  become: true   
  tasks:    
    - name: Check package version      
      shell: rpm -qa | grep <package name>
      register: package_version_output
    - debug:
        var: package_version_output.stdout_lines

请将<target group>替换为您要检查的目标主机组,将<package name>替换为您要检查的软件包名称。
3. 运行以下命令来执行Ansible playbook:

ansible-playbook -i <inventory> check_package_version.yml

请将<inventory>替换为您的Ansible inventory文件的路径。
4. 运行上述命令后,将显示一个包含服务器名称和软件包版本的列表。

以上是在多个Linux主机上检查已安装软件包的版本的两种解决方案。您可以根据您的需求选择适合您的方法。

正文完