Skip to content

Commit 3686824

Browse files
author
jmccormick2001
committed
change delete cluster API to use POST, also support --all flag for pgo delete cluster
1 parent 1b24f74 commit 3686824

File tree

6 files changed

+46
-29
lines changed

6 files changed

+46
-29
lines changed

apiserver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func main() {
106106
r.HandleFunc("/clusters", clusterservice.CreateClusterHandler).Methods("POST")
107107
r.HandleFunc("/showclusters", clusterservice.ShowClusterHandler).Methods("POST")
108108
//here
109-
r.HandleFunc("/clustersdelete/{name}", clusterservice.DeleteClusterHandler).Methods("GET")
109+
r.HandleFunc("/clustersdelete", clusterservice.DeleteClusterHandler).Methods("POST")
110110
r.HandleFunc("/clustersupdate/{name}", clusterservice.UpdateClusterHandler).Methods("GET")
111111
r.HandleFunc("/clusters/test/{name}", clusterservice.TestClusterHandler)
112112
r.HandleFunc("/clusters/scale/{name}", clusterservice.ScaleClusterHandler)

apiserver/clusterservice/clusterservice.go

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ limitations under the License.
1818
import (
1919
"encoding/json"
2020
"net/http"
21-
"strconv"
21+
// "strconv"
2222

2323
"github.com/crunchydata/postgres-operator/apiserver"
2424
msgs "github.com/crunchydata/postgres-operator/apiservermsgs"
@@ -141,28 +141,22 @@ func ShowClusterHandler(w http.ResponseWriter, r *http.Request) {
141141
// parameters postgresversion
142142
// returns a ShowClusterResponse
143143
func DeleteClusterHandler(w http.ResponseWriter, r *http.Request) {
144+
var request msgs.DeleteClusterRequest
145+
_ = json.NewDecoder(r.Body).Decode(&request)
146+
144147
var ns string
145-
vars := mux.Vars(r)
146-
log.Debugf("clusterservice.DeleteClusterHandler %v\n", vars)
148+
log.Debugf("clusterservice.DeleteClusterHandler %v\n", request)
147149

148-
clustername := vars["name"]
150+
clustername := request.Clustername
149151

150-
selector := r.URL.Query().Get("selector")
151-
clientVersion := r.URL.Query().Get("version")
152-
namespace := r.URL.Query().Get("namespace")
152+
selector := request.Selector
153+
clientVersion := request.ClientVersion
154+
namespace := request.Namespace
153155

154-
deleteData := false
155-
deleteDataStr := r.URL.Query().Get("delete-data")
156-
if deleteDataStr != "" {
157-
deleteData, _ = strconv.ParseBool(deleteDataStr)
158-
}
159-
deleteBackups := false
160-
deleteBackupsStr := r.URL.Query().Get("delete-backups")
161-
if deleteBackupsStr != "" {
162-
deleteBackups, _ = strconv.ParseBool(deleteBackupsStr)
163-
}
156+
deleteData := request.DeleteData
157+
deleteBackups := request.DeleteBackups
164158

165-
log.Debugf("DeleteClusterHandler: parameters namespace [%s] selector [%s] delete-data [%s] delete-backups [%s]", namespace, selector, clientVersion, deleteDataStr, deleteBackupsStr)
159+
log.Debugf("DeleteClusterHandler: parameters namespace [%s] selector [%s] delete-data [%t] delete-backups [%t]", namespace, selector, clientVersion, deleteData, deleteBackups)
166160

167161
username, err := apiserver.Authn(apiserver.DELETE_CLUSTER_PERM, w, r)
168162
if err != nil {

apiservermsgs/clustermsgs.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,17 @@ type ShowClusterResponse struct {
126126
Status
127127
}
128128

129+
// DeleteClusterRequest ...
130+
type DeleteClusterRequest struct {
131+
Clustername string
132+
Selector string
133+
ClientVersion string
134+
Namespace string
135+
Allflag bool
136+
DeleteBackups bool
137+
DeleteData bool
138+
}
139+
129140
// DeleteClusterResponse ...
130141
type DeleteClusterResponse struct {
131142
Results []string

pgo/api/cluster.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import (
2828

2929
const (
3030
createClusterURL = "%s/clusters"
31-
deleteClusterURL = "%s/clustersdelete/%s?selector=%s&delete-data=%t&delete-backups=%t&version=%s&namespace=%s"
31+
deleteClusterURL = "%s/clustersdelete"
3232
updateClusterURL = "%s/clustersupdate/%s?selector=%s&autofail=%s&version=%s&namespace=%s"
3333
showClusterURL = "%s/showclusters"
3434
)
@@ -72,20 +72,23 @@ func ShowCluster(httpclient *http.Client, SessionCredentials *msgs.BasicAuthCred
7272

7373
}
7474

75-
func DeleteCluster(httpclient *http.Client, arg, selector string, SessionCredentials *msgs.BasicAuthCredentials, deleteData, deleteBackups bool, ns string) (msgs.DeleteClusterResponse, error) {
75+
func DeleteCluster(httpclient *http.Client, request *msgs.DeleteClusterRequest, SessionCredentials *msgs.BasicAuthCredentials) (msgs.DeleteClusterResponse, error) {
7676

7777
var response msgs.DeleteClusterResponse
7878

79-
url := fmt.Sprintf(deleteClusterURL, SessionCredentials.APIServerURL, arg, selector, deleteData, deleteBackups, msgs.PGO_VERSION, ns)
79+
jsonValue, _ := json.Marshal(request)
80+
url := fmt.Sprintf(deleteClusterURL, SessionCredentials.APIServerURL)
8081

8182
log.Debugf("delete cluster called %s", url)
8283

83-
action := "GET"
84-
req, err := http.NewRequest(action, url, nil)
84+
action := "POST"
85+
req, err := http.NewRequest(action, url, bytes.NewBuffer(jsonValue))
8586
if err != nil {
87+
response.Status.Code = msgs.Error
8688
return response, err
8789
}
8890

91+
req.Header.Set("Content-Type", "application/json")
8992
req.SetBasicAuth(SessionCredentials.Username, SessionCredentials.Password)
9093

9194
resp, err := httpclient.Do(req)

pgo/cmd/cluster.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,21 @@ import (
3131
func deleteCluster(args []string, ns string) {
3232
log.Debugf("deleteCluster called %v", args)
3333

34-
if len(args) == 0 && Selector != "" {
34+
if AllFlag {
3535
args = make([]string, 1)
3636
args[0] = "all"
3737
}
3838

39+
r := msgs.DeleteClusterRequest{}
40+
r.Selector = Selector
41+
r.ClientVersion = msgs.PGO_VERSION
42+
r.Namespace = ns
43+
r.DeleteBackups = DeleteBackups
44+
r.DeleteData = DeleteData
45+
3946
for _, arg := range args {
40-
response, err := api.DeleteCluster(httpclient, arg, Selector, &SessionCredentials, DeleteData, DeleteBackups, ns)
47+
r.Clustername = arg
48+
response, err := api.DeleteCluster(httpclient, &r, &SessionCredentials)
4149

4250
if err != nil {
4351
fmt.Println("Error: " + err.Error())

pgo/cmd/delete.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ func init() {
102102
deleteLabelCmd.Flags().StringVarP(&Selector, "selector", "s", "", "The selector to use for cluster filtering.")
103103
deleteLabelCmd.Flags().StringVarP(&LabelCmdLabel, "label", "", "", "The label to delete for any selected or specified clusters.")
104104
deleteClusterCmd.Flags().BoolVarP(&DeleteData, "delete-data", "d", false, "Causes the data for this cluster to be removed permanently.")
105+
deleteClusterCmd.Flags().BoolVar(&AllFlag, "all", false, "all resources.")
105106
deleteClusterCmd.Flags().BoolVarP(&DeleteBackups, "delete-backups", "b", false, "Causes the backups for this cluster to be removed permanently.")
106107
deletePgbouncerCmd.Flags().StringVarP(&Selector, "selector", "s", "", "The selector to use for cluster filtering.")
107108
deletePgpoolCmd.Flags().StringVarP(&Selector, "selector", "s", "", "The selector to use for cluster filtering.")
@@ -168,14 +169,14 @@ var deleteClusterCmd = &cobra.Command{
168169
Short: "Delete a PostgreSQL cluster",
169170
Long: `Delete a PostgreSQL cluster. For example:
170171
171-
pgo delete cluster all
172+
pgo delete cluster --all
172173
pgo delete cluster mycluster`,
173174
Run: func(cmd *cobra.Command, args []string) {
174175
if Namespace == "" {
175176
Namespace = PGONamespace
176177
}
177-
if len(args) == 0 && Selector == "" {
178-
fmt.Println("Error: A cluster name or selector is required for this command.")
178+
if len(args) == 0 && Selector == "" && !AllFlag {
179+
fmt.Println("Error: A cluster name, selector, or --all is required for this command.")
179180
} else {
180181
if util.AskForConfirmation(NoPrompt, "") {
181182
deleteCluster(args, Namespace)

0 commit comments

Comments
 (0)