Ansible字典-通过主机,名称和版本进行程序包验证

时间:2019-12-06 15:22:20

标签: ansible

我有几个通过各种主机(host1,host2,...)安装的软件包(package-A,package-B,...)。

我需要检查例如在host1,host2和host3中是否安装了版本1.2.3的程序包A,需要检查是否在host1,host3和host9中安装了版本3.2.1的程序包B, ...,通知用户是否已安装指定版本。

我有一个剧本(validatorPlaybook.yml),目的是检查并通知用户有关外部剧本varsPlayBook1.yml中字典中定义的某些主机中已安装版本的信息:

return result;

这是我在validatorPlaybook.yml中使用的脚本:

#validation dictionary
packsDict:
pck1:
    hosts: host1, host2, host3
    version: 1.2.3
    package_name: package-A
pck2:
    hosts: host1, host3, host9
    version: 3.2.1
    package_name: package-B

(...)

如您所见,有些软件包安装在一台主机中,而其他软件包则安装在另一台主机中。 如何由主机运行该yum list命令?有可能吗?

1 个答案:

答案 0 :(得分:0)

注意:在这里,我将不讨论您当前实现的总体结构和目标。我认为可以大大改善(例如,通过定义软件包来检查库存...)


  1. 我从现有脚本中看到的最简单的解决方案需要稍微转换您的验证数据。将主机放在这样的列表中:

    - name: check if packages in dict are with the correct version
      yum:
        list: "{{ item.package_name }}-{{ item.version }}"
      loop: "{{ lookup('dict', packsDict) }}"
      when: inventory_hostname in item.hosts
    
  2. 我认为您的实际剧本已经在所有需要的主机上运行,​​并且您的dict字典中的名称与清单中的主机名称对齐。像下面这样修改任务应该符合您的要求。

    {{1}}