Ejemplo n.º 1
0
 def list_asds():
     """
     List all ASDs
     :return: Information about all ASDs on local node
     :rtype: dict
     """
     return dict((partition_alias, ASDController.list_asds(mountpoint=mountpoint)) for partition_alias, mountpoint in FSTab.read().iteritems())
Ejemplo n.º 2
0
 def list_asds():
     """
     List all ASDs
     """
     asds = {}
     mountpoints = FSTab.read()
     for disk, mountpoint in mountpoints.iteritems():
         asds[disk] = ASDController.list_asds(mountpoint)
     return asds
Ejemplo n.º 3
0
 def list_asds_disk(disk_id):
     """
     Lists all ASDs on a given disk
     :param disk_id: Identifier of the disk
     :type disk_id: str
     """
     mountpoints = FSTab.read()
     if disk_id not in mountpoints:
         raise BadRequest('Disk {0} is not yet initialized'.format(disk_id))
     mountpoint = mountpoints[disk_id]
     return ASDController.list_asds(mountpoint)
Ejemplo n.º 4
0
 def list_asds_disk(disk_id):
     """
     Lists all ASDs on a given disk
     :param disk_id: Identifier of the disk  (eg: '/dev/disk/by-path/pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0' or 'pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0')
     :type disk_id: str
     :return: ASD information for the specified disk
     :rtype: dict
     """
     disk_data = DiskController.get_disk_data_by_alias(device_alias=disk_id)
     for partition_alias, mountpoint in FSTab.read().iteritems():
         if partition_alias in disk_data['partition_aliases']:
             return ASDController.list_asds(mountpoint=mountpoint)
     raise BadRequest('Disk {0} is not yet initialized'.format(disk_data['aliases'][0]))
Ejemplo n.º 5
0
 def restart_disk(disk_id):
     """
     Restart a disk
     :param disk_id: Identifier of the disk  (eg: '/dev/disk/by-path/pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0' or 'pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0')
     :type disk_id: str
     :return: None
     """
     API._logger.info('Restarting disk {0}'.format(disk_id))
     disk_data = DiskController.get_disk_data_by_alias(device_alias=disk_id)
     alias = disk_data['aliases'][0]
     with file_mutex('disk_{0}'.format(disk_id)):
         API._logger.info('Got lock for restarting disk {0}'.format(alias))
         for partition_alias, mountpoint in FSTab.read().iteritems():
             if partition_alias in disk_data['partition_aliases']:
                 asds = ASDController.list_asds(mountpoint=mountpoint)
                 for asd_id in asds:
                     ASDController.stop_asd(asd_id=asd_id)
                 DiskController.remount_disk(device_alias=alias,
                                             mountpoint=mountpoint)
                 asds = ASDController.list_asds(mountpoint=mountpoint)
                 for asd_id in asds:
                     ASDController.start_asd(asd_id=asd_id)
                 break
Ejemplo n.º 6
0
 def restart_disk(disk_id):
     """
     Restart a disk
     :param disk_id: Identifier of the disk
     :type disk_id: str
     """
     API._log('Restarting disk {0}'.format(disk_id))
     all_disks = DiskController.list_disks()
     if disk_id not in all_disks:
         raise BadRequest('Disk not available')
     if all_disks[disk_id]['available'] is False:
         raise BadRequest('Disk already configured')
     with file_mutex('disk_{0}'.format(disk_id)):
         API._log('Got lock for restarting disk {0}'.format(disk_id))
         mountpoints = FSTab.read()
         if disk_id in mountpoints:
             mountpoint = mountpoints[disk_id]
             asds = ASDController.list_asds(mountpoint)
             for asd_id in asds:
                 ASDController.stop_asd(asd_id)
             DiskController.remount_disk(disk_id, mountpoint)
             asds = ASDController.list_asds(mountpoint)
             for asd_id in asds:
                 ASDController.start_asd(asd_id)
Ejemplo n.º 7
0
 def get_asd(disk_id, asd_id):
     """
     Gets an ASD
     :param disk_id: Identifier of the disk
     :type disk_id: str
     :param asd_id: Identifier of the ASD
     :type asd_id: str
     """
     mountpoints = FSTab.read()
     if disk_id not in mountpoints:
         raise BadRequest('Disk {0} is not yet initialized'.format(disk_id))
     mountpoint = mountpoints[disk_id]
     asds = ASDController.list_asds(mountpoint)
     if asd_id not in asds:
         raise BadRequest('ASD {0} could not be found on disk'.format(disk_id))
     return asds[asd_id]
Ejemplo n.º 8
0
 def get_asd(disk_id, asd_id):
     """
     Gets an ASD
     :param disk_id: Identifier of the disk  (eg: '/dev/disk/by-path/pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0' or 'pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0')
     :type disk_id: str
     :param asd_id: Identifier of the ASD  (eg: bnAWEXuPHN5YJceCeZo7KxaQW86ixXd4, found under /mnt/alba-asd/WDCztMxmRqi6Hx21/)
     :type asd_id: str
     :return: ASD information
     :rtype: dict
     """
     disk_data = DiskController.get_disk_data_by_alias(device_alias=disk_id)
     alias = disk_data['aliases'][0]
     for partition_alias, mountpoint in FSTab.read().iteritems():
         if partition_alias in disk_data['partition_aliases']:
             asds = ASDController.list_asds(mountpoint=mountpoint)
             if asd_id not in asds:
                 raise BadRequest('ASD {0} could not be found on disk'.format(alias))
             return asds[asd_id]
     raise BadRequest('Disk {0} is not yet initialized'.format(alias))
Ejemplo n.º 9
0
    def delete_disk(disk_id):
        """
        Delete a disk
        :param disk_id: Identifier of the disk  (eg: '/dev/disk/by-path/pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0' or 'pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0')
        :type disk_id: str
        :return: None
        """
        try:
            disk_data = DiskController.get_disk_data_by_alias(device_alias=disk_id)
        except DiskNotFoundError:
            API._logger.warning('Disk with ID {0} is no longer detected on the filesystem'.format(disk_id))
            disk_data = {}

        if disk_data.get('available') is True:
            raise BadRequest('Disk not yet configured')

        if disk_data:
            alias = disk_data['aliases'][0]
            mountpoint = disk_data['mountpoint'] or None
            partition_aliases = disk_data['partition_aliases']
            API._logger.info('Deleting disk {0}'.format(alias))
        else:  # Disk is most likely missing from filesystem
            alias = None
            mountpoint = None
            partition_aliases = json.loads(request.form['partition_aliases'])
            API._logger.info('Deleting unknown disk with partition aliases "{0}"'.format('", "'.join(partition_aliases)))

        if mountpoint is None:  # 'lsblk' did not return mountpoint for the device, but perhaps it's still mounted according to FSTab
            for partition_alias, mtpt in FSTab.read().iteritems():
                if partition_alias in partition_aliases:
                    API._logger.warning('Disk with ID {0} is still mounted on {1} according to FSTab'.format(disk_id, mountpoint))
                    mountpoint = mtpt
                    break

        with file_mutex('disk_{0}'.format(disk_id)):
            if mountpoint is not None:
                for asd_id in ASDController.list_asds(mountpoint=mountpoint):
                    ASDController.remove_asd(asd_id=asd_id,
                                             mountpoint=mountpoint)
            DiskController.clean_disk(device_alias=alias,
                                      mountpoint=mountpoint,
                                      partition_aliases=partition_aliases)
Ejemplo n.º 10
0
 def asd_delete(disk_id, asd_id):
     """
     Deletes an ASD on a given disk
     :param disk_id: Identifier of the Disk  (eg: '/dev/disk/by-path/pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0' or 'pci-0000:03:00.0-sas-0x5000c29f4cf04566-lun-0')
     :type disk_id: str
     :param asd_id: Identifier of the ASD  (eg: bnAWEXuPHN5YJceCeZo7KxaQW86ixXd4, found under /mnt/alba-asd/WDCztMxmRqi6Hx21/)
     :type asd_id: str
     :return: None
     """
     disk_data = DiskController.get_disk_data_by_alias(device_alias=disk_id)
     alias = disk_data['aliases'][0]
     API._logger.info('Removing services for disk {0}'.format(alias))
     for partition_alias, mountpoint in FSTab.read().iteritems():
         if partition_alias in disk_data['partition_aliases']:
             if asd_id not in ASDController.list_asds(mountpoint=mountpoint):
                 raise BadRequest('Could not find ASD {0} on disk {1}'.format(asd_id, alias))
             ASDController.remove_asd(asd_id=asd_id,
                                      mountpoint=mountpoint)
             return
     raise BadRequest('Disk {0} is not yet initialized'.format(alias))
Ejemplo n.º 11
0
 def asd_delete(disk_id, asd_id):
     """
     Deletes an ASD on a given Disk
     :param disk_id: Identifier of the Disk
     :type disk_id: str
     :param asd_id: The ASD ID of the ASD to be removed
     :type asd_id: str
     """
     # Stop and remove service
     API._log('Removing services for disk {0}'.format(disk_id))
     mountpoints = FSTab.read()
     if disk_id not in mountpoints:
         raise BadRequest('Disk {0} is not yet initialized'.format(disk_id))
     all_asds = {}
     for mountpoint in mountpoints.values():
         all_asds.update(ASDController.list_asds(mountpoint))
     if asd_id not in all_asds:
         raise BadRequest('Could not find ASD {0} on disk {1}'.format(asd_id, disk_id))
     mountpoint = mountpoints[disk_id]
     ASDController.remove_asd(asd_id, mountpoint)
Ejemplo n.º 12
0
 def delete_disk(disk_id):
     """
     Delete a disk
     :param disk_id: Identifier of the disk
     :type disk_id: str
     """
     API._log('Deleting disk {0}'.format(disk_id))
     all_disks = DiskController.list_disks()
     if disk_id not in all_disks:
         raise BadRequest('Disk not available')
     if all_disks[disk_id]['available'] is True:
         raise BadRequest('Disk not yet configured')
     with file_mutex('disk_{0}'.format(disk_id)):
         mountpoints = FSTab.read()
         if disk_id in mountpoints:
             mountpoint = mountpoints[disk_id]
             asds = ASDController.list_asds(mountpoint)
             for asd_id in asds:
                 ASDController.remove_asd(asd_id, mountpoint)
             DiskController.clean_disk(disk_id, mountpoint)