From 18206028efaf5f8d3717baf5bcdfeb7ad364d644 Mon Sep 17 00:00:00 2001 From: Timur Zununbekov Date: Mon, 7 Nov 2022 21:37:00 +0600 Subject: [PATCH] Skip brokers on empty args --- cmd/delete/delete.go | 67 ++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 27 deletions(-) diff --git a/cmd/delete/delete.go b/cmd/delete/delete.go index 1321ff77..64966777 100644 --- a/cmd/delete/delete.go +++ b/cmd/delete/delete.go @@ -58,11 +58,11 @@ func NewCmd() *cobra.Command { ValidArgsFunction: o.deleteCompletion, RunE: func(cmd *cobra.Command, args []string) error { if broker != "" { - o.Context = broker - o.Manifest = manifest.New(path.Join(o.ConfigBase, broker, manifestFile)) - cobra.CheckErr(o.Manifest.Read()) return o.deleteBroker(broker) } + if len(args) == 0 { + return fmt.Errorf("expected at least 1 component name, got 0") + } return o.deleteComponents(args, false) }, } @@ -93,10 +93,15 @@ func (o *DeleteOptions) initialize() { } func (o *DeleteOptions) deleteBroker(broker string) error { - if err := o.deleteComponents([]string{}, true); err != nil { + oo := *o + oo.Context = broker + oo.Manifest = manifest.New(path.Join(oo.ConfigBase, broker, manifestFile)) + cobra.CheckErr(oo.Manifest.Read()) + + if err := oo.deleteComponents([]string{}, true); err != nil { return fmt.Errorf("deleting component: %w", err) } - if err := os.RemoveAll(path.Join(o.ConfigBase, broker)); err != nil { + if err := os.RemoveAll(path.Join(oo.ConfigBase, broker)); err != nil { return fmt.Errorf("delete broker %q: %v", broker, err) } if broker == o.Context { @@ -105,47 +110,55 @@ func (o *DeleteOptions) deleteBroker(broker string) error { return nil } -func (o *DeleteOptions) deleteComponents(names []string, force bool) error { +func (o *DeleteOptions) deleteComponents(names []string, deleteBroker bool) error { ctx := context.Background() client, err := docker.NewClient() if err != nil { return fmt.Errorf("docker client: %w", err) } for _, object := range o.Manifest.Objects { + if deleteBroker { + o.deleteEverything(ctx, object, client) + continue + } if object.Kind == "Secret" { + // do not remove secrets implicitly, + /// we may need them to finalize external services continue } - skip := false - if len(names) > 0 { - skip = true - for _, v := range names { - if v == object.Metadata.Name { - skip = false - break - } + skip := true + for _, v := range names { + if v == object.Metadata.Name { + skip = false + break } } if skip { continue } if object.Kind == "Broker" { - if !force { - continue - } - object.Metadata.Name += "-broker" - } - log.Printf("Deleting %q %s", object.Metadata.Name, strings.ToLower(object.Kind)) - if err := o.removeExternalServices(ctx, object); err != nil { - log.Printf("WARN: external services are not deleted: %v", err) + log.Printf("use \"tmctl delete --broker %s\" to delete the broker. Skipping", object.Metadata.Name) + continue } - o.deleteContainer(ctx, object.Metadata.Name, client) - o.removeObject(object.Metadata.Name) - o.cleanupTriggers(object.Metadata.Name) - o.cleanupSecrets(object.Metadata.Name) + o.deleteEverything(ctx, object, client) } return nil } +func (o *DeleteOptions) deleteEverything(ctx context.Context, object kubernetes.Object, client *client.Client) { + log.Printf("Deleting %q %s", object.Metadata.Name, strings.ToLower(object.Kind)) + if object.Kind == "Broker" { + object.Metadata.Name = object.Metadata.Name + "-broker" + } + if err := o.removeExternalServices(ctx, object); err != nil { + log.Printf("WARN: external services are not deleted: %v", err) + } + o.removeContainer(ctx, object.Metadata.Name, client) + o.removeObject(object.Metadata.Name) + o.cleanupTriggers(object.Metadata.Name) + o.cleanupSecrets(object.Metadata.Name) +} + func (o *DeleteOptions) removeObject(component string) { for _, object := range o.Manifest.Objects { if component != object.Metadata.Name { @@ -167,7 +180,7 @@ func (o *DeleteOptions) removeObject(component string) { } } -func (o *DeleteOptions) deleteContainer(ctx context.Context, name string, client *client.Client) error { +func (o *DeleteOptions) removeContainer(ctx context.Context, name string, client *client.Client) error { return docker.ForceStop(ctx, name, client) }