From 2a461cadd9df247499d18d4e85471938e217dd35 Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Thu, 20 May 2021 14:08:13 +0200 Subject: [PATCH] Switch ServerMetadata module to OpenStackModule Switch ServerMetadata module to the general OpenStackModule. Change-Id: If3f3086a964c47407ec82dda662d2c1524283fb6 --- plugins/modules/server_metadata.py | 91 ++++++++++++++---------------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/plugins/modules/server_metadata.py b/plugins/modules/server_metadata.py index acc16d31..a1207e3b 100644 --- a/plugins/modules/server_metadata.py +++ b/plugins/modules/server_metadata.py @@ -93,77 +93,72 @@ metadata: sample: {'key1': 'value1', 'key2': 'value2'} ''' -from ansible.module_utils.basic import AnsibleModule -from ansible_collections.openstack.cloud.plugins.module_utils.openstack import ( - openstack_full_argument_spec, - openstack_module_kwargs, - openstack_cloud_from_module, -) +from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule -def _needs_update(server_metadata=None, metadata=None): - if server_metadata is None: - server_metadata = {} - if metadata is None: - metadata = {} - return len(set(metadata.items()) - set(server_metadata.items())) != 0 - - -def _get_keys_to_delete(server_metadata_keys=None, metadata_keys=None): - if server_metadata_keys is None: - server_metadata_keys = [] - if metadata_keys is None: - metadata_keys = [] - return set(server_metadata_keys) & set(metadata_keys) - - -def main(): - argument_spec = openstack_full_argument_spec( +class ServerMetadataModule(OpenStackModule): + argument_spec = dict( server=dict(required=True, aliases=['name']), meta=dict(required=True, type='dict'), state=dict(default='present', choices=['absent', 'present']), ) - module_kwargs = openstack_module_kwargs() - module = AnsibleModule(argument_spec, - supports_check_mode=True, - **module_kwargs) + module_kwargs = dict( + supports_check_mode=True + ) - state = module.params['state'] - server_param = module.params['server'] - meta_param = module.params['meta'] - changed = False + def _needs_update(self, server_metadata=None, metadata=None): + if server_metadata is None: + server_metadata = {} + if metadata is None: + metadata = {} + return len(set(metadata.items()) - set(server_metadata.items())) != 0 - sdk, cloud = openstack_cloud_from_module(module) - try: - server = cloud.get_server(server_param) + def _get_keys_to_delete(self, server_metadata_keys=None, metadata_keys=None): + if server_metadata_keys is None: + server_metadata_keys = [] + if metadata_keys is None: + metadata_keys = [] + return set(server_metadata_keys) & set(metadata_keys) + + def run(self): + state = self.params['state'] + server_param = self.params['server'] + meta_param = self.params['meta'] + changed = False + + server = self.conn.get_server(server_param) if not server: - module.fail_json( + self.fail_json( msg='Could not find server {0}'.format(server_param)) if state == 'present': # check if it needs update - if _needs_update(server_metadata=server.metadata, - metadata=meta_param): - if not module.check_mode: - cloud.set_server_metadata(server_param, meta_param) + if self._needs_update( + server_metadata=server.metadata, metadata=meta_param + ): + if not self.ansible.check_mode: + self.conn.set_server_metadata(server_param, meta_param) changed = True elif state == 'absent': # remove from params the keys that do not exist in the server - keys_to_delete = _get_keys_to_delete(server.metadata.keys(), - meta_param.keys()) + keys_to_delete = self._get_keys_to_delete( + server.metadata.keys(), meta_param.keys()) if len(keys_to_delete) > 0: - if not module.check_mode: - cloud.delete_server_metadata(server_param, keys_to_delete) + if not self.ansible.check_mode: + self.conn.delete_server_metadata( + server_param, keys_to_delete) changed = True if changed: - server = cloud.get_server(server_param) + server = self.conn.get_server(server_param) - module.exit_json( + self.exit_json( changed=changed, server_id=server.id, metadata=server.metadata) - except sdk.exceptions.OpenStackCloudException as e: - module.fail_json(msg=e.message, extra_data=e.extra_data) + +def main(): + module = ServerMetadataModule() + module() if __name__ == '__main__':