在Ansible的“roles”目录中创建一个新角色,例如“compare-packages”。
在“compare-packages”下创建“tasks”目录,并在其中创建一个名为“main.yml”的文件。
在“main.yml”中,使用Ansible的“set_fact”模块定义一个包含所有服务器的列表变量,然后使用Ansible的“yum”模块在所有服务器上获取已安装的软件包列表。
示例代码如下:
- name: Get list of all servers
set_fact:
all_servers:
- server1
- server2
- server3
- name: Get installed package list
yum:
list: installed
register: package_list
delegate_to: "{{ item }}"
with_items: "{{ all_servers }}"
示例代码如下:
- name: Create empty list for common packages
set_fact:
common_packages: []
- name: Check for common packages
set_fact:
common_packages: "{{ common_packages + [item] }}"
when: item.stdout_lines is contained in package_list.stdout_lines
with_items: "{{ package_list.results }}"
示例代码如下:
- name: Output common packages
debug:
msg: "Common package found: {{ item }}"
with_items: "{{ common_packages }}"
这样,角色就可以比较服务器之间的已安装软件包列表,并输出所有服务器上都存在的软件包名称。