包括有条件的任务文件-任务仍在尝试运行吗?

时间:2020-07-03 18:49:08

标签: ansible ansible-1.x

注意:我正在使用Ansible 1.9.4,目前无法升级

我试图根据是否存在嵌套字典来有条件地包含任务文件。

我有4台主机,其中1台具有我要呼叫heavy_nvme的虚拟机类型,而其他主机则没有。我试图同时在所有4个主机上运行此剧本。我正在使用group_vars设置所有服务器的所有变量,然后使用一个主机文件覆盖具有不同要求的服务器的相关字典。

我的小组变量如下:

virtual_machines:
  type:
    druid:
      os: amazon_linux_2
      count: 0
      memory: 16
      vcpus: 4
      disk: {}
    heavy_nvme:
      active: false

我的include命令如下:

- name: destroy virtual machines
  include: destroy-virtual-machines.yml types={{ virtual_machines.type }} name='heavy_nvme'
  when: '"heavy_nvme" in virtual_machines.type and virtual_machines.type.heavy_nvme.count > 0'

当我尝试运行此文件时,在包含的文件中遇到与任务相关的失败:

fatal: [hostname.local] => unknown error parsing with_sequence arguments: u'start=1 end={{ num_machines }}'

这是指destroy-virtual-machines.yml中的以下行:

- name: destroy virt pools
  command: "virsh pool-destroy {{ vm_name_prefix }}-{{ item }}"
  with_sequence: start=1 end={{ num_machines }}
  ignore_errors: True

发生错误是因为num_machines变量是通过对每种虚拟机类型的count变量执行计算而得出的事实集。 druid类型运行良好,因为存在count,但显然不在heavy_nvme字典中。

我尝试了几种不同的方法,包括将count: 0添加到heavy_nvme字典中。我还尝试过完全删除heavy_nvme字典,或将其设置为空白字典-都无法满足我的要求。

我很确定会发生此错误,因为当您运行条件include时,该条件只是添加到了包含文件中的每个任务中。那对我来说是行不通的,因为那样的话,我将丢失包含文件中所需的大量变量。

如果heavy_nvme字典不存在,计数为0或设置了指定的键/变量,是否可以完全阻止这些任务运行(例如active: false)?

0 个答案:

没有答案