mirror of
https://github.com/ansible-collections/hetzner.hcloud.git
synced 2026-02-03 23:51:48 +00:00
fix: zone rrset idempotency (#737)
##### SUMMARY - The order of dns records is not guaranteed, this ensure the module is idempotent. - The API defaults to an empty string when comments are not set, ensure the module is idempotent when no comments are given. ##### ISSUE TYPE - Bugfix Closes #740
This commit is contained in:
parent
f87c23629b
commit
79f78fae28
4 changed files with 20 additions and 9 deletions
3
changelogs/fragments/zone-rrsets-idempotency.yml
Normal file
3
changelogs/fragments/zone-rrsets-idempotency.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
bugfixes:
|
||||
- zone_rrset - Records order is not guaranteed, the module will not generate a diff if the order of records changes.
|
||||
- zone_rrset - Records without comments will not generate a diff anymore.
|
||||
|
|
@ -199,7 +199,7 @@ class AnsibleHCloudZoneRRSet(AnsibleHCloud):
|
|||
def _prepare_result_record(self, record: ZoneRecord):
|
||||
return {
|
||||
"value": record.value,
|
||||
"comment": record.comment,
|
||||
"comment": record.comment or "", # API defaults to "", this ensure idempotency
|
||||
}
|
||||
|
||||
def _get(self):
|
||||
|
|
@ -321,6 +321,9 @@ class AnsibleHCloudZoneRRSet(AnsibleHCloud):
|
|||
current = [self._prepare_result_record(o) for o in self.hcloud_zone_rrset.records]
|
||||
wanted = [self._prepare_result_record(ZoneRecord.from_dict(o)) for o in self.module.params.get("records")]
|
||||
|
||||
current = sorted(current, key=lambda x: x["value"])
|
||||
wanted = sorted(wanted, key=lambda x: x["value"])
|
||||
|
||||
return current != wanted
|
||||
|
||||
def present(self):
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ class AnsibleHCloudZoneRRSetInfo(AnsibleHCloud):
|
|||
def _prepare_result_record(self, record: ZoneRecord):
|
||||
return {
|
||||
"value": record.value,
|
||||
"comment": record.comment,
|
||||
"comment": record.comment or "",
|
||||
}
|
||||
|
||||
def get_zone_rrsets(self):
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@
|
|||
key: changed
|
||||
new: value
|
||||
records:
|
||||
- value: 201.118.10.10 # No comment
|
||||
- value: 201.118.10.11
|
||||
comment: web server 1
|
||||
- value: 201.118.10.13
|
||||
|
|
@ -107,11 +108,13 @@
|
|||
- result.hcloud_zone_rrset.labels.key == "changed"
|
||||
- result.hcloud_zone_rrset.labels.new == "value"
|
||||
- result.hcloud_zone_rrset.change_protection == true
|
||||
- result.hcloud_zone_rrset.records | count == 2
|
||||
- result.hcloud_zone_rrset.records[0].value == "201.118.10.11"
|
||||
- result.hcloud_zone_rrset.records[0].comment == "web server 1"
|
||||
- result.hcloud_zone_rrset.records[1].value == "201.118.10.13"
|
||||
- result.hcloud_zone_rrset.records[1].comment == "web server 3"
|
||||
- result.hcloud_zone_rrset.records | count == 3
|
||||
- result.hcloud_zone_rrset.records[0].value == "201.118.10.10"
|
||||
- result.hcloud_zone_rrset.records[0].comment == ""
|
||||
- result.hcloud_zone_rrset.records[1].value == "201.118.10.11"
|
||||
- result.hcloud_zone_rrset.records[1].comment == "web server 1"
|
||||
- result.hcloud_zone_rrset.records[2].value == "201.118.10.13"
|
||||
- result.hcloud_zone_rrset.records[2].comment == "web server 3"
|
||||
|
||||
- name: Test update idempotency
|
||||
hetzner.hcloud.zone_rrset:
|
||||
|
|
@ -123,10 +126,12 @@
|
|||
key: changed
|
||||
new: value
|
||||
records:
|
||||
- value: 201.118.10.11
|
||||
comment: web server 1
|
||||
- value: 201.118.10.10 # No comment
|
||||
# Order is not guaranteed, should still be idempotent
|
||||
- value: 201.118.10.13
|
||||
comment: web server 3
|
||||
- value: 201.118.10.11
|
||||
comment: web server 1
|
||||
change_protection: true
|
||||
register: result
|
||||
- name: Verify update idempotency
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue