diff --git a/cmd/zrok/adminUnbootstrap.go b/cmd/zrok/adminUnbootstrap.go new file mode 100644 index 00000000..0efea607 --- /dev/null +++ b/cmd/zrok/adminUnbootstrap.go @@ -0,0 +1,40 @@ +package main + +import ( + "github.com/michaelquigley/cf" + "github.com/openziti/zrok/controller" + "github.com/openziti/zrok/controller/config" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func init() { + adminCmd.AddCommand(newAdminUnbootstrap().cmd) +} + +type adminUnbootstrap struct { + cmd *cobra.Command +} + +func newAdminUnbootstrap() *adminUnbootstrap { + cmd := &cobra.Command{ + Use: "unbootstrap ", + Short: "Unbootstrap the underlying Ziti network from zrok", + Args: cobra.ExactArgs(1), + } + command := &adminUnbootstrap{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *adminUnbootstrap) run(_ *cobra.Command, args []string) { + cfg, err := config.LoadConfig(args[0]) + if err != nil { + panic(err) + } + logrus.Infof(cf.Dump(cfg, cf.DefaultOptions())) + if err := controller.Unbootstrap(cfg); err != nil { + panic(err) + } + logrus.Infof("unbootstrap complete!") +} diff --git a/controller/unbootstrap.go b/controller/unbootstrap.go index 24a4e544..9116daf5 100644 --- a/controller/unbootstrap.go +++ b/controller/unbootstrap.go @@ -1,14 +1,42 @@ package controller import ( + "context" + "fmt" + "github.com/openziti/edge-api/rest_management_api_client" + apiConfig "github.com/openziti/edge-api/rest_management_api_client/config" "github.com/openziti/zrok/controller/config" "github.com/openziti/zrok/controller/zrokEdgeSdk" + "github.com/sirupsen/logrus" ) func Unbootstrap(cfg *config.Config) error { - _, err := zrokEdgeSdk.Client(cfg.Ziti) + edge, err := zrokEdgeSdk.Client(cfg.Ziti) if err != nil { return err } + if err := unbootstrapConfigs(edge); err != nil { + logrus.Errorf("error unbootrapping configs: %v", err) + } + return nil +} + +func unbootstrapConfigs(edge *rest_management_api_client.ZitiEdgeManagement) error { + filter := fmt.Sprintf("tags.zrok != null") + limit := int64(100) + offset := int64(0) + listReq := &apiConfig.ListConfigsParams{ + Filter: &filter, + Limit: &limit, + Offset: &offset, + Context: context.Background(), + } + listResp, err := edge.Config.ListConfigs(listReq, nil) + if err != nil { + return err + } + for _, listCfg := range listResp.Payload.Data { + logrus.Infof("found config: %v", *listCfg.ID) + } return nil }