From cf865c726c641911d1d41a8b830f18cff4c19d33 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Tue, 11 Sep 2018 19:17:00 +0800 Subject: [PATCH] Add compute tags support --- .../compute/v2/extensions/tags/requests.go | 52 +++++++++++++++++++ .../compute/v2/extensions/tags/results.go | 38 ++++++++++++++ openstack/compute/v2/extensions/tags/urls.go | 17 ++++++ 3 files changed, 107 insertions(+) create mode 100644 openstack/compute/v2/extensions/tags/requests.go create mode 100644 openstack/compute/v2/extensions/tags/results.go create mode 100644 openstack/compute/v2/extensions/tags/urls.go diff --git a/openstack/compute/v2/extensions/tags/requests.go b/openstack/compute/v2/extensions/tags/requests.go new file mode 100644 index 000000000..0c6dad6b1 --- /dev/null +++ b/openstack/compute/v2/extensions/tags/requests.go @@ -0,0 +1,52 @@ +package tags + +import ( + "github.com/huaweicloud/golangsdk" +) + +// CreateOptsBuilder describes struct types that can be accepted by the Create call. +// The CreateOpts struct in this package does. +type CreateOptsBuilder interface { + // Returns value that can be passed to json.Marshal + ToTagsCreateMap() (map[string]interface{}, error) +} + +// CreateOpts implements CreateOptsBuilder +type CreateOpts struct { + // Tags is a set of tags. + Tags []string `json:"tags" required:"true"` +} + +// ToImageCreateMap assembles a request body based on the contents of +// a CreateOpts. +func (opts CreateOpts) ToTagsCreateMap() (map[string]interface{}, error) { + b, err := golangsdk.BuildRequestBody(opts, "") + if err != nil { + return nil, err + } + + return b, nil +} + +// Create implements create tags request +func Create(client *golangsdk.ServiceClient, server_id string, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToTagsCreateMap() + if err != nil { + r.Err = err + return r + } + _, r.Err = client.Put(createURL(client, server_id), b, &r.Body, &golangsdk.RequestOpts{OkCodes: []int{200}}) + return +} + +// Get implements tags get request +func Get(client *golangsdk.ServiceClient, server_id string) (r GetResult) { + _, r.Err = client.Get(getURL(client, server_id), &r.Body, nil) + return +} + +// Delete implements image delete request +func Delete(client *golangsdk.ServiceClient, server_id string) (r DeleteResult) { + _, r.Err = client.Delete(deleteURL(client, server_id), nil) + return +} diff --git a/openstack/compute/v2/extensions/tags/results.go b/openstack/compute/v2/extensions/tags/results.go new file mode 100644 index 000000000..7a5b149c2 --- /dev/null +++ b/openstack/compute/v2/extensions/tags/results.go @@ -0,0 +1,38 @@ +package tags + +import ( + "github.com/huaweicloud/golangsdk" +) + +type commonResult struct { + golangsdk.Result +} + +// Tags model +type Tags struct { + // Tags is a list of any tags. Tags are arbitrarily defined strings + // attached to a resource. + Tags []string `json:"tags"` +} + +// Extract interprets any commonResult as a Tags. +func (r commonResult) Extract() (*Tags, error) { + var s *Tags + err := r.ExtractInto(&s) + return s, err +} + +// CreateResult represents the result of a Create operation +type CreateResult struct { + commonResult +} + +// GetResult represents the result of a Get operation +type GetResult struct { + commonResult +} + +//DeleteResult model +type DeleteResult struct { + golangsdk.ErrResult +} diff --git a/openstack/compute/v2/extensions/tags/urls.go b/openstack/compute/v2/extensions/tags/urls.go new file mode 100644 index 000000000..9e5aab854 --- /dev/null +++ b/openstack/compute/v2/extensions/tags/urls.go @@ -0,0 +1,17 @@ +package tags + +import ( + "github.com/huaweicloud/golangsdk" +) + +func createURL(c *golangsdk.ServiceClient, server_id string) string { + return c.ServiceURL("servers", server_id, "tags") +} + +func getURL(c *golangsdk.ServiceClient, server_id string) string { + return c.ServiceURL("servers", server_id, "tags") +} + +func deleteURL(c *golangsdk.ServiceClient, server_id string) string { + return c.ServiceURL("servers", server_id, "tags") +}