如何使用ansible剧本中的事实选择变量?
我想根据实例的aws区域和可用性区域选择不同的选项。 作为一个非常简单的示例,我想根据区域将实例的时区设置为正确的时区 我可以从ohai_ec2事实中获得区域和可用区域 如何使用事实从变量列表中进行选择 我尝试直接引用变量,这适用于when语句,例如如何使用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
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]}
时是正确的。这篇文章显示了我的错误