From ba59c33b350a50f64b261e3dd8b7177b32705f29 Mon Sep 17 00:00:00 2001 From: Benjamin Bertrand <benjamin.bertrand@esss.se> Date: Wed, 1 Aug 2018 15:19:51 +0200 Subject: [PATCH] Ansible group children in views --- app/network/forms.py | 4 ++++ app/network/views.py | 8 ++++++++ app/static/js/groups.js | 1 + app/templates/network/create_group.html | 1 + app/templates/network/edit_group.html | 1 + app/templates/network/groups.html | 1 + app/templates/network/view_group.html | 10 +++++++++- 7 files changed, 25 insertions(+), 1 deletion(-) diff --git a/app/network/forms.py b/app/network/forms.py index d0fe5c2..aa66f23 100644 --- a/app/network/forms.py +++ b/app/network/forms.py @@ -250,8 +250,12 @@ class AnsibleGroupForm(CSEntryForm): default=models.AnsibleGroupType.STATIC, coerce=models.AnsibleGroupType.coerce, ) + children = SelectMultipleField("Children", coerce=utils.coerce_to_str_or_none) hosts = SelectMultipleField("Hosts", coerce=utils.coerce_to_str_or_none) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + self.children.choices = utils.get_model_choices( + models.AnsibleGroup, attr="name" + ) self.hosts.choices = utils.get_model_choices(models.Host, attr="name") diff --git a/app/network/views.py b/app/network/views.py index 5932fa7..96c1f2e 100644 --- a/app/network/views.py +++ b/app/network/views.py @@ -346,11 +346,17 @@ def edit_ansible_group(name): # See https://stackoverflow.com/questions/5519729/wtforms-how-to-select-options-in-selectmultiplefield form.hosts.default = [host.id for host in group.hosts] form.hosts.process(request.form) + # Same for AnsibleGroup children + form.children.default = [child.id for child in group.children] + form.children.process(request.form) if form.validate_on_submit(): group.name = form.name.data group.vars = form.vars.data or None group.type = form.type.data group.hosts = [models.Host.query.get(id_) for id_ in form.hosts.data] + group.children = [ + models.AnsibleGroup.query.get(id_) for id_ in form.children.data + ] current_app.logger.debug(f"Trying to update: {group!r}") try: db.session.commit() @@ -370,11 +376,13 @@ def create_ansible_group(): form = AnsibleGroupForm() if form.validate_on_submit(): hosts = [models.Host.query.get(id_) for id_ in form.hosts.data] + children = [models.AnsibleGroup.query.get(id_) for id_ in form.children.data] group = models.AnsibleGroup( name=form.name.data, vars=form.vars.data or None, type=form.type.data, hosts=hosts, + children=children, ) current_app.logger.debug(f"Trying to create: {group!r}") db.session.add(group) diff --git a/app/static/js/groups.js b/app/static/js/groups.js index ec1bbf3..e660d72 100644 --- a/app/static/js/groups.js +++ b/app/static/js/groups.js @@ -58,6 +58,7 @@ $(document).ready(function() { } }, { data: 'type' }, + { data: 'children' }, { data: 'hosts' } ] }); diff --git a/app/templates/network/create_group.html b/app/templates/network/create_group.html index 8916190..cd1504d 100644 --- a/app/templates/network/create_group.html +++ b/app/templates/network/create_group.html @@ -9,6 +9,7 @@ {{ render_field(form.name, class_="text-lowercase") }} {{ render_field(form.vars) }} {{ render_field(form.type) }} + {{ render_field(form.children, class_="selectpicker") }} {{ render_field(form.hosts, class_="selectpicker") }} <div class="form-group row"> <div class="col-sm-10"> diff --git a/app/templates/network/edit_group.html b/app/templates/network/edit_group.html index f19aaca..2b1ddd2 100644 --- a/app/templates/network/edit_group.html +++ b/app/templates/network/edit_group.html @@ -18,6 +18,7 @@ {{ render_field(form.name, class_="text-lowercase") }} {{ render_field(form.vars) }} {{ render_field(form.type) }} + {{ render_field(form.children, class_="selectpicker") }} {{ render_field(form.hosts, class_="selectpicker") }} <div class="form-group row"> <div class="col-sm-10"> diff --git a/app/templates/network/groups.html b/app/templates/network/groups.html index af1f517..7d82d9d 100644 --- a/app/templates/network/groups.html +++ b/app/templates/network/groups.html @@ -24,6 +24,7 @@ <th>Name</th> <th>Vars</th> <th>Type</th> + <th>Children</th> <th>Hosts</th> </tr> </thead> diff --git a/app/templates/network/view_group.html b/app/templates/network/view_group.html index 457879e..31e73e7 100644 --- a/app/templates/network/view_group.html +++ b/app/templates/network/view_group.html @@ -1,5 +1,5 @@ {% extends "network/groups.html" %} -{% from "_helpers.html" import link_to_hosts %} +{% from "_helpers.html" import link_to_hosts, link_to_ansible_groups %} {% block title %}View Ansible group - CSEntry{% endblock %} @@ -22,6 +22,14 @@ <dd class="col-sm-9"><pre>{{ group.vars | toyaml }}</pre></dd> <dt class="col-sm-3">Type</dt> <dd class="col-sm-9">{{ group.type.name }}</dd> + {% if group.parents %} + <dt class="col-sm-3">Parents</dt> + <dd class="col-sm-9">{{ link_to_ansible_groups(group.parents) }}</dd> + {% endif %} + {% if group.children %} + <dt class="col-sm-3">Children</dt> + <dd class="col-sm-9">{{ link_to_ansible_groups(group.children) }}</dd> + {% endif %} <dt class="col-sm-3">hosts</dt> <dd class="col-sm-9">{{ link_to_hosts(group.hosts) }}</dd> <dt class="col-sm-3">Created by</dt> -- GitLab