-
Notifications
You must be signed in to change notification settings - Fork 786
/
delete_app.go
141 lines (116 loc) · 3.57 KB
/
delete_app.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
package cmd
import (
"github.com/jenkins-x/jx/pkg/apps"
"github.com/jenkins-x/jx/pkg/environments"
"github.com/pkg/errors"
jenkinsv1 "github.com/jenkins-x/jx/pkg/apis/jenkins.io/v1"
"github.com/jenkins-x/jx/pkg/util"
"github.com/jenkins-x/jx/pkg/jx/cmd/templates"
"github.com/spf13/cobra"
)
var (
deleteAppLong = templates.LongDesc(`
Deletes one or more Apps
`)
deleteAppExample = templates.Examples(`
# prompt for the available apps to delete
jx delete apps
# delete a specific app
jx delete app jx-app-cheese
`)
)
const (
optionPurge = "purge"
)
// DeleteAppOptions are the flags for this delete commands
type DeleteAppOptions struct {
*CommonOptions
GitOps bool
DevEnv *jenkinsv1.Environment
ReleaseName string
Namespace string
Purge bool
Alias string
// allow git to be configured externally before a PR is created
ConfigureGitCallback environments.ConfigureGitFn
}
// NewCmdDeleteApp creates a command object for this command
func NewCmdDeleteApp(commonOpts *CommonOptions) *cobra.Command {
o := &DeleteAppOptions{
CommonOptions: commonOpts,
}
cmd := &cobra.Command{
Use: "app",
Short: "Deletes one or more apps from Jenkins X",
Long: deleteAppLong,
Example: deleteAppExample,
Run: func(cmd *cobra.Command, args []string) {
o.Cmd = cmd
o.Args = args
err := o.Run()
CheckErr(err)
},
}
cmd.Flags().StringVarP(&o.ReleaseName, optionRelease, "r", "",
"The chart release name (available when NOT using GitOps for your dev environment)")
cmd.Flags().BoolVarP(&o.Purge, optionPurge, "", true,
"Should we run helm update first to ensure we use the latest version (available when NOT using GitOps for your dev environment)")
cmd.Flags().StringVarP(&o.Namespace, optionNamespace, "n", defaultNamespace, "The Namespace to install into (available when NOT using GitOps for your dev environment)")
cmd.Flags().StringVarP(&o.Alias, optionAlias, "", "",
"An alias to use for the app (available when using GitOps for your dev environment)")
return cmd
}
// Run implements this command
func (o *DeleteAppOptions) Run() error {
o.GitOps, o.DevEnv = o.GetDevEnv()
opts := apps.InstallOptions{
In: o.In,
DevEnv: o.DevEnv,
Verbose: o.Verbose,
Err: o.Err,
Out: o.Out,
GitOps: o.GitOps,
BatchMode: o.BatchMode,
Helmer: o.Helm(),
}
if o.GitOps {
msg := "Unable to specify --%s when using GitOps for your dev environment"
if o.ReleaseName != "" {
return util.InvalidOptionf(optionRelease, o.ReleaseName, msg, optionRelease)
}
if o.Namespace != "" {
return util.InvalidOptionf(optionNamespace, o.Namespace, msg, optionNamespace)
}
gitProvider, _, err := o.createGitProviderForURLWithoutKind(o.DevEnv.Spec.Source.URL)
if err != nil {
return errors.Wrapf(err, "creating git provider for %s", o.DevEnv.Spec.Source.URL)
}
environmentsDir, err := o.EnvironmentsDir()
if err != nil {
return errors.Wrapf(err, "getting environments dir")
}
opts.GitProvider = gitProvider
opts.Gitter = o.Git()
opts.EnvironmentsDir = environmentsDir
opts.ConfigureGitFn = o.ConfigureGitCallback
}
if !o.GitOps {
err := o.ensureHelm()
if err != nil {
return errors.Wrap(err, "failed to ensure that helm is present")
}
if o.Alias != "" {
return util.InvalidOptionf(optionAlias, o.Alias,
"Unable to specify --%s when NOT using GitOps for your dev environment", optionAlias)
}
}
args := o.Args
if len(args) == 0 {
return o.Cmd.Help()
}
if len(args) > 1 {
return o.Cmd.Help()
}
app := args[0]
return opts.DeleteApp(app, o.Alias, o.ReleaseName, o.Purge)
}