Skip to content

Commit eb62adb

Browse files
committed
Compute V2: implement Add method for Tags
Implement compute/v2/extensions/tags.Add. Update package documentation.
1 parent d80b289 commit eb62adb

File tree

5 files changed

+61
-2
lines changed

5 files changed

+61
-2
lines changed

openstack/compute/v2/extensions/tags/doc.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,20 @@ Example to Replace all Tags on a server
3333
3434
client.Microversion = "2.62"
3535
36-
newTags, err := tags.ReplaceAll(client, serverID, tags. tags.ReplaceAllOpts{Tags: []string{"foo", "bar"}}).Extract()
36+
newTags, err := tags.ReplaceAll(client, serverID, tags.ReplaceAllOpts{Tags: []string{"foo", "bar"}}).Extract()
3737
if err != nil {
3838
log.Fatal(err)
3939
}
4040
4141
fmt.Printf("New tags: %v\n", newTags)
42+
43+
Example to Add a new Tag on a server
44+
45+
client.Microversion = "2.62"
46+
47+
err := tags.Add(client, serverID, "foo").ExtractErr()
48+
if err != nil {
49+
log.Fatal(err)
50+
}
4251
*/
4352
package tags

openstack/compute/v2/extensions/tags/requests.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (opts ReplaceAllOpts) ToTagsReplaceAllMap() (map[string]interface{}, error)
3535
return gophercloud.BuildRequestBody(opts, "")
3636
}
3737

38-
// ReplaceAll replaces all tags on a server.
38+
// ReplaceAll replaces all Tags on a server.
3939
func ReplaceAll(client *gophercloud.ServiceClient, serverID string, opts ReplaceAllOptsBuilder) (r ReplaceAllResult) {
4040
b, err := opts.ToTagsReplaceAllMap()
4141
url := replaceAllURL(client, serverID)
@@ -48,3 +48,12 @@ func ReplaceAll(client *gophercloud.ServiceClient, serverID string, opts Replace
4848
})
4949
return
5050
}
51+
52+
// Add adds a new Tag on a server.
53+
func Add(client *gophercloud.ServiceClient, serverID, tag string) (r AddResult) {
54+
url := addURL(client, serverID, tag)
55+
_, r.Err = client.Put(url, nil, nil, &gophercloud.RequestOpts{
56+
OkCodes: []int{201, 204},
57+
})
58+
return
59+
}

openstack/compute/v2/extensions/tags/results.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,8 @@ func (r CheckResult) Extract() (bool, error) {
4040
type ReplaceAllResult struct {
4141
commonResult
4242
}
43+
44+
// AddResult is the result from the Add operation.
45+
type AddResult struct {
46+
gophercloud.ErrResult
47+
}

openstack/compute/v2/extensions/tags/testing/requests_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,35 @@ func TestReplaceAll(t *testing.T) {
8787
th.AssertNoErr(t, err)
8888
th.AssertDeepEquals(t, expected, actual)
8989
}
90+
91+
func TestAddCreated(t *testing.T) {
92+
th.SetupHTTP()
93+
defer th.TeardownHTTP()
94+
95+
th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
96+
th.TestMethod(t, r, "PUT")
97+
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
98+
99+
w.Header().Add("Content-Type", "application/json")
100+
w.WriteHeader(http.StatusCreated)
101+
})
102+
103+
err := tags.Add(client.ServiceClient(), "uuid1", "foo").ExtractErr()
104+
th.AssertNoErr(t, err)
105+
}
106+
107+
func TestAddExists(t *testing.T) {
108+
th.SetupHTTP()
109+
defer th.TeardownHTTP()
110+
111+
th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
112+
th.TestMethod(t, r, "PUT")
113+
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)
114+
115+
w.Header().Add("Content-Type", "application/json")
116+
w.WriteHeader(http.StatusNoContent)
117+
})
118+
119+
err := tags.Add(client.ServiceClient(), "uuid1", "foo").ExtractErr()
120+
th.AssertNoErr(t, err)
121+
}

openstack/compute/v2/extensions/tags/urls.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,7 @@ func checkURL(c *gophercloud.ServiceClient, serverID, tag string) string {
2626
func replaceAllURL(c *gophercloud.ServiceClient, serverID string) string {
2727
return rootURL(c, serverID)
2828
}
29+
30+
func addURL(c *gophercloud.ServiceClient, serverID, tag string) string {
31+
return resourceURL(c, serverID, tag)
32+
}

0 commit comments

Comments
 (0)