Run black on moto & test directories.
This commit is contained in:
parent
c820395dbf
commit
96e5b1993d
507 changed files with 52541 additions and 47814 deletions
|
|
@ -15,11 +15,10 @@ ROUTE53_ID_CHOICE = string.ascii_uppercase + string.digits
|
|||
|
||||
def create_route53_zone_id():
|
||||
# New ID's look like this Z1RWWTK7Y8UDDQ
|
||||
return ''.join([random.choice(ROUTE53_ID_CHOICE) for _ in range(0, 15)])
|
||||
return "".join([random.choice(ROUTE53_ID_CHOICE) for _ in range(0, 15)])
|
||||
|
||||
|
||||
class HealthCheck(BaseModel):
|
||||
|
||||
def __init__(self, health_check_id, health_check_args):
|
||||
self.id = health_check_id
|
||||
self.ip_address = health_check_args.get("ip_address")
|
||||
|
|
@ -36,23 +35,26 @@ class HealthCheck(BaseModel):
|
|||
return self.id
|
||||
|
||||
@classmethod
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
properties = cloudformation_json['Properties']['HealthCheckConfig']
|
||||
def create_from_cloudformation_json(
|
||||
cls, resource_name, cloudformation_json, region_name
|
||||
):
|
||||
properties = cloudformation_json["Properties"]["HealthCheckConfig"]
|
||||
health_check_args = {
|
||||
"ip_address": properties.get('IPAddress'),
|
||||
"port": properties.get('Port'),
|
||||
"type": properties['Type'],
|
||||
"resource_path": properties.get('ResourcePath'),
|
||||
"fqdn": properties.get('FullyQualifiedDomainName'),
|
||||
"search_string": properties.get('SearchString'),
|
||||
"request_interval": properties.get('RequestInterval'),
|
||||
"failure_threshold": properties.get('FailureThreshold'),
|
||||
"ip_address": properties.get("IPAddress"),
|
||||
"port": properties.get("Port"),
|
||||
"type": properties["Type"],
|
||||
"resource_path": properties.get("ResourcePath"),
|
||||
"fqdn": properties.get("FullyQualifiedDomainName"),
|
||||
"search_string": properties.get("SearchString"),
|
||||
"request_interval": properties.get("RequestInterval"),
|
||||
"failure_threshold": properties.get("FailureThreshold"),
|
||||
}
|
||||
health_check = route53_backend.create_health_check(health_check_args)
|
||||
return health_check
|
||||
|
||||
def to_xml(self):
|
||||
template = Template("""<HealthCheck>
|
||||
template = Template(
|
||||
"""<HealthCheck>
|
||||
<Id>{{ health_check.id }}</Id>
|
||||
<CallerReference>example.com 192.0.2.17</CallerReference>
|
||||
<HealthCheckConfig>
|
||||
|
|
@ -68,59 +70,66 @@ class HealthCheck(BaseModel):
|
|||
{% endif %}
|
||||
</HealthCheckConfig>
|
||||
<HealthCheckVersion>1</HealthCheckVersion>
|
||||
</HealthCheck>""")
|
||||
</HealthCheck>"""
|
||||
)
|
||||
return template.render(health_check=self)
|
||||
|
||||
|
||||
class RecordSet(BaseModel):
|
||||
|
||||
def __init__(self, kwargs):
|
||||
self.name = kwargs.get('Name')
|
||||
self.type_ = kwargs.get('Type')
|
||||
self.ttl = kwargs.get('TTL')
|
||||
self.records = kwargs.get('ResourceRecords', [])
|
||||
self.set_identifier = kwargs.get('SetIdentifier')
|
||||
self.weight = kwargs.get('Weight')
|
||||
self.region = kwargs.get('Region')
|
||||
self.health_check = kwargs.get('HealthCheckId')
|
||||
self.hosted_zone_name = kwargs.get('HostedZoneName')
|
||||
self.hosted_zone_id = kwargs.get('HostedZoneId')
|
||||
self.alias_target = kwargs.get('AliasTarget')
|
||||
self.name = kwargs.get("Name")
|
||||
self.type_ = kwargs.get("Type")
|
||||
self.ttl = kwargs.get("TTL")
|
||||
self.records = kwargs.get("ResourceRecords", [])
|
||||
self.set_identifier = kwargs.get("SetIdentifier")
|
||||
self.weight = kwargs.get("Weight")
|
||||
self.region = kwargs.get("Region")
|
||||
self.health_check = kwargs.get("HealthCheckId")
|
||||
self.hosted_zone_name = kwargs.get("HostedZoneName")
|
||||
self.hosted_zone_id = kwargs.get("HostedZoneId")
|
||||
self.alias_target = kwargs.get("AliasTarget")
|
||||
|
||||
@classmethod
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
properties = cloudformation_json['Properties']
|
||||
def create_from_cloudformation_json(
|
||||
cls, resource_name, cloudformation_json, region_name
|
||||
):
|
||||
properties = cloudformation_json["Properties"]
|
||||
|
||||
zone_name = properties.get("HostedZoneName")
|
||||
if zone_name:
|
||||
hosted_zone = route53_backend.get_hosted_zone_by_name(zone_name)
|
||||
else:
|
||||
hosted_zone = route53_backend.get_hosted_zone(
|
||||
properties["HostedZoneId"])
|
||||
hosted_zone = route53_backend.get_hosted_zone(properties["HostedZoneId"])
|
||||
record_set = hosted_zone.add_rrset(properties)
|
||||
return record_set
|
||||
|
||||
@classmethod
|
||||
def update_from_cloudformation_json(cls, original_resource, new_resource_name, cloudformation_json, region_name):
|
||||
def update_from_cloudformation_json(
|
||||
cls, original_resource, new_resource_name, cloudformation_json, region_name
|
||||
):
|
||||
cls.delete_from_cloudformation_json(
|
||||
original_resource.name, cloudformation_json, region_name)
|
||||
return cls.create_from_cloudformation_json(new_resource_name, cloudformation_json, region_name)
|
||||
original_resource.name, cloudformation_json, region_name
|
||||
)
|
||||
return cls.create_from_cloudformation_json(
|
||||
new_resource_name, cloudformation_json, region_name
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def delete_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
def delete_from_cloudformation_json(
|
||||
cls, resource_name, cloudformation_json, region_name
|
||||
):
|
||||
# this will break if you changed the zone the record is in,
|
||||
# unfortunately
|
||||
properties = cloudformation_json['Properties']
|
||||
properties = cloudformation_json["Properties"]
|
||||
|
||||
zone_name = properties.get("HostedZoneName")
|
||||
if zone_name:
|
||||
hosted_zone = route53_backend.get_hosted_zone_by_name(zone_name)
|
||||
else:
|
||||
hosted_zone = route53_backend.get_hosted_zone(
|
||||
properties["HostedZoneId"])
|
||||
hosted_zone = route53_backend.get_hosted_zone(properties["HostedZoneId"])
|
||||
|
||||
try:
|
||||
hosted_zone.delete_rrset({'Name': resource_name})
|
||||
hosted_zone.delete_rrset({"Name": resource_name})
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
|
@ -129,7 +138,8 @@ class RecordSet(BaseModel):
|
|||
return self.name
|
||||
|
||||
def to_xml(self):
|
||||
template = Template("""<ResourceRecordSet>
|
||||
template = Template(
|
||||
"""<ResourceRecordSet>
|
||||
<Name>{{ record_set.name }}</Name>
|
||||
<Type>{{ record_set.type_ }}</Type>
|
||||
{% if record_set.set_identifier %}
|
||||
|
|
@ -162,26 +172,25 @@ class RecordSet(BaseModel):
|
|||
{% if record_set.health_check %}
|
||||
<HealthCheckId>{{ record_set.health_check }}</HealthCheckId>
|
||||
{% endif %}
|
||||
</ResourceRecordSet>""")
|
||||
</ResourceRecordSet>"""
|
||||
)
|
||||
return template.render(record_set=self)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
''' Not exposed as part of the Route 53 API - used for CloudFormation. args are ignored '''
|
||||
hosted_zone = route53_backend.get_hosted_zone_by_name(
|
||||
self.hosted_zone_name)
|
||||
""" Not exposed as part of the Route 53 API - used for CloudFormation. args are ignored """
|
||||
hosted_zone = route53_backend.get_hosted_zone_by_name(self.hosted_zone_name)
|
||||
if not hosted_zone:
|
||||
hosted_zone = route53_backend.get_hosted_zone(self.hosted_zone_id)
|
||||
hosted_zone.delete_rrset({'Name': self.name, 'Type': self.type_})
|
||||
hosted_zone.delete_rrset({"Name": self.name, "Type": self.type_})
|
||||
|
||||
|
||||
def reverse_domain_name(domain_name):
|
||||
if domain_name.endswith('.'): # normalize without trailing dot
|
||||
if domain_name.endswith("."): # normalize without trailing dot
|
||||
domain_name = domain_name[:-1]
|
||||
return '.'.join(reversed(domain_name.split('.')))
|
||||
return ".".join(reversed(domain_name.split(".")))
|
||||
|
||||
|
||||
class FakeZone(BaseModel):
|
||||
|
||||
def __init__(self, name, id_, private_zone, comment=None):
|
||||
self.name = name
|
||||
self.id = id_
|
||||
|
|
@ -198,7 +207,11 @@ class FakeZone(BaseModel):
|
|||
def upsert_rrset(self, record_set):
|
||||
new_rrset = RecordSet(record_set)
|
||||
for i, rrset in enumerate(self.rrsets):
|
||||
if rrset.name == new_rrset.name and rrset.type_ == new_rrset.type_ and rrset.set_identifier == new_rrset.set_identifier:
|
||||
if (
|
||||
rrset.name == new_rrset.name
|
||||
and rrset.type_ == new_rrset.type_
|
||||
and rrset.set_identifier == new_rrset.set_identifier
|
||||
):
|
||||
self.rrsets[i] = new_rrset
|
||||
break
|
||||
else:
|
||||
|
|
@ -209,13 +222,16 @@ class FakeZone(BaseModel):
|
|||
self.rrsets = [
|
||||
record_set
|
||||
for record_set in self.rrsets
|
||||
if record_set.name != rrset['Name'] or
|
||||
(rrset.get('Type') is not None and record_set.type_ != rrset['Type'])
|
||||
if record_set.name != rrset["Name"]
|
||||
or (rrset.get("Type") is not None and record_set.type_ != rrset["Type"])
|
||||
]
|
||||
|
||||
def delete_rrset_by_id(self, set_identifier):
|
||||
self.rrsets = [
|
||||
record_set for record_set in self.rrsets if record_set.set_identifier != set_identifier]
|
||||
record_set
|
||||
for record_set in self.rrsets
|
||||
if record_set.set_identifier != set_identifier
|
||||
]
|
||||
|
||||
def get_record_sets(self, start_type, start_name):
|
||||
record_sets = list(self.rrsets) # Copy the list
|
||||
|
|
@ -223,11 +239,15 @@ class FakeZone(BaseModel):
|
|||
record_sets = [
|
||||
record_set
|
||||
for record_set in record_sets
|
||||
if reverse_domain_name(record_set.name) >= reverse_domain_name(start_name)
|
||||
if reverse_domain_name(record_set.name)
|
||||
>= reverse_domain_name(start_name)
|
||||
]
|
||||
if start_type:
|
||||
record_sets = [
|
||||
record_set for record_set in record_sets if record_set.type_ >= start_type]
|
||||
record_set
|
||||
for record_set in record_sets
|
||||
if record_set.type_ >= start_type
|
||||
]
|
||||
|
||||
return record_sets
|
||||
|
||||
|
|
@ -236,17 +256,17 @@ class FakeZone(BaseModel):
|
|||
return self.id
|
||||
|
||||
@classmethod
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
properties = cloudformation_json['Properties']
|
||||
def create_from_cloudformation_json(
|
||||
cls, resource_name, cloudformation_json, region_name
|
||||
):
|
||||
properties = cloudformation_json["Properties"]
|
||||
name = properties["Name"]
|
||||
|
||||
hosted_zone = route53_backend.create_hosted_zone(
|
||||
name, private_zone=False)
|
||||
hosted_zone = route53_backend.create_hosted_zone(name, private_zone=False)
|
||||
return hosted_zone
|
||||
|
||||
|
||||
class RecordSetGroup(BaseModel):
|
||||
|
||||
def __init__(self, hosted_zone_id, record_sets):
|
||||
self.hosted_zone_id = hosted_zone_id
|
||||
self.record_sets = record_sets
|
||||
|
|
@ -256,8 +276,10 @@ class RecordSetGroup(BaseModel):
|
|||
return "arn:aws:route53:::hostedzone/{0}".format(self.hosted_zone_id)
|
||||
|
||||
@classmethod
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
properties = cloudformation_json['Properties']
|
||||
def create_from_cloudformation_json(
|
||||
cls, resource_name, cloudformation_json, region_name
|
||||
):
|
||||
properties = cloudformation_json["Properties"]
|
||||
|
||||
zone_name = properties.get("HostedZoneName")
|
||||
if zone_name:
|
||||
|
|
@ -273,7 +295,6 @@ class RecordSetGroup(BaseModel):
|
|||
|
||||
|
||||
class Route53Backend(BaseBackend):
|
||||
|
||||
def __init__(self):
|
||||
self.zones = {}
|
||||
self.health_checks = {}
|
||||
|
|
@ -281,26 +302,25 @@ class Route53Backend(BaseBackend):
|
|||
|
||||
def create_hosted_zone(self, name, private_zone, comment=None):
|
||||
new_id = create_route53_zone_id()
|
||||
new_zone = FakeZone(
|
||||
name, new_id, private_zone=private_zone, comment=comment)
|
||||
new_zone = FakeZone(name, new_id, private_zone=private_zone, comment=comment)
|
||||
self.zones[new_id] = new_zone
|
||||
return new_zone
|
||||
|
||||
def change_tags_for_resource(self, resource_id, tags):
|
||||
if 'Tag' in tags:
|
||||
if isinstance(tags['Tag'], list):
|
||||
for tag in tags['Tag']:
|
||||
self.resource_tags[resource_id][tag['Key']] = tag['Value']
|
||||
if "Tag" in tags:
|
||||
if isinstance(tags["Tag"], list):
|
||||
for tag in tags["Tag"]:
|
||||
self.resource_tags[resource_id][tag["Key"]] = tag["Value"]
|
||||
else:
|
||||
key, value = (tags['Tag']['Key'], tags['Tag']['Value'])
|
||||
key, value = (tags["Tag"]["Key"], tags["Tag"]["Value"])
|
||||
self.resource_tags[resource_id][key] = value
|
||||
else:
|
||||
if 'Key' in tags:
|
||||
if isinstance(tags['Key'], list):
|
||||
for key in tags['Key']:
|
||||
del(self.resource_tags[resource_id][key])
|
||||
if "Key" in tags:
|
||||
if isinstance(tags["Key"], list):
|
||||
for key in tags["Key"]:
|
||||
del self.resource_tags[resource_id][key]
|
||||
else:
|
||||
del(self.resource_tags[resource_id][tags['Key']])
|
||||
del self.resource_tags[resource_id][tags["Key"]]
|
||||
|
||||
def list_tags_for_resource(self, resource_id):
|
||||
if resource_id in self.resource_tags:
|
||||
|
|
|
|||
|
|
@ -8,23 +8,24 @@ import xmltodict
|
|||
|
||||
|
||||
class Route53(BaseResponse):
|
||||
|
||||
def list_or_create_hostzone_response(self, request, full_url, headers):
|
||||
self.setup_class(request, full_url, headers)
|
||||
|
||||
if request.method == "POST":
|
||||
elements = xmltodict.parse(self.body)
|
||||
if "HostedZoneConfig" in elements["CreateHostedZoneRequest"]:
|
||||
comment = elements["CreateHostedZoneRequest"][
|
||||
"HostedZoneConfig"]["Comment"]
|
||||
comment = elements["CreateHostedZoneRequest"]["HostedZoneConfig"][
|
||||
"Comment"
|
||||
]
|
||||
try:
|
||||
# in boto3, this field is set directly in the xml
|
||||
private_zone = elements["CreateHostedZoneRequest"][
|
||||
"HostedZoneConfig"]["PrivateZone"]
|
||||
"HostedZoneConfig"
|
||||
]["PrivateZone"]
|
||||
except KeyError:
|
||||
# if a VPC subsection is only included in xmls params when private_zone=True,
|
||||
# see boto: boto/route53/connection.py
|
||||
private_zone = 'VPC' in elements["CreateHostedZoneRequest"]
|
||||
private_zone = "VPC" in elements["CreateHostedZoneRequest"]
|
||||
else:
|
||||
comment = None
|
||||
private_zone = False
|
||||
|
|
@ -35,9 +36,7 @@ class Route53(BaseResponse):
|
|||
name += "."
|
||||
|
||||
new_zone = route53_backend.create_hosted_zone(
|
||||
name,
|
||||
comment=comment,
|
||||
private_zone=private_zone,
|
||||
name, comment=comment, private_zone=private_zone
|
||||
)
|
||||
template = Template(CREATE_HOSTED_ZONE_RESPONSE)
|
||||
return 201, headers, template.render(zone=new_zone)
|
||||
|
|
@ -54,9 +53,15 @@ class Route53(BaseResponse):
|
|||
dnsname = query_params.get("dnsname")
|
||||
|
||||
if dnsname:
|
||||
dnsname = dnsname[0] # parse_qs gives us a list, but this parameter doesn't repeat
|
||||
dnsname = dnsname[
|
||||
0
|
||||
] # parse_qs gives us a list, but this parameter doesn't repeat
|
||||
# return all zones with that name (there can be more than one)
|
||||
zones = [zone for zone in route53_backend.get_all_hosted_zones() if zone.name == dnsname]
|
||||
zones = [
|
||||
zone
|
||||
for zone in route53_backend.get_all_hosted_zones()
|
||||
if zone.name == dnsname
|
||||
]
|
||||
else:
|
||||
# sort by names, but with domain components reversed
|
||||
# see http://boto3.readthedocs.io/en/latest/reference/services/route53.html#Route53.Client.list_hosted_zones_by_name
|
||||
|
|
@ -76,7 +81,7 @@ class Route53(BaseResponse):
|
|||
def get_or_delete_hostzone_response(self, request, full_url, headers):
|
||||
self.setup_class(request, full_url, headers)
|
||||
parsed_url = urlparse(full_url)
|
||||
zoneid = parsed_url.path.rstrip('/').rsplit('/', 1)[1]
|
||||
zoneid = parsed_url.path.rstrip("/").rsplit("/", 1)[1]
|
||||
the_zone = route53_backend.get_hosted_zone(zoneid)
|
||||
if not the_zone:
|
||||
return 404, headers, "Zone %s not Found" % zoneid
|
||||
|
|
@ -95,7 +100,7 @@ class Route53(BaseResponse):
|
|||
parsed_url = urlparse(full_url)
|
||||
method = request.method
|
||||
|
||||
zoneid = parsed_url.path.rstrip('/').rsplit('/', 2)[1]
|
||||
zoneid = parsed_url.path.rstrip("/").rsplit("/", 2)[1]
|
||||
the_zone = route53_backend.get_hosted_zone(zoneid)
|
||||
if not the_zone:
|
||||
return 404, headers, "Zone %s Not Found" % zoneid
|
||||
|
|
@ -103,46 +108,55 @@ class Route53(BaseResponse):
|
|||
if method == "POST":
|
||||
elements = xmltodict.parse(self.body)
|
||||
|
||||
change_list = elements['ChangeResourceRecordSetsRequest'][
|
||||
'ChangeBatch']['Changes']['Change']
|
||||
change_list = elements["ChangeResourceRecordSetsRequest"]["ChangeBatch"][
|
||||
"Changes"
|
||||
]["Change"]
|
||||
if not isinstance(change_list, list):
|
||||
change_list = [elements['ChangeResourceRecordSetsRequest'][
|
||||
'ChangeBatch']['Changes']['Change']]
|
||||
change_list = [
|
||||
elements["ChangeResourceRecordSetsRequest"]["ChangeBatch"][
|
||||
"Changes"
|
||||
]["Change"]
|
||||
]
|
||||
|
||||
for value in change_list:
|
||||
action = value['Action']
|
||||
record_set = value['ResourceRecordSet']
|
||||
action = value["Action"]
|
||||
record_set = value["ResourceRecordSet"]
|
||||
|
||||
cleaned_record_name = record_set['Name'].strip('.')
|
||||
cleaned_hosted_zone_name = the_zone.name.strip('.')
|
||||
cleaned_record_name = record_set["Name"].strip(".")
|
||||
cleaned_hosted_zone_name = the_zone.name.strip(".")
|
||||
|
||||
if not cleaned_record_name.endswith(cleaned_hosted_zone_name):
|
||||
error_msg = """
|
||||
An error occurred (InvalidChangeBatch) when calling the ChangeResourceRecordSets operation:
|
||||
RRSet with DNS name %s is not permitted in zone %s
|
||||
""" % (record_set['Name'], the_zone.name)
|
||||
""" % (
|
||||
record_set["Name"],
|
||||
the_zone.name,
|
||||
)
|
||||
return 400, headers, error_msg
|
||||
|
||||
if not record_set['Name'].endswith('.'):
|
||||
record_set['Name'] += '.'
|
||||
if not record_set["Name"].endswith("."):
|
||||
record_set["Name"] += "."
|
||||
|
||||
if action in ('CREATE', 'UPSERT'):
|
||||
if 'ResourceRecords' in record_set:
|
||||
resource_records = list(
|
||||
record_set['ResourceRecords'].values())[0]
|
||||
if action in ("CREATE", "UPSERT"):
|
||||
if "ResourceRecords" in record_set:
|
||||
resource_records = list(record_set["ResourceRecords"].values())[
|
||||
0
|
||||
]
|
||||
if not isinstance(resource_records, list):
|
||||
# Depending on how many records there are, this may
|
||||
# or may not be a list
|
||||
resource_records = [resource_records]
|
||||
record_set['ResourceRecords'] = [x['Value'] for x in resource_records]
|
||||
if action == 'CREATE':
|
||||
record_set["ResourceRecords"] = [
|
||||
x["Value"] for x in resource_records
|
||||
]
|
||||
if action == "CREATE":
|
||||
the_zone.add_rrset(record_set)
|
||||
else:
|
||||
the_zone.upsert_rrset(record_set)
|
||||
elif action == "DELETE":
|
||||
if 'SetIdentifier' in record_set:
|
||||
the_zone.delete_rrset_by_id(
|
||||
record_set["SetIdentifier"])
|
||||
if "SetIdentifier" in record_set:
|
||||
the_zone.delete_rrset_by_id(record_set["SetIdentifier"])
|
||||
else:
|
||||
the_zone.delete_rrset(record_set)
|
||||
|
||||
|
|
@ -163,20 +177,20 @@ class Route53(BaseResponse):
|
|||
method = request.method
|
||||
|
||||
if method == "POST":
|
||||
properties = xmltodict.parse(self.body)['CreateHealthCheckRequest'][
|
||||
'HealthCheckConfig']
|
||||
properties = xmltodict.parse(self.body)["CreateHealthCheckRequest"][
|
||||
"HealthCheckConfig"
|
||||
]
|
||||
health_check_args = {
|
||||
"ip_address": properties.get('IPAddress'),
|
||||
"port": properties.get('Port'),
|
||||
"type": properties['Type'],
|
||||
"resource_path": properties.get('ResourcePath'),
|
||||
"fqdn": properties.get('FullyQualifiedDomainName'),
|
||||
"search_string": properties.get('SearchString'),
|
||||
"request_interval": properties.get('RequestInterval'),
|
||||
"failure_threshold": properties.get('FailureThreshold'),
|
||||
"ip_address": properties.get("IPAddress"),
|
||||
"port": properties.get("Port"),
|
||||
"type": properties["Type"],
|
||||
"resource_path": properties.get("ResourcePath"),
|
||||
"fqdn": properties.get("FullyQualifiedDomainName"),
|
||||
"search_string": properties.get("SearchString"),
|
||||
"request_interval": properties.get("RequestInterval"),
|
||||
"failure_threshold": properties.get("FailureThreshold"),
|
||||
}
|
||||
health_check = route53_backend.create_health_check(
|
||||
health_check_args)
|
||||
health_check = route53_backend.create_health_check(health_check_args)
|
||||
template = Template(CREATE_HEALTH_CHECK_RESPONSE)
|
||||
return 201, headers, template.render(health_check=health_check)
|
||||
elif method == "DELETE":
|
||||
|
|
@ -191,13 +205,14 @@ class Route53(BaseResponse):
|
|||
def not_implemented_response(self, request, full_url, headers):
|
||||
self.setup_class(request, full_url, headers)
|
||||
|
||||
action = ''
|
||||
if 'tags' in full_url:
|
||||
action = 'tags'
|
||||
elif 'trafficpolicyinstances' in full_url:
|
||||
action = 'policies'
|
||||
action = ""
|
||||
if "tags" in full_url:
|
||||
action = "tags"
|
||||
elif "trafficpolicyinstances" in full_url:
|
||||
action = "policies"
|
||||
raise NotImplementedError(
|
||||
"The action for {0} has not been implemented for route 53".format(action))
|
||||
"The action for {0} has not been implemented for route 53".format(action)
|
||||
)
|
||||
|
||||
def list_or_change_tags_for_resource_request(self, request, full_url, headers):
|
||||
self.setup_class(request, full_url, headers)
|
||||
|
|
@ -209,17 +224,19 @@ class Route53(BaseResponse):
|
|||
if request.method == "GET":
|
||||
tags = route53_backend.list_tags_for_resource(id_)
|
||||
template = Template(LIST_TAGS_FOR_RESOURCE_RESPONSE)
|
||||
return 200, headers, template.render(
|
||||
resource_type=type_, resource_id=id_, tags=tags)
|
||||
return (
|
||||
200,
|
||||
headers,
|
||||
template.render(resource_type=type_, resource_id=id_, tags=tags),
|
||||
)
|
||||
|
||||
if request.method == "POST":
|
||||
tags = xmltodict.parse(
|
||||
self.body)['ChangeTagsForResourceRequest']
|
||||
tags = xmltodict.parse(self.body)["ChangeTagsForResourceRequest"]
|
||||
|
||||
if 'AddTags' in tags:
|
||||
tags = tags['AddTags']
|
||||
elif 'RemoveTagKeys' in tags:
|
||||
tags = tags['RemoveTagKeys']
|
||||
if "AddTags" in tags:
|
||||
tags = tags["AddTags"]
|
||||
elif "RemoveTagKeys" in tags:
|
||||
tags = tags["RemoveTagKeys"]
|
||||
|
||||
route53_backend.change_tags_for_resource(id_, tags)
|
||||
template = Template(CHANGE_TAGS_FOR_RESOURCE_RESPONSE)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
from __future__ import unicode_literals
|
||||
from .responses import Route53
|
||||
|
||||
url_bases = [
|
||||
"https?://route53(.*).amazonaws.com",
|
||||
]
|
||||
url_bases = ["https?://route53(.*).amazonaws.com"]
|
||||
|
||||
|
||||
def tag_response1(*args, **kwargs):
|
||||
|
|
@ -15,12 +13,12 @@ def tag_response2(*args, **kwargs):
|
|||
|
||||
|
||||
url_paths = {
|
||||
'{0}/(?P<api_version>[\d_-]+)/hostedzone$': Route53().list_or_create_hostzone_response,
|
||||
'{0}/(?P<api_version>[\d_-]+)/hostedzone/(?P<zone_id>[^/]+)$': Route53().get_or_delete_hostzone_response,
|
||||
'{0}/(?P<api_version>[\d_-]+)/hostedzone/(?P<zone_id>[^/]+)/rrset/?$': Route53().rrset_response,
|
||||
'{0}/(?P<api_version>[\d_-]+)/hostedzonesbyname': Route53().list_hosted_zones_by_name_response,
|
||||
'{0}/(?P<api_version>[\d_-]+)/healthcheck': Route53().health_check_response,
|
||||
'{0}/(?P<api_version>[\d_-]+)/tags/healthcheck/(?P<zone_id>[^/]+)$': tag_response1,
|
||||
'{0}/(?P<api_version>[\d_-]+)/tags/hostedzone/(?P<zone_id>[^/]+)$': tag_response2,
|
||||
'{0}/(?P<api_version>[\d_-]+)/trafficpolicyinstances/*': Route53().not_implemented_response
|
||||
"{0}/(?P<api_version>[\d_-]+)/hostedzone$": Route53().list_or_create_hostzone_response,
|
||||
"{0}/(?P<api_version>[\d_-]+)/hostedzone/(?P<zone_id>[^/]+)$": Route53().get_or_delete_hostzone_response,
|
||||
"{0}/(?P<api_version>[\d_-]+)/hostedzone/(?P<zone_id>[^/]+)/rrset/?$": Route53().rrset_response,
|
||||
"{0}/(?P<api_version>[\d_-]+)/hostedzonesbyname": Route53().list_hosted_zones_by_name_response,
|
||||
"{0}/(?P<api_version>[\d_-]+)/healthcheck": Route53().health_check_response,
|
||||
"{0}/(?P<api_version>[\d_-]+)/tags/healthcheck/(?P<zone_id>[^/]+)$": tag_response1,
|
||||
"{0}/(?P<api_version>[\d_-]+)/tags/hostedzone/(?P<zone_id>[^/]+)$": tag_response2,
|
||||
"{0}/(?P<api_version>[\d_-]+)/trafficpolicyinstances/*": Route53().not_implemented_response,
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue