【问题标题】:Ansible Tower with dynamic inventory issue: "The task includes an option with an undefined variable"具有动态库存问题的 Ansible Tower:“任务包括一个带有未定义变量的选项”
【发布时间】:2020-02-21 06:05:49
【问题描述】:

我在 Ansible Tower 中使用 AWS EC2 动态清单,并且我的实例使用它们的环境进行标记。例如:

关键:环境

价值:非生产

这将创建一个包含标记主机的组 tag_Environment_NonProd。现在我想使用这个组来“set_fact”:

- name: Determine nodes to join in NonProd
  hosts: tag_Group_Elasticsearch
  become: true
  tasks:
  - name: Setting nodes IPs 
    set_fact:
      NonProd_list: "{{ groups['tag_Environment_NonProd'] | map('extract', hostvars, ['ansible_host']) | list }}" 

我只是不时启动 NonProd 标记实例,因此 tag_Environment_NonProd 组并非始终可用,这就是我面临此问题的原因。

我尝试了以下条件,但没有帮助:

何时:定义了 tag_Environment_NonProd

何时:(组名称中的“tag_Environment_NonProd”)

我也尝试忽略_error,但显然它也不适用于“未定义的变量”。

有人知道如何解决这个问题吗?

非常感谢。

德拉甘

【问题讨论】:

    标签: variables ansible ansible-inventory


    【解决方案1】:

    全局方法是确保在未定义变量时始终有一个值。为此使用default filter

    当组不存在(或为空)时,以下会将NonProd_list 设置为空列表。这样您就可以修复当前的错误,并且您不必稍后测试 set var 是否存在。

      - name: Setting nodes IPs 
        set_fact:
          NonProd_list: >-
            {{ 
              groups['tag_Environment_NonProd']
              | default([])
              | map('extract', hostvars, ['ansible_host'])
              | list
            }}
    

    【讨论】:

    • 感谢@Zeitounator 我尝试按照您的建议添加“默认”过滤器,但没有运气..."msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'tag_Environment_NonProd'
    • 我也尝试过使用默认值“default(5, true)”但是没有用
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2021-02-06
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多