mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
cloud: ovirt: Add option to register template (#24830)
This commit is contained in:
parent
a1a246e85d
commit
b8c4ca75cf
1 changed files with 56 additions and 4 deletions
|
@ -39,8 +39,11 @@ options:
|
||||||
required: true
|
required: true
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
- "Should the template be present/absent/exported/imported"
|
- "Should the template be present/absent/exported/imported/registered.
|
||||||
choices: ['present', 'absent', 'exported', 'imported']
|
When C(state) is R(registered) and the unregistered template's name
|
||||||
|
belongs to an already registered in engine template then we fail
|
||||||
|
to register the unregistered template."
|
||||||
|
choices: ['present', 'absent', 'exported', 'imported', 'registered']
|
||||||
default: present
|
default: present
|
||||||
vm:
|
vm:
|
||||||
description:
|
description:
|
||||||
|
@ -71,7 +74,8 @@ options:
|
||||||
to be imported as template."
|
to be imported as template."
|
||||||
storage_domain:
|
storage_domain:
|
||||||
description:
|
description:
|
||||||
- "When C(state) is I(imported) this parameter specifies the name of the destination data storage domain."
|
- "When C(state) is I(imported) this parameter specifies the name of the destination data storage domain.
|
||||||
|
When C(state) is R(registered) this parameter specifies the name of the data storage domain of the unregistered template."
|
||||||
clone_permissions:
|
clone_permissions:
|
||||||
description:
|
description:
|
||||||
- "If I(True) then the permissions of the VM (only the direct ones, not the inherited ones)
|
- "If I(True) then the permissions of the VM (only the direct ones, not the inherited ones)
|
||||||
|
@ -105,6 +109,13 @@ EXAMPLES = '''
|
||||||
- ovirt_templates:
|
- ovirt_templates:
|
||||||
state: absent
|
state: absent
|
||||||
name: mytemplate
|
name: mytemplate
|
||||||
|
|
||||||
|
# Register template
|
||||||
|
- ovirt_templates:
|
||||||
|
state: registered
|
||||||
|
name: mytemplate
|
||||||
|
storage_domain: mystorage
|
||||||
|
cluster: mycluster
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
|
@ -136,6 +147,7 @@ from ansible.module_utils.ovirt import (
|
||||||
equal,
|
equal,
|
||||||
get_dict_of_struct,
|
get_dict_of_struct,
|
||||||
get_link_name,
|
get_link_name,
|
||||||
|
get_id_by_name,
|
||||||
ovirt_full_argument_spec,
|
ovirt_full_argument_spec,
|
||||||
search_by_attributes,
|
search_by_attributes,
|
||||||
search_by_name,
|
search_by_name,
|
||||||
|
@ -202,7 +214,7 @@ def wait_for_import(module, templates_service):
|
||||||
def main():
|
def main():
|
||||||
argument_spec = ovirt_full_argument_spec(
|
argument_spec = ovirt_full_argument_spec(
|
||||||
state=dict(
|
state=dict(
|
||||||
choices=['present', 'absent', 'exported', 'imported'],
|
choices=['present', 'absent', 'exported', 'imported', 'registered'],
|
||||||
default='present',
|
default='present',
|
||||||
),
|
),
|
||||||
name=dict(default=None, required=True),
|
name=dict(default=None, required=True),
|
||||||
|
@ -304,7 +316,47 @@ def main():
|
||||||
'id': template.id,
|
'id': template.id,
|
||||||
'template': get_dict_of_struct(template),
|
'template': get_dict_of_struct(template),
|
||||||
}
|
}
|
||||||
|
elif state == 'registered':
|
||||||
|
storage_domains_service = connection.system_service().storage_domains_service()
|
||||||
|
# Find the storage domain with unregistered template:
|
||||||
|
sd_id = get_id_by_name(storage_domains_service, module.params['storage_domain'])
|
||||||
|
storage_domain_service = storage_domains_service.storage_domain_service(sd_id)
|
||||||
|
templates_service = storage_domain_service.templates_service()
|
||||||
|
|
||||||
|
# Find the the unregistered Template we want to register:
|
||||||
|
templates = templates_service.list(unregistered=True)
|
||||||
|
template = next(
|
||||||
|
(t for t in templates if t.name == module.params['name']),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
changed = False
|
||||||
|
if template is None:
|
||||||
|
# Test if template is registered:
|
||||||
|
template = templates_module.search_entity()
|
||||||
|
if template is None:
|
||||||
|
raise ValueError(
|
||||||
|
"Template with name '%s' wasn't found." % module.params['name']
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
changed = True
|
||||||
|
template_service = templates_service.template_service(template.id)
|
||||||
|
# Register the template into the system:
|
||||||
|
template_service.register(
|
||||||
|
cluster=otypes.Cluster(
|
||||||
|
name=module.params['cluster']
|
||||||
|
) if module.params['cluster'] else None,
|
||||||
|
template=otypes.Template(
|
||||||
|
name=module.params['name'],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if module.params['wait']:
|
||||||
|
template = wait_for_import(module, templates_service)
|
||||||
|
|
||||||
|
ret = {
|
||||||
|
'changed': changed,
|
||||||
|
'id': template.id,
|
||||||
|
'template': get_dict_of_struct(template)
|
||||||
|
}
|
||||||
module.exit_json(**ret)
|
module.exit_json(**ret)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
module.fail_json(msg=str(e), exception=traceback.format_exc())
|
module.fail_json(msg=str(e), exception=traceback.format_exc())
|
||||||
|
|
Loading…
Reference in a new issue