diff --git a/cli/cmds/cluster_create.go b/cli/cmds/cluster_create.go index 342d052..99fe162 100644 --- a/cli/cmds/cluster_create.go +++ b/cli/cmds/cluster_create.go @@ -41,14 +41,17 @@ type CreateConfig struct { func NewClusterCreateCmd(appCtx *AppContext) *cli.Command { createConfig := &CreateConfig{} - createFlags := NewCreateFlags(createConfig) + + flags := CommonFlags(appCtx) + flags = append(flags, FlagNamespace(appCtx)) + flags = append(flags, newCreateFlags(createConfig)...) return &cli.Command{ Name: "create", Usage: "Create new cluster", UsageText: "k3kcli cluster create [command options] NAME", Action: createAction(appCtx, createConfig), - Flags: WithCommonFlags(appCtx, createFlags...), + Flags: flags, HideHelpCommand: true, } } diff --git a/cli/cmds/cluster_create_flags.go b/cli/cmds/cluster_create_flags.go index 6b9b50d..972d9f9 100644 --- a/cli/cmds/cluster_create_flags.go +++ b/cli/cmds/cluster_create_flags.go @@ -7,7 +7,7 @@ import ( "github.com/urfave/cli/v2" ) -func NewCreateFlags(config *CreateConfig) []cli.Flag { +func newCreateFlags(config *CreateConfig) []cli.Flag { return []cli.Flag{ &cli.IntFlag{ Name: "servers", diff --git a/cli/cmds/cluster_delete.go b/cli/cmds/cluster_delete.go index ea42f7b..30d193d 100644 --- a/cli/cmds/cluster_delete.go +++ b/cli/cmds/cluster_delete.go @@ -20,16 +20,22 @@ import ( var keepData bool func NewClusterDeleteCmd(appCtx *AppContext) *cli.Command { - return &cli.Command{ - Name: "delete", - Usage: "Delete an existing cluster", - UsageText: "k3kcli cluster delete [command options] NAME", - Action: delete(appCtx), - Flags: WithCommonFlags(appCtx, &cli.BoolFlag{ + flags := CommonFlags(appCtx) + flags = append(flags, FlagNamespace(appCtx)) + flags = append(flags, + &cli.BoolFlag{ Name: "keep-data", Usage: "keeps persistence volumes created for the cluster after deletion", Destination: &keepData, - }), + }, + ) + + return &cli.Command{ + Name: "delete", + Usage: "Delete an existing cluster", + UsageText: "k3kcli cluster delete [command options] NAME", + Action: delete(appCtx), + Flags: flags, HideHelpCommand: true, } } diff --git a/cli/cmds/cluster_list.go b/cli/cmds/cluster_list.go index bbc4505..5756536 100644 --- a/cli/cmds/cluster_list.go +++ b/cli/cmds/cluster_list.go @@ -12,12 +12,15 @@ import ( ) func NewClusterListCmd(appCtx *AppContext) *cli.Command { + flags := CommonFlags(appCtx) + flags = append(flags, FlagNamespace(appCtx)) + return &cli.Command{ Name: "list", Usage: "List all the existing cluster", UsageText: "k3kcli cluster list [command options]", Action: list(appCtx), - Flags: WithCommonFlags(appCtx), + Flags: flags, HideHelpCommand: true, } } diff --git a/cli/cmds/kubeconfig.go b/cli/cmds/kubeconfig.go index 90162ed..4022ffd 100644 --- a/cli/cmds/kubeconfig.go +++ b/cli/cmds/kubeconfig.go @@ -23,14 +23,17 @@ import ( ) var ( - name string - cn string - org cli.StringSlice - altNames cli.StringSlice - expirationDays int64 - configName string - kubeconfigServerHost string - generateKubeconfigFlags = []cli.Flag{ + name string + cn string + org cli.StringSlice + altNames cli.StringSlice + expirationDays int64 + configName string + kubeconfigServerHost string +) + +func newGenerateKubeconfigFlags(appCtx *AppContext) []cli.Flag { + return []cli.Flag{ &cli.StringFlag{ Name: "name", Usage: "cluster name", @@ -70,7 +73,7 @@ var ( Value: "", }, } -) +} func NewKubeconfigCmd(appCtx *AppContext) *cli.Command { return &cli.Command{ @@ -83,12 +86,16 @@ func NewKubeconfigCmd(appCtx *AppContext) *cli.Command { } func NewKubeconfigGenerateCmd(appCtx *AppContext) *cli.Command { + flags := CommonFlags(appCtx) + flags = append(flags, FlagNamespace(appCtx)) + flags = append(flags, newGenerateKubeconfigFlags(appCtx)...) + return &cli.Command{ Name: "generate", Usage: "Generate kubeconfig for clusters", SkipFlagParsing: false, Action: generate(appCtx), - Flags: WithCommonFlags(appCtx, generateKubeconfigFlags...), + Flags: flags, } } diff --git a/cli/cmds/policy_create.go b/cli/cmds/policy_create.go index 70fb9a0..92d3f9d 100644 --- a/cli/cmds/policy_create.go +++ b/cli/cmds/policy_create.go @@ -22,7 +22,8 @@ type VirtualClusterPolicyCreateConfig struct { func NewPolicyCreateCmd(appCtx *AppContext) *cli.Command { config := &VirtualClusterPolicyCreateConfig{} - createFlags := []cli.Flag{ + flags := CommonFlags(appCtx) + flags = append(flags, &cli.StringFlag{ Name: "mode", Usage: "The allowed mode type of the policy", @@ -37,14 +38,14 @@ func NewPolicyCreateCmd(appCtx *AppContext) *cli.Command { } }, }, - } + ) return &cli.Command{ Name: "create", Usage: "Create new policy", UsageText: "k3kcli policy create [command options] NAME", Action: policyCreateAction(appCtx, config), - Flags: WithCommonFlags(appCtx, createFlags...), + Flags: flags, HideHelpCommand: true, } } diff --git a/cli/cmds/policy_delete.go b/cli/cmds/policy_delete.go index f1e8fbd..a081d6f 100644 --- a/cli/cmds/policy_delete.go +++ b/cli/cmds/policy_delete.go @@ -2,14 +2,11 @@ package cmds import ( "context" - "errors" "github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1" - k3kcluster "github.com/rancher/k3k/pkg/controller/cluster" "github.com/sirupsen/logrus" "github.com/urfave/cli/v2" apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func NewPolicyDeleteCmd(appCtx *AppContext) *cli.Command { @@ -18,7 +15,7 @@ func NewPolicyDeleteCmd(appCtx *AppContext) *cli.Command { Usage: "Delete an existing policy", UsageText: "k3kcli policy delete [command options] NAME", Action: policyDeleteAction(appCtx), - Flags: WithCommonFlags(appCtx), + Flags: CommonFlags(appCtx), HideHelpCommand: true, } } @@ -33,24 +30,13 @@ func policyDeleteAction(appCtx *AppContext) cli.ActionFunc { } name := clx.Args().First() - if name == k3kcluster.ClusterInvalidName { - return errors.New("invalid cluster name") - } - namespace := appCtx.Namespace(name) - - logrus.Infof("Deleting policy in namespace [%s]", namespace) - - policy := &v1alpha1.VirtualClusterPolicy{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Namespace: namespace, - }, - } + policy := &v1alpha1.VirtualClusterPolicy{} + policy.Name = name if err := client.Delete(ctx, policy); err != nil { if apierrors.IsNotFound(err) { - logrus.Warnf("Policy not found in namespace [%s]", namespace) + logrus.Warnf("Policy not found") } else { return err } diff --git a/cli/cmds/policy_list.go b/cli/cmds/policy_list.go index 6b8d5a4..c4fb884 100644 --- a/cli/cmds/policy_list.go +++ b/cli/cmds/policy_list.go @@ -16,7 +16,7 @@ func NewPolicyListCmd(appCtx *AppContext) *cli.Command { Usage: "List all the existing policies", UsageText: "k3kcli policy list [command options]", Action: policyList(appCtx), - Flags: WithCommonFlags(appCtx), + Flags: CommonFlags(appCtx), HideHelpCommand: true, } } diff --git a/cli/cmds/root.go b/cli/cmds/root.go index 7464ec5..8433b9c 100644 --- a/cli/cmds/root.go +++ b/cli/cmds/root.go @@ -31,7 +31,7 @@ func NewApp() *cli.App { app := cli.NewApp() app.Name = "k3kcli" app.Usage = "CLI for K3K" - app.Flags = WithCommonFlags(appCtx) + app.Flags = CommonFlags(appCtx) app.Before = func(clx *cli.Context) error { if appCtx.Debug { @@ -94,27 +94,36 @@ func loadRESTConfig(kubeconfig string) (*rest.Config, error) { return kubeConfig.ClientConfig() } -func WithCommonFlags(appCtx *AppContext, flags ...cli.Flag) []cli.Flag { - commonFlags := []cli.Flag{ - &cli.BoolFlag{ - Name: "debug", - Usage: "Turn on debug logs", - Destination: &appCtx.Debug, - EnvVars: []string{"K3K_DEBUG"}, - }, - &cli.StringFlag{ - Name: "kubeconfig", - Usage: "kubeconfig path", - Destination: &appCtx.Kubeconfig, - DefaultText: "$HOME/.kube/config or $KUBECONFIG if set", - }, - &cli.StringFlag{ - Name: "namespace", - Usage: "namespace to create the k3k cluster in", - Aliases: []string{"n"}, - Destination: &appCtx.namespace, - }, +func CommonFlags(appCtx *AppContext) []cli.Flag { + return []cli.Flag{ + FlagDebug(appCtx), + FlagKubeconfig(appCtx), + } +} + +func FlagDebug(appCtx *AppContext) *cli.BoolFlag { + return &cli.BoolFlag{ + Name: "debug", + Usage: "Turn on debug logs", + Destination: &appCtx.Debug, + EnvVars: []string{"K3K_DEBUG"}, + } +} + +func FlagKubeconfig(appCtx *AppContext) *cli.StringFlag { + return &cli.StringFlag{ + Name: "kubeconfig", + Usage: "kubeconfig path", + Destination: &appCtx.Kubeconfig, + DefaultText: "$HOME/.kube/config or $KUBECONFIG if set", + } +} + +func FlagNamespace(appCtx *AppContext) *cli.StringFlag { + return &cli.StringFlag{ + Name: "namespace", + Usage: "namespace of the k3k cluster", + Aliases: []string{"n"}, + Destination: &appCtx.namespace, } - - return append(commonFlags, flags...) } diff --git a/docs/cli/cli-docs.md b/docs/cli/cli-docs.md index c7b4cef..da3acd3 100644 --- a/docs/cli/cli-docs.md +++ b/docs/cli/cli-docs.md @@ -9,7 +9,6 @@ k3kcli ``` [--debug] [--kubeconfig]=[value] -[--namespace|-n]=[value] ``` **Usage**: @@ -24,8 +23,6 @@ k3kcli [GLOBAL OPTIONS] command [COMMAND OPTIONS] [ARGUMENTS...] **--kubeconfig**="": kubeconfig path (default: $HOME/.kube/config or $KUBECONFIG if set) -**--namespace, -n**="": namespace to create the k3k cluster in - # COMMANDS @@ -55,7 +52,7 @@ Create new cluster **--mode**="": k3k mode type (shared, virtual) (default: "shared") -**--namespace, -n**="": namespace to create the k3k cluster in +**--namespace, -n**="": namespace of the k3k cluster **--persistence-type**="": persistence mode for the nodes (dynamic, ephemeral, static) (default: "dynamic") @@ -87,7 +84,7 @@ Delete an existing cluster **--kubeconfig**="": kubeconfig path (default: $HOME/.kube/config or $KUBECONFIG if set) -**--namespace, -n**="": namespace to create the k3k cluster in +**--namespace, -n**="": namespace of the k3k cluster ### list @@ -99,7 +96,7 @@ List all the existing cluster **--kubeconfig**="": kubeconfig path (default: $HOME/.kube/config or $KUBECONFIG if set) -**--namespace, -n**="": namespace to create the k3k cluster in +**--namespace, -n**="": namespace of the k3k cluster ## policy @@ -117,8 +114,6 @@ Create new policy **--mode**="": The allowed mode type of the policy (default: "shared") -**--namespace, -n**="": namespace to create the k3k cluster in - ### delete Delete an existing policy @@ -129,8 +124,6 @@ Delete an existing policy **--kubeconfig**="": kubeconfig path (default: $HOME/.kube/config or $KUBECONFIG if set) -**--namespace, -n**="": namespace to create the k3k cluster in - ### list List all the existing policies @@ -141,8 +134,6 @@ List all the existing policies **--kubeconfig**="": kubeconfig path (default: $HOME/.kube/config or $KUBECONFIG if set) -**--namespace, -n**="": namespace to create the k3k cluster in - ## kubeconfig Manage kubeconfig for clusters @@ -167,6 +158,6 @@ Generate kubeconfig for clusters **--name**="": cluster name -**--namespace, -n**="": namespace to create the k3k cluster in +**--namespace, -n**="": namespace of the k3k cluster **--org**="": Organization name (ORG) of the generated certificates for the kubeconfig