问题描述
需要在100多台服务器上检查snapd软件包的安装情况,但是他不喜欢输出结果的格式。他整天都在寻找不同的选项,但没有找到合适的解决方案。附上了ansible-playbook的输出结果。请问有什么提示吗?
---
- 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主机上检查已安装软件包的版本的两种解决方案。您可以根据您的需求选择适合您的方法。