Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compute V2: add DeleteAll method for Tags #1700

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions openstack/compute/v2/extensions/tags/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,23 @@ Example to Add a new Tag on a server
if err != nil {
log.Fatal(err)
}

Example to Delete a Tag on a server

client.Microversion = "2.62"

err := tags.Delete(client, serverID, "foo").ExtractErr()
if err != nil {
log.Fatal(err)
}

Example to Delete all Tags on a server

client.Microversion = "2.62"

err := tags.DeleteAll(client, serverID).ExtractErr()
if err != nil {
log.Fatal(err)
}
*/
package tags
18 changes: 18 additions & 0 deletions openstack/compute/v2/extensions/tags/requests.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,21 @@ func Add(client *gophercloud.ServiceClient, serverID, tag string) (r AddResult)
})
return
}

// Delete removes a tag from a server.
func Delete(client *gophercloud.ServiceClient, serverID, tag string) (r DeleteResult) {
url := deleteURL(client, serverID, tag)
_, r.Err = client.Delete(url, &gophercloud.RequestOpts{
OkCodes: []int{204},
})
return
}

// DeleteAll removes all tag from a server.
func DeleteAll(client *gophercloud.ServiceClient, serverID string) (r DeleteResult) {
url := deleteAllURL(client, serverID)
_, r.Err = client.Delete(url, &gophercloud.RequestOpts{
OkCodes: []int{204},
})
return
}
5 changes: 5 additions & 0 deletions openstack/compute/v2/extensions/tags/results.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,8 @@ type ReplaceAllResult struct {
type AddResult struct {
gophercloud.ErrResult
}

// DeleteResult is the result from the Delete operation.
type DeleteResult struct {
gophercloud.ErrResult
}
44 changes: 38 additions & 6 deletions openstack/compute/v2/extensions/tags/testing/requests_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ func TestList(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestMethod(t, r, http.MethodGet)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -37,7 +37,7 @@ func TestCheckOk(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestMethod(t, r, http.MethodGet)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -54,7 +54,7 @@ func TestCheckFail(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags/bar", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "GET")
th.TestMethod(t, r, http.MethodGet)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -71,7 +71,7 @@ func TestReplaceAll(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "PUT")
th.TestMethod(t, r, http.MethodPut)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -93,7 +93,7 @@ func TestAddCreated(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "PUT")
th.TestMethod(t, r, http.MethodPut)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -109,7 +109,7 @@ func TestAddExists(t *testing.T) {
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, "PUT")
th.TestMethod(t, r, http.MethodPut)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
Expand All @@ -119,3 +119,35 @@ func TestAddExists(t *testing.T) {
err := tags.Add(client.ServiceClient(), "uuid1", "foo").ExtractErr()
th.AssertNoErr(t, err)
}

func TestDelete(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags/foo", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, http.MethodDelete)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
w.WriteHeader(http.StatusNoContent)
})

err := tags.Delete(client.ServiceClient(), "uuid1", "foo").ExtractErr()
th.AssertNoErr(t, err)
}

func TestDeleteAll(t *testing.T) {
th.SetupHTTP()
defer th.TeardownHTTP()

th.Mux.HandleFunc("/servers/uuid1/tags", func(w http.ResponseWriter, r *http.Request) {
th.TestMethod(t, r, http.MethodDelete)
th.TestHeader(t, r, "X-Auth-Token", client.TokenID)

w.Header().Add("Content-Type", "application/json")
w.WriteHeader(http.StatusNoContent)
})

err := tags.DeleteAll(client.ServiceClient(), "uuid1").ExtractErr()
th.AssertNoErr(t, err)
}
8 changes: 8 additions & 0 deletions openstack/compute/v2/extensions/tags/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,11 @@ func replaceAllURL(c *gophercloud.ServiceClient, serverID string) string {
func addURL(c *gophercloud.ServiceClient, serverID, tag string) string {
return resourceURL(c, serverID, tag)
}

func deleteURL(c *gophercloud.ServiceClient, serverID, tag string) string {
return resourceURL(c, serverID, tag)
}

func deleteAllURL(c *gophercloud.ServiceClient, serverID string) string {
return rootURL(c, serverID)
}