Amazon web services 如何创建所有可用aws区域的ansible数组?

Amazon web services 如何创建所有可用aws区域的ansible数组?,amazon-web-services,amazon-ec2,ansible,Amazon Web Services,Amazon Ec2,Ansible,在ansible playbook中,我希望能够动态地拉取所有可用aws区域的列表,并迭代它们以在任何地方执行相同的aws任务。此信息可通过aws cli命令aws ec2 descripe regions获得。我正在寻找一个可以生成列表的ansible任务,或者一种将此json转换为列表的方法,该列表可以使用和\u项轻松循环 $ aws ec2 describe-regions { "Regions": [ { "Endpoint": "ec2

在ansible playbook中,我希望能够动态地拉取所有可用aws区域的列表,并迭代它们以在任何地方执行相同的aws任务。此信息可通过aws cli命令
aws ec2 descripe regions
获得。我正在寻找一个可以生成列表的ansible任务,或者一种将此json转换为列表的方法,该列表可以使用
和\u项轻松循环

$ aws ec2 describe-regions 
{
    "Regions": [
        {
            "Endpoint": "ec2.ap-south-1.amazonaws.com", 
            "RegionName": "ap-south-1"
        }, 
        {
            "Endpoint": "ec2.eu-west-2.amazonaws.com", 
            "RegionName": "eu-west-2"
        }, 
        {
            "Endpoint": "ec2.eu-west-1.amazonaws.com", 
            "RegionName": "eu-west-1"
        }, 
        {
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com", 
            "RegionName": "ap-northeast-2"
        }, 
        {
            "Endpoint": "ec2.ap-northeast-1.amazonaws.com", 
            "RegionName": "ap-northeast-1"
        }, 
        {
            "Endpoint": "ec2.sa-east-1.amazonaws.com", 
            "RegionName": "sa-east-1"
        }, 
        {
            "Endpoint": "ec2.ca-central-1.amazonaws.com", 
            "RegionName": "ca-central-1"
        }, 
        {
            "Endpoint": "ec2.ap-southeast-1.amazonaws.com", 
            "RegionName": "ap-southeast-1"
        }, 
        {
            "Endpoint": "ec2.ap-southeast-2.amazonaws.com", 
            "RegionName": "ap-southeast-2"
        }, 
        {
            "Endpoint": "ec2.eu-central-1.amazonaws.com", 
            "RegionName": "eu-central-1"
        }, 
        {
            "Endpoint": "ec2.us-east-1.amazonaws.com", 
            "RegionName": "us-east-1"
        }, 
        {
            "Endpoint": "ec2.us-east-2.amazonaws.com", 
            "RegionName": "us-east-2"
        }, 
        {
            "Endpoint": "ec2.us-west-1.amazonaws.com", 
            "RegionName": "us-west-1"
        }, 
        {
            "Endpoint": "ec2.us-west-2.amazonaws.com", 
            "RegionName": "us-west-2"
        }
    ]
} 

您可以使用命令模块执行该命令并注册输出

然后,变量的输出将具有.stdout属性。输出是一个JSON对象。可以通过jinja过滤器从_json(检查)


关于

您可以使用命令模块执行命令并注册输出

然后,变量的输出将具有.stdout属性。输出是一个JSON对象。可以通过jinja过滤器从_json(检查)

关于

使用解决方案,我可以使用类似于以下示例的内容转换aws命令输出的json:

---
- hosts: localhost
  gather_facts: no

  tasks:
  - command: "aws ec2 describe-regions"
    register: json_out

  - set_fact:
      region_json: "{{json_out.stdout | from_json}}"
      region_list: []

  # example of itteration over the converted json
  - debug:
      msg: "{{item.RegionName}}"
    with_items: "{{region_json.Regions|default([], true)|list}}"

  # Creates actual list of only region names
  - set_fact:
      region_list: "{{region_list + [item.RegionName] }}"
    with_items: "{{region_json.Regions|default([], true)|list}}"

  - debug:
      var: region_list
使用解决方案,我可以使用类似于以下示例的内容转换aws命令输出的json:

---
- hosts: localhost
  gather_facts: no

  tasks:
  - command: "aws ec2 describe-regions"
    register: json_out

  - set_fact:
      region_json: "{{json_out.stdout | from_json}}"
      region_list: []

  # example of itteration over the converted json
  - debug:
      msg: "{{item.RegionName}}"
    with_items: "{{region_json.Regions|default([], true)|list}}"

  # Creates actual list of only region names
  - set_fact:
      region_list: "{{region_list + [item.RegionName] }}"
    with_items: "{{region_json.Regions|default([], true)|list}}"

  - debug:
      var: region_list