@@ -58,11 +58,11 @@ func NewCmd() *cobra.Command {
5858 ValidArgsFunction : o .deleteCompletion ,
5959 RunE : func (cmd * cobra.Command , args []string ) error {
6060 if broker != "" {
61- o .Context = broker
62- o .Manifest = manifest .New (path .Join (o .ConfigBase , broker , manifestFile ))
63- cobra .CheckErr (o .Manifest .Read ())
6461 return o .deleteBroker (broker )
6562 }
63+ if len (args ) == 0 {
64+ return fmt .Errorf ("expected at least 1 component name, got 0" )
65+ }
6666 return o .deleteComponents (args , false )
6767 },
6868 }
@@ -93,10 +93,15 @@ func (o *DeleteOptions) initialize() {
9393}
9494
9595func (o * DeleteOptions ) deleteBroker (broker string ) error {
96- if err := o .deleteComponents ([]string {}, true ); err != nil {
96+ oo := * o
97+ oo .Context = broker
98+ oo .Manifest = manifest .New (path .Join (oo .ConfigBase , broker , manifestFile ))
99+ cobra .CheckErr (oo .Manifest .Read ())
100+
101+ if err := oo .deleteComponents ([]string {}, true ); err != nil {
97102 return fmt .Errorf ("deleting component: %w" , err )
98103 }
99- if err := os .RemoveAll (path .Join (o .ConfigBase , broker )); err != nil {
104+ if err := os .RemoveAll (path .Join (oo .ConfigBase , broker )); err != nil {
100105 return fmt .Errorf ("delete broker %q: %v" , broker , err )
101106 }
102107 if broker == o .Context {
@@ -105,47 +110,55 @@ func (o *DeleteOptions) deleteBroker(broker string) error {
105110 return nil
106111}
107112
108- func (o * DeleteOptions ) deleteComponents (names []string , force bool ) error {
113+ func (o * DeleteOptions ) deleteComponents (names []string , deleteBroker bool ) error {
109114 ctx := context .Background ()
110115 client , err := docker .NewClient ()
111116 if err != nil {
112117 return fmt .Errorf ("docker client: %w" , err )
113118 }
114119 for _ , object := range o .Manifest .Objects {
120+ if deleteBroker {
121+ o .deleteEverything (ctx , object , client )
122+ continue
123+ }
115124 if object .Kind == "Secret" {
125+ // do not remove secrets implicitly,
126+ /// we may need them to finalize external services
116127 continue
117128 }
118- skip := false
119- if len (names ) > 0 {
120- skip = true
121- for _ , v := range names {
122- if v == object .Metadata .Name {
123- skip = false
124- break
125- }
129+ skip := true
130+ for _ , v := range names {
131+ if v == object .Metadata .Name {
132+ skip = false
133+ break
126134 }
127135 }
128136 if skip {
129137 continue
130138 }
131139 if object .Kind == "Broker" {
132- if ! force {
133- continue
134- }
135- object .Metadata .Name += "-broker"
136- }
137- log .Printf ("Deleting %q %s" , object .Metadata .Name , strings .ToLower (object .Kind ))
138- if err := o .removeExternalServices (ctx , object ); err != nil {
139- log .Printf ("WARN: external services are not deleted: %v" , err )
140+ log .Printf ("use \" tmctl delete --broker %s\" to delete the broker. Skipping" , object .Metadata .Name )
141+ continue
140142 }
141- o .deleteContainer (ctx , object .Metadata .Name , client )
142- o .removeObject (object .Metadata .Name )
143- o .cleanupTriggers (object .Metadata .Name )
144- o .cleanupSecrets (object .Metadata .Name )
143+ o .deleteEverything (ctx , object , client )
145144 }
146145 return nil
147146}
148147
148+ func (o * DeleteOptions ) deleteEverything (ctx context.Context , object kubernetes.Object , client * client.Client ) {
149+ log .Printf ("Deleting %q %s" , object .Metadata .Name , strings .ToLower (object .Kind ))
150+ if object .Kind == "Broker" {
151+ object .Metadata .Name = object .Metadata .Name + "-broker"
152+ }
153+ if err := o .removeExternalServices (ctx , object ); err != nil {
154+ log .Printf ("WARN: external services are not deleted: %v" , err )
155+ }
156+ o .removeContainer (ctx , object .Metadata .Name , client )
157+ o .removeObject (object .Metadata .Name )
158+ o .cleanupTriggers (object .Metadata .Name )
159+ o .cleanupSecrets (object .Metadata .Name )
160+ }
161+
149162func (o * DeleteOptions ) removeObject (component string ) {
150163 for _ , object := range o .Manifest .Objects {
151164 if component != object .Metadata .Name {
@@ -167,7 +180,7 @@ func (o *DeleteOptions) removeObject(component string) {
167180 }
168181}
169182
170- func (o * DeleteOptions ) deleteContainer (ctx context.Context , name string , client * client.Client ) error {
183+ func (o * DeleteOptions ) removeContainer (ctx context.Context , name string , client * client.Client ) error {
171184 return docker .ForceStop (ctx , name , client )
172185}
173186
0 commit comments