From e57d8718ff1fe645e4159e2c36ab0b706cfa1e82 Mon Sep 17 00:00:00 2001 From: Matthew Jones Date: Tue, 20 May 2014 13:48:18 -0400 Subject: [PATCH] Support smart subgroup disassociation --- awx/api/views.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/awx/api/views.py b/awx/api/views.py index 55c3c54860..a5eece819f 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -797,8 +797,31 @@ class GroupChildrenRemove(DestroyAPIView): def destroy(self, request, *args, **kwargs): parent_group = self.get_object() group = Group.objects.get(id=kwargs['subgroup_pk']) + if group not in parent_group.children: + return Response(status=status.HTTP_404_NOT_FOUND) group.mark_inactive_recursive(parent_group) - return Response() + return Response() + + def post(self, request, *args, **kwargs): + if not isinstance(request.DATA, dict): + return Response('invalid type for post data', + status=status.HTTP_400_BAD_REQUEST) + if 'disassociate' in request.DATA: + parent_group = self.get_object() + group = Group.objects.get(id=kwargs['subgroup_pk']) + if group not in parent_group.children.all(): + return Response(status=status.HTTP_404_NOT_FOUND) + parent_group.children.remove(group) + for host in group.hosts.all(): + parent_group.hosts.add(host) + for subgroup in group.children.all(): + parent_group.children.add(subgroup) + if group.parents.count() < 1: + group.mark_inactive() + return Response() + else: + return Response() + class GroupPotentialChildrenList(SubListAPIView):