8000 feat(cdsctl): cdsctl admin service delete --name ... (#3644) · ovh/cds@eaa06fa · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit eaa06fa

Browse files
authored
feat(cdsctl): cdsctl admin service delete --name ... (#3644)
Signed-off-by: Yvonnick Esnault <yvonnick.esnault@corp.ovh.com>
1 parent f292d60 commit eaa06fa

File tree

6 files changed

+47
-2
lines changed

6 files changed

+47
-2
lines changed

cli/cdsctl/admin_services.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"fmt"
55
"reflect"
6+
"strings"
67

78
"github.com/spf13/cobra"
89

@@ -20,6 +21,7 @@ func adminServices() *cobra.Command {
2021
cli.NewListCommand(adminServiceListCmd, adminServiceListRun, nil),
2122
cli.NewListCommand(adminServiceStatusCmd, adminServiceStatusRun, nil),
2223
cli.NewCommand(adminServiceGetCmd, adminServiceGetRun, nil),
24+
cli.NewDeleteCommand(adminServiceDeleteCmd, adminServiceDeleteRun, nil, withAllCommandModifiers()...),
2325
})
2426
}
2527

@@ -131,3 +133,23 @@ func adminServiceGetRun(v cli.Values) error {
131133
fmt.Println(string(btes))
132134
return nil
133135
}
136+
137+
var adminServiceDeleteCmd = cli.Command{
138+
Name: "delete",
139+
Short: "Delete a CDS service from registered service",
140+
VariadicArgs: cli.Arg{
141+
Name: "name",
142+
},
143+
}
144+
145+
func adminServiceDeleteRun(v cli.Values) error {
146+
if v.GetString("name") == "" {
147+
return fmt.Errorf("name for service is mandatory")
148+
}
149+
for _, n := range strings.Split(v.GetString("name"), ",") {
150+
if err := client.ServiceDelete(n); err != nil {
151+
return err
152+
}
153+
}
154+
return nil
155+
}

engine/api/admin.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@ func (api *API) getAdminServicesHandler() service.Handler {
5555
}
5656
}
5757

58+
func (api *API) deleteAdminServiceHandler() service.Handler {
59+
return func(ctx context.Context, w http.ResponseWriter, r *http.Request) error {
60+
vars := mux.Vars(r)
61+
name := vars["name"]
62+
srv, err := services.FindByName(api.mustDB(), name)
63+
if err != nil {
64+
return err
65+
}
66+
if err := services.Delete(api.mustDB(), srv); err != nil {
67+
return err
68+
}
69+
return service.WriteJSON(w, srv, http.StatusOK)
70+
}
71+
}
72+
5873
func (api *API) getAdminServiceHandler() service.Handler {
5974
return func(ctx context.Context, w http.ResponseWriter, r *http.Request) error {
6075
vars := mux.Vars(r)

engine/api/api_routes.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (api *API) InitRouter() {
5555
r.Handle("/admin/plugin/{name}/binary/{os}/{arch}/infos", r.GET(api.getGRPCluginBinaryInfosHandler))
5656

5757
// Admin service
58-
r.Handle("/admin/service/{name}", r.GET(api.getAdminServiceHandler, NeedAdmin(true)))
58+
r.Handle("/admin/service/{name}", r.GET(api.getAdminServiceHandler, NeedAdmin(true)), r.DELETE(api.deleteAdminServiceHandler, NeedAdmin(true)))
5959
r.Handle("/admin/services", r.GET(api.getAdminServicesHandler, NeedAdmin(true)))
6060
r.Handle("/admin/services/call", r.GET(api.getAdminServiceCallHandler, NeedAdmin(true)), r.POST(api.postAdminServiceCallHandler, NeedAdmin(true)), r.PUT(api.putAdminServiceCallHandler, NeedAdmin(true)), r.DELETE(api.deleteAdminServiceCallHandler, NeedAdmin(true)))
6161

sdk/cdsclient/client_admin.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ func (c *client) ServiceNameCallGET(name string, query string) ([]byte, error) {
3737
return btes, err
3838
}
3939

40+
func (c *client) ServiceDelete(name string) error {
41+
_, err := c.DeleteJSON(context.Background(), "/admin/service/"+name, nil)
42+
return err
43+
}
44+
4045
func (c *client) ServiceCallGET(stype string, query string) ([]byte, error) {
4146
btes, _, _, err := c.Request(context.Background(), "GET", "/admin/services/call?type="+stype+"&query="+url.QueryEscape(query), nil)
4247
return btes, err

sdk/cdsclient/interface.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type Filter struct {
1818
type AdminService interface {
1919
Services() ([]sdk.Service, error)
2020
ServicesByName(name string) (*sdk.Service, error)
21+
ServiceDelete(name string) error
2122
ServicesByType(stype string) ([]sdk.Service, error)
2223
ServiceNameCallGET(name string, url string) ([]byte, error)
2324
ServiceCallGET(stype string, url string) ([]byte, error)

tests/clictl_admin_services.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,6 @@ testcases:
2121
- script: {{.cds.build.cdsctl}} admin services request --name `{{.cds.build.cdsctl}} admin services list -q|grep hatchery|head -n1` --query /debug/pprof/goroutine\?debug\=2
2222
assertions:
2323
- result.code ShouldEqual 0
24-
- result.systemout ShouldContainSubstring transport.go
24+
- result.systemout ShouldContainSubstring transport.go
25+
- script: {{.cds.build.cdsctl}} admin services delete --force `{{.cds.build.cdsctl}} admin services list -q|grep hatchery|head -n1`
26+

0 commit comments

Comments
 (0)
0