Пример #1
0
    def update_vdisk_name(volume_id, old_name, new_name):
        """
        Update a vDisk name using Management Center: set new name
        """
        vdisk = None
        for mgmt_center in MgmtCenterList.get_mgmtcenters():
            mgmt = Factory.get_mgmtcenter(mgmt_center = mgmt_center)
            try:
                disk_info = mgmt.get_vdisk_device_info(volume_id)
                device_path = disk_info['device_path']
                vpool_name = disk_info['vpool_name']
                vp = VPoolList.get_vpool_by_name(vpool_name)
                file_name = os.path.basename(device_path)
                vdisk = VDiskList.get_by_devicename_and_vpool(file_name, vp)
                if vdisk:
                    break
            except Exception as ex:
                logger.info('Trying to get mgmt center failed for disk {0} with volume_id {1}. {2}'.format(old_name, volume_id, ex))
        if not vdisk:
            logger.error('No vdisk found for name {0}'.format(old_name))
            return

        vpool = vdisk.vpool
        mutex = VolatileMutex('{}_{}'.format(old_name, vpool.guid if vpool is not None else 'none'))
        try:
            mutex.acquire(wait=5)
            vdisk.name = new_name
            vdisk.save()
        finally:
            mutex.release()
Пример #2
0
    def update_vdisk_name(volume_id, old_name, new_name):
        """
        Update a vDisk name using Management Center: set new name
        """
        vdisk = None
        for mgmt_center in MgmtCenterList.get_mgmtcenters():
            mgmt = Factory.get_mgmtcenter(mgmt_center=mgmt_center)
            try:
                disk_info = mgmt.get_vdisk_device_info(volume_id)
                device_path = disk_info['device_path']
                vpool_name = disk_info['vpool_name']
                vp = VPoolList.get_vpool_by_name(vpool_name)
                file_name = os.path.basename(device_path)
                vdisk = VDiskList.get_by_devicename_and_vpool(file_name, vp)
                if vdisk:
                    break
            except Exception as ex:
                logger.info(
                    'Trying to get mgmt center failed for disk {0} with volume_id {1}. {2}'
                    .format(old_name, volume_id, ex))
        if not vdisk:
            logger.error('No vdisk found for name {0}'.format(old_name))
            return

        vpool = vdisk.vpool
        mutex = VolatileMutex('{}_{}'.format(
            old_name, vpool.guid if vpool is not None else 'none'))
        try:
            mutex.acquire(wait=5)
            vdisk.name = new_name
            vdisk.save()
        finally:
            mutex.release()
Пример #3
0
 def create(self, request):
     """
     Creates a Management Center
     """
     serializer = FullSerializer(
         MgmtCenter,
         instance=MgmtCenter(),
         data=request.DATA,
         allow_passwords=True)
     if serializer.is_valid():
         mgmt_center = serializer.object
         duplicate = MgmtCenterList.get_by_ip(mgmt_center.ip)
         if duplicate is None:
             try:
                 mgmt_center_client = Factory.get_mgmtcenter(
                     mgmt_center=mgmt_center)
                 is_mgmt_center = mgmt_center_client.test_connection()
             except Exception as ex:
                 logger.debug('Management center testing: {0}'.format(ex))
                 raise NotAcceptable('The given information is invalid.')
             if not is_mgmt_center:
                 raise NotAcceptable(
                     'The given information is not for a Management center.'
                 )
             mgmt_center.save()
             return Response(
                 serializer.data, status=status.HTTP_201_CREATED)
         else:
             raise NotAcceptable(
                 'A Mangement Center with this ip already exists.')
     else:
         return Response(
             serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Пример #4
0
 def create(self, request):
     """
     Creates a Management Center
     """
     serializer = FullSerializer(MgmtCenter,
                                 instance=MgmtCenter(),
                                 data=request.DATA,
                                 allow_passwords=True)
     if serializer.is_valid():
         mgmt_center = serializer.object
         duplicate = MgmtCenterList.get_by_ip(mgmt_center.ip)
         if duplicate is None:
             mgmt_center.save()
             try:
                 task_id = MgmtCenterController.test_connection.apply_async(
                     kwargs={
                         'mgmt_center_guid': mgmt_center.guid
                     }).id
                 task = MgmtCenterController.test_connection.AsyncResult(
                     task_id)
             except:
                 mgmt_center.delete()
                 raise
             try:
                 is_mgmt_center = task.get(timeout=60, propagate=True)
             except TimeoutError:
                 mgmt_center.delete()
                 logger.error('Timed out waiting for test_connection')
                 raise NotAcceptable(
                     'Timed out waiting for test_connection')
             except Exception as ex:
                 # propagate reraises the exception raised in the task
                 mgmt_center.delete()
                 logger.error('Task exception %s' % ex)
                 raise NotAcceptable('Task exception')
             if is_mgmt_center is True:
                 return Response(serializer.data,
                                 status=status.HTTP_201_CREATED)
             elif is_mgmt_center is None:
                 mgmt_center.delete()
                 raise NotAcceptable('The given information is invalid.')
             elif is_mgmt_center is False:
                 mgmt_center.delete()
                 raise NotAcceptable(
                     'The given information is not for a Management center.'
                 )
             else:
                 mgmt_center.delete()
                 raise NotAcceptable('Unexpected result %s' %
                                     is_mgmt_center)
         else:
             raise NotAcceptable(
                 'A Management Center with this ip already exists.')
     else:
         return Response(serializer.errors,
                         status=status.HTTP_400_BAD_REQUEST)
Пример #5
0
    def update_vmachine_name(instance_id, old_name, new_name):
        """
        Update a vMachine name: find vmachine by management center instance id, set new name
        :param instance_id: ID for the virtual machine known by management center
        :param old_name: Old name of the virtual machine
        :param new_name: New name for the virtual machine
        """
        vmachine = None
        for mgmt_center in MgmtCenterList.get_mgmtcenters():
            mgmt = Factory.get_mgmtcenter(mgmt_center=mgmt_center)
            try:
                machine_info = mgmt.get_vmachine_device_info(instance_id)
                file_name = machine_info['file_name']
                host_name = machine_info['host_name']
                vpool_name = machine_info['vpool_name']
                storage_router = StorageRouterList.get_by_name(host_name)
                machine_id = storage_router.machine_id
                device_name = '{0}/{1}'.format(machine_id, file_name)
                vp = VPoolList.get_vpool_by_name(vpool_name)
                vmachine = VMachineList.get_by_devicename_and_vpool(
                    device_name, vp)
                if vmachine:
                    break
                vmachine = VMachineList.get_by_devicename_and_vpool(
                    device_name, None)
                if vmachine:
                    break
            except Exception as ex:
                logger.info(
                    'Trying to get mgmt center failed for vmachine {0}. {1}'.
                    format(old_name, ex))
        if not vmachine:
            logger.error('No vmachine found for name {0}'.format(old_name))
            return

        vpool = vmachine.vpool
        mutex = VolatileMutex('{0}_{1}'.format(
            old_name, vpool.guid if vpool is not None else 'none'))
        try:
            mutex.acquire(wait=5)
            vmachine.name = new_name
            vmachine.save()
        finally:
            mutex.release()
Пример #6
0
 def create(self, request):
     """
     Creates a Management Center
     """
     serializer = FullSerializer(MgmtCenter, instance=MgmtCenter(), data=request.DATA, allow_passwords=True)
     if serializer.is_valid():
         mgmt_center = serializer.object
         duplicate = MgmtCenterList.get_by_ip(mgmt_center.ip)
         if duplicate is None:
             mgmt_center.save()
             try:
                 task_id = MgmtCenterController.test_connection.apply_async(kwargs = {'mgmt_center_guid': mgmt_center.guid}).id
                 task = MgmtCenterController.test_connection.AsyncResult(task_id)
             except:
                 mgmt_center.delete()
                 raise
             try:
                 is_mgmt_center = task.get(timeout = 60,
                                           propagate = True)
             except TimeoutError:
                 mgmt_center.delete()
                 logger.error('Timed out waiting for test_connection')
                 raise NotAcceptable('Timed out waiting for test_connection')
             except Exception as ex:
                 # propagate reraises the exception raised in the task
                 mgmt_center.delete()
                 logger.error('Task exception %s' % ex)
                 raise NotAcceptable('Task exception')
             if is_mgmt_center is True:
                 return Response(serializer.data, status=status.HTTP_201_CREATED)
             elif is_mgmt_center is None:
                 mgmt_center.delete()
                 raise NotAcceptable('The given information is invalid.')
             elif is_mgmt_center is False:
                 mgmt_center.delete()
                 raise NotAcceptable('The given information is not for a Management center.')
             else:
                 mgmt_center.delete()
                 raise NotAcceptable('Unexpected result %s' % is_mgmt_center)
         else:
             raise NotAcceptable('A Management Center with this ip already exists.')
     else:
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Пример #7
0
    def update_vmachine_name(instance_id, old_name, new_name):
        """
        Update a vMachine name: find vmachine by management center instance id, set new name
        :param instance_id: ID for the virtual machine known by management center
        :param old_name: Old name of the virtual machine
        :param new_name: New name for the virtual machine
        """
        vmachine = None
        for mgmt_center in MgmtCenterList.get_mgmtcenters():
            mgmt = Factory.get_mgmtcenter(mgmt_center = mgmt_center)
            try:
                machine_info = mgmt.get_vmachine_device_info(instance_id)
                file_name = machine_info['file_name']
                host_name = machine_info['host_name']
                vpool_name = machine_info['vpool_name']
                storage_router = StorageRouterList.get_by_name(host_name)
                machine_id = storage_router.machine_id
                device_name = '{0}/{1}'.format(machine_id, file_name)
                vp = VPoolList.get_vpool_by_name(vpool_name)
                vmachine = VMachineList.get_by_devicename_and_vpool(device_name, vp)
                if vmachine:
                    break
                vmachine = VMachineList.get_by_devicename_and_vpool(device_name, None)
                if vmachine:
                    break
            except Exception as ex:
                VMachineController._logger.info('Trying to get mgmt center failed for vmachine {0}. {1}'.format(old_name, ex))
        if not vmachine:
            VMachineController._logger.error('No vmachine found for name {0}'.format(old_name))
            return

        vpool = vmachine.vpool
        mutex = volatile_mutex('{0}_{1}'.format(old_name, vpool.guid if vpool is not None else 'none'))
        try:
            mutex.acquire(wait=5)
            vmachine.name = new_name
            vmachine.save()
        finally:
            mutex.release()
Пример #8
0
 def create(self, request):
     """
     Creates a Management Center
     """
     serializer = FullSerializer(MgmtCenter, instance=MgmtCenter(), data=request.DATA, allow_passwords=True)
     if serializer.is_valid():
         mgmt_center = serializer.object
         duplicate = MgmtCenterList.get_by_ip(mgmt_center.ip)
         if duplicate is None:
             try:
                 mgmt_center_client = Factory.get_mgmtcenter(mgmt_center=mgmt_center)
                 is_mgmt_center = mgmt_center_client.test_connection()
             except Exception as ex:
                 logger.debug('Management center testing: {0}'.format(ex))
                 raise NotAcceptable('The given information is invalid.')
             if not is_mgmt_center:
                 raise NotAcceptable('The given information is not for a Management center.')
             mgmt_center.save()
             return Response(serializer.data, status=status.HTTP_201_CREATED)
         else:
             raise NotAcceptable('A Mangement Center with this ip already exists.')
     else:
         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Пример #9
0
 def list(self):
     """
     Overview of all mgmtCenters
     """
     return MgmtCenterList.get_mgmtcenters()
Пример #10
0
 def list(self):
     """
     Overview of all mgmtCenters
     """
     return MgmtCenterList.get_mgmtcenters()