使用Ansible的Cloudfront事实

时间:2016-12-23 04:48:29

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

我需要检索我的Cloudfront实例的DNS名称(例如1234567890abcd.cloudfront.net),并且想知道是否有一种快速的方法可以在Ansible中获取此功能而无需借助AWS CLI。

从闪闪发光的额外模块来源看来,似乎没有一个模块。其他人如何获得此属性?

2 个答案:

答案 0 :(得分:1)

您可以编写自己的模块,也可以编写几行过滤插件并完成相同的操作。

在Ansible中编写过滤器的示例。让我们在您的filter_plugins / aws.py

中将此文件命名为aws.py
import boto3
import botocore
from ansible import errors

def get_cloudfront_dns(region, dist_id):
""" Return the dns name of the cloudfront distribution id.
Args:
    region (str): The AWS region.
    dist_id (str): distribution id

Basic Usage:
    >>> get_cloudfront_dns('us-west-2', 'E123456LHXOD5FK')
    '1234567890abcd.cloudfront.net'
"""
client = boto3.client('cloudfront', region)
domain_name = None
try:
    domain_name = (
        client
        .get_distribution(Id=dist_id)['Distribution']['DomainName']
    )
except Exception as e:
    if isinstance(e, botocore.exceptions.ClientError):
        raise e
    else:
        raise errors.AnsibleFilterError(
            'Could not retreive the dns name for CloudFront Dist ID {0}: {1}'.format(dist_id, str(e))
        )
return domain_name

class FilterModule(object):
    ''' Ansible core jinja2 filters '''
    def filters(self):
        return {'get_cloudfront_dns': get_cloudfront_dns,}

要使用此插件,您只需要调用它。

dns_entry: "{{ 'us-west-2' | get_cloudfront_dns('123434JHJHJH') }}"

请记住,您需要安装boto3和botocore才能使用此插件。

我的回购linuxdynasty ld-ansible-filters repo

中有很多例子

答案 1 :(得分:0)

我最后为Ansible 2.3.0接受了这个(cloudfront_facts.py)的模块。