From e9d56ac47d588856198e1c67c2e071f36aa53730 Mon Sep 17 00:00:00 2001 From: Lance52259 Date: Wed, 14 Apr 2021 10:21:35 +0800 Subject: [PATCH 1/2] feat: new cbr task sdk supported --- openstack/cbr/v3/tasks/requests.go | 53 +++++++++++ openstack/cbr/v3/tasks/results.go | 141 +++++++++++++++++++++++++++++ openstack/cbr/v3/tasks/urls.go | 11 +++ 3 files changed, 205 insertions(+) create mode 100644 openstack/cbr/v3/tasks/requests.go create mode 100644 openstack/cbr/v3/tasks/results.go create mode 100644 openstack/cbr/v3/tasks/urls.go diff --git a/openstack/cbr/v3/tasks/requests.go b/openstack/cbr/v3/tasks/requests.go new file mode 100644 index 00000000..8133b523 --- /dev/null +++ b/openstack/cbr/v3/tasks/requests.go @@ -0,0 +1,53 @@ +package tasks + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +type ListOpts struct { + EndTime string `q:"end_time"` + EnterpriseProjectId string `q:"enterprise_project_id"` + Limit int `q:"limit"` + Offset int `q:"offset"` + OperationType string `q:"operation_type"` + ProviderId string `q:"provider_id"` + ResourceId string `q:"resource_id"` + ResourceName string `q:"resource_name"` + StartTime string `q:"start_time"` + Status string `q:"status"` + VaultId string `q:"vault_id"` + VaultName string `q:"vault_name"` +} + +type ListOptsBuilder interface { + ToTaskListQuery() (string, error) +} + +func (opts ListOpts) ToTaskListQuery() (string, error) { + q, err := golangsdk.BuildQueryString(opts) + if err != nil { + return "", err + } + return q.String(), err +} + +func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager { + url := listURL(client) + if opts != nil { + query, err := opts.ToTaskListQuery() + if err != nil { + return pagination.Pager{Err: err} + } + url += query + } + + return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page { + return TaskPage{pagination.SinglePageBase(r)} + }) +} + +func Get(client *golangsdk.ServiceClient, id string) (r GetResult) { + _, r.Err = client.Get(singleURL(client, id), &r.Body, nil) + return +} diff --git a/openstack/cbr/v3/tasks/results.go b/openstack/cbr/v3/tasks/results.go new file mode 100644 index 00000000..e6e32d25 --- /dev/null +++ b/openstack/cbr/v3/tasks/results.go @@ -0,0 +1,141 @@ +package tasks + +import ( + "github.com/huaweicloud/golangsdk" + "github.com/huaweicloud/golangsdk/pagination" +) + +type commonResult struct { + golangsdk.Result +} + +type GetResult struct { + commonResult +} + +type TaskPage struct { + pagination.SinglePageBase +} + +type OperationLog struct { + CheckpointID string `json:"checkpoint_id"` + CreatedAt string `json:"created_at"` + EndedAt string `json:"ended_at"` + ErrorInfo OpErrorInfo `json:"error_info"` + ExtraInfo OpExtraInfo `json:"extra_info"` + ID string `json:"id"` + OperationType string `json:"operation_type"` + PolicyID string `json:"policy_id"` + ProjectID string `json:"project_id"` + ProviderID string `json:"provider_id"` + StartedAt string `json:"started_at"` + Status string `json:"status"` + UpdatedAt string `json:"updated_at"` + VaultID string `json:"vault_id"` + VaultName string `json:"vault_name"` +} + +type OpErrorInfo struct { + Code string `json:"code"` + Message string `json:"message"` +} + +type OpExtraInfo struct { + Backup OpExtendInfoBackup `json:"backup"` + Common OpExtendInfoCommon `json:"common"` + Delete OpExtendInfoDelete `json:"delete"` + Sync OpExtendInfoSync `json:"sync"` + RemoveResources OpExtendInfoRemoveResources `json:"remove_resources"` + Replication OpExtendInfoReplication `json:"replication"` + Resource Resource `json:"resource"` + Restore OpExtendInfoRestore `json:"restore"` + VaultDelete OpExtendInfoVaultDelete `json:"vault_delete"` +} + +type OpExtendInfoBackup struct { + AppConsistencyErrorCode string `json:"app_consistency_error_code"` + AppConsistencyErrorMessage string `json:"app_consistency_error_message"` + AppConsistencyStatus string `json:"app_consistency_status"` + BackupID string `json:"backup_id"` + BackupName string `json:"backup_name"` + Incremental string `json:"incremental"` +} + +type OpExtendInfoCommon struct { + Progress int `json:"progress"` + RequestID string `json:"request_id"` + TaskID string `json:"task_id"` +} + +type OpExtendInfoDelete struct { + BackupID string `json:"backup_id"` + BackupName string `json:"backup_name"` +} + +type OpExtendInfoSync struct { + SyncBackupNum int `json:"sync_backup_num"` + DeleteBackupNum int `json:"delete_backup_num"` + ErrSyncBackupNum int `json:"err_sync_backup_num"` +} + +type OpExtendInfoRemoveResources struct { + FailCount int `json:"fail_count"` + TotalCount int `json:"total_count"` + Resources []Resource `json:"resources"` +} + +type Resource struct { + ExtraInfo ResourceExtraInfo `json:"extra_info"` + ID string `json:"id"` + Name string `json:"name"` + Type string `json:"type"` +} + +type OpExtendInfoReplication struct { + DestinationBackupID string `json:"destination_backup_id"` + DestinationCheckpointID string `json:"destination_checkpoint_id"` + DestinationProjectID string `json:"destination_project_id"` + DestinationRegion string `json:"destination_region"` + SourceBackupID string `json:"source_backup_id"` + SourceCheckpointID string `json:"source_checkpoint_id"` + SourceProjectID string `json:"source_project_id"` + SourceRegion string `json:"source_region"` + SourceBackupName string `json:"source_backup_name"` + DestinationBackupName string `json:"destination_backup_name"` +} + +type ResourceExtraInfo struct { + ExcludeVolumes []string `json:"exclude_volumes"` + IncludeVolumes []ResourceExtraInfoIncludeVolumes `json:"include_volumes"` +} + +type ResourceExtraInfoIncludeVolumes struct { + ID string `json:"id"` + OsVersion string `json:"os_version"` +} + +type OpExtendInfoRestore struct { + BackupID string `json:"backup_id"` + BackupName string `json:"backup_name"` + TargetResourceId string `json:"target_resource_id"` + TargetResourceName string `json:"target_resource_name"` +} + +type OpExtendInfoVaultDelete struct { + FailCount int `json:"fail_count"` + TotalCount int `json:"total_count"` +} + +func (r commonResult) Extract() (*OperationLog, error) { + var s struct { + Operation *OperationLog `json:"operation_log"` + } + err := r.ExtractInto(&s) + return s.Operation, err +} + +func ExtractTasks(r pagination.Page) (*[]OperationLog, error) { + var s []OperationLog + err := r.(TaskPage).Result.ExtractIntoSlicePtr(&s, "operation_log") + return &s, err +} diff --git a/openstack/cbr/v3/tasks/urls.go b/openstack/cbr/v3/tasks/urls.go new file mode 100644 index 00000000..824f65af --- /dev/null +++ b/openstack/cbr/v3/tasks/urls.go @@ -0,0 +1,11 @@ +package tasks + +import "github.com/huaweicloud/golangsdk" + +func listURL(client *golangsdk.ServiceClient) string { + return client.ServiceURL("operation-logs") +} + +func singleURL(client *golangsdk.ServiceClient, id string) string { + return client.ServiceURL("operation-logs", id) +} From 455a501a6bb2f012915500dbf14dd31b65674f9a Mon Sep 17 00:00:00 2001 From: Lance52259 Date: Wed, 21 Apr 2021 16:48:59 +0800 Subject: [PATCH 2/2] feat: new cbr task sdk supported --- openstack/cbr/v3/tasks/requests.go | 4 ++-- openstack/cbr/v3/tasks/urls.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/openstack/cbr/v3/tasks/requests.go b/openstack/cbr/v3/tasks/requests.go index 8133b523..bb0f2096 100644 --- a/openstack/cbr/v3/tasks/requests.go +++ b/openstack/cbr/v3/tasks/requests.go @@ -33,7 +33,7 @@ func (opts ListOpts) ToTaskListQuery() (string, error) { } func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Pager { - url := listURL(client) + url := rootURL(client) if opts != nil { query, err := opts.ToTaskListQuery() if err != nil { @@ -48,6 +48,6 @@ func List(client *golangsdk.ServiceClient, opts ListOptsBuilder) pagination.Page } func Get(client *golangsdk.ServiceClient, id string) (r GetResult) { - _, r.Err = client.Get(singleURL(client, id), &r.Body, nil) + _, r.Err = client.Get(resourceURL(client, id), &r.Body, nil) return } diff --git a/openstack/cbr/v3/tasks/urls.go b/openstack/cbr/v3/tasks/urls.go index 824f65af..d01fa67f 100644 --- a/openstack/cbr/v3/tasks/urls.go +++ b/openstack/cbr/v3/tasks/urls.go @@ -2,10 +2,10 @@ package tasks import "github.com/huaweicloud/golangsdk" -func listURL(client *golangsdk.ServiceClient) string { +func rootURL(client *golangsdk.ServiceClient) string { return client.ServiceURL("operation-logs") } -func singleURL(client *golangsdk.ServiceClient, id string) string { +func resourceURL(client *golangsdk.ServiceClient, id string) string { return client.ServiceURL("operation-logs", id) }