add filter support for one_template module (#9547)
apply suggestion from code review add one_template filter changelog fragment rewrote filter flag to use string instead of int renamed flag to option in changelog added PR link to changelog fragment Co-authored-by: Felix Fontein <felix@fontein.de> Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>pull/9579/head
parent
e2d19a968b
commit
c823e37d00
|
@ -0,0 +1,2 @@
|
|||
minor_changes:
|
||||
- one_template - adds ``filter`` option for retrieving templates which are not owned by the user (https://github.com/ansible-collections/community.general/pull/9547, https://github.com/ansible-collections/community.general/issues/9278).
|
|
@ -51,6 +51,16 @@ options:
|
|||
choices: ["present", "absent"]
|
||||
default: present
|
||||
type: str
|
||||
filter:
|
||||
description:
|
||||
- V(user_primary_group) - Resources belonging to the user's primary group.
|
||||
- V(user) - Resources belonging to the user.
|
||||
- V(all) - All resources.
|
||||
- V(user_groups) - Resources belonging to the user and any of his groups.
|
||||
choices: [user_primary_group, user, all, user_groups]
|
||||
default: user
|
||||
type: str
|
||||
version_added: 10.3.0
|
||||
|
||||
extends_documentation_fragment:
|
||||
- community.general.opennebula
|
||||
|
@ -157,6 +167,7 @@ class TemplateModule(OpenNebulaModule):
|
|||
name=dict(type='str', required=False),
|
||||
state=dict(type='str', choices=['present', 'absent'], default='present'),
|
||||
template=dict(type='str', required=False),
|
||||
filter=dict(type='str', required=False, choices=['user_primary_group', 'user', 'all', 'user_groups'], default='user'),
|
||||
)
|
||||
|
||||
mutually_exclusive = [
|
||||
|
@ -182,10 +193,11 @@ class TemplateModule(OpenNebulaModule):
|
|||
name = params.get('name')
|
||||
desired_state = params.get('state')
|
||||
template_data = params.get('template')
|
||||
filter = params.get('filter')
|
||||
|
||||
self.result = {}
|
||||
|
||||
template = self.get_template_instance(id, name)
|
||||
template = self.get_template_instance(id, name, filter)
|
||||
needs_creation = False
|
||||
if not template and desired_state != 'absent':
|
||||
if id:
|
||||
|
@ -197,16 +209,19 @@ class TemplateModule(OpenNebulaModule):
|
|||
self.result = self.delete_template(template)
|
||||
else:
|
||||
if needs_creation:
|
||||
self.result = self.create_template(name, template_data)
|
||||
self.result = self.create_template(name, template_data, filter)
|
||||
else:
|
||||
self.result = self.update_template(template, template_data)
|
||||
self.result = self.update_template(template, template_data, filter)
|
||||
|
||||
self.exit()
|
||||
|
||||
def get_template(self, predicate):
|
||||
# -3 means "Resources belonging to the user"
|
||||
def get_template(self, predicate, filter):
|
||||
# filter was included, for discussions see:
|
||||
# Issue: https://github.com/ansible-collections/community.general/issues/9278
|
||||
# PR: https://github.com/ansible-collections/community.general/pull/9547
|
||||
# the other two parameters are used for pagination, -1 for both essentially means "return all"
|
||||
pool = self.one.templatepool.info(-3, -1, -1)
|
||||
filter_values = {'user_primary_group': -4, 'user': -3, 'all': -2, 'user_groups': -1}
|
||||
pool = self.one.templatepool.info(filter_values[filter], -1, -1)
|
||||
|
||||
for template in pool.VMTEMPLATE:
|
||||
if predicate(template):
|
||||
|
@ -214,17 +229,17 @@ class TemplateModule(OpenNebulaModule):
|
|||
|
||||
return None
|
||||
|
||||
def get_template_by_id(self, template_id):
|
||||
return self.get_template(lambda template: (template.ID == template_id))
|
||||
def get_template_by_id(self, template_id, filter):
|
||||
return self.get_template(lambda template: (template.ID == template_id), filter)
|
||||
|
||||
def get_template_by_name(self, name):
|
||||
return self.get_template(lambda template: (template.NAME == name))
|
||||
def get_template_by_name(self, name, filter):
|
||||
return self.get_template(lambda template: (template.NAME == name), filter)
|
||||
|
||||
def get_template_instance(self, requested_id, requested_name):
|
||||
def get_template_instance(self, requested_id, requested_name, filter):
|
||||
if requested_id:
|
||||
return self.get_template_by_id(requested_id)
|
||||
return self.get_template_by_id(requested_id, filter)
|
||||
else:
|
||||
return self.get_template_by_name(requested_name)
|
||||
return self.get_template_by_name(requested_name, filter)
|
||||
|
||||
def get_template_info(self, template):
|
||||
info = {
|
||||
|
@ -239,21 +254,21 @@ class TemplateModule(OpenNebulaModule):
|
|||
|
||||
return info
|
||||
|
||||
def create_template(self, name, template_data):
|
||||
def create_template(self, name, template_data, filter):
|
||||
if not self.module.check_mode:
|
||||
self.one.template.allocate("NAME = \"" + name + "\"\n" + template_data)
|
||||
|
||||
result = self.get_template_info(self.get_template_by_name(name))
|
||||
result = self.get_template_info(self.get_template_by_name(name, filter))
|
||||
result['changed'] = True
|
||||
|
||||
return result
|
||||
|
||||
def update_template(self, template, template_data):
|
||||
def update_template(self, template, template_data, filter):
|
||||
if not self.module.check_mode:
|
||||
# 0 = replace the whole template
|
||||
self.one.template.update(template.ID, template_data, 0)
|
||||
|
||||
result = self.get_template_info(self.get_template_by_id(template.ID))
|
||||
result = self.get_template_info(self.get_template_by_id(template.ID, filter))
|
||||
if self.module.check_mode:
|
||||
# Unfortunately it is not easy to detect if the template would have changed, therefore always report a change here.
|
||||
result['changed'] = True
|
||||
|
|
Loading…
Reference in New Issue