簡體   English   中英

使用Ansible的Cloudfront事實

[英]Cloudfront facts using Ansible

我需要檢索我的Cloudfront實例的DNS名稱(例如1234567890abcd.cloudfront.net),並且想知道是否存在一種無需使用AWS CLI即可在Ansible中快速獲取此名稱的方法。

通過閃爍“額外模塊”源,將顯示沒有適用於此的模塊。 其他人如何獲得此屬性?

您可以編寫自己的模塊,也可以編寫幾行過濾器插件來完成相同的事情。

在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回購

我最終為此編寫了一個模塊( cloudfront_facts.py ),該模塊已被Ansible 2.3.0接受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM