def start(self, disk_id, pool): try: ceph_api = CephAPI() consul_api = ConsulAPI() attr = ceph_api.read_image_metadata( ConfigAPI().get_image_name_prefix() + disk_id, pool) petasan_meta = attr.get(ConfigAPI().get_image_meta_key()) disk_meta = DiskMeta() if petasan_meta: disk_meta.load_json(petasan_meta) else: return Status.error consul_api.add_disk_resource(disk_meta.id, "disk") consul_api.add_disk_pool(disk_meta.id, pool) i = 0 for p in disk_meta.paths: i += 1 consul_api.add_disk_resource( "/".join(["", disk_meta.id, str(i)]), None) except Exception as e: logger.error("Can not start disk %s" % disk_id) logger.exception(e.message) return Status.error return Status.done
def add_disk(self, disk_meta, manual_ips, path_type, paths_count, auth_auto, auto_ip, pool): """ :type path_type: PathType :type manual_ips: [string] :type paths_count: int :type disk_meta: DiskMeta """ cfg = ManageConfig() paths = [] try: if not disk_meta.disk_name or not disk_meta.size or type( disk_meta.size) != int: return ManageDiskStatus.data_missing elif not auth_auto and (not disk_meta.user or not disk_meta.password): return ManageDiskStatus.data_missing elif not auto_ip and int(paths_count) > 2: return ManageDiskStatus.wrong_data elif not auto_ip and int(paths_count) != len(manual_ips): return ManageDiskStatus.wrong_data elif not auto_ip: ip_status = cfg.validate_new_iscsi_ips(manual_ips, path_type) if ip_status == NewIPValidation.valid: for ip in manual_ips: paths.append(cfg.get_path(ip)) elif ip_status == NewIPValidation.used_already: return ManageDiskStatus.used_already elif ip_status == NewIPValidation.wrong_subnet: return ManageDiskStatus.wrong_subnet else: return ManageDiskStatus.wrong_data elif auto_ip: paths.extend(cfg.get_new_iscsi_ips(path_type, paths_count)) if not paths or len(paths) == 0: return ManageDiskStatus.ip_out_of_range new_id = self.__get_next_disk_id() disk_meta.id = new_id disk_meta.paths = paths disk_meta.wwn = self.__get_wwn(new_id) if auth_auto: disk_meta.user = "" disk_meta.password = "" disk_meta.iqn = ":".join([cfg.get_iqn_base(), new_id]) consul_api = ConsulAPI() disk_data = consul_api.find_disk(disk_meta.id) if disk_data is not None: return ManageDiskStatus.disk_exists ceph_api = CephAPI() status = ceph_api.add_disk(disk_meta, True, pool) if status == ManageDiskStatus.done: consul_api.add_disk_resource(disk_meta.id, "disk") consul_api.add_disk_pool(disk_meta.id, pool) i = 0 for p in paths: i += 1 consul_api.add_disk_resource( "/".join(["", disk_meta.id, str(i)]), None) except DiskListException as e: status = ManageDiskStatus.disk_get__list_error logger.exception(e.message) except Exception as e: status = ManageDiskStatus.error logger.exception(e.message) return status