我可以像下面在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 .:我不知道这种广告资源变量定义是否被正式允许。

07-24 13:06