Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
    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())
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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
Ejemplo n.º 11
0
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")
Ejemplo n.º 12
0
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