Route53: add CallerReference to the GetHostedZone response (#6911)
This commit is contained in:
parent
368fa07ec3
commit
00cce90984
@ -4,6 +4,8 @@ import itertools
|
||||
import re
|
||||
import string
|
||||
from collections import defaultdict
|
||||
from datetime import datetime
|
||||
|
||||
from jinja2 import Template
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
@ -36,6 +38,12 @@ def create_route53_zone_id() -> str:
|
||||
return "".join([random.choice(ROUTE53_ID_CHOICE) for _ in range(0, 15)])
|
||||
|
||||
|
||||
def create_route53_caller_reference() -> str:
|
||||
timestamp = datetime.now().strftime("%H:%M:%S.%f")
|
||||
random_string = "".join(random.choice(string.ascii_letters) for _ in range(6))
|
||||
return f"{random_string} {timestamp}"
|
||||
|
||||
|
||||
class DelegationSet(BaseModel):
|
||||
def __init__(
|
||||
self,
|
||||
@ -310,6 +318,7 @@ class FakeZone(CloudFormationModel):
|
||||
name: str,
|
||||
id_: str,
|
||||
private_zone: bool,
|
||||
caller_reference: str,
|
||||
comment: Optional[str] = None,
|
||||
delegation_set: Optional[DelegationSet] = None,
|
||||
):
|
||||
@ -318,6 +327,7 @@ class FakeZone(CloudFormationModel):
|
||||
self.vpcs: List[Dict[str, Any]] = []
|
||||
if comment is not None:
|
||||
self.comment = comment
|
||||
self.caller_reference = caller_reference
|
||||
self.private_zone = private_zone
|
||||
self.rrsets: List[RecordSet] = []
|
||||
self.delegation_set = delegation_set
|
||||
@ -503,12 +513,14 @@ class Route53Backend(BaseBackend):
|
||||
self,
|
||||
name: str,
|
||||
private_zone: bool,
|
||||
caller_reference: Optional[str] = None,
|
||||
vpcid: Optional[str] = None,
|
||||
vpcregion: Optional[str] = None,
|
||||
comment: Optional[str] = None,
|
||||
delegation_set_id: Optional[str] = None,
|
||||
) -> FakeZone:
|
||||
new_id = create_route53_zone_id()
|
||||
caller_reference = caller_reference or create_route53_caller_reference()
|
||||
delegation_set = self.create_reusable_delegation_set(
|
||||
caller_reference=f"DelSet_{name}", delegation_set_id=delegation_set_id
|
||||
)
|
||||
@ -518,6 +530,7 @@ class Route53Backend(BaseBackend):
|
||||
new_zone = FakeZone(
|
||||
name,
|
||||
new_id,
|
||||
caller_reference=caller_reference,
|
||||
private_zone=private_zone,
|
||||
comment=comment,
|
||||
delegation_set=delegation_set,
|
||||
|
@ -66,6 +66,7 @@ class Route53(BaseResponse):
|
||||
vpcregion = zone_request["VPC"].get("VPCRegion", None)
|
||||
|
||||
name = zone_request["Name"]
|
||||
caller_reference = zone_request["CallerReference"]
|
||||
|
||||
if name[-1] != ".":
|
||||
name += "."
|
||||
@ -75,6 +76,7 @@ class Route53(BaseResponse):
|
||||
name,
|
||||
comment=comment,
|
||||
private_zone=private_zone,
|
||||
caller_reference=caller_reference,
|
||||
vpcid=vpcid,
|
||||
vpcregion=vpcregion,
|
||||
delegation_set_id=delegation_set_id,
|
||||
@ -619,6 +621,7 @@ GET_HOSTED_ZONE_RESPONSE = """<GetHostedZoneResponse xmlns="https://route53.amaz
|
||||
<HostedZone>
|
||||
<Id>/hostedzone/{{ zone.id }}</Id>
|
||||
<Name>{{ zone.name }}</Name>
|
||||
<CallerReference>{{ zone.caller_reference }}</CallerReference>
|
||||
<ResourceRecordSetCount>{{ zone.rrsets|count }}</ResourceRecordSetCount>
|
||||
<Config>
|
||||
{% if zone.comment %}
|
||||
|
@ -32,6 +32,19 @@ def test_create_hosted_zone():
|
||||
assert "<Name>testdns.aws.com.</Name>" in requests.get(location).text
|
||||
|
||||
|
||||
@mock_route53
|
||||
def test_get_hosted_zone():
|
||||
conn = boto3.client("route53", region_name="us-east-1")
|
||||
name = "testdns.aws.com."
|
||||
caller_ref = str(hash("foo"))
|
||||
|
||||
zone = conn.create_hosted_zone(Name=name, CallerReference=caller_ref)["HostedZone"]
|
||||
|
||||
res = conn.get_hosted_zone(Id=zone["Id"])
|
||||
assert res["HostedZone"]["Name"] == name
|
||||
assert res["HostedZone"]["CallerReference"] == caller_ref
|
||||
|
||||
|
||||
@mock_route53
|
||||
def test_list_hosted_zones():
|
||||
conn = boto3.client("route53", region_name="us-east-1")
|
||||
|
Loading…
Reference in New Issue
Block a user