Skip to content

Commit

Permalink
cmd/operator-sdk/run: remove legacy run subcommand
Browse files Browse the repository at this point in the history
  • Loading branch information
joelanford committed Jul 13, 2020
1 parent 53c0f35 commit 1cf804e
Show file tree
Hide file tree
Showing 10 changed files with 3 additions and 717 deletions.
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@

### Added

- Added the [`cleanup`](./website/content/en/docs/cli/operator-sdk_cleanup.md) subcommand and [`run --olm`](./website/content/en/docs/cli/operator-sdk_run.md) to manage deployment/deletion of operators. These commands currently interact with OLM via an in-cluster registry-server created using an operator's on-disk manifests and managed by `operator-sdk`. ([#2402](https://github.com/operator-framework/operator-sdk/pull/2402), [#2441](https://github.com/operator-framework/operator-sdk/pull/2441))
- Added the [`cleanup`](https://github.com/operator-framework/operator-sdk/blob/v0.15.0/doc/cli/operator-sdk_cleanup.md) subcommand and [`run --olm`](https://github.com/operator-framework/operator-sdk/blob/v0.15.0/doc/cli/operator-sdk_run.md) to manage deployment/deletion of operators. These commands currently interact with OLM via an in-cluster registry-server created using an operator's on-disk manifests and managed by `operator-sdk`. ([#2402](https://github.com/operator-framework/operator-sdk/pull/2402), [#2441](https://github.com/operator-framework/operator-sdk/pull/2441))
- Added [`bundle create`](https://github.com/operator-framework/operator-sdk/blob/v0.15.0/doc/cli/operator-sdk_bundle_create.md) which builds, and optionally generates metadata for, [operator bundle images](https://github.com/openshift/enhancements/blob/ec2cf96/enhancements/olm/operator-registry.md). ([#2076](https://github.com/operator-framework/operator-sdk/pull/2076), [#2438](https://github.com/operator-framework/operator-sdk/pull/2438))
- Added [`bundle validate`](https://github.com/operator-framework/operator-sdk/blob/v0.15.0/doc/cli/operator-sdk_bundle_validate.md) which validates [operator bundle images](https://github.com/openshift/enhancements/blob/ec2cf96/enhancements/olm/operator-registry.md). ([#2411](https://github.com/operator-framework/operator-sdk/pull/2411))
- Added `blacklist` field to the `watches.yaml` for Ansible based operators. Blacklisted secondary resources will not be watched or cached.([#2374](https://github.com/operator-framework/operator-sdk/pull/2374))
Expand All @@ -265,7 +265,7 @@
- Added retry logic to the cleanup function from the e2e test framework in order to allow it to be achieved in the scenarios where temporary network issues are faced. ([#2277](https://github.com/operator-framework/operator-sdk/pull/2277))
- **Breaking Change:** Moved `olm-catalog gen-csv` to the `generate csv` subcommand. ([#2439](https://github.com/operator-framework/operator-sdk/pull/2439))
- **Breaking Change:** `run ansible/helm` are now the hidden commands `exec-entrypoint ansible/helm`. All functionality of each subcommand is the same. ([#2441](https://github.com/operator-framework/operator-sdk/pull/2441))
- **Breaking Change:** `up local` is now [`run --local`](./website/content/en/docs/cli/operator-sdk_run.md). All functionality of this command is the same. ([#2441](https://github.com/operator-framework/operator-sdk/pull/2441))
- **Breaking Change:** `up local` is now [`run --local`](https://github.com/operator-framework/operator-sdk/blob/v0.15.0/doc/cli/operator-sdk_run.md). All functionality of this command is the same. ([#2441](https://github.com/operator-framework/operator-sdk/pull/2441))
- **Breaking Change:** Moved the `olm` subcommand from `alpha` to its own subcommand. All functionality of this command is the same. ([#2447](https://github.com/operator-framework/operator-sdk/pull/2447))

### Deprecated
Expand Down
111 changes: 1 addition & 110 deletions cmd/operator-sdk/cleanup/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,9 @@
package cleanup

import (
"errors"
"path/filepath"
"github.com/spf13/cobra"

"github.com/operator-framework/operator-sdk/cmd/operator-sdk/cleanup/packagemanifests"
olmcatalog "github.com/operator-framework/operator-sdk/internal/generate/olm-catalog"
olmoperator "github.com/operator-framework/operator-sdk/internal/olm/operator"
"github.com/operator-framework/operator-sdk/internal/util/projutil"

log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)

func NewCmd() *cobra.Command {
Expand All @@ -44,104 +36,3 @@ Run 'operator-sdk cleanup --help' for more information.

return cmd
}

type cleanupCmd struct {
// Common options.
kubeconfig string
// TODO: remove --namespace and c.namespace
//Deprecated: use olmArgs.OperatorNamespace instead
namespace string

// Cleanup type.
olm bool

// Cleanup type-specific options.
olmArgs olmoperator.PackageManifestsCmd
}

// checkCleanupType ensures exactly one cleanup type has been selected.
func (c *cleanupCmd) checkCleanupType() error {
if !c.olm {
return errors.New("exactly one run-type flag must be set: --olm")
}
return nil
}

func NewCmdLegacy() *cobra.Command {
c := &cleanupCmd{}
cmd := &cobra.Command{
Use: "cleanup",
Short: "Delete and clean up after a running Operator",
RunE: func(cmd *cobra.Command, args []string) error {
if err := c.checkCleanupType(); err != nil {
return err
}
projutil.MustInProjectRoot()

switch {
case c.olm:
c.olmArgs.KubeconfigPath = c.kubeconfig
//TODO: remove --namespace and c.namespace
//use olmArgs.OperatorNamespace directly
if cmd.Flags().Changed("namespace") {
log.Warn("--namespace is deprecates use --operator-namespace instead")
if !cmd.Flags().Changed("operator-namespace") {
c.olmArgs.OperatorNamespace = c.namespace
} else {
log.Warn("--operator-namespace present; ignoring --namespace")
}
}
if c.olmArgs.ManifestsDir == "" {
operatorName := filepath.Base(projutil.MustGetwd())
c.olmArgs.ManifestsDir = filepath.Join(olmcatalog.OLMCatalogDir, operatorName)
}
if err := c.olmArgs.Cleanup(); err != nil {
log.Fatalf("Failed to clean up operator using OLM: %v", err)
}
}
return nil
},
}

// Shared flags.
cmd.Flags().StringVar(&c.kubeconfig, "kubeconfig", "",
"The file path to kubernetes configuration file. Defaults to location "+
"specified by $KUBECONFIG, or to default file rules if not set")
err := cmd.Flags().MarkDeprecated("kubeconfig", "use this flag with 'cleanup packagemanifests' instead")
if err != nil {
panic(err)
}
cmd.Flags().StringVar(&c.namespace, "namespace", "",
"The namespace from which operator and namespaces resources are cleaned up")
err = cmd.Flags().MarkDeprecated("namespace", "use --operator-namespace instead")
if err != nil {
panic(err)
}

// 'cleanup --olm' and related flags. Set as default since this is the only
// cleanup type.
cmd.Flags().BoolVar(&c.olm, "olm", true,
"The operator to be cleaned up is managed by OLM in a cluster. "+
"Cannot be set with another cleanup-type flag")
err = cmd.Flags().MarkDeprecated("olm", "use 'cleanup packagemanifests' instead")
if err != nil {
panic(err)
}
// Mark all flags used with '--olm' as deprecated and hidden separately so
// all other 'cleanup' flags are still available.
fs := pflag.NewFlagSet("olm", pflag.ExitOnError)
fs.StringVar(&c.olmArgs.ManifestsDir, "manifests", "",
"Directory containing operator package directories and a package manifest file")
c.olmArgs.AddToFlagSet(fs)
fs.VisitAll(func(f *pflag.Flag) {
f.Deprecated = "use this flag with 'cleanup packagemanifests' instead"
f.Hidden = true
})
cmd.Flags().AddFlagSet(fs)

cmd.AddCommand(
packagemanifests.NewCmd(),
)

return cmd
}
4 changes: 0 additions & 4 deletions cmd/operator-sdk/cli/legacy.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,10 @@ import (
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/alpha"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/build"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/bundle"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/cleanup"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/completion"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/generate"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/new"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/olm"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/run"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/test"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/version"
"github.com/operator-framework/operator-sdk/internal/flags"
Expand Down Expand Up @@ -70,12 +68,10 @@ func GetCLIRoot() *cobra.Command {
alpha.NewCmd(),
build.NewCmd(),
bundle.NewCmdLegacy(),
cleanup.NewCmdLegacy(),
completion.NewCmd(),
generate.NewCmdLegacy(),
new.NewCmd(),
olm.NewCmd(),
run.NewCmdLegacy(),
test.NewCmd(),
version.NewCmd(),
)
Expand Down
178 changes: 0 additions & 178 deletions cmd/operator-sdk/run/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,9 @@
package run

import (
"errors"
"fmt"
"path/filepath"

log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/pflag"

"github.com/operator-framework/operator-sdk/cmd/operator-sdk/run/local"
"github.com/operator-framework/operator-sdk/cmd/operator-sdk/run/packagemanifests"
olmcatalog "github.com/operator-framework/operator-sdk/internal/generate/olm-catalog"
olmoperator "github.com/operator-framework/operator-sdk/internal/olm/operator"
k8sinternal "github.com/operator-framework/operator-sdk/internal/util/k8sutil"
kbutil "github.com/operator-framework/operator-sdk/internal/util/kubebuilder"
"github.com/operator-framework/operator-sdk/internal/util/projutil"
aoflags "github.com/operator-framework/operator-sdk/pkg/ansible/flags"
hoflags "github.com/operator-framework/operator-sdk/pkg/helm/flags"
)

func NewCmd() *cobra.Command {
Expand All @@ -50,167 +36,3 @@ Run 'operator-sdk run --help' for more information.

return cmd
}

type runCmd struct {
// Common options.
kubeconfig string
//TODO: remove namespace flag before 1.0.0
//namespace is deprecated
namespace string

// Run type.
olm, local bool

// Run type-specific options.
olmArgs olmoperator.PackageManifestsCmd
localArgs local.RunLocalCmd
}

// checkRunType ensures exactly one run type has been selected.
func (c *runCmd) checkRunType() error {
if c.olm && c.local || !c.olm && !c.local {
return errors.New("exactly one run-type flag must be set: --olm, --local")
}
return nil
}

func NewCmdLegacy() *cobra.Command {
c := &runCmd{}
cmd := &cobra.Command{
Use: "run",
Short: "Run an Operator in a variety of environments",
Long: `This command has subcommands that will run or deploy your Operator in two
different modes: locally and using OLM. These modes are controlled by using 'local'
or 'packagemanifests' subcommands. Run 'operator-sdk run --help' for more
information on these subcommands.
`,
RunE: func(cmd *cobra.Command, args []string) error {
if err := c.checkRunType(); err != nil {
return err
}
projutil.MustInProjectRoot()

switch {
case c.olm:
c.olmArgs.KubeconfigPath = c.kubeconfig
// operator-namespace flag is not set
// use default namespace from kubeconfig to deploy operator resources
if !cmd.Flags().Changed("operator-namespace") {
_, defaultNamespace, err := k8sinternal.GetKubeconfigAndNamespace(c.kubeconfig)
if err != nil {
return fmt.Errorf("error getting kubeconfig and default namespace: %v", err)
}
c.olmArgs.OperatorNamespace = defaultNamespace
}
if c.olmArgs.ManifestsDir == "" {
operatorName := filepath.Base(projutil.MustGetwd())
c.olmArgs.ManifestsDir = filepath.Join(olmcatalog.OLMCatalogDir, operatorName)
}
if err := c.olmArgs.Run(); err != nil {
log.Fatalf("Failed to run operator using OLM: %v", err)
}
case c.local:
// The main.go and manager.yaml scaffolds in the new layout do not support the WATCH_NAMESPACE
// env var to configure the namespace that the operator watches. The default is all namespaces.
// So this flag is unsupported for the new layout.
if !kbutil.HasProjectFile() {
//TODO: remove namespace flag before 1.0.0
// set --watch-namespace flag if the --namespace flag is set
// (only if --watch-namespace flag is not set)
if cmd.Flags().Changed("namespace") { // not valid for te new layout
log.Info("--namespace is deprecated; use --watch-namespace instead.")
if !cmd.Flags().Changed("watch-namespace") {
err := cmd.Flags().Set("watch-namespace", c.namespace)
return err
}
}
// Get default namespace to watch if unset.
if !cmd.Flags().Changed("watch-namespace") {
_, defaultNamespace, err := k8sinternal.GetKubeconfigAndNamespace(c.kubeconfig)
if err != nil {
return fmt.Errorf("error getting kubeconfig and default namespace: %v", err)
}
c.localArgs.WatchNamespace = defaultNamespace
}
}

c.localArgs.Kubeconfig = c.kubeconfig
if err := c.localArgs.Run(); err != nil {
log.Fatalf("Failed to run operator locally: %v", err)
}
}
return nil
},
}

// Shared flags.
cmd.Flags().StringVar(&c.kubeconfig, "kubeconfig", "",
"The file path to kubernetes configuration file. Defaults to location "+
"specified by $KUBECONFIG, or to default file rules if not set")
err := cmd.Flags().MarkDeprecated("kubeconfig",
"use --kubeconfig with 'local' or 'packagemanifests' subcommands instead")
if err != nil {
panic(err)
}
// Deprecated: namespace exists for historical compatibility. Use watch-namespace instead.
//TODO: remove namespace flag before 1.0.0
if !kbutil.HasProjectFile() { // not show for the kb layout projects
cmd.Flags().StringVar(&c.namespace, "namespace", "",
"The namespace in which operator and namespaces resources are run")
err := cmd.Flags().MarkDeprecated("namespace", "use --watch-namespaces (with --local) "+
"or --operator-namespace (with --olm) instead")
if err != nil {
panic(err)
}
}

// 'run --olm' and related flags.
cmd.Flags().BoolVar(&c.olm, "olm", false,
"The operator to be run will be managed by OLM in a cluster. "+
"Cannot be set with another run-type flag")
err = cmd.Flags().MarkDeprecated("olm", "use 'run packagemanifests' instead")
if err != nil {
panic(err)
}
// Mark all flags used with '--olm' as deprecated and hidden separately so
// all other 'run' flags are still available.
olmFS := pflag.NewFlagSet("olm", pflag.ExitOnError)
olmFS.StringVar(&c.olmArgs.ManifestsDir, "manifests", "",
"Directory containing operator package directories and a package manifest file")
c.olmArgs.AddToFlagSet(olmFS)
olmFS.VisitAll(func(f *pflag.Flag) {
f.Deprecated = "use this flag with 'run packagemanifests' instead"
f.Hidden = true
})
cmd.Flags().AddFlagSet(olmFS)

// 'run --local' and related flags.
cmd.Flags().BoolVar(&c.local, "local", false,
"The operator will be run locally by building the operator binary with "+
"the ability to access a kubernetes cluster using a kubeconfig file. "+
"Cannot be set with another run-type flag.")
err = cmd.Flags().MarkDeprecated("local", "use 'run local' instead")
if err != nil {
panic(err)
}
localFS := pflag.NewFlagSet("local", pflag.ExitOnError)
c.localArgs.AddToFlags(localFS)
switch projutil.GetOperatorType() {
case projutil.OperatorTypeAnsible:
c.localArgs.AnsibleOperatorFlags = aoflags.AddTo(localFS, "(ansible operator)")
case projutil.OperatorTypeHelm:
c.localArgs.HelmOperatorFlags = hoflags.AddTo(localFS, "(helm operator)")
}
localFS.VisitAll(func(f *pflag.Flag) {
f.Deprecated = "use this flag with 'run local' instead"
f.Hidden = true
})
cmd.Flags().AddFlagSet(localFS)

cmd.AddCommand(
packagemanifests.NewCmd(),
local.NewCmd(),
)

return cmd
}
Loading

0 comments on commit 1cf804e

Please sign in to comment.