/
delete.go
105 lines (84 loc) · 2.71 KB
/
delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package app
import (
"github.com/cppforlife/go-cli-ui/ui"
ctlapp "github.com/k14s/kapp/pkg/kapp/app"
ctlcap "github.com/k14s/kapp/pkg/kapp/clusterapply"
cmdcore "github.com/k14s/kapp/pkg/kapp/cmd/core"
cmdtools "github.com/k14s/kapp/pkg/kapp/cmd/tools"
ctldiff "github.com/k14s/kapp/pkg/kapp/diff"
ctlres "github.com/k14s/kapp/pkg/kapp/resources"
"github.com/spf13/cobra"
)
type DeleteOptions struct {
ui ui.UI
depsFactory cmdcore.DepsFactory
AppFlags AppFlags
DiffFlags cmdtools.DiffFlags
ApplyFlags ApplyFlags
}
func NewDeleteOptions(ui ui.UI, depsFactory cmdcore.DepsFactory) *DeleteOptions {
return &DeleteOptions{ui: ui, depsFactory: depsFactory}
}
func NewDeleteCmd(o *DeleteOptions, flagsFactory cmdcore.FlagsFactory) *cobra.Command {
cmd := &cobra.Command{
Use: "delete",
Short: "Delete app",
RunE: func(_ *cobra.Command, _ []string) error { return o.Run() },
}
o.AppFlags.Set(cmd, flagsFactory)
o.DiffFlags.SetWithPrefix("diff", cmd)
o.ApplyFlags.SetWithDefaults("", ApplyFlagsDeleteDefaults, cmd)
return cmd
}
func (o *DeleteOptions) Run() error {
app, coreClient, dynamicClient, err := appFactory(o.depsFactory, o.AppFlags)
if err != nil {
return err
}
exists, err := app.Exists()
if err != nil {
return err
}
if !exists {
o.ui.PrintLinef("App '%s' (namespace: %s) does not exist",
app.Name(), o.AppFlags.NamespaceFlags.Name)
return nil
}
labelSelector, err := app.LabelSelector()
if err != nil {
return err
}
identifiedResources := ctlres.NewIdentifiedResources(coreClient, dynamicClient, []string{o.AppFlags.NamespaceFlags.Name})
existingResources, err := identifiedResources.List(labelSelector)
if err != nil {
return err
}
changeFactory := ctldiff.NewChangeFactory(nil)
changes, err := ctldiff.NewChangeSet(existingResources, nil, o.DiffFlags.ChangeSetOpts, changeFactory).Calculate()
if err != nil {
return err
}
msgsUI := cmdcore.NewMessagesUI(o.ui)
clusterChangeFactory := ctlcap.NewClusterChangeFactory(o.ApplyFlags.ClusterChangeOpts, identifiedResources, changeFactory, msgsUI)
clusterChangeSet := ctlcap.NewClusterChangeSet(changes, o.ApplyFlags.ClusterChangeSetOpts, clusterChangeFactory, msgsUI)
clusterChanges, clusterChangesGraph, err := clusterChangeSet.Calculate()
if err != nil {
return err
}
ctlcap.NewChangeSetView(ctlcap.ClusterChangesAsChangeViews(clusterChanges), o.DiffFlags.ChangeSetViewOpts).Print(o.ui)
if o.DiffFlags.Run {
return nil
}
err = o.ui.AskForConfirmation()
if err != nil {
return err
}
touch := ctlapp.Touch{App: app, Description: "delete", IgnoreSuccessErr: true}
return touch.Do(func() error {
err := clusterChangeSet.Apply(clusterChangesGraph)
if err != nil {
return err
}
return app.Delete()
})
}