Skip to content

Commit bac9874

Browse files
committed
fix: support fqdn record names
Currently we append the hostedZoneName to the RecordSet at create. If the recordSet name is fqdn, we want to avoid doing so. With this change, the hostedZoneName will not be appended to an FQDN
1 parent 20483b9 commit bac9874

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

pkg/resource/record_set/hooks.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,13 @@ func (rm *resourceManager) getDNSName(
317317
domain string,
318318
) (dnsName string) {
319319
if r.ko.Spec.Name != nil {
320-
dnsName += *r.ko.Spec.Name + "."
320+
dnsName = *r.ko.Spec.Name
321+
}
322+
323+
if strings.HasSuffix(dnsName, ".") {
324+
return dnsName
325+
} else if len(dnsName) > 0 {
326+
dnsName += "."
321327
}
322328
dnsName += domain
323329
return dnsName
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: route53.services.k8s.aws/v1alpha1
2+
kind: RecordSet
3+
metadata:
4+
name: $FQDN_RECORD_NAME
5+
spec:
6+
name: $FQDN_RECORD_NAME_SPEC
7+
hostedZoneID: $HOSTED_ZONE_ID
8+
recordType: A
9+
resourceRecords:
10+
- value: $IP_ADDR
11+
ttl: 300

test/e2e/tests/test_record_set.py

+42
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,30 @@ def simple_record_set(private_hosted_zone):
7474

7575
delete_route53_resource(ref)
7676

77+
@pytest.fixture(scope="function")
78+
def fqdn_record_set(private_hosted_zone):
79+
zone_id, domain = private_hosted_zone
80+
parsed_zone_id = zone_id.split("/")[-1]
81+
ip_address = socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
82+
simple_record_name = random_suffix_name("simple-record-name", 32)
83+
84+
replacements = REPLACEMENT_VALUES.copy()
85+
replacements["FQDN_RECORD_NAME"] = simple_record_name
86+
replacements["FQDN_RECORD_NAME_SPEC"] = simple_record_name+"hello-world.example.com."
87+
replacements["HOSTED_ZONE_ID"] = parsed_zone_id
88+
replacements["IP_ADDR"] = ip_address
89+
90+
ref, cr = create_route53_resource(
91+
"recordsets",
92+
simple_record_name,
93+
"record_set_fqdn",
94+
replacements
95+
)
96+
97+
yield ref, cr
98+
99+
delete_route53_resource(ref)
100+
77101
def status_id_exists(ref):
78102
for _ in range(STATUS_UPDATE_RETRY_COUNT):
79103
record = get_route53_resource(ref)
@@ -131,3 +155,21 @@ def test_crud_simple_record(self, route53_client, private_hosted_zone, simple_re
131155

132156
# Check record set has been updated in AWS
133157
route53_validator.assert_record_set(updated, domain)
158+
159+
160+
def test_cd_fqdn_record(self, route53_client, private_hosted_zone, fqdn_record_set):
161+
zone_id, domain = private_hosted_zone
162+
assert zone_id
163+
164+
# Check hosted zone exists in AWS
165+
route53_validator = Route53Validator(route53_client)
166+
route53_validator.assert_hosted_zone(zone_id)
167+
168+
ref, cr = fqdn_record_set
169+
assert status_id_exists(ref) is True
170+
171+
# Check record set exists in AWS
172+
route53_validator.assert_record_set(cr, domain)
173+
174+
# Ensure that the status eventually switches from PENDING to INSYNC
175+
assert verify_status_insync(ref) is True

0 commit comments

Comments
 (0)