示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
 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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
文件: views.py 项目: zhanml1/vstutils
 def test3(self, request, *args, **kwargs):
     return Response("OK", 201).resp
示例#10
0
文件: views.py 项目: zhanml1/vstutils
 def test2(self, request, *args, **kwargs):
     self.get_object()
     return Response("OK", 201).resp
示例#11
0
 def sync(self):
     self.instance.start_repo_task("sync")
     data = dict(detail="Sync with {}.".format(self.instance.repository))
     return Response(data, 200)
示例#12
0
 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)
示例#13
0
 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)
示例#14
0
 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)
示例#15
0
 def test_err(self, request, *args, **kwargs):
     return Response("OK", 200).resp