Switch federation_idp module to OpenStackModule

Change-Id: I9de209373991c8d999b0514549ad5808981441f1
This commit is contained in:
Artem Goncharov
2021-05-20 17:47:13 +02:00
parent 6b3bf3bba0
commit 532857c0b2

View File

@@ -72,13 +72,23 @@ EXAMPLES = '''
RETURN = ''' RETURN = '''
''' '''
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
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import openstack_module_kwargs
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import openstack_cloud_from_module
def normalize_idp(idp): class IdentityFederationIdpModule(OpenStackModule):
argument_spec = dict(
name=dict(required=True, aliases=['id']),
state=dict(default='present', choices=['absent', 'present']),
description=dict(),
domain_id=dict(),
enabled=dict(type='bool', aliases=['is_enabled']),
remote_ids=dict(type='list', elements='str'),
)
module_kwargs = dict(
supports_check_mode=True,
)
def normalize_idp(self, idp):
""" """
Normalizes the IDP definitions so that the outputs are consistent with the Normalizes the IDP definitions so that the outputs are consistent with the
parameters parameters
@@ -94,41 +104,35 @@ def normalize_idp(idp):
_idp['name'] = idp['id'] _idp['name'] = idp['id']
return _idp return _idp
def delete_identity_provider(self, idp):
def delete_identity_provider(module, sdk, cloud, idp):
""" """
Delete an existing Identity Provider Delete an existing Identity Provider
returns: the "Changed" state returns: the "Changed" state
""" """
if idp is None: if idp is None:
return False return False
if module.check_mode: if self.ansible.check_mode:
return True return True
try: self.conn.identity.delete_identity_provider(idp)
cloud.identity.delete_identity_provider(idp)
except sdk.exceptions.OpenStackCloudException as ex:
module.fail_json(msg='Failed to delete identity provider: {0}'.format(str(ex)))
return True return True
def create_identity_provider(self, name):
def create_identity_provider(module, sdk, cloud, name):
""" """
Create a new Identity Provider Create a new Identity Provider
returns: the "Changed" state and the new identity provider returns: the "Changed" state and the new identity provider
""" """
if module.check_mode: if self.ansible.check_mode:
return True, None return True, None
description = module.params.get('description') description = self.params.get('description')
enabled = module.params.get('enabled') enabled = self.params.get('enabled')
domain_id = module.params.get('domain_id') domain_id = self.params.get('domain_id')
remote_ids = module.params.get('remote_ids') remote_ids = self.params.get('remote_ids')
if enabled is None: if enabled is None:
enabled = True enabled = True
@@ -143,24 +147,20 @@ def create_identity_provider(module, sdk, cloud, name):
if description is not None: if description is not None:
attributes['description'] = description attributes['description'] = description
try: idp = self.conn.identity.create_identity_provider(id=name, **attributes)
idp = cloud.identity.create_identity_provider(id=name, **attributes)
except sdk.exceptions.OpenStackCloudException as ex:
module.fail_json(msg='Failed to create identity provider: {0}'.format(str(ex)))
return (True, idp) return (True, idp)
def update_identity_provider(self, idp):
def update_identity_provider(module, sdk, cloud, idp):
""" """
Update an existing Identity Provider Update an existing Identity Provider
returns: the "Changed" state and the new identity provider returns: the "Changed" state and the new identity provider
""" """
description = module.params.get('description') description = self.params.get('description')
enabled = module.params.get('enabled') enabled = self.params.get('enabled')
domain_id = module.params.get('domain_id') domain_id = self.params.get('domain_id')
remote_ids = module.params.get('remote_ids') remote_ids = self.params.get('remote_ids')
attributes = {} attributes = {}
@@ -176,66 +176,44 @@ def update_identity_provider(module, sdk, cloud, idp):
if not attributes: if not attributes:
return False, idp return False, idp
if module.check_mode: if self.ansible.check_mode:
return True, None return True, None
try: new_idp = self.conn.identity.update_identity_provider(idp, **attributes)
new_idp = cloud.identity.update_identity_provider(idp, **attributes)
except sdk.exceptions.OpenStackCloudException as ex:
module.fail_json(msg='Failed to update identity provider: {0}'.format(str(ex)))
return (True, new_idp) return (True, new_idp)
def run(self):
def main():
""" Module entry point """ """ Module entry point """
argument_spec = openstack_full_argument_spec( name = self.params.get('name')
name=dict(required=True, aliases=['id']), state = self.params.get('state')
state=dict(default='present', choices=['absent', 'present']),
description=dict(),
domain_id=dict(),
enabled=dict(type='bool', aliases=['is_enabled']),
remote_ids=dict(type='list', elements='str'),
)
module_kwargs = openstack_module_kwargs(
)
module = AnsibleModule(
argument_spec,
supports_check_mode=True,
**module_kwargs
)
name = module.params.get('name')
state = module.params.get('state')
changed = False changed = False
sdk, cloud = openstack_cloud_from_module(module, min_version="0.44") idp = self.conn.identity.find_identity_provider(name)
try:
idp = cloud.identity.get_identity_provider(name)
except sdk.exceptions.ResourceNotFound:
idp = None
except sdk.exceptions.OpenStackCloudException as ex:
module.fail_json(msg='Failed to get identity provider: {0}'.format(str(ex)))
if state == 'absent': if state == 'absent':
if idp is not None: if idp is not None:
changed = delete_identity_provider(module, sdk, cloud, idp) changed = self.delete_identity_provider(idp)
module.exit_json(changed=changed) self.exit_json(changed=changed)
# state == 'present' # state == 'present'
else: else:
if idp is None: if idp is None:
if module.params.get('domain_id') is None: if self.params.get('domain_id') is None:
module.fail_json(msg='A domain_id must be passed when creating' self.fail_json(msg='A domain_id must be passed when creating'
' an identity provider') ' an identity provider')
(changed, idp) = create_identity_provider(module, sdk, cloud, name) (changed, idp) = self.create_identity_provider(name)
idp = normalize_idp(idp) idp = self.normalize_idp(idp)
module.exit_json(changed=changed, identity_provider=idp) self.exit_json(changed=changed, identity_provider=idp)
(changed, new_idp) = update_identity_provider(module, sdk, cloud, idp) (changed, new_idp) = self.update_identity_provider(idp)
new_idp = normalize_idp(new_idp) new_idp = self.normalize_idp(new_idp)
module.exit_json(changed=changed, identity_provider=new_idp) self.exit_json(changed=changed, identity_provider=new_idp)
def main():
module = IdentityFederationIdpModule()
module()
if __name__ == '__main__': if __name__ == '__main__':