Switch Recordset module to OpenStackModule

Switch dns.recordset module to the general OpenStackModule.

Change-Id: I858880834acce6112eadd7e78e339f39b7c455da
This commit is contained in:
Artem Goncharov 2021-05-20 14:42:40 +02:00
parent 6b3bf3bba0
commit a32cff23c7

View File

@ -122,13 +122,30 @@ recordset:
sample: ['10.0.0.1'] sample: ['10.0.0.1']
''' '''
from ansible.module_utils.basic import AnsibleModule from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import (openstack_full_argument_spec,
openstack_module_kwargs,
openstack_cloud_from_module)
def _system_state_change(state, records, description, ttl, recordset): class DnsRecordsetModule(OpenStackModule):
argument_spec = dict(
zone=dict(required=True),
name=dict(required=True),
recordset_type=dict(required=False, choices=['a', 'aaaa', 'mx', 'cname', 'txt', 'ns', 'srv', 'ptr', 'caa']),
records=dict(required=False, type='list', elements='str'),
description=dict(required=False, default=None),
ttl=dict(required=False, type='int'),
state=dict(default='present', choices=['absent', 'present']),
)
module_kwargs = dict(
required_if=[
('state', 'present',
['recordset_type', 'records'])],
supports_check_mode=True
)
module_min_sdk_version = '0.28.0'
def _system_state_change(self, state, records, description, ttl, recordset):
if state == 'present': if state == 'present':
if recordset is None: if recordset is None:
return True return True
@ -142,59 +159,38 @@ def _system_state_change(state, records, description, ttl, recordset):
return True return True
return False return False
def run(self):
zone = self.params.get('zone')
name = self.params.get('name')
state = self.params.get('state')
def main(): recordsets = self.conn.search_recordsets(zone, name_or_id=name)
argument_spec = openstack_full_argument_spec(
zone=dict(required=True),
name=dict(required=True),
recordset_type=dict(required=False, choices=['a', 'aaaa', 'mx', 'cname', 'txt', 'ns', 'srv', 'ptr', 'caa']),
records=dict(required=False, type='list', elements='str'),
description=dict(required=False, default=None),
ttl=dict(required=False, type='int'),
state=dict(default='present', choices=['absent', 'present']),
)
module_kwargs = openstack_module_kwargs()
module = AnsibleModule(argument_spec,
required_if=[
('state', 'present',
['recordset_type', 'records'])],
supports_check_mode=True,
**module_kwargs)
module.module_min_sdk_version = '0.28.0'
zone = module.params.get('zone')
name = module.params.get('name')
state = module.params.get('state')
sdk, cloud = openstack_cloud_from_module(module)
recordsets = cloud.search_recordsets(zone, name_or_id=name)
if recordsets: if recordsets:
recordset = recordsets[0] recordset = recordsets[0]
try: try:
recordset_id = recordset['id'] recordset_id = recordset['id']
except KeyError as e: except KeyError as e:
module.fail_json(msg=str(e)) self.fail_json(msg=str(e))
else: else:
# recordsets is filtered by type and should never be more than 1 return # recordsets is filtered by type and should never be more than 1 return
recordset = None recordset = None
if state == 'present': if state == 'present':
recordset_type = module.params.get('recordset_type').upper() recordset_type = self.params.get('recordset_type').upper()
records = module.params.get('records') records = self.params.get('records')
description = module.params.get('description') description = self.params.get('description')
ttl = module.params.get('ttl') ttl = self.params.get('ttl')
kwargs = {} kwargs = {}
if description: if description:
kwargs['description'] = description kwargs['description'] = description
kwargs['records'] = records kwargs['records'] = records
if module.check_mode: if self.ansible.check_mode:
module.exit_json(changed=_system_state_change(state, self.exit_json(
records, description, changed=self._system_state_change(
ttl, recordset)) state, records, description, ttl, recordset))
if recordset is None: if recordset is None:
if ttl: if ttl:
@ -202,7 +198,7 @@ def main():
else: else:
kwargs['ttl'] = 300 kwargs['ttl'] = 300
recordset = cloud.create_recordset( recordset = self.conn.create_recordset(
zone=zone, name=name, recordset_type=recordset_type, zone=zone, name=name, recordset_type=recordset_type,
**kwargs) **kwargs)
changed = True changed = True
@ -212,27 +208,30 @@ def main():
kwargs['ttl'] = ttl kwargs['ttl'] = ttl
pre_update_recordset = recordset pre_update_recordset = recordset
changed = _system_state_change(state, records, changed = self._system_state_change(
description, ttl, state, records, description, ttl, pre_update_recordset)
pre_update_recordset)
if changed: if changed:
recordset = cloud.update_recordset( recordset = self.conn.update_recordset(
zone=zone, name_or_id=recordset_id, **kwargs) zone=zone, name_or_id=recordset_id, **kwargs)
module.exit_json(changed=changed, recordset=recordset) self.exit_json(changed=changed, recordset=recordset)
elif state == 'absent': elif state == 'absent':
if module.check_mode: if self.ansible.check_mode:
module.exit_json(changed=_system_state_change(state, self.exit_json(changed=self._system_state_change(
None, None, state, None, None, None, recordset))
None, recordset))
if recordset is None: if recordset is None:
changed = False changed = False
else: else:
cloud.delete_recordset(zone, recordset_id) self.conn.delete_recordset(zone, recordset_id)
changed = True changed = True
module.exit_json(changed=changed) self.exit_json(changed=changed)
def main():
module = DnsRecordsetModule()
module()
if __name__ == '__main__': if __name__ == '__main__':