def remove_maintenance_service(name): """ Remove a maintenance service with a specific name :param name: Name of the service """ if ServiceManager.has_service(name, MaintenanceController._local_client): ServiceManager.stop_service(name, MaintenanceController._local_client) ServiceManager.remove_service(name, MaintenanceController._local_client)
def stop_asd(asd_id): """ Stops an ASD :param asd_id: ASD identifier :type asd_id: str :return: None """ service_name = ASDController.ASD_SERVICE_PREFIX.format(asd_id) if ServiceManager.has_service(service_name, ASDController._local_client): ServiceManager.stop_service(service_name, ASDController._local_client)
def remove_asd(asd_id, mountpoint): """ Removes an ASD :param asd_id: ASD identifier :type asd_id: str :param mountpoint: Mountpoint of the ASDs disk :type mountpoint: str :return: None """ service_name = ASDController.ASD_SERVICE_PREFIX.format(asd_id) if ServiceManager.has_service(service_name, ASDController._local_client): ServiceManager.stop_service(service_name, ASDController._local_client) ServiceManager.remove_service(service_name, ASDController._local_client) try: ASDController._local_client.dir_delete('{0}/{1}'.format(mountpoint, asd_id)) except Exception as ex: ASDController._logger.warning('Could not clean ASD data: {0}'.format(ex)) Configuration.delete(ASDController.ASD_CONFIG_ROOT.format(asd_id), raw=True)
def remove(silent=None): """ Interactive removal part for the ASD manager :param silent: If silent == '--force-yes' no question will be asked to confirm the removal :type silent: str :return: None """ os.environ['OVS_LOGTYPE_OVERRIDE'] = 'file' print '\n' + Interactive.boxed_message(['ASD Manager removal']) ############## # VALIDATION # ############## local_client = LocalClient() if not local_client.file_exists(filename=Toolbox.BOOTSTRAP_FILE): print '\n' + Interactive.boxed_message(['The ASD Manager has already been removed']) sys.exit(1) print ' - Validating configuration file' config = _validate_and_retrieve_pre_config() if config is None or 'store' not in config: print '\n' + Interactive.boxed_message(['Cannot remove the ASD manager because not all information could be retrieved from the pre-configuration file']) sys.exit(1) print ' - Validating node ID' with open(Toolbox.BOOTSTRAP_FILE, 'r') as bs_file: try: alba_node_id = json.loads(bs_file.read())['node_id'] except: print '\n' + Interactive.boxed_message(['JSON contents could not be retrieved from file {0}'.format(Toolbox.BOOTSTRAP_FILE)]) sys.exit(1) print ' - Validating configuration management' store = config['store'] try: Configuration.list(key='ovs') except: if store == 'arakoon': print '\n' + Interactive.boxed_message(['Could not connect to Arakoon']) else: print '\n' + Interactive.boxed_message(['Could not connect to Etcd.', 'Please make sure an Etcd proxy is available, pointing towards an OpenvStorage cluster.']) sys.exit(1) ################ # CONFIRMATION # ################ os.environ['ASD_NODE_ID'] = alba_node_id from source.app.api import API print ' - Retrieving ASD information' all_asds = {} try: all_asds = API.list_asds.original() except: print ' - ERROR: Failed to retrieve the ASD information' interactive = silent != '--force-yes' if interactive is True: message = 'Are you sure you want to continue?' if len(all_asds) > 0: print '\n\n+++ ALERT +++\n' message = 'DATA LOSS possible if proceeding! Continue?' proceed = Interactive.ask_yesno(message=message, default_value=False) if proceed is False: print '\n' + Interactive.boxed_message(['Abort removal']) sys.exit(1) ########### # REMOVAL # ########### print ' - Removing from configuration management' Configuration.uninitialize(node_id=alba_node_id) if len(all_asds) > 0: print ' - Removing disks' for device_id, disk_info in API.list_disks.original().iteritems(): if disk_info['available'] is True: continue try: print ' - Retrieving ASD information for disk {0}'.format(disk_info['device']) for asd_id, asd_info in API.list_asds_disk.original(disk_id=device_id).iteritems(): print ' - Removing ASD {0}'.format(asd_id) API.asd_delete.original(disk_id=device_id, asd_id=asd_id) API.delete_disk.original(disk_id=device_id) except Exception as ex: print ' - Deleting ASDs failed: {0}'.format(ex) print ' - Removing services' for service_name in API.list_maintenance_services.original()['services']: print ' - Removing service {0}'.format(service_name) API.remove_maintenance_service.original(name=service_name) for service_name in [WATCHER_SERVICE, MANAGER_SERVICE]: if ServiceManager.has_service(name=service_name, client=local_client): print ' - Removing service {0}'.format(service_name) ServiceManager.stop_service(name=service_name, client=local_client) ServiceManager.remove_service(name=service_name, client=local_client) if store == 'arakoon': from source.tools.configuration.arakoon_config import ArakoonConfiguration local_client.file_delete(filenames=ArakoonConfiguration.CACC_LOCATION) local_client.file_delete(filenames=Toolbox.BOOTSTRAP_FILE) print '\n' + Interactive.boxed_message(['ASD Manager removal completed'])
CONFIG_ROOT = '/ovs/alba/asdnodes/{0}/config'.format(NODE_ID) CURRENT_VERSION = 1 _logger = LogHandler.get('asd-manager', name='post-update') _logger.info('Executing post-update logic of package openvstorage-sdm') with file_mutex('package_update_pu'): client = LocalClient('127.0.0.1', username='******') key = '{0}/versions'.format(CONFIG_ROOT) version = Configuration.get(key) if Configuration.exists(key) else 0 service_name = 'asd-manager' if ServiceManager.has_service(service_name, client) and ServiceManager.get_service_status(service_name, client)[0] is True: _logger.info('Stopping asd-manager service') ServiceManager.stop_service(service_name, client) if version < CURRENT_VERSION: try: # Put migration code here pass except: pass Configuration.set(key, CURRENT_VERSION) if ServiceManager.has_service(service_name, client) and ServiceManager.get_service_status(service_name, client)[0] is False: _logger.info('Starting asd-manager service') ServiceManager.start_service(service_name, client) _logger.info('Post-update logic executed')