class BackupTask(resource.Resource): """Cloud Backup""" resources_key = "tasks" base_path = "/backuppolicy/%(policy_id)s/backuptasks" service = volume_backup_service.VolumeBackupService() # capabilities allow_list = True _query_mapping = QueryParameters("sort_dir", "sort_key", "status", "limit", "marker", "offset", "status", id="job_id") #: Properties #: Task job id id = resource.Body("job_id") #: Name of backup created by this task name backup_name = resource.Body("backup_name") #: Resource ID (volume-id for example) resource_id = resource.Body("resource_id") #: Resource Type (volume for example) resource_type = resource.Body("resource_type") #: Task status, valid values include: ``RUNNING``, ``EXECUTE_TIMEOUT``, #: ``WAITING``, EXECUTE_FAIL``, ``EXECUTE_SUCCESS`` status = resource.Body("status") #: task created at created_at = resource.Body("created_at") #: task finished at finished_at = resource.Body("finished_at")
class BindResource(resource.Resource): resources_key = "success_resources" base_path = "/backuppolicyresources" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True #: Properties resource_id = resource.Body("resource_id") os_vol_host_attr = resource.Body("os_vol_host_attr") availability_zone = resource.Body("availability_zone") resource_type = resource.Body("resource_type") def bind_resources(self, session, backup_policy_id, resources): """bind resources to backup policy :param session: openstack session :param backup_policy_id: backup policy id :param resources: resources to bound, should be a list of volume id :return: """ _resources = [ dict(resource_id=volume_id, resource_type="volume") for volume_id in resources ] body = {"backup_policy_id": backup_policy_id, "resources": _resources} endpoint_override = self.service.get_endpoint_override() response = session.post(self.base_path, endpoint_filter=self.service, endpoint_override=endpoint_override, json=body, headers={}) self._translate_response(response) return self
def __init__(self, plugins=None): """User preference for each service. :param plugins: List of entry point namespaces to load. Create a new :class:`~openstack.profile.Profile` object with no preferences defined, but knowledge of the services. Services are identified by their service type, e.g.: 'identity', 'compute', etc. """ self._services = {} self._add_service(anti_ddos_service.AntiDDosService(version="v1")) self._add_service(block_store_service.BlockStoreService(version="v2")) self._add_service(compute_service.ComputeService(version="v2")) self._add_service(cts_service.CTSService(version="v1")) self._add_service(dms_service.DMSService(version="v1")) self._add_service(identity_service.IdentityService(version="v3")) self._add_service(image_service.ImageService(version="v2")) self._add_service(kms_service.KMSService(version="v1")) self._add_service(maas_service.MaaSService(version="v1")) self._add_service(network_service.NetworkService(version="v2.0")) self._add_service( orchestration_service.OrchestrationService(version="v1")) self._add_service(smn_service.SMNService(version="v2")) # QianBiao.NG HuaWei Services self._add_service(dns_service.DNSService(version="v2")) self._add_service(cloud_eye_service.CloudEyeService(version="v1")) ass = auto_scaling_service.AutoScalingService(version="v1") self._add_service(ass) vbs_v2 = volume_backup_service.VolumeBackupService(version="v2") self._add_service(vbs_v2) self._add_service(map_reduce_service.MapReduceService(version="v1")) self._add_service(evs_service.EvsServiceV2_1(version='v2.1')) self._add_service(evs_service.EvsService(version='v2')) self._add_service(ecs_service.EcsService(version='v1')) self._add_service(ecs_service.EcsServiceV1_1(version='v1.1')) self._add_service(vpc_service.VpcService(version='v2.0')) self._add_service(bms_service.BmsService(version='v1')) self._add_service(lb_service.LoadBalancerService(version='v1')) # not support below service # self._add_service(message_service.MessageService(version="v1")) # self._add_service(cluster_service.ClusterService(version="v1")) # self._add_service(database_service.DatabaseService(version="v1")) # self._add_service(alarm_service.AlarmService(version="v2")) # self._add_service(bare_metal_service.BareMetalService(version="v1")) # self._add_service(key_manager_service.KeyManagerService(version="v1")) # self._add_service( # object_store_service.ObjectStoreService(version="v1")) self._add_service(rds_service.RDSService(version="v1")) self._add_service(cdn_service.CDNService(version='v1')) # self._add_service(rds_os_service.RDSService(version="v1")) # self._add_service(telemetry_service.TelemetryService(version="v2")) # self._add_service(workflow_service.WorkflowService(version="v2")) if plugins: for plugin in plugins: self._load_plugin(plugin) self.service_keys = sorted(self._services.keys())
class BackupPolicy(resource.Resource): """Cloud Backup""" resources_key = "backup_policies" base_path = "/backuppolicy" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True allow_delete = True allow_list = True allow_update = True #: Properties #: Backup Policy id id = resource.Body("backup_policy_id") #: Backup Policy name name = resource.Body("backup_policy_name") #: Backup Policy resource count policy_resource_count = resource.Body("policy_resource_count") #: Backup Policy schedule detail scheduled_policy = resource.Body("scheduled_policy", type=SchedulePolicy) def execute(self, session): """execute backup policy immediately :param session: openstack session :return: request response """ url = utils.urljoin(self.base_path, self.id, "action") endpoint_override = self.service.get_endpoint_override() return session.post(url, endpoint_filter=self.service, endpoint_override=endpoint_override, headers={}, json=None)
class Backup(resource.Resource): """Backup""" resource_key = "backup" resources_key = "backups" base_path = "/backups" service = volume_backup_service.VolumeBackupService() _query_mapping = resource.QueryParameters("name", "status", "volume_id", "offset") # capabilities allow_create = True allow_delete = True allow_list = True allow_get = True #: Properties #: The volume to be backup volume_id = resource.Body("volume_id") #: The snapshot of volume which will be backup snapshot_id = resource.Body("snapshot_id") #: no meaning for now, first time full backup, then incremental by default incremental = resource.Body("incremental", type=bool) #: Force backup force = resource.Body("force", type=bool) #: backup name name = resource.Body("name") #: backup description description = resource.Body("description") #: backup status status = resource.Body("status") #: backup availability zone availability_zone = resource.Body("availability_zone") #: backup size size = resource.Body("size") #: backup object count object_count = resource.Body("object_count") #: The container backup in container = resource.Body("container") #: The container create at created_at = resource.Body("created_at") #: The tenant which backup belongs to tenant_id = resource.Body("os-bak-tenant-attr:tenant_id") #: Backup metadata service_metadata = resource.Body("service_metadata") #: Backup fail reason fail_reason = resource.Body("fail_reason") #: Id of tenant. project_id = resource.Body("project_id") #: URL of backup. links = resource.Body("links", type=list) #: Update time. updated_at = resource.Body("updated_at") #: Current time. data_timestamp = resource.Body("data_timestamp") #: Whether there is a dependent backup. has_dependent_backups = resource.Body("has_dependent_backups", type=bool) #: Whether it is an incremental backup. is_incremental = resource.Body("is_incremental", type=bool)
def test_service(self): sot = volume_backup_service.VolumeBackupService() self.assertEqual('volume-backup', sot.service_type) self.assertEqual('public', sot.interface) self.assertIsNone(sot.region) self.assertIsNone(sot.service_name) self.assertEqual(2, len(sot.valid_versions)) self.assertEqual('v1', sot.valid_versions[0].module) self.assertEqual('v1', sot.valid_versions[0].path) self.assertEqual('v2', sot.valid_versions[1].module) self.assertEqual('v2', sot.valid_versions[1].path)
class LindedResource(resource.Resource): base_path = "/backuppolicyresources" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True #: Properties resource_id = resource.Body("resource_id") resource_type = resource.Body("resource_type") availability_zone = resource.Body("availability_zone") os_vol_host_attr = resource.Body("os_vol_host_attr") message = resource.Body("message") code = resource.Body("code") success = resource.Body("success", type=bool) def link(self, session, backup_policy_id, resources): """link resources to backup policy :param session: openstack session :param backup_policy_id: backup policy id :param resources: resources to bound, should be a list of volume id :return: """ _resources = [dict(resource_id=volume_id, resource_type="volume") for volume_id in resources] body = { "backup_policy_id": backup_policy_id, "resources": _resources } endpoint_override = self.service.get_endpoint_override() response = session.post(self.base_path, endpoint_filter=self.service, endpoint_override=endpoint_override, json=body, headers={}) result = [] response_json = response.json() if response_json and response_json["success_resources"]: for _resource in response_json["success_resources"]: _resource["success"] = True result.append(LindedResource.new(**_resource)) if response_json and response_json["fail_resources"]: for _resource in response_json["fail_resources"]: _resource["success"] = False result.append(LindedResource.new(**_resource)) return result
class CloudBackup(resource.Resource): """Cloud Backup""" resource_key = "backup" resources_key = "backups" base_path = "/cloudbackups" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True allow_delete = True #: Properties #: The volume to be backup volume_id = resource.Body("volume_id") #: The snapshot reference of volume to be backup snapshot_id = resource.Body("snapshot_id") #: Volume backup name name = resource.Body("name") #: Volume backup description description = resource.Body("description") #: The sync cloud backup job id job_id = resource.Body("job_id") # tag tags = resource.Body("tags", type=list) # key. The maximum length is 36 characters. Character set: Cannot contain non-printing characters # ASCII (0-31), "=", "*", "<", ">", "\", ",", "|", "/" key = resource.Body("key") # value. The maximum length is 43 characters and can be an empty string. Character set: Cannot contain # non-printing characters ASCII (0-31), "=", "*", "<", ">", "\", ",", "|", "/" value = resource.Body("value") def restore(self, session, volume_id): """Restore current backup to volume :param session: openstack session :param volume_id: the volume be restored :return: """ url = utils.urljoin(self.base_path, self.id, "restore") endpoint_override = self.service.get_endpoint_override() body = {"restore": {"volume_id": volume_id}} response = session.post(url, endpoint_filter=self.service, endpoint_override=endpoint_override, json=body, headers={}) self._translate_response(response) return self
class BackupPolicy(resource.Resource): """Cloud Backup""" resources_key = "backup_policies" resource_key = None base_path = "/backuppolicy" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True allow_delete = True allow_list = True allow_update = True #: Properties #: Backup Policy id id = resource.Body("backup_policy_id") #: Backup Policy name name = resource.Body("backup_policy_name") #: Backup Policy resource count policy_resource_count = resource.Body("policy_resource_count") #: Backup Policy schedule detail scheduled_policy = resource.Body("scheduled_policy", type=SchedulePolicy) # code code = resource.Body("code") # message message = resource.Body("message") # tags tags = resource.Body("tags", type=list) # Time zone parameters. The value is UTC+/-HH:mm # The time zone corresponding to the local scheduling time, including the daylight saving time offset. # Such as UTC+08:00, UTC-02:00. When the local time is converted to UTC time, it needs to be used with the week_frequency and start_time fields. time_zone = resource.Body("time_zone") def execute(self, session): """execute backup policy immediately :param session: openstack session :return: request response """ url = utils.urljoin(self.base_path, self.id, "action") endpoint_override = self.service.get_endpoint_override() return session.post(url, endpoint_filter=self.service, endpoint_override=endpoint_override, headers={}, json=None)
class UnlinkedResource(resource.Resource): base_path = "/backuppolicyresources" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True #: Properties resource_id = resource.Body("resource_id") message = resource.Body("message") code = resource.Body("code") success = resource.Body("success", type=bool) def unlink(self, session, backup_policy_id, resources): """unlink resources of backup policy :param session: openstack session :param backup_policy_id: backup policy id :param resources: resources to bound, should be a list of volume id :return: """ _resources = [dict(resource_id=volume_id) for volume_id in resources] body = {"resources": _resources} endpoint_override = self.service.get_endpoint_override() uri = utils.urljoin(self.base_path, backup_policy_id, "deleted_resources") response = session.post(uri, endpoint_filter=self.service, endpoint_override=endpoint_override, json=body, headers={}) result = [] response_json = response.json() if response_json and response_json["success_resources"]: for _resource in response_json["success_resources"]: _resource["success"] = True result.append(UnlinkedResource.new(**_resource)) if response_json and response_json["fail_resources"]: for _resource in response_json["fail_resources"]: _resource["success"] = False result.append(UnlinkedResource.new(**_resource)) return result
class Job(resource.Resource): """Volume backup Job Resource""" base_path = "/jobs" service = volume_backup_service.VolumeBackupService() # capabilities allow_get = True #: Properties id = resource.Body("job_id") type = resource.Body("job_type") begin_time = resource.Body("begin_time") end_time = resource.Body("end_time") entities = resource.Body("entities") status = resource.Body("status") error_code = resource.Body("error_code") fail_reason = resource.Body("fail_reason") message = resource.Body("message") code = resource.Body("code") sub_jobs = resource.Body("sub_jobs")
class CloudBackup(resource.Resource): """Cloud Backup""" resource_key = "backup" resources_key = "backups" base_path = "/cloudbackups" service = volume_backup_service.VolumeBackupService() # capabilities allow_create = True allow_delete = True #: Properties #: The volume to be backup volume_id = resource.Body("volume_id") #: The snapshot reference of volume to be backup snapshot_id = resource.Body("snapshot_id") #: Volume backup name name = resource.Body("name") #: Volume backup description description = resource.Body("description") #: The sync cloud backup job id job_id = resource.Body("id") def restore(self, session, volume_id): """Restore current backup to volume :param session: openstack session :param volume_id: the volume be restored :return: """ url = utils.urljoin(self.base_path, self.id, "restore") endpoint_override = self.service.get_endpoint_override() body = {"restore": {"volume_id": volume_id}} response = session.post(url, endpoint_filter=self.service, endpoint_override=endpoint_override, json=body, headers={}) self._translate_response(response) return self