From a737492bd90642952558e186e02dbb74fa0852cf Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Mon, 29 Oct 2018 16:48:18 +0800 Subject: [PATCH 1/6] Add maas support --- openstack/client.go | 6 +++ openstack/maas/v1/task/requests.go | 83 ++++++++++++++++++++++++++++ openstack/maas/v1/task/results.go | 86 ++++++++++++++++++++++++++++++ openstack/maas/v1/task/urls.go | 13 +++++ 4 files changed, 188 insertions(+) create mode 100644 openstack/maas/v1/task/requests.go create mode 100644 openstack/maas/v1/task/results.go create mode 100644 openstack/maas/v1/task/urls.go diff --git a/openstack/client.go b/openstack/client.go index 8ef6f0d1e..d99aafa99 100644 --- a/openstack/client.go +++ b/openstack/client.go @@ -757,3 +757,9 @@ func NewVBS(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golan sc.ResourceBase = sc.Endpoint return sc, err } + +// NewMAASV1 creates a ServiceClient that may be used to access the MAAS service. +func NewMAASV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { + sc, err := initClientOpts(client, eo, "maasv1") + return sc, err +} diff --git a/openstack/maas/v1/task/requests.go b/openstack/maas/v1/task/requests.go new file mode 100644 index 000000000..4da1b4b0c --- /dev/null +++ b/openstack/maas/v1/task/requests.go @@ -0,0 +1,83 @@ +package task + +import ( + "log" + + "github.com/huaweicloud/golangsdk" +) + +var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, +} + +type CreateOpts struct { + SrcNode SrcNodeOpts `json:"src_node" required:"true"` + DstNode DstNodeOpts `json:"dst_node" required:"true"` + EnableKMS bool `json:"enableKMS" required:"true"` + ThreadNum int `json:"thread_num" required:"true"` + Description string `json:"description,omitempty"` + SmnInfo SmnInfoOpts `json:"smnInfo,omitempty"` +} + +type SrcNodeOpts struct { + Region string `json:"region" required:"true"` + AK string `json:"ak" required:"true"` + SK string `json:"sk" required:"true"` + ObjectKey ObjectKeyOpts `json:"object_key" required:"true"` + Bucket string `json:"bucket" required:"true"` + CloudType string `json:"cloud_type,omitempty"` +} + +type ObjectKeyOpts struct { + Path string `json:"path" required:"true"` + Keys []string `json:"keys" required:"true"` +} + +type DstNodeOpts struct { + Region string `json:"region" required:"true"` + AK string `json:"ak" required:"true"` + SK string `json:"sk" required:"true"` + ObjectKey ObjectKeyOpts `json:"object_key" required:"true"` + Bucket string `json:"bucket" required:"true"` +} + +type SmnInfoOpts struct { + TopicUrn string `json:"topicUrn" required:"true"` + Language string `json:"language" required:"true"` + TriggerConditions []string `json:"triggerConditions" required:"true"` +} + +type CreateOptsBuilder interface { + ToTaskCreateMap() (map[string]interface{}, error) +} + +func (opts CreateOpts) ToTaskCreateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "") +} + +func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToTaskCreateMap() + if err != nil { + r.Err = err + return + } + log.Printf("[DEBUG] create url:%q, body=%#v", createURL(c), b) + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Post(rootURL(c), b, &r.Body, reqOpt) + return +} + +func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Get(resourceURL(c, id), &r.Body, reqOpt) + return +} + +func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) { + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Delete(resourceURL(c, id), reqOpt) + return +} diff --git a/openstack/maas/v1/task/results.go b/openstack/maas/v1/task/results.go new file mode 100644 index 000000000..cd7771596 --- /dev/null +++ b/openstack/maas/v1/task/results.go @@ -0,0 +1,86 @@ +package task + +import "github.com/huaweicloud/golangsdk" + +type Task struct { + ID string `json:"id"` + TaskName string `json:"task_name"` +} + +type TaskResult struct { + ID string `json:"id"` + Name string `json:"name"` + SrcNode SrcNode `json:"src_node"` + DstNode DstNode `json:"dst_node"` + ThreadNum int `json:"thread_num"` + Status int `json:"status"` + Progress float64 `json:"progress"` + MigrateSpeed int64 `json:"migrate_speed"` + EngineKMS bool `json:"enableKMS"` + Description string `json:"description"` + ErrorReason ErrorReason `json:"error_reason"` + TotalSize int64 `json:"total_size"` + CompleteSize int64 `json:"complete_size"` + StartTime int64 `json:"start_time"` + LeftTime int64 `json:"left_time"` + TotalTime int64 `json:"total_time"` + SuccessNum int64 `json:"success_num"` + FailNum int64 `json:"fail_num"` + TotalNum int64 `json:"total_num"` + SmnInfo SmnInfo `json:"smnInfo"` +} + +type SrcNode struct { + Region string `json:"region"` + ObjectKey []string `json:"object_key"` + Bucket string `json:"bucket"` +} + +type DstNode struct { + Region string `json:"region"` + ObjectKey []string `json:"object_key"` + Bucket string `json:"bucket"` +} + +type ErrorReason struct { + ErrorCode string `json:"error_code"` + ErrorMsg string `json:"error_msg"` +} + +type SmnInfo struct { + NotifyResult string `json:"notifyResult"` + NotifyErrorMessage string `json:"notifyErrorMessage"` + TopicName string `json:"topicName"` +} + +type CreateResult struct { + golangsdk.Result +} + +func (r CreateResult) Extract() (*TaskResult, error) { + var s TaskResult + err := r.ExtractInto(&s) + return &s, err +} + +func (r CreateResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "") +} + +type GetResult struct { + golangsdk.Result +} + +func (r GetResult) Extract() (*Task, error) { + var s Task + err := r.ExtractInto(&s) + return &s, err +} + +func (r GetResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "") +} + +type DeleteResult struct { + golangsdk.ErrResult +} diff --git a/openstack/maas/v1/task/urls.go b/openstack/maas/v1/task/urls.go new file mode 100644 index 000000000..3238053ee --- /dev/null +++ b/openstack/maas/v1/task/urls.go @@ -0,0 +1,13 @@ +package task + +import "github.com/huaweicloud/golangsdk" + +const resourcePath = "objectstorage/task" + +func rootURL(client *golangsdk.ServiceClient) string { + return client.ServiceURL(client.ProjectID, resourcePath) +} + +func resourceURL(client *golangsdk.ServiceClient, id string) string { + return client.ServiceURL(client.ProjectID, resourcePath, id) +} From 7eb2a7d6d1154a177abd2c797e20bdd6f28ad343 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Mon, 29 Oct 2018 16:48:18 +0800 Subject: [PATCH 2/6] Add maas support --- openstack/client.go | 6 +++ openstack/maas/v1/task/requests.go | 77 ++++++++++++++++++++++++++ openstack/maas/v1/task/results.go | 86 ++++++++++++++++++++++++++++++ openstack/maas/v1/task/urls.go | 13 +++++ 4 files changed, 182 insertions(+) create mode 100644 openstack/maas/v1/task/requests.go create mode 100644 openstack/maas/v1/task/results.go create mode 100644 openstack/maas/v1/task/urls.go diff --git a/openstack/client.go b/openstack/client.go index 8ef6f0d1e..d99aafa99 100644 --- a/openstack/client.go +++ b/openstack/client.go @@ -757,3 +757,9 @@ func NewVBS(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golan sc.ResourceBase = sc.Endpoint return sc, err } + +// NewMAASV1 creates a ServiceClient that may be used to access the MAAS service. +func NewMAASV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { + sc, err := initClientOpts(client, eo, "maasv1") + return sc, err +} diff --git a/openstack/maas/v1/task/requests.go b/openstack/maas/v1/task/requests.go new file mode 100644 index 000000000..8e7d3be19 --- /dev/null +++ b/openstack/maas/v1/task/requests.go @@ -0,0 +1,77 @@ +package task + +import ( + "log" + + "github.com/huaweicloud/golangsdk" +) + +var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, +} + +type CreateOpts struct { + SrcNode SrcNodeOpts `json:"src_node" required:"true"` + DstNode DstNodeOpts `json:"dst_node" required:"true"` + EnableKMS bool `json:"enableKMS" required:"true"` + ThreadNum int `json:"thread_num" required:"true"` + Description string `json:"description,omitempty"` + SmnInfo SmnInfoOpts `json:"smnInfo,omitempty"` +} + +type SrcNodeOpts struct { + Region string `json:"region" required:"true"` + AK string `json:"ak" required:"true"` + SK string `json:"sk" required:"true"` + ObjectKey string `json:"object_key" required:"true"` + Bucket string `json:"bucket" required:"true"` + CloudType string `json:"cloud_type,omitempty"` +} + +type DstNodeOpts struct { + Region string `json:"region" required:"true"` + AK string `json:"ak" required:"true"` + SK string `json:"sk" required:"true"` + ObjectKey string `json:"object_key,omitempty"` + Bucket string `json:"bucket" required:"true"` +} + +type SmnInfoOpts struct { + TopicUrn string `json:"topicUrn" required:"true"` + Language string `json:"language" required:"true"` + TriggerConditions []string `json:"triggerConditions" required:"true"` +} + +type CreateOptsBuilder interface { + ToTaskCreateMap() (map[string]interface{}, error) +} + +func (opts CreateOpts) ToTaskCreateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "") +} + +func Create(c *golangsdk.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToTaskCreateMap() + if err != nil { + r.Err = err + return + } + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Post(rootURL(c), b, &r.Body, reqOpt) + return +} + +func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Get(resourceURL(c, id), &r.Body, reqOpt) + return +} + +func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) { + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}, + MoreHeaders: RequestOpts.MoreHeaders} + _, r.Err = c.Delete(resourceURL(c, id), reqOpt) + return +} diff --git a/openstack/maas/v1/task/results.go b/openstack/maas/v1/task/results.go new file mode 100644 index 000000000..cd7771596 --- /dev/null +++ b/openstack/maas/v1/task/results.go @@ -0,0 +1,86 @@ +package task + +import "github.com/huaweicloud/golangsdk" + +type Task struct { + ID string `json:"id"` + TaskName string `json:"task_name"` +} + +type TaskResult struct { + ID string `json:"id"` + Name string `json:"name"` + SrcNode SrcNode `json:"src_node"` + DstNode DstNode `json:"dst_node"` + ThreadNum int `json:"thread_num"` + Status int `json:"status"` + Progress float64 `json:"progress"` + MigrateSpeed int64 `json:"migrate_speed"` + EngineKMS bool `json:"enableKMS"` + Description string `json:"description"` + ErrorReason ErrorReason `json:"error_reason"` + TotalSize int64 `json:"total_size"` + CompleteSize int64 `json:"complete_size"` + StartTime int64 `json:"start_time"` + LeftTime int64 `json:"left_time"` + TotalTime int64 `json:"total_time"` + SuccessNum int64 `json:"success_num"` + FailNum int64 `json:"fail_num"` + TotalNum int64 `json:"total_num"` + SmnInfo SmnInfo `json:"smnInfo"` +} + +type SrcNode struct { + Region string `json:"region"` + ObjectKey []string `json:"object_key"` + Bucket string `json:"bucket"` +} + +type DstNode struct { + Region string `json:"region"` + ObjectKey []string `json:"object_key"` + Bucket string `json:"bucket"` +} + +type ErrorReason struct { + ErrorCode string `json:"error_code"` + ErrorMsg string `json:"error_msg"` +} + +type SmnInfo struct { + NotifyResult string `json:"notifyResult"` + NotifyErrorMessage string `json:"notifyErrorMessage"` + TopicName string `json:"topicName"` +} + +type CreateResult struct { + golangsdk.Result +} + +func (r CreateResult) Extract() (*TaskResult, error) { + var s TaskResult + err := r.ExtractInto(&s) + return &s, err +} + +func (r CreateResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "") +} + +type GetResult struct { + golangsdk.Result +} + +func (r GetResult) Extract() (*Task, error) { + var s Task + err := r.ExtractInto(&s) + return &s, err +} + +func (r GetResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "") +} + +type DeleteResult struct { + golangsdk.ErrResult +} diff --git a/openstack/maas/v1/task/urls.go b/openstack/maas/v1/task/urls.go new file mode 100644 index 000000000..4d774f40f --- /dev/null +++ b/openstack/maas/v1/task/urls.go @@ -0,0 +1,13 @@ +package task + +import "github.com/huaweicloud/golangsdk" + +const resourcePath = "objectstorage/task" + +func rootURL(client *golangsdk.ServiceClient) string { + return client.ServiceURL(resourcePath) +} + +func resourceURL(client *golangsdk.ServiceClient, id string) string { + return client.ServiceURL(client.ProjectID, resourcePath, id) +} From 2e2040e2583155e90956f930f35b89b047c5d7d0 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Mon, 26 Nov 2018 15:01:50 +0800 Subject: [PATCH 3/6] Update requests.go --- openstack/maas/v1/task/requests.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/openstack/maas/v1/task/requests.go b/openstack/maas/v1/task/requests.go index 8e7d3be19..85d10f5d9 100644 --- a/openstack/maas/v1/task/requests.go +++ b/openstack/maas/v1/task/requests.go @@ -1,8 +1,6 @@ package task import ( - "log" - "github.com/huaweicloud/golangsdk" ) From d80cc19f83dad810485ec461dcf6330f320d452a Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 5 Dec 2018 15:01:27 +0800 Subject: [PATCH 4/6] Update maas task --- openstack/maas/v1/task/requests.go | 14 +++++++------- openstack/maas/v1/task/results.go | 22 ++++++++-------------- openstack/maas/v1/task/urls.go | 2 +- 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/openstack/maas/v1/task/requests.go b/openstack/maas/v1/task/requests.go index 85d10f5d9..8d65639ed 100644 --- a/openstack/maas/v1/task/requests.go +++ b/openstack/maas/v1/task/requests.go @@ -9,12 +9,12 @@ var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ } type CreateOpts struct { - SrcNode SrcNodeOpts `json:"src_node" required:"true"` - DstNode DstNodeOpts `json:"dst_node" required:"true"` - EnableKMS bool `json:"enableKMS" required:"true"` - ThreadNum int `json:"thread_num" required:"true"` - Description string `json:"description,omitempty"` - SmnInfo SmnInfoOpts `json:"smnInfo,omitempty"` + SrcNode SrcNodeOpts `json:"src_node" required:"true"` + DstNode DstNodeOpts `json:"dst_node" required:"true"` + EnableKMS bool `json:"enableKMS" required:"true"` + ThreadNum int `json:"thread_num" required:"true"` + Description string `json:"description,omitempty"` + SmnInfo *SmnInfoOpts `json:"smnInfo,omitempty"` } type SrcNodeOpts struct { @@ -68,7 +68,7 @@ func Get(c *golangsdk.ServiceClient, id string) (r GetResult) { } func Delete(c *golangsdk.ServiceClient, id string) (r DeleteResult) { - reqOpt := &golangsdk.RequestOpts{OkCodes: []int{204}, + reqOpt := &golangsdk.RequestOpts{OkCodes: []int{200}, MoreHeaders: RequestOpts.MoreHeaders} _, r.Err = c.Delete(resourceURL(c, id), reqOpt) return diff --git a/openstack/maas/v1/task/results.go b/openstack/maas/v1/task/results.go index cd7771596..398eda952 100644 --- a/openstack/maas/v1/task/results.go +++ b/openstack/maas/v1/task/results.go @@ -3,12 +3,12 @@ package task import "github.com/huaweicloud/golangsdk" type Task struct { - ID string `json:"id"` + ID int64 `json:"id"` TaskName string `json:"task_name"` } type TaskResult struct { - ID string `json:"id"` + ID int64 `json:"id"` Name string `json:"name"` SrcNode SrcNode `json:"src_node"` DstNode DstNode `json:"dst_node"` @@ -16,9 +16,8 @@ type TaskResult struct { Status int `json:"status"` Progress float64 `json:"progress"` MigrateSpeed int64 `json:"migrate_speed"` - EngineKMS bool `json:"enableKMS"` + EnableKMS bool `json:"enableKMS"` Description string `json:"description"` - ErrorReason ErrorReason `json:"error_reason"` TotalSize int64 `json:"total_size"` CompleteSize int64 `json:"complete_size"` StartTime int64 `json:"start_time"` @@ -38,15 +37,10 @@ type SrcNode struct { type DstNode struct { Region string `json:"region"` - ObjectKey []string `json:"object_key"` + ObjectKey string `json:"object_key"` Bucket string `json:"bucket"` } -type ErrorReason struct { - ErrorCode string `json:"error_code"` - ErrorMsg string `json:"error_msg"` -} - type SmnInfo struct { NotifyResult string `json:"notifyResult"` NotifyErrorMessage string `json:"notifyErrorMessage"` @@ -57,8 +51,8 @@ type CreateResult struct { golangsdk.Result } -func (r CreateResult) Extract() (*TaskResult, error) { - var s TaskResult +func (r CreateResult) Extract() (*Task, error) { + var s Task err := r.ExtractInto(&s) return &s, err } @@ -71,8 +65,8 @@ type GetResult struct { golangsdk.Result } -func (r GetResult) Extract() (*Task, error) { - var s Task +func (r GetResult) Extract() (*TaskResult, error) { + var s TaskResult err := r.ExtractInto(&s) return &s, err } diff --git a/openstack/maas/v1/task/urls.go b/openstack/maas/v1/task/urls.go index 4d774f40f..730c57ac3 100644 --- a/openstack/maas/v1/task/urls.go +++ b/openstack/maas/v1/task/urls.go @@ -9,5 +9,5 @@ func rootURL(client *golangsdk.ServiceClient) string { } func resourceURL(client *golangsdk.ServiceClient, id string) string { - return client.ServiceURL(client.ProjectID, resourcePath, id) + return client.ServiceURL(resourcePath, id) } From 02279a6700a3843d7cef44e49f57d57767051bba Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 5 Dec 2018 15:41:37 +0800 Subject: [PATCH 5/6] Format code --- openstack/maas/v1/task/results.go | 44 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/openstack/maas/v1/task/results.go b/openstack/maas/v1/task/results.go index 398eda952..ce68255f1 100644 --- a/openstack/maas/v1/task/results.go +++ b/openstack/maas/v1/task/results.go @@ -8,25 +8,25 @@ type Task struct { } type TaskResult struct { - ID int64 `json:"id"` - Name string `json:"name"` - SrcNode SrcNode `json:"src_node"` - DstNode DstNode `json:"dst_node"` - ThreadNum int `json:"thread_num"` - Status int `json:"status"` - Progress float64 `json:"progress"` - MigrateSpeed int64 `json:"migrate_speed"` - EnableKMS bool `json:"enableKMS"` - Description string `json:"description"` - TotalSize int64 `json:"total_size"` - CompleteSize int64 `json:"complete_size"` - StartTime int64 `json:"start_time"` - LeftTime int64 `json:"left_time"` - TotalTime int64 `json:"total_time"` - SuccessNum int64 `json:"success_num"` - FailNum int64 `json:"fail_num"` - TotalNum int64 `json:"total_num"` - SmnInfo SmnInfo `json:"smnInfo"` + ID int64 `json:"id"` + Name string `json:"name"` + SrcNode SrcNode `json:"src_node"` + DstNode DstNode `json:"dst_node"` + ThreadNum int `json:"thread_num"` + Status int `json:"status"` + Progress float64 `json:"progress"` + MigrateSpeed int64 `json:"migrate_speed"` + EnableKMS bool `json:"enableKMS"` + Description string `json:"description"` + TotalSize int64 `json:"total_size"` + CompleteSize int64 `json:"complete_size"` + StartTime int64 `json:"start_time"` + LeftTime int64 `json:"left_time"` + TotalTime int64 `json:"total_time"` + SuccessNum int64 `json:"success_num"` + FailNum int64 `json:"fail_num"` + TotalNum int64 `json:"total_num"` + SmnInfo SmnInfo `json:"smnInfo"` } type SrcNode struct { @@ -36,9 +36,9 @@ type SrcNode struct { } type DstNode struct { - Region string `json:"region"` - ObjectKey string `json:"object_key"` - Bucket string `json:"bucket"` + Region string `json:"region"` + ObjectKey string `json:"object_key"` + Bucket string `json:"bucket"` } type SmnInfo struct { From 6ddc412a855ed4b6c430a69540a010f9f419fddb Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Wed, 5 Dec 2018 15:56:52 +0800 Subject: [PATCH 6/6] Format more code --- openstack/rts/v1/stacks/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openstack/rts/v1/stacks/utils.go b/openstack/rts/v1/stacks/utils.go index 53a258492..0002ac3b8 100644 --- a/openstack/rts/v1/stacks/utils.go +++ b/openstack/rts/v1/stacks/utils.go @@ -10,7 +10,7 @@ import ( "strings" "github.com/huaweicloud/golangsdk" - "gopkg.in/yaml.v2" + yaml "gopkg.in/yaml.v2" ) // Client is an interface that expects a Get method similar to http.Get. This