From e11b1128c26fd2601e12c2d2c8c87c65b0d67c17 Mon Sep 17 00:00:00 2001 From: Vlad Glagolev Date: Thu, 26 Jan 2017 18:02:03 -0500 Subject: [PATCH] Add Security Token Service support for Route 53 --- libcloud/dns/drivers/route53.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/libcloud/dns/drivers/route53.py b/libcloud/dns/drivers/route53.py index 040cdbccc7..0cb8707c49 100644 --- a/libcloud/dns/drivers/route53.py +++ b/libcloud/dns/drivers/route53.py @@ -38,7 +38,7 @@ from libcloud.dns.types import ZoneDoesNotExistError, RecordDoesNotExistError from libcloud.dns.base import DNSDriver, Zone, Record from libcloud.common.types import LibcloudError -from libcloud.common.aws import AWSGenericResponse +from libcloud.common.aws import AWSGenericResponse, AWSTokenConnection from libcloud.common.base import ConnectionUserAndKey @@ -67,7 +67,7 @@ class Route53DNSResponse(AWSGenericResponse): } -class Route53Connection(ConnectionUserAndKey): +class BaseRoute53Connection(ConnectionUserAndKey): host = API_HOST responseCls = Route53DNSResponse @@ -96,6 +96,10 @@ def _get_aws_auth_b64(self, secret_key, time_string): return b64_hmac.decode('utf-8') +class Route53Connection(AWSTokenConnection, BaseRoute53Connection): + pass + + class Route53DNSDriver(DNSDriver): type = Provider.ROUTE53 name = 'Route53 DNS' @@ -115,6 +119,10 @@ class Route53DNSDriver(DNSDriver): RecordType.TXT: 'TXT', } + def __init__(self, *args, **kwargs): + self.token = kwargs.pop('token', None) + super(Route53DNSDriver, self).__init__(*args, **kwargs) + def iterate_zones(self): return self._get_more('zones') @@ -546,3 +554,8 @@ def _get_data(self, rtype, last_key, **kwargs): return items, last_key, exhausted else: return [], None, True + + def _ex_connection_class_kwargs(self): + kwargs = super(Route53DNSDriver, self)._ex_connection_class_kwargs() + kwargs['token'] = self.token + return kwargs