【问题标题】:How do I insert variables in keys in Ansible/YAML?如何在 Ansible/YAML 的键中插入变量?
【发布时间】:2021-01-14 12:54:10
【问题描述】:

我声明了一个变量,并且在尝试使用 ec2_instance_info ansible 模块时,我试图让它的值显示在键中。我希望值显示在标签下。请查看下面的虚拟代码。

  vars:
    tag_key: Key
    tag_value: Value
  tasks:
   - name:
     ec2_instance_info:
     filters:
       "tag: {{ tag_key }}": "{{ tag_value }}"

我希望上面的输出为:

tag:Key:Value

但结果却是:

tag:{{ tag_key }}:Value

因此,当我运行命令时,它不会调用任何实例,因为它们正在搜索错误的东西。当我将变量换成常规字符串时,代码工作正常。 (我知道虚拟代码中的语法可能是错误的,我现在已经尝试了很多东西。)

我尝试了以下操作:Ansible variable in key/value key 虽然它可以显示变量,但它现在注册为一个字典,我得到了错误:

参数 Filters[0].Values 的类型无效,值:{'Key':'Value'},类型:,有效类型:"

所以我想我正在寻找一种在键名中使用变量而不将其转换为字典的方法,如果不可用,则将其转换为列表。提前致谢。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 ansible yaml


    【解决方案1】:

    ec2_instance_info 模块的filters 需要一个“dict”。因此,提供“dict”的一种方法是在vars: 中创建一个。

    类似:

      vars:
        ec2_filters:
          "tag:Name": "my-instance-1"
    
      tasks:
      - ec2_instance_info:
          filter: "{{ ec2_filters }}"
        register: ec2_out
      - debug:
          var: ec2_out
    

    或者在过滤器中调用嵌套变量作为字典:

      vars:
        tag_key: Key
        tag_value: Value
    
      tasks:
      - ec2_instance_info:
          filter:
            '{ "tag:{{ tag_key }}": "{{ tag_value }}" }'
        register: ec2_out
    

    【讨论】:

    • 看起来这正是我所需要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2020-12-10
    • 2021-09-25
    相关资源
    最近更新 更多