def execute(self) -> Response: inventory = self.instance.inventory rdata = ExecuteResponseSerializer( data=dict(detail="Started at inventory {}.".format(inventory), history_id=self.instance.execute(sync=False))) rdata.is_valid(True) return Response(rdata.data, status.HTTP_201_CREATED)
def _execution(self, kind: str, data: Dict, user: User, **kwargs) -> Response: template = data.pop("template", None) inventory = data.get("inventory", None) msg = "Started in the inventory {}.".format( inventory if inventory else 'specified in the project configuration.') if template is not None: init_type = "template" obj_id = template msg = 'Start template [id={}].'.format(template) else: init_type = "project" obj_id = self.instance.id serializer = self._get_ansible_serializer(kind.lower()) data = { k: v for k, v in serializer.to_internal_value(data).items() if k in data.keys() or v } target = data.pop(kind) try: target = str(target) except UnicodeEncodeError: # nocv target = target.encode('utf-8') history_id = self.instance.execute(kind, str(target), initiator=obj_id, initiator_type=init_type, executor=user, **data) rdata = ExecuteResponseSerializer( data=dict(detail=msg, history_id=history_id, executor=user.id)) rdata.is_valid(raise_exception=True) return Response(rdata.data, status.HTTP_201_CREATED)
def _execution(self, kind, data, user, **kwargs): template = kwargs.pop("template", None) inventory = data.pop("inventory") try: inventory = Inventory.objects.get(id=int(inventory)) if not inventory.acl_handler.viewable_by(user): # nocv raise PermissionDenied( "You don't have permission to inventory.") except ValueError: pass if template is not None: init_type = "template" obj_id = template data['template_option'] = kwargs.get('template_option', None) else: init_type = "project" obj_id = self.instance.id history_id = self.instance.execute(kind, str(data.pop(kind)), inventory, initiator=obj_id, initiator_type=init_type, executor=user, **data) rdata = dict(detail="Started at inventory {}.".format(inventory), history_id=history_id, executor=user.id) return Response(rdata, 201)
def _response(self, total, found, code=200): data = dict(total=len(total)) data["operated"] = len(found) data["not_found"] = data["total"] - data["operated"] found_ids = [item.id for item in found] data["failed_list"] = [i for i in total if i not in found_ids] return Response(data, status=code)
def sync(self) -> Response: self.instance.start_repo_task("sync") serializer = ActionResponseSerializer( data=dict(detail="Sync with {}.".format(self.instance.repository)) ) serializer.is_valid(True) return Response(serializer.data, status.HTTP_200_OK)
def _operate(self, method, data, attr, obj_list): action = self.operations[method] tp = getattr(self.instance, attr) if action == "all": answer = tp.values_list("id", flat=True) return Response(answer, status=200) elif action == "set": getattr(tp, "clear")() action = "add" getattr(tp, action)(*obj_list) return self._response(data, obj_list)
def permissions(self, request): # noce user = self.current_user() if request.method != "GET" and \ not self.instance.acl_handler.manageable_by(user): raise PermissionDenied(self.perms_msg) if request.method == "DELETE": self.instance.acl.all().filter_by_data(request.data).delete() elif request.method == "POST": self.__permission_set(request.data) elif request.method == "PUT": self.instance.acl.clear() self.__permission_set(request.data, False) return Response(self.__get_all_permission_serializer().data, 200)
def _execution(self, kind, data, user, **kwargs): template = kwargs.pop("template", None) inventory = self._get_execution_inventory(template, data.pop("inventory", None), user) msg = "Started in the inventory {}.".format( inventory if inventory else 'specified in the project configuration.') if template is not None: init_type = "template" obj_id = template data['template_option'] = kwargs.get('template_option', None) msg = 'Start template [id={}].'.format(template) else: init_type = "project" obj_id = self.instance.id if kind.lower() == 'module': serializer = AnsibleModuleSerializer() elif kind.lower() == 'playbook': serializer = AnsiblePlaybookSerializer() else: # nocv raise Exception('Unknown kind') data = { k: v for k, v in serializer.to_internal_value(data).items() if k in data.keys() or v } target = data.pop(kind) try: target = str(target) except UnicodeEncodeError: # nocv target = target.encode('utf-8') history_id = self.instance.execute(kind, str(target), inventory, initiator=obj_id, initiator_type=init_type, executor=user, **data) rdata = ExecuteResponseSerializer( data=dict(detail=msg, history_id=history_id, executor=user.id)) rdata.is_valid(raise_exception=True) return Response(rdata.data, status.HTTP_201_CREATED)
def test3(self, request, *args, **kwargs): return Response("OK", 201).resp
def test2(self, request, *args, **kwargs): self.get_object() return Response("OK", 201).resp
def sync(self): self.instance.start_repo_task("sync") data = dict(detail="Sync with {}.".format(self.instance.repository)) return Response(data, 200)
def execute(self): inventory = self.instance.inventory history_id = self.instance.execute(sync=False) rdata = dict(detail="Started at inventory {}.".format(inventory), history_id=history_id) return Response(rdata, 201)
def owner(self, request): # noce if request.method == "GET": return Response(self.instance.owner.id, 200) elif request.method == "PUT": return self._change_owner(request)
def _change_owner(self, request): # noce if not self.instance.acl_handler.owned_by(self.current_user()): raise PermissionDenied(self.perms_msg) self.instance.acl_handler.set_owner(User.objects.get(pk=request.data)) return Response("Owner changed", 200)
def test_err(self, request, *args, **kwargs): return Response("OK", 200).resp