Route53: add CallerReference to the GetHostedZone response (#6911)

This commit is contained in:
Giovanni Grano 2023-10-15 17:39:27 -04:00 committed by GitHub
parent 368fa07ec3
commit 00cce90984
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 0 deletions

View File

@ -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,

View File

@ -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 %}

View File

@ -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")