我有几十台主机,它们是CentOS 6和7的混合体.我最近开始使用Ansible来帮助管理它们,但我仍然是一个新手.
像每个人一样,我经常需要更新这些机器上的软件包,特别是出于安全考虑.但是,我不想更新它们上的所有软件包,只需更新特定的软件包 – 这些软件包可能因机器而异,具体取决于其角色.我使用了Ansible的yum命令,使用state = latest,以及特定软件包的列表,以便在过去更新这些主机,但直到今天我才注意到在针对主机运行时,如果未安装其中一个列出的软件包然后将在该机器上安装.
我需要的是一种向Ansible提供包列表的方法,然后对于每个主机它将采取行动:
– 如果包存在,请将其更新到最新版本;
– 如果包裹不存在,什么都不做.
有没有实用的方法呢?
如果您只想更新包含可用更新的软件包子集,您可能需要尝试@wurtel的尝试.您需要注册已安装的软件包,如下所示:
- name: Get installed packages. command: rpm -qa --qf "%{NAME}\n" register: installed_packages
然后,您可以定义集合theory filter并更新允许更新packages_to_update的程序包列表中定义的所有程序包.
- name: Update subset of packages. yum: name: "{{ item }}" state: latest with_items: - {{ installed_packages | intersect(packages_to_update) }}