diff --git a/cli/cmds/cluster/cluster.go b/cli/cmds/cluster/cluster.go index d870a682..5339c7e6 100644 --- a/cli/cmds/cluster/cluster.go +++ b/cli/cmds/cluster/cluster.go @@ -2,30 +2,26 @@ package cluster import ( "github.com/rancher/k3k/cli/cmds" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) -var subcommands = []cli.Command{ +var subcommands = []*cli.Command{ { - Name: "create", - Usage: "Create new cluster", - SkipFlagParsing: false, - SkipArgReorder: true, - Action: create, - Flags: append(cmds.CommonFlags, clusterCreateFlags...), + Name: "create", + Usage: "Create new cluster", + Action: create, + Flags: append(cmds.CommonFlags, clusterCreateFlags...), }, { - Name: "delete", - Usage: "Delete an existing cluster", - SkipFlagParsing: false, - SkipArgReorder: true, - Action: delete, - Flags: append(cmds.CommonFlags, clusterDeleteFlags...), + Name: "delete", + Usage: "Delete an existing cluster", + Action: delete, + Flags: append(cmds.CommonFlags, clusterDeleteFlags...), }, } -func NewCommand() cli.Command { - return cli.Command{ +func NewCommand() *cli.Command { + return &cli.Command{ Name: "cluster", Usage: "cluster command", Subcommands: subcommands, diff --git a/cli/cmds/cluster/create.go b/cli/cmds/cluster/create.go index e95fc94c..861ab04c 100644 --- a/cli/cmds/cluster/create.go +++ b/cli/cmds/cluster/create.go @@ -16,7 +16,7 @@ import ( "github.com/rancher/k3k/pkg/controller/cluster/server" "github.com/rancher/k3k/pkg/controller/kubeconfig" "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -51,65 +51,65 @@ var ( mode string clusterCreateFlags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "name", Usage: "name of the cluster", Destination: &name, }, - cli.Int64Flag{ + &cli.Int64Flag{ Name: "servers", Usage: "number of servers", Destination: &servers, Value: 1, }, - cli.Int64Flag{ + &cli.Int64Flag{ Name: "agents", Usage: "number of agents", Destination: &agents, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "token", Usage: "token of the cluster", Destination: &token, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cluster-cidr", Usage: "cluster CIDR", Destination: &clusterCIDR, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "service-cidr", Usage: "service CIDR", Destination: &serviceCIDR, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "persistence-type", Usage: "Persistence mode for the nodes (ephermal, static, dynamic)", Value: server.EphermalNodesType, Destination: &persistenceType, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "storage-class-name", Usage: "Storage class name for dynamic persistence type", Destination: &storageClassName, }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "server-args", Usage: "servers extra arguments", Value: &serverArgs, }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "agent-args", Usage: "agents extra arguments", Value: &agentArgs, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "version", Usage: "k3s version", Destination: &version, Value: "v1.26.1-k3s1", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "mode", Usage: "k3k mode type", Destination: &mode, @@ -153,8 +153,8 @@ func create(clx *cli.Context) error { int32(agents), clusterCIDR, serviceCIDR, - serverArgs, - agentArgs, + serverArgs.Value(), + agentArgs.Value(), ) cluster.Spec.Expose = &v1alpha1.ExposeConfig{ diff --git a/cli/cmds/cluster/delete.go b/cli/cmds/cluster/delete.go index 8876b939..716f6a49 100644 --- a/cli/cmds/cluster/delete.go +++ b/cli/cmds/cluster/delete.go @@ -6,7 +6,7 @@ import ( "github.com/rancher/k3k/cli/cmds" "github.com/rancher/k3k/pkg/apis/k3k.io/v1alpha1" "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/clientcmd" "sigs.k8s.io/controller-runtime/pkg/client" @@ -14,7 +14,7 @@ import ( var ( clusterDeleteFlags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "name", Usage: "name of the cluster", Destination: &name, diff --git a/cli/cmds/kubeconfig/kubeconfig.go b/cli/cmds/kubeconfig/kubeconfig.go index ad2041fd..8dba8c92 100644 --- a/cli/cmds/kubeconfig/kubeconfig.go +++ b/cli/cmds/kubeconfig/kubeconfig.go @@ -14,7 +14,7 @@ import ( "github.com/rancher/k3k/pkg/controller/certs" "github.com/rancher/k3k/pkg/controller/kubeconfig" "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -39,33 +39,33 @@ var ( expirationDays int64 configName string generateKubeconfigFlags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "name", Usage: "cluster name", Destination: &name, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "config-name", Usage: "the name of the generated kubeconfig file", Destination: &configName, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cn", Usage: "Common name (CN) of the generated certificates for the kubeconfig", Destination: &cn, Value: controller.AdminCommonName, }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "org", Usage: "Organization name (ORG) of the generated certificates for the kubeconfig", Value: &org, }, - cli.StringSliceFlag{ + &cli.StringSliceFlag{ Name: "altNames", Usage: "altNames of the generated certificates for the kubeconfig", Value: &altNames, }, - cli.Int64Flag{ + &cli.Int64Flag{ Name: "expiration-days", Usage: "Expiration date of the certificates used for the kubeconfig", Destination: &expirationDays, @@ -74,19 +74,18 @@ var ( } ) -var subcommands = []cli.Command{ +var subcommands = []*cli.Command{ { Name: "generate", Usage: "Generate kubeconfig for clusters", SkipFlagParsing: false, - SkipArgReorder: true, Action: generate, Flags: append(cmds.CommonFlags, generateKubeconfigFlags...), }, } -func NewCommand() cli.Command { - return cli.Command{ +func NewCommand() *cli.Command { + return &cli.Command{ Name: "kubeconfig", Usage: "Manage kubeconfig for clusters", Subcommands: subcommands, @@ -123,13 +122,15 @@ func generate(clx *cli.Context) error { } host := strings.Split(url.Host, ":") - certAltNames := certs.AddSANs(altNames) - if org == nil { - org = cli.StringSlice{user.SystemPrivilegedGroup} + certAltNames := certs.AddSANs(altNames.Value()) + + orgs := org.Value() + if orgs == nil { + orgs = []string{user.SystemPrivilegedGroup} } cfg := kubeconfig.KubeConfig{ CN: cn, - ORG: org, + ORG: orgs, ExpiryDate: time.Hour * 24 * time.Duration(expirationDays), AltNames: certAltNames, } diff --git a/cli/cmds/root.go b/cli/cmds/root.go index 36253542..203348a8 100644 --- a/cli/cmds/root.go +++ b/cli/cmds/root.go @@ -2,7 +2,7 @@ package cmds import ( "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) const ( @@ -14,13 +14,13 @@ var ( Kubeconfig string namespace string CommonFlags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "kubeconfig", - EnvVar: "KUBECONFIG", + EnvVars: []string{"KUBECONFIG"}, Usage: "Kubeconfig path", Destination: &Kubeconfig, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "namespace", Usage: "Namespace to create the k3k cluster in", Destination: &namespace, @@ -33,11 +33,11 @@ func NewApp() *cli.App { app.Name = "k3kcli" app.Usage = "CLI for K3K" app.Flags = []cli.Flag{ - cli.BoolFlag{ + &cli.BoolFlag{ Name: "debug", Usage: "Turn on debug logs", Destination: &debug, - EnvVar: "K3K_DEBUG", + EnvVars: []string{"K3K_DEBUG"}, }, } diff --git a/cli/main.go b/cli/main.go index 6fc7c5e7..20b8946d 100644 --- a/cli/main.go +++ b/cli/main.go @@ -9,7 +9,7 @@ import ( "github.com/rancher/k3k/cli/cmds/kubeconfig" "github.com/rancher/k3k/pkg/buildinfo" "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" ) func main() { @@ -19,7 +19,7 @@ func main() { fmt.Println("k3kcli Version: " + buildinfo.Version) } - app.Commands = []cli.Command{ + app.Commands = []*cli.Command{ cluster.NewCommand(), kubeconfig.NewCommand(), } diff --git a/go.mod b/go.mod index 813d994b..9ebc1803 100644 --- a/go.mod +++ b/go.mod @@ -19,7 +19,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/testcontainers/testcontainers-go v0.35.0 github.com/testcontainers/testcontainers-go/modules/k3s v0.35.0 - github.com/urfave/cli v1.22.12 + github.com/urfave/cli/v2 v2.27.5 github.com/virtual-kubelet/virtual-kubelet v1.11.0 go.etcd.io/etcd/api/v3 v3.5.14 go.etcd.io/etcd/client/v3 v3.5.14 @@ -61,7 +61,7 @@ require ( github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/cpuguy83/dockercfg v0.3.2 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect @@ -168,6 +168,7 @@ require ( github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect + github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.16 // indirect go.opencensus.io v0.24.0 // indirect diff --git a/go.sum b/go.sum index 3bbd03ba..54654247 100644 --- a/go.sum +++ b/go.sum @@ -606,7 +606,6 @@ github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -712,9 +711,9 @@ github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8 github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/dockercfg v0.3.2 h1:DlJTyZGBDlXqUZ2Dk2Q3xHs/FtnooJJVaad2S9GKorA= github.com/cpuguy83/dockercfg v0.3.2/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= +github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -1209,8 +1208,8 @@ github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+F github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= -github.com/urfave/cli v1.22.12 h1:igJgVw1JdKH+trcLWLeLwZjU9fEfPesQ+9/e4MQ44S8= -github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w= +github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ= github.com/virtual-kubelet/virtual-kubelet v1.11.0 h1:LOMcZQfP083xmYH9mYtyHAR+ybFbK1uMaRA+EtDcd1I= github.com/virtual-kubelet/virtual-kubelet v1.11.0/go.mod h1:WQfPHbIlzfhMNYkh6hFXF1ctGfNM8UJCYLYpLa/trxc= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1225,6 +1224,8 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= +github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/k3k-kubelet/main.go b/k3k-kubelet/main.go index 314072ae..bee78aa3 100644 --- a/k3k-kubelet/main.go +++ b/k3k-kubelet/main.go @@ -7,7 +7,7 @@ import ( "github.com/go-logr/zapr" "github.com/rancher/k3k/pkg/log" "github.com/sirupsen/logrus" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "go.uber.org/zap" ctrlruntimelog "sigs.k8s.io/controller-runtime/pkg/log" ) @@ -24,73 +24,73 @@ func main() { app.Name = "k3k-kubelet" app.Usage = "virtual kubelet implementation k3k" app.Flags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "cluster-name", Usage: "Name of the k3k cluster", Destination: &cfg.ClusterName, - EnvVar: "CLUSTER_NAME", + EnvVars: []string{"CLUSTER_NAME"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cluster-namespace", Usage: "Namespace of the k3k cluster", Destination: &cfg.ClusterNamespace, - EnvVar: "CLUSTER_NAMESPACE", + EnvVars: []string{"CLUSTER_NAMESPACE"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cluster-token", Usage: "K3S token of the k3k cluster", Destination: &cfg.Token, - EnvVar: "CLUSTER_TOKEN", + EnvVars: []string{"CLUSTER_TOKEN"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "host-config-path", Usage: "Path to the host kubeconfig, if empty then virtual-kubelet will use incluster config", Destination: &cfg.HostConfigPath, - EnvVar: "HOST_KUBECONFIG", + EnvVars: []string{"HOST_KUBECONFIG"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "virtual-config-path", Usage: "Path to the k3k cluster kubeconfig, if empty then virtual-kubelet will create its own config from k3k cluster", Destination: &cfg.VirtualConfigPath, - EnvVar: "CLUSTER_NAME", + EnvVars: []string{"CLUSTER_NAME"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "kubelet-port", Usage: "kubelet API port number", Destination: &cfg.KubeletPort, - EnvVar: "SERVER_PORT", + EnvVars: []string{"SERVER_PORT"}, Value: "10250", }, - cli.StringFlag{ + &cli.StringFlag{ Name: "agent-hostname", Usage: "Agent Hostname used for TLS SAN for the kubelet server", Destination: &cfg.AgentHostname, - EnvVar: "AGENT_HOSTNAME", + EnvVars: []string{"AGENT_HOSTNAME"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "server-ip", Usage: "Server IP used for registering the virtual kubelet to the cluster", Destination: &cfg.ServerIP, - EnvVar: "SERVER_IP", + EnvVars: []string{"SERVER_IP"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "version", Usage: "Version of kubernetes server", Destination: &cfg.Version, - EnvVar: "VERSION", + EnvVars: []string{"VERSION"}, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "config", Usage: "Path to k3k-kubelet config file", Destination: &configFile, - EnvVar: "CONFIG_FILE", + EnvVars: []string{"CONFIG_FILE"}, Value: "/etc/rancher/k3k/config.yaml", }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "debug", Usage: "Enable debug logging", Destination: &debug, - EnvVar: "DEBUG", + EnvVars: []string{"DEBUG"}, }, } app.Before = func(clx *cli.Context) error { @@ -104,7 +104,7 @@ func main() { } } -func run(clx *cli.Context) { +func run(clx *cli.Context) error { ctx := context.Background() if err := cfg.parse(configFile); err != nil { logger.Fatalw("failed to parse config file", "path", configFile, zap.Error(err)) @@ -123,4 +123,6 @@ func run(clx *cli.Context) { } k.start(ctx) + + return nil } diff --git a/main.go b/main.go index cd99322c..3b721953 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,7 @@ import ( "github.com/rancher/k3k/pkg/controller/cluster" "github.com/rancher/k3k/pkg/controller/clusterset" "github.com/rancher/k3k/pkg/log" - "github.com/urfave/cli" + "github.com/urfave/cli/v2" "go.uber.org/zap" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" @@ -34,34 +34,34 @@ var ( debug bool logger *log.Logger flags = []cli.Flag{ - cli.StringFlag{ + &cli.StringFlag{ Name: "kubeconfig", - EnvVar: "KUBECONFIG", + EnvVars: []string{"KUBECONFIG"}, Usage: "Kubeconfig path", Destination: &kubeconfig, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "cluster-cidr", - EnvVar: "CLUSTER_CIDR", + EnvVars: []string{"CLUSTER_CIDR"}, Usage: "Cluster CIDR to be added to the networkpolicy of the clustersets", Destination: &clusterCIDR, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "shared-agent-image", - EnvVar: "SHARED_AGENT_IMAGE", + EnvVars: []string{"SHARED_AGENT_IMAGE"}, Usage: "K3K Virtual Kubelet image", Value: "rancher/k3k:k3k-kubelet-dev", Destination: &sharedAgentImage, }, - cli.StringFlag{ + &cli.StringFlag{ Name: "shared-agent-pull-policy", - EnvVar: "SHARED_AGENT_PULL_POLICY", + EnvVars: []string{"SHARED_AGENT_PULL_POLICY"}, Usage: "K3K Virtual Kubelet image pull policy must be one of Always, IfNotPresent or Never", Destination: &sharedAgentImagePullPolicy, }, - cli.BoolFlag{ + &cli.BoolFlag{ Name: "debug", - EnvVar: "DEBUG", + EnvVars: []string{"DEBUG"}, Usage: "Debug level logging", Destination: &debug, },