如何使用ansible剧本中的事实选择变量?

如何使用ansible剧本中的事实选择变量?,ansible,ansible-facts,Ansible,Ansible Facts,我想根据实例的aws区域和可用性区域选择不同的选项。 作为一个非常简单的示例,我想根据区域将实例的时区设置为正确的时区 我可以从ohai_ec2事实中获得区域和可用区域 如何使用事实从变量列表中进行选择 我尝试直接引用变量,这适用于when语句,例如 when: ohai_ec2.region == "us-east-1" 我尝试了中的查找,但格式不正确 这很有效 # find the region - name: Base - find the region

我想根据实例的aws区域和可用性区域选择不同的选项。 作为一个非常简单的示例,我想根据区域将实例的时区设置为正确的时区

我可以从ohai_ec2事实中获得区域和可用区域

如何使用事实从变量列表中进行选择

我尝试直接引用变量,这适用于when语句,例如

when: ohai_ec2.region == "us-east-1"
我尝试了中的查找,但格式不正确

这很有效

# find the region
          - name: Base - find the region
            debug:
              msg: "Region is {{ ohai_ec2.region }} and zone is {{ ohai_ec2.availability_zone }}"

#Task: Base - Sets the timezone
          - name: Base - Set timezone to US East
            when: ohai_ec2.region == "us-east-1"
            timezone:
              name: US/Eastern
          - name: Base - Set timezone to CEST
            when: ohai_ec2.region == "eu-central-1"
            timezone:
              name: Europe/Madrid
          - name: Base - Set timezone to US West
            when: ohai_ec2.region == "us-west-2"
            timezone:
              name: US/Pacific
但事实并非如此

...
        vars:
          mytz:
            us-east-1: "US/Eastern"
            us-west-2: "US/Pacific"
            eu-central-1: "Europe/Madrid"
...

          - name: Base - Set timezone to US East
            timezone:
              name: "{{ lookup ('vars', 'mytz'.'[ohai_ec2.region]') }}"
也不是

我得到这个结果

fatal: [xxxxxxxxxx-xxxx]: FAILED! => {"msg": "template error while templating string: expected name or number. String: {{ mytz.[ohai_ec2.region] }}"}

使用事实和变量的正确方法是什么?

如果您有一个名为
mytz
的字典(您有),并且您有一个带有
区域
键的字典
ohai_ec2
,您可以使用该键的值从
mytz
中选择一个值,如下所示:

{{ mytz[ohai_ec2.region] }}
下面是一个可运行的示例:

---
- hosts: localhost
  gather_facts: false
  vars:
    mytz:
      us-east-1: "US/Eastern"
      us-west-2: "US/Pacific"
      eu-central-1: "Europe/Madrid"
    ohai_ec2:
      region: us-east-1

  tasks:
    - name: Base - Set timezone to US East
      timezone:
        name: "{{ mytz[ohai_ec2.region] }}"

如果您有一个名为
mytz
(您有),并且您有一个带有
区域
键的字典
ohai_ec2
,您可以使用该键的值从
mytz
中选择一个值,如下所示:

{{ mytz[ohai_ec2.region] }}
下面是一个可运行的示例:

---
- hosts: localhost
  gather_facts: false
  vars:
    mytz:
      us-east-1: "US/Eastern"
      us-west-2: "US/Pacific"
      eu-central-1: "Europe/Madrid"
    ohai_ec2:
      region: us-east-1

  tasks:
    - name: Base - Set timezone to US East
      timezone:
        name: "{{ mytz[ohai_ec2.region] }}"

谢谢我刚发现我的问题出在<代码>{mytz[ohai_ec2.region]}在我使用
{mytz[ohai_ec2.region]}
时是正确的,这篇文章显示了我的错误,谢谢!!我刚发现我的问题出在<代码>{mytz[ohai_ec2.region]}在我使用
{mytz[ohai_ec2.region]}
时是正确的。这篇文章显示了我的错误