From e8ff79e448fee944944eb80b098b3538852e6c6f Mon Sep 17 00:00:00 2001 From: Ankit Chawla Date: Mon, 7 Feb 2022 16:20:54 +0530 Subject: [PATCH] Prevent env deletion if any function exists (#2343) * Added force deletion flag for env --- pkg/fission-cli/cmd/environment/command.go | 2 +- pkg/fission-cli/cmd/environment/delete.go | 15 +++++++++++++++ pkg/fission-cli/flag/flag.go | 1 + pkg/fission-cli/flag/key/key.go | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/fission-cli/cmd/environment/command.go b/pkg/fission-cli/cmd/environment/command.go index b430206b..f4849418 100644 --- a/pkg/fission-cli/cmd/environment/command.go +++ b/pkg/fission-cli/cmd/environment/command.go @@ -72,7 +72,7 @@ func Commands() *cobra.Command { } wrapper.SetFlags(deleteCmd, flag.FlagSet{ Required: []flag.Flag{flag.EnvName}, - Optional: []flag.Flag{flag.NamespaceEnvironment, flag.IgnoreNotFound}, + Optional: []flag.Flag{flag.NamespaceEnvironment, flag.IgnoreNotFound, flag.EnvForce}, }) listCmd := &cobra.Command{ diff --git a/pkg/fission-cli/cmd/environment/delete.go b/pkg/fission-cli/cmd/environment/delete.go index bc3b4b05..dc53c67e 100644 --- a/pkg/fission-cli/cmd/environment/delete.go +++ b/pkg/fission-cli/cmd/environment/delete.go @@ -42,6 +42,20 @@ func (opts *DeleteSubCommand) do(input cli.Input) error { Namespace: input.String(flagkey.NamespaceEnvironment), } + if !input.Bool(flagkey.EnvForce) { + fns, err := opts.Client().V1().Function().List(metav1.NamespaceAll) + if err != nil { + return errors.Wrap(err, "Error getting functions wrt environment.") + } + + for _, fn := range fns { + if fn.Spec.Environment.Name == m.Name && + fn.Spec.Environment.Namespace == m.Namespace { + return errors.New("Environment is used by atleast one function.") + } + } + } + err := opts.Client().V1().Environment().Delete(m) if err != nil { if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) { @@ -51,5 +65,6 @@ func (opts *DeleteSubCommand) do(input cli.Input) error { } fmt.Printf("environment '%v' deleted\n", m.Name) + return nil } diff --git a/pkg/fission-cli/flag/flag.go b/pkg/fission-cli/flag/flag.go index ce8f93b8..d395843d 100644 --- a/pkg/fission-cli/flag/flag.go +++ b/pkg/fission-cli/flag/flag.go @@ -180,6 +180,7 @@ var ( EnvVersion = Flag{Type: Int, Name: flagkey.EnvVersion, Usage: "Environment API version (1 means v1 interface)", DefaultValue: 1} EnvImagePullSecret = Flag{Type: String, Name: flagkey.EnvImagePullSecret, Usage: "Secret for Kubernetes to pull an image from a private registry"} EnvExecutorType = Flag{Type: String, Name: flagkey.EnvExecutorType, Usage: "Executor type of pod in environment; one of 'poolmgr', 'newdeploy', 'container'"} + EnvForce = Flag{Type: Bool, Name: flagkey.EnvForce, Short: "f", Usage: "Force delete env even if one or more functions exist", DefaultValue: false} KwName = Flag{Type: String, Name: flagkey.KwName, Usage: "Watch name"} KwFnName = Flag{Type: String, Name: flagkey.KwFnName, Usage: "Function name"} diff --git a/pkg/fission-cli/flag/key/key.go b/pkg/fission-cli/flag/key/key.go index 3d47da40..40307066 100644 --- a/pkg/fission-cli/flag/key/key.go +++ b/pkg/fission-cli/flag/key/key.go @@ -130,6 +130,7 @@ const ( EnvVersion = "version" EnvImagePullSecret = "imagepullsecret" EnvExecutorType = "executortype" + EnvForce = force KwName = resourceName KwFnName = "function"