mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-05-07 22:03:09 +00:00
Refactored identity_domain{,_info} modules
Change-Id: Idf48f10e66a5651fa4693774eecd2c8683703082
This commit is contained in:
@@ -4,93 +4,89 @@
|
||||
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
DOCUMENTATION = '''
|
||||
DOCUMENTATION = r'''
|
||||
---
|
||||
module: identity_domain
|
||||
short_description: Manage OpenStack Identity Domains
|
||||
short_description: Manage OpenStack identity (Keystone) domains
|
||||
author: OpenStack Ansible SIG
|
||||
description:
|
||||
- Create, update, or delete OpenStack Identity domains. If a domain
|
||||
with the supplied name already exists, it will be updated with the
|
||||
new description and enabled attributes.
|
||||
- Create, update or delete OpenStack identity (Keystone) domains.
|
||||
options:
|
||||
name:
|
||||
description:
|
||||
- Name that has to be given to the instance
|
||||
required: true
|
||||
type: str
|
||||
description:
|
||||
description:
|
||||
- Description of the domain
|
||||
type: str
|
||||
enabled:
|
||||
description:
|
||||
- Is the domain enabled
|
||||
type: bool
|
||||
default: 'yes'
|
||||
state:
|
||||
description:
|
||||
- Should the resource be present or absent.
|
||||
choices: [present, absent]
|
||||
default: present
|
||||
type: str
|
||||
extends_documentation_fragment:
|
||||
- openstack.cloud.openstack
|
||||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
# Create a domain
|
||||
- openstack.cloud.identity_domain:
|
||||
cloud: mycloud
|
||||
state: present
|
||||
name: demo
|
||||
description: Demo Domain
|
||||
|
||||
# Delete a domain
|
||||
- openstack.cloud.identity_domain:
|
||||
cloud: mycloud
|
||||
state: absent
|
||||
name: demo
|
||||
'''
|
||||
|
||||
RETURN = '''
|
||||
domain:
|
||||
description: Dictionary describing the domain.
|
||||
returned: On success when I(state) is 'present'
|
||||
type: complex
|
||||
contains:
|
||||
id:
|
||||
description: Domain ID.
|
||||
type: str
|
||||
sample: "474acfe5-be34-494c-b339-50f06aa143e4"
|
||||
name:
|
||||
description: Domain name.
|
||||
type: str
|
||||
sample: "demo"
|
||||
description:
|
||||
description: Domain description.
|
||||
type: str
|
||||
sample: "Demo Domain"
|
||||
enabled:
|
||||
description: Domain description.
|
||||
type: bool
|
||||
sample: True
|
||||
|
||||
id:
|
||||
description: The domain ID.
|
||||
returned: On success when I(state) is 'present'
|
||||
description:
|
||||
description:
|
||||
- Domain description.
|
||||
type: str
|
||||
sample: "474acfe5-be34-494c-b339-50f06aa143e4"
|
||||
is_enabled:
|
||||
description:
|
||||
- Whether this domain is enabled or not.
|
||||
type: bool
|
||||
aliases: ['enabled']
|
||||
name:
|
||||
description:
|
||||
- Domain name.
|
||||
required: true
|
||||
type: str
|
||||
state:
|
||||
description:
|
||||
- Should the resource be present or absent.
|
||||
choices: ['present', 'absent']
|
||||
default: present
|
||||
type: str
|
||||
extends_documentation_fragment:
|
||||
- openstack.cloud.openstack
|
||||
'''
|
||||
|
||||
EXAMPLES = r'''
|
||||
- name: Create a domain
|
||||
openstack.cloud.identity_domain:
|
||||
cloud: mycloud
|
||||
state: present
|
||||
name: demo
|
||||
description: Demo Domain
|
||||
|
||||
- name: Delete a domain
|
||||
openstack.cloud.identity_domain:
|
||||
cloud: mycloud
|
||||
state: absent
|
||||
name: demo
|
||||
'''
|
||||
|
||||
RETURN = r'''
|
||||
domain:
|
||||
description: Dictionary describing the domain.
|
||||
returned: On success when I(state) is C(present).
|
||||
type: dict
|
||||
contains:
|
||||
description:
|
||||
description: Domain description.
|
||||
type: str
|
||||
sample: "Demo Domain"
|
||||
id:
|
||||
description: Domain ID.
|
||||
type: str
|
||||
sample: "474acfe5-be34-494c-b339-50f06aa143e4"
|
||||
is_enabled:
|
||||
description: Domain description.
|
||||
type: bool
|
||||
sample: True
|
||||
links:
|
||||
description: The links related to the domain resource
|
||||
type: list
|
||||
name:
|
||||
description: Domain name.
|
||||
type: str
|
||||
sample: "demo"
|
||||
'''
|
||||
|
||||
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
|
||||
from ansible_collections.openstack.cloud.plugins.module_utils.resource import StateMachine
|
||||
|
||||
|
||||
class IdentityDomainModule(OpenStackModule):
|
||||
argument_spec = dict(
|
||||
name=dict(required=True),
|
||||
description=dict(),
|
||||
enabled=dict(default=True, type='bool'),
|
||||
is_enabled=dict(type='bool', aliases=['enabled']),
|
||||
name=dict(required=True),
|
||||
state=dict(default='present', choices=['absent', 'present']),
|
||||
)
|
||||
|
||||
@@ -98,70 +94,38 @@ class IdentityDomainModule(OpenStackModule):
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
||||
def _needs_update(self, domain):
|
||||
if self.params['description'] is not None and \
|
||||
domain.description != self.params['description']:
|
||||
return True
|
||||
if domain.get(
|
||||
"is_enabled", domain.get("enabled")) != self.params['enabled']:
|
||||
return True
|
||||
return False
|
||||
|
||||
def _system_state_change(self, domain):
|
||||
state = self.params['state']
|
||||
if state == 'absent' and domain:
|
||||
return True
|
||||
|
||||
if state == 'present':
|
||||
if domain is None:
|
||||
return True
|
||||
return self._needs_update(domain)
|
||||
|
||||
return False
|
||||
class _StateMachine(StateMachine):
|
||||
def _delete(self, resource, attributes, timeout, wait, **kwargs):
|
||||
# a domain must be disabled before it can be deleted and
|
||||
# openstacksdk's cloud layer delete_domain() will just do that.
|
||||
self.connection.delete_domain(resource['id'])
|
||||
|
||||
def run(self):
|
||||
name = self.params['name']
|
||||
description = self.params['description']
|
||||
enabled = self.params['enabled']
|
||||
state = self.params['state']
|
||||
sm = self._StateMachine(connection=self.conn,
|
||||
service_name='identity',
|
||||
type_name='domain',
|
||||
sdk=self.sdk)
|
||||
|
||||
domains = list(self.conn.identity.domains(name=name))
|
||||
kwargs = dict((k, self.params[k])
|
||||
for k in ['state', 'timeout']
|
||||
if self.params[k] is not None)
|
||||
|
||||
if len(domains) > 1:
|
||||
self.fail_json(msg='Domain name %s is not unique' % name)
|
||||
elif len(domains) == 1:
|
||||
domain = domains[0]
|
||||
kwargs['attributes'] = \
|
||||
dict((k, self.params[k])
|
||||
for k in ['description', 'is_enabled', 'name']
|
||||
if self.params[k] is not None)
|
||||
|
||||
domain, is_changed = sm(check_mode=self.ansible.check_mode,
|
||||
updateable_attributes=None,
|
||||
non_updateable_attributes=None,
|
||||
wait=False,
|
||||
**kwargs)
|
||||
|
||||
if domain is None:
|
||||
self.exit_json(changed=is_changed)
|
||||
else:
|
||||
domain = None
|
||||
|
||||
if self.ansible.check_mode:
|
||||
self.exit_json(changed=self._system_state_change(domain))
|
||||
|
||||
if state == 'present':
|
||||
if domain is None:
|
||||
domain = self.conn.create_domain(
|
||||
name=name, description=description, enabled=enabled)
|
||||
changed = True
|
||||
else:
|
||||
if self._needs_update(domain):
|
||||
domain = self.conn.update_domain(
|
||||
domain.id, name=name, description=description,
|
||||
enabled=enabled)
|
||||
changed = True
|
||||
else:
|
||||
changed = False
|
||||
if hasattr(domain, "to_dict"):
|
||||
domain = domain.to_dict()
|
||||
domain.pop("location")
|
||||
self.exit_json(changed=changed, domain=domain, id=domain['id'])
|
||||
|
||||
elif state == 'absent':
|
||||
if domain is None:
|
||||
changed = False
|
||||
else:
|
||||
self.conn.delete_domain(domain.id)
|
||||
changed = True
|
||||
self.exit_json(changed=changed)
|
||||
self.exit_json(changed=is_changed,
|
||||
domain=domain.to_dict(computed=False))
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
Reference in New Issue
Block a user