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 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 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 requestImaging(request, machine_request_id) return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
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)
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 _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 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)
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)