我可以像下面在group_vars / all中定义一个hash(dict):
region_subnet_matrix:
site1:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}a"
site2:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}b"
但是为了我的一生,我不知道如何在主机文件下定义它
[all:vars]
region_subnet_matrix="{
site1:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}a"
site2:
region: "{{ aws_region }}"
subnet: "subnet-xxxxxxx"
zone: "{{aws_region}}b"
}"
我知道这是不正确的,但我不知道正确的方法。有人可以启发我吗?
最佳答案
当我阅读Ansible的源代码时,清单文件中的变量值由Python的“ ast.literal_eval()”评估。因此,您可以通过单行Python文字描述清单文件中的dict变量。
您的示例可能如下所示:
[all:vars]
region_subnet_matrix={'site1': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}a'}, 'site2': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}b'}}
确保在此示例中未评估任何变量。
N.B .:我不知道这种广告资源变量定义是否被正式允许。