2016-12-23 2 views
0

クラウドフロントインスタンスのDNS名(たとえば、1234567890abcd.cloudfront.net)を取得する必要があり、AWS CLIに頼らずにAnabilitiesでこれを取得する方法が素早くあるのだろうかと思いました。アブソリュートを使用したクラウドフロントの事実

エクストラモジュールのソースには、このためのモジュールがないと思われます。他の人はどのようにこの属性を取得していますか?

答えて

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。

は私がAnsible 2.3.0に受け入れられてきた私のレポlinuxdynasty ld-ansible-filters repo

+0

ありがとうございました。簡単な方法があると思っていましたが、モジュールを作成する必要があります。 –

+0

私の意見では、プラグインの作成はこのような要求を得るためには簡単です。あなたがたくさんのオプションを持っていない限り。モジュールよりも最適なルートになります。 – linuxdynasty

0

私はこの(cloudfront_facts.py)用のモジュールを書くことになったに位置して例の束を持っています。

関連する問題