Example #1
0
    def patch(self, request, machine_request_id, action=None):
        """
        OPT2 for approval: sending a PATCH to the machine request with
          {"status":"approve/deny"}
        
        Modfiy attributes on a machine request
        """
        if not request.user.is_staff:
            raise NotAuthenticated("Must be a staff user to view requests "
                                   "directly")

        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        data = request.DATA
        serializer = MachineRequestSerializer(machine_request, data=data,
                partial=True)
        if serializer.is_valid():
            #Only run task if status is 'approve'
            if machine_request.status == 'approve':
                start_machine_imaging(machine_request)
            machine_request.save()
        #Object may have changed
        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #2
0
 def post(self, request, provider_id, identity_id):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         machine_request.parent_machine = machine_request.instance.provider_machine
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
    def get(self, request,
            machine_request_id, action=None):
        """
        OPT 1 for approval: via GET with /approve or /deny
        This is a convenient way to approve requests remotely
        """

        user = request.user
        try:
            machine_request = CoreMachineRequest.objects.get(
                instance__source__provider__cloudadministrator__user=user,
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        if not action:
            serializer = MachineRequestSerializer(machine_request)
            return Response(serializer.data, status=status.HTTP_200_OK)

        # Don't update the request unless its pending or error
        # Otherwise use the existing status to 'start machine imaging'
        if machine_request.status in ['error', 'pending']:
            machine_request.status = action
            machine_request.save()

        # Only run task if status is 'approve'
        if machine_request.status == 'approve':
            start_machine_imaging(machine_request)

        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #4
0
    def put(self, request, provider_uuid, identity_uuid, machine_request_id):
        """
        Authentication Required, update information on a pending request.
        """
        # Meta data changes in 'pending' are OK
        # Status change 'pending' --> 'cancel' are OK
        data = request.data
        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s' %
                            machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request,
                                              data=data,
                                              partial=True)
        if serializer.is_valid():
            # Only run task if status is 'approve'
            machine_request = serializer.save()
            if machine_request.old_status == 'approve':
                start_machine_imaging(machine_request)
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Example #5
0
    def put(self, request, provider_uuid, identity_uuid, machine_request_id):
        """
        Authentication Required, update information on a pending request.
        """
        # Meta data changes in 'pending' are OK
        # Status change 'pending' --> 'cancel' are OK
        data = request.DATA
        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request,
                                              data=data, partial=True)
        if serializer.is_valid():
            # Only run task if status is 'approve'
            machine_request = serializer.object
            if machine_request.status == 'approve':
                start_machine_imaging(machine_request)
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def post(self, request, provider_id, identity_id):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = re.split(', | |\n', data.get('shared_with', ""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         machine_request.parent_machine = machine_request.instance.provider_machine
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request,
                        machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Example #7
0
    def get(self, request, machine_request_id, action=None):
        """
        OPT 1 for approval: via GET with /approve or /deny
        This is a convenient way to approve requests remotely
        """
        if not request.user.is_staff:
            raise NotAuthenticated("Must be a staff user to view requests "
                                   "directly")

        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request)
        if not action:
            return Response(serializer.data, status=status.HTTP_200_OK)

        machine_request = serializer.object
        #Don't update the request unless its pending
        if machine_request.status in ['error','pending']:
            machine_request.status = action
            machine_request.save()

        #Only run task if status is 'approve'
        if machine_request.status == 'approve':
            start_machine_imaging(machine_request)

        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #8
0
    def get(self, request, machine_request_id, action=None):
        """
        OPT 1 for approval: via GET with /approve or /deny
        This is a convenient way to approve requests remotely
        """

        user = request.user
        try:
            machine_request = CoreMachineRequest.objects.get(
                instance__source__provider__cloudadministrator__user=user,
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s' %
                            machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        if not action:
            serializer = MachineRequestSerializer(machine_request)
            return Response(serializer.data, status=status.HTTP_200_OK)

        # Don't update the request unless its pending or error
        # Otherwise use the existing status to 'start machine imaging'
        if machine_request.status in ['error', 'pending']:
            machine_request.status = action
            machine_request.save()

        # Only run task if status is 'approve'
        if machine_request.status == 'approve':
            start_machine_imaging(machine_request)

        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #9
0
    def patch(self, request, machine_request_id, action=None):
        """
        OPT2 for approval: sending a PATCH to the machine request with
          {"status":"approve/deny"}
        
        Modfiy attributes on a machine request
        """
        if not request.user.is_staff:
            raise NotAuthenticated("Must be a staff user to view requests "
                                   "directly")

        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        data = request.DATA
        serializer = MachineRequestSerializer(machine_request, data=data,
                partial=True)
        if serializer.is_valid():
            #Only run task if status is 'approve'
            if machine_request.status == 'approve':
                start_machine_imaging(machine_request)
            machine_request.save()
        #Object may have changed
        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #10
0
    def get(self, request, machine_request_id, action=None):
        """
        OPT 1 for approval: via GET with /approve or /deny
        This is a convenient way to approve requests remotely
        """
        if not request.user.is_staff:
            raise NotAuthenticated("Must be a staff user to view requests "
                                   "directly")

        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s'
                            % machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request)
        if not action:
            return Response(serializer.data, status=status.HTTP_200_OK)

        machine_request = serializer.object
        #Don't update the request unless its pending
        if machine_request.status in ['error','pending']:
            machine_request.status = action
            machine_request.save()

        #Only run task if status is 'approve'
        if machine_request.status == 'approve':
            start_machine_imaging(machine_request)

        serializer = MachineRequestSerializer(machine_request)
        return Response(serializer.data, status=status.HTTP_200_OK)
Example #11
0
    def put(self, request, provider_id, identity_id, machine_request_id):
        """
        Meta data changes in 'pending' are OK
        Status change 'pending' --> 'cancel' are OK
        All other changes should FAIL
        """
        data = request.DATA
        try:
            machine_request = CoreMachineRequest.objects.get(
                id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response('No machine request with id %s' %
                            machine_request_id,
                            status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request,
                                              data=data,
                                              partial=True)
        if serializer.is_valid():
            #Only run task if status is 'approve'
            machine_request = serializer.object
            if machine_request.status == 'approve':
                start_machine_imaging(machine_request)
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.data is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.data)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = data.get('shared_with', '')
         if type(user_list) == str:
             user_list = re.split(', | |\n', user_list)
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]    # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         instance = serializer.validated_data['instance']
         parent_machine = instance.source.providermachine
         serializer.validated_data['parent_machine'] = parent_machine
         user = serializer.validated_data['new_machine_owner']
         identity_member = IdentityMembership.objects.get(
             identity__provider=serializer.
             validated_data['new_machine_provider'],
             identity__created_by=user
         )
         serializer.validated_data['membership'] = identity_member
         serializer.validated_data['created_by'] = user
         self._permission_to_image(identity_uuid, instance)
         pending_status, _ = StatusType.objects.get_or_create(name='pending')
         machine_request = serializer.save(status=pending_status)
         instance = machine_request.instance
         if getattr(settings, 'REPLICATION_PROVIDER_LOCATION'):
             try:
                 replication_provider = Provider.objects.get(
                     location=settings.REPLICATION_PROVIDER_LOCATION
                 )
                 if machine_request.new_machine_provider.location\
                    != replication_provider.location:
                     machine_request.new_machine_provider = replication_provider
             except:
                 # Will skip this step if no provider is named
                 # as the REPLICATION_PROVIDER_LOCATION
                 pass
         # Object now has an ID for links..
         machine_request_id = machine_request.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(
             request, machine_request_id, auto_approve=auto_approve
         )
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return bad_request(serializer.errors, prefix="Invalid value for ")
Example #13
0
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.data is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.data)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = data.get('shared_with', '')
         if type(user_list) == str:
             user_list = re.split(', | |\n', user_list)
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         instance = serializer.validated_data['instance']
         parent_machine = instance.source.providermachine
         serializer.validated_data['parent_machine'] = parent_machine
         user = serializer.validated_data['new_machine_owner']
         identity_member = IdentityMembership.objects.get(
             identity__provider=serializer.
             validated_data['new_machine_provider'],
             identity__created_by=user)
         serializer.validated_data['membership'] = identity_member
         serializer.validated_data['created_by'] = user
         self._permission_to_image(identity_uuid, instance)
         pending_status = StatusType.objects.get(name='pending')
         machine_request = serializer.save(status=pending_status)
         instance = machine_request.instance
         # NOTE: THIS IS A HACK -- While we enforce all images
         #       to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED
         try:
             tucson_provider = Provider.objects.get(
                 location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location\
                != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             # Will skip this step if no provider is named
             # iPlant Cloud - Tucson.
             pass
         # Object now has an ID for links..
         machine_request_id = machine_request.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request,
                        machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return bad_request(serializer.errors, prefix="Invalid value for ")
Example #14
0
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.DATA is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = data.get('shared_with', '')
         if type(user_list) == str:
             user_list = re.split(', | |\n', user_list)
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         instance = serializer.validated_data['instance']
         parent_machine = instance.source.providermachine
         serializer.validated_data['parent_machine'] = parent_machine
         user = serializer.validated_data['new_machine_owner']
         identity_member = IdentityMembership.objects.get(
                 identity__provider=serializer.validated_data['new_machine_provider'],
                 identity__created_by=user)
         serializer.validated_data['membership'] = identity_member
         serializer.validated_data['created_by'] = user
         self._permission_to_image(identity_uuid, instance)
         machine_request = serializer.save()
         instance = machine_request.instance
         # NOTE: THIS IS A HACK -- While we enforce all images
         #       to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED
         try:
             tucson_provider = Provider.objects.get(
                 location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location\
                != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             # Will skip this step if no provider is named
             # iPlant Cloud - Tucson.
             pass
         serializer.save()
         # Object now has an ID for links..
         machine_request_id = machine_request.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Example #15
0
 def post(self, request, provider_uuid, identity_uuid):
     """
     Sends an e-mail to the admins to start
     the create_image process.
     """
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         #TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         instance = machine_request.instance
         if instance.source.is_machine():
             machine_request.parent_machine = machine_request.instance\
                     .source.providermachine
         elif instance.source.is_volume():
             return failure_response(status.HTTP_400_BAD_REQUEST,
                     "Instance of booted volume can NOT be imaged."
                     "Contact your Administrator for more information.")
         else:
             return failure_response(status.HTTP_400_BAD_REQUEST,
                     "Instance source type cannot be determined."
                     "Contact your Administrator for more information.")
         #NOTE: THIS IS A HACK -- While we enforce all images to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED 
         try:
             tucson_provider = Provider.objects.get(location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             pass
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.has_trait("Auto-Imaging")
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Example #16
0
    def patch(self, request, cloud_admin_uuid, machine_request_id, action=None):
        """
        OPT2 for approval: sending a PATCH to the machine request with
          {"status":"approve/deny"}

        Modfiy attributes on a machine request
        """
        user = request.user
        try:
            machine_request = CoreMachineRequest.objects.get(
                instance__source__provider__cloudadministrator__user=user,
                id=machine_request_id
            )
        except CoreMachineRequest.DoesNotExist:
            return Response(
                'No machine request with id %s' % machine_request_id,
                status=status.HTTP_404_NOT_FOUND
            )

        data = request.data
        # Behavior will remove 'status' if its being updated.
        # Status should only be updated if denied or skipped.
        # Status of 'approve','continue' will use the machine_request.status
        # to allow restarting the request at the correct point in time.
        start_request = False
        if 'status' in data:
            _status = data['status'].lower()
            if machine_request.old_status == 'completed':
                return Response(
                    "Cannot update status of 'completed' request",
                    status=status.HTTP_409_conflict
                )
            elif _status in ['approve', 'continue']:
                data.pop('status')
                start_request = True
            elif _status not in ['deny', 'skip']:
                return Response(
                    "Bad Status Value: %s. "
                    "Available choices for a status update are: "
                    "approve, continue, deny, skip"
                )
        serializer = MachineRequestSerializer(
            machine_request, data=data, partial=True
        )
        if not serializer.is_valid():
            return Response(
                serializer.errors, status=status.HTTP_400_BAD_REQUEST
            )
        # Only run task if status is 'approve'
        machine_request = serializer.save()
        mr_data = serializer.data
        if start_request:
            start_machine_imaging(machine_request)
        return Response(mr_data, status=status.HTTP_200_OK)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     #request.DATA is r/o
     #Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis','public') != 'public':
         user_list  = re.split(', | |\n', data.get('shared_with',""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user] # Skips blanks
         #TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         #Add parent machine to request
         machine_request = serializer.object
         instance = machine_request.instance
         if instance.source.is_machine():
             machine_request.parent_machine = machine_request.instance\
                     .source.providermachine
         elif instance.source.is_volume():
             raise Exception(
                     "Instance of booted volume can NOT be imaged."
                     "Contact your Administrator for more information.")
         else:
             raise Exception(
                     "Instance source type cannot be determined."
                     "Contact your Administrator for more information.")
         #NOTE: THIS IS A HACK -- While we enforce all images to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED 
         try:
             tucson_provider = Provider.objects.get(location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             pass
         serializer.save()
         #Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request, machine_request_id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data,
                         status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
 def submit_action(self, instance):
     """
     Submits a resource request email
     """
     provider = instance.active_provider()
     pre_approved = provider.auto_imaging
     requestImaging(self.request, instance.id, auto_approve=pre_approved)
     
     if pre_approved:
         status, _ = StatusType.objects.get_or_create(name="approved")
         instance.status = status
         instance.save()
         start_machine_imaging(instance)
Example #19
0
    def submit_action(self, instance):
        """
        Submits a resource request email
        """
        #NOTE/FIXME: This should be considered when locking down "Imaging Strategy" for a "Provider Grouping"
        new_provider = self._get_new_provider()
        pre_approved = new_provider.auto_imaging
        requestImaging(self.request, instance.id, auto_approve=pre_approved)

        if pre_approved:
            status, _ = StatusType.objects.get_or_create(name="approved")
            instance.status = status
            instance.save()
            start_machine_imaging(instance)
Example #20
0
    def submit_action(self, instance):
        """
        Submits a resource request email
        """
        #NOTE/FIXME: This should be considered when locking down "Imaging Strategy" for a "Provider Grouping"
        new_provider = self._get_new_provider()
        pre_approved = new_provider.auto_imaging
        requestImaging(self.request, instance.id, auto_approve=pre_approved)

        if pre_approved:
            status, _ = StatusType.objects.get_or_create(name="approved")
            instance.status = status
            instance.save()
            start_machine_imaging(instance)
 def _create_image(self, request, provider_uuid, identity_uuid):
     _permission_to_act(identity_uuid, "Imaging")
     # request.DATA is r/o
     # Copy allows for editing
     data = copy.deepcopy(request.DATA)
     data.update({'owner': data.get('created_for', request.user.username)})
     if data.get('vis', 'public') != 'public':
         user_list = re.split(', | |\n', data.get('shared_with', ""))
         share_with_admins(user_list, data.get('provider'))
         share_with_self(user_list, request.user.username)
         user_list = [user for user in user_list if user]  # Skips blanks
         # TODO: Remove duplicates as well..
         data['shared_with'] = user_list
     logger.info(data)
     serializer = MachineRequestSerializer(data=data)
     if serializer.is_valid():
         # Add parent machine to request
         machine_request = serializer.object
         self._permission_to_image(machine_request, identity_uuid)
         instance = machine_request.instance
         machine = machine_request.instance.source.providermachine
         # NOTE: THIS IS A HACK -- While we enforce all images
         #       to go to iPlant Cloud - Tucson.
         # THIS CODE SHOULD BE REMOVED
         try:
             tucson_provider = Provider.objects.get(
                 location='iPlant Cloud - Tucson')
             if machine_request.new_machine_provider.location\
                != tucson_provider.location:
                 machine_request.new_machine_provider = tucson_provider
         except:
             # Will skip this step if no provider is named
             # iPlant Cloud - Tucson.
             pass
         serializer.save()
         # Object now has an ID for links..
         machine_request_id = serializer.object.id
         active_provider = machine_request.active_provider()
         auto_approve = active_provider.auto_imaging
         requestImaging(request,
                        machine_request.id,
                        auto_approve=auto_approve)
         if auto_approve:
             start_machine_imaging(machine_request)
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Example #22
0
    def patch(self, request, provider_id, identity_id, machine_request_id):
        """
        Meta data changes in 'pending' are OK
        Status change 'pending' --> 'cancel' are OK
        All other changes should FAIL
        """
        data = request.DATA
        try:
            machine_request = CoreMachineRequest.objects.get(id=machine_request_id)
        except CoreMachineRequest.DoesNotExist:
            return Response("No machine request with id %s" % machine_request_id, status=status.HTTP_404_NOT_FOUND)

        serializer = MachineRequestSerializer(machine_request, data=data, partial=True)
        if serializer.is_valid():
            machine_request = serializer.object
            if machine_request.status == "approve":
                start_machine_imaging(machine_request)
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Example #23
0
 def approve_action(self, instance):
     """
     Updates the resource for the request
     """
     start_machine_imaging(instance)
 def approve_action(self, instance):
     """
     Updates the resource for the request
     """
     start_machine_imaging(instance)