【问题标题】:How to create an ansible array of all available aws regions?如何创建所有可用 aws 区域的 ansible 数组?
【发布时间】:2017-11-29 22:00:06
【问题描述】:

在 ansible playbook 中,我希望能够动态拉取所有可用 aws 区域的列表并遍历它们以在任何地方执行相同的 aws 任务。可以使用 aws cli 命令aws ec2 describe-regions 获取此信息。我正在寻找可以生成列表的 ansible 任务或将此 json 转换为可以使用 with_items 轻松循环的列表的方法@

$ 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"
        }
    ]
} 

【问题讨论】:

    标签: amazon-web-services amazon-ec2 ansible


    【解决方案1】:

    使用@Jordi's 解决方案,我可以使用类似于以下示例的内容转换 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
    

    【讨论】:

      【解决方案2】:

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

      然后变量将具有带有输出的 .stdout 属性。输出是一个 JSON 对象。哪个可以通过jinja过滤器from_json(检查http://docs.ansible.com/ansible/latest/playbooks_filters.html

      问候

      【讨论】:

        猜你喜欢
        • 2020-04-16
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        • 2017-03-10
        • 2018-07-10
        相关资源
        最近更新 更多