diff --git a/openstack/client.go b/openstack/client.go index 1bd88905b..6583c4f27 100644 --- a/openstack/client.go +++ b/openstack/client.go @@ -689,6 +689,14 @@ func NewComputeV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) ( return sc, err } +func NewRdsTagV1(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { + sc, err := initClientOpts(client, eo, "network") + sc.Endpoint = strings.Replace(sc.Endpoint, "vpc", "rds", 1) + sc.Endpoint = sc.Endpoint + "v1/" + sc.ResourceBase = sc.Endpoint + client.ProjectID + "/rds/" + return sc, err +} + //NewAutoScalingService creates a ServiceClient that may be used to access the //auto-scaling service of huawei public cloud func NewAutoScalingService(client *golangsdk.ProviderClient, eo golangsdk.EndpointOpts) (*golangsdk.ServiceClient, error) { diff --git a/openstack/rds/v1/tags/requests.go b/openstack/rds/v1/tags/requests.go new file mode 100644 index 000000000..a5388f37d --- /dev/null +++ b/openstack/rds/v1/tags/requests.go @@ -0,0 +1,79 @@ +package tags + +import ( + "github.com/huaweicloud/golangsdk" +) + +var RequestOpts golangsdk.RequestOpts = golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, +} + +// Tag is a structure of key value pair. +type CreateOpts struct { + //tag key + Key string `json:"key" required:"true"` + //tag value + Value string `json:"value" required:"true"` +} + +type DeleteOpts struct { + //tag key + Key string `json:"key" required:"true"` +} + +// ToCreateMap assembles a request body based on the contents of a +// CreateOpts. +func (opts CreateOpts) ToCreateMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "tag") +} + +// ToDeleteMap assembles a request body based on the contents of a +// DeleteOpts. +func (opts DeleteOpts) ToDeleteMap() (map[string]interface{}, error) { + return golangsdk.BuildRequestBody(opts, "") +} + +type CreateOptsBuilder interface { + ToCreateMap() (map[string]interface{}, error) +} + +type DeleteOptsBuilder interface { + ToDeleteMap() (map[string]interface{}, error) +} + +// Create implements tag create request. +func Create(client *golangsdk.ServiceClient, id string, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToCreateMap() + if err != nil { + r.Err = err + return + } + _, r.Err = client.Post(resourceURL(client, id), b, nil, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders, JSONBody: nil, + }) + return +} + +// Delete implements tag delete request. +func Delete(client *golangsdk.ServiceClient, id string, opts DeleteOptsBuilder) (r DeleteResult) { + b, err := opts.ToDeleteMap() + if err != nil { + r.Err = err + return + } + _, r.Err = client.DeleteWithBody(resourceURL(client, id), b, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders, JSONBody: nil, + }) + return +} + +// Get implements tag get request. +func Get(client *golangsdk.ServiceClient, id string) (r GetResult) { + _, r.Err = client.Get(resourceURL(client, id), &r.Body, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + MoreHeaders: RequestOpts.MoreHeaders, JSONBody: nil, + }) + return +} diff --git a/openstack/rds/v1/tags/results.go b/openstack/rds/v1/tags/results.go new file mode 100644 index 000000000..6bd27da54 --- /dev/null +++ b/openstack/rds/v1/tags/results.go @@ -0,0 +1,39 @@ +package tags + +import ( + "github.com/huaweicloud/golangsdk" +) + +type Tag struct { + //tag key + Key string `json:"key"` + //tag value + Value string `json:"value"` +} + +type RespTags struct { + //contains list of tags, i.e.key value pair + Tags []Tag `json:"tags"` +} + +type commonResult struct { + golangsdk.Result +} + +type CreateResult struct { + golangsdk.ErrResult +} + +type DeleteResult struct { + golangsdk.ErrResult +} + +type GetResult struct { + commonResult +} + +func (r commonResult) Extract() (*RespTags, error) { + var response RespTags + err := r.ExtractInto(&response) + return &response, err +} diff --git a/openstack/rds/v1/tags/urls.go b/openstack/rds/v1/tags/urls.go new file mode 100644 index 000000000..e3f20e73e --- /dev/null +++ b/openstack/rds/v1/tags/urls.go @@ -0,0 +1,7 @@ +package tags + +import "github.com/huaweicloud/golangsdk" + +func resourceURL(c *golangsdk.ServiceClient, id string) string { + return c.ServiceURL(id, "tags") +}