Skip to content

Commit f4bbc0d

Browse files
committed
Migrate to urfavecli v2
Signed-off-by: Derek Nola <[email protected]>
1 parent fee1de2 commit f4bbc0d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+311
-303
lines changed

cmd/agent/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"github.com/k3s-io/k3s/pkg/cli/cmds"
1010
"github.com/k3s-io/k3s/pkg/configfilearg"
1111
"github.com/sirupsen/logrus"
12-
"github.com/urfave/cli"
12+
"github.com/urfave/cli/v2"
1313
)
1414

1515
func main() {
1616
app := cmds.NewApp()
17-
app.Commands = []cli.Command{
17+
app.Commands = []*cli.Command{
1818
cmds.NewAgentCommand(agent.Run),
1919
}
2020

cmd/cert/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"github.com/k3s-io/k3s/pkg/cli/cmds"
1010
"github.com/k3s-io/k3s/pkg/configfilearg"
1111
"github.com/sirupsen/logrus"
12-
"github.com/urfave/cli"
12+
"github.com/urfave/cli/v2"
1313
)
1414

1515
func main() {
1616
app := cmds.NewApp()
17-
app.Commands = []cli.Command{
17+
app.Commands = []*cli.Command{
1818
cmds.NewCertCommands(
1919
cert.Check,
2020
cert.Rotate,

cmd/completion/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import (
88
"github.com/k3s-io/k3s/pkg/cli/cmds"
99
"github.com/k3s-io/k3s/pkg/cli/completion"
1010
"github.com/sirupsen/logrus"
11-
"github.com/urfave/cli"
11+
"github.com/urfave/cli/v2"
1212
)
1313

1414
func main() {
1515
app := cmds.NewApp()
16-
app.Commands = []cli.Command{
16+
app.Commands = []*cli.Command{
1717
cmds.NewCompletionCommand(completion.Run),
1818
}
1919

cmd/encrypt/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"github.com/k3s-io/k3s/pkg/cli/secretsencrypt"
1010
"github.com/k3s-io/k3s/pkg/configfilearg"
1111
"github.com/sirupsen/logrus"
12-
"github.com/urfave/cli"
12+
"github.com/urfave/cli/v2"
1313
)
1414

1515
func main() {
1616
app := cmds.NewApp()
17-
app.Commands = []cli.Command{
17+
app.Commands = []*cli.Command{
1818
cmds.NewSecretsEncryptCommands(
1919
secretsencrypt.Status,
2020
secretsencrypt.Enable,

cmd/etcdsnapshot/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"github.com/k3s-io/k3s/pkg/cli/etcdsnapshot"
1010
"github.com/k3s-io/k3s/pkg/configfilearg"
1111
"github.com/sirupsen/logrus"
12-
"github.com/urfave/cli"
12+
"github.com/urfave/cli/v2"
1313
)
1414

1515
func main() {
1616
app := cmds.NewApp()
17-
app.Commands = []cli.Command{
17+
app.Commands = []*cli.Command{
1818
cmds.NewEtcdSnapshotCommands(
1919
etcdsnapshot.Delete,
2020
etcdsnapshot.List,

cmd/k3s/main.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/rancher/wrangler/v3/pkg/resolvehome"
2525
"github.com/sirupsen/logrus"
2626
"github.com/spf13/pflag"
27-
"github.com/urfave/cli"
27+
"github.com/urfave/cli/v2"
2828
)
2929

3030
var criDefaultConfigPath = "/etc/crictl.yaml"
@@ -51,7 +51,7 @@ func main() {
5151
// Handle subcommand invocation (k3s server, k3s crictl, etc)
5252
app := cmds.NewApp()
5353
app.EnableBashCompletion = true
54-
app.Commands = []cli.Command{
54+
app.Commands = []*cli.Command{
5555
cmds.NewServerCommand(internalCLIAction(version.Program+"-server"+programPostfix, dataDir, os.Args)),
5656
cmds.NewAgentCommand(internalCLIAction(version.Program+"-agent"+programPostfix, dataDir, os.Args)),
5757
cmds.NewKubectlCommand(externalCLIAction("kubectl", dataDir)),
@@ -172,7 +172,7 @@ func runCLIs(dataDir string) bool {
172172
// externalCLIAction returns a function that will call an external binary, be used as the Action of a cli.Command.
173173
func externalCLIAction(cmd, dataDir string) func(cli *cli.Context) error {
174174
return func(cli *cli.Context) error {
175-
return externalCLI(cmd, dataDir, cli.Args())
175+
return externalCLI(cmd, dataDir, cli.Args().Slice())
176176
}
177177
}
178178

cmd/server/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import (
2323
ctr2 "github.com/k3s-io/k3s/pkg/ctr"
2424
kubectl2 "github.com/k3s-io/k3s/pkg/kubectl"
2525
"github.com/sirupsen/logrus"
26-
"github.com/urfave/cli"
26+
"github.com/urfave/cli/v2"
2727
crictl2 "sigs.k8s.io/cri-tools/cmd/crictl"
2828
)
2929

@@ -43,7 +43,7 @@ func main() {
4343
os.Args[0] = cmd
4444

4545
app := cmds.NewApp()
46-
app.Commands = []cli.Command{
46+
app.Commands = []*cli.Command{
4747
cmds.NewServerCommand(server.Run),
4848
cmds.NewAgentCommand(agent.Run),
4949
cmds.NewKubectlCommand(kubectl.Run),

cmd/token/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ import (
99
"github.com/k3s-io/k3s/pkg/cli/token"
1010
"github.com/k3s-io/k3s/pkg/configfilearg"
1111
"github.com/sirupsen/logrus"
12-
"github.com/urfave/cli"
12+
"github.com/urfave/cli/v2"
1313
)
1414

1515
func main() {
1616
app := cmds.NewApp()
17-
app.Commands = []cli.Command{
17+
app.Commands = []*cli.Command{
1818
cmds.NewTokenCommands(
1919
token.Create,
2020
token.Delete,

go.mod

+1-2
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,14 @@ require (
132132
github.com/rancher/lasso v0.0.0-20250109193533-00757eec2dbd
133133
github.com/rancher/permissions v0.0.0-20240523180510-4001d3d637f7
134134
github.com/rancher/remotedialer v0.4.1
135-
github.com/rancher/wharfie v0.6.7
135+
github.com/rancher/wharfie v0.6.9
136136
github.com/rancher/wrangler/v3 v3.2.0-rc.1
137137
github.com/robfig/cron/v3 v3.0.1
138138
github.com/rootless-containers/rootlesskit v1.1.1
139139
github.com/sirupsen/logrus v1.9.3
140140
github.com/spegel-org/spegel v1.0.18
141141
github.com/spf13/pflag v1.0.5
142142
github.com/stretchr/testify v1.10.0
143-
github.com/urfave/cli v1.22.15
144143
github.com/urfave/cli/v2 v2.27.5
145144
github.com/vishvananda/netlink v1.3.1-0.20240905180732-b1ce50cfa9be
146145
github.com/yl2chen/cidranger v1.0.2

go.sum

+2-5
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,6 @@ github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOv
233233
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
234234
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
235235
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
236-
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
237236
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
238237
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
239238
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -1208,8 +1207,8 @@ github.com/rancher/permissions v0.0.0-20240523180510-4001d3d637f7 h1:0Kg2SGoMeU1
12081207
github.com/rancher/permissions v0.0.0-20240523180510-4001d3d637f7/go.mod h1:fsbs0YOsGn1ofPD5p+BuI4qDhbMbSJtTegKt6Ucna+c=
12091208
github.com/rancher/remotedialer v0.4.1 h1:jwOf2kPRjBBpSFofv1OuZHWaYHeC9Eb6/XgDvbkoTgc=
12101209
github.com/rancher/remotedialer v0.4.1/go.mod h1:Ys004RpJuTLSm+k4aYUCoFiOOad37ubYev3TkOFg/5w=
1211-
github.com/rancher/wharfie v0.6.7 h1:BhbBVJSLoDQMkZb+zVTLEKckUbq4sc3ZmEYqGakggSY=
1212-
github.com/rancher/wharfie v0.6.7/go.mod h1:ew49A9PzRsTngdzXIkgakfhMq3mHMA650HS1OVQpaNA=
1210+
github.com/rancher/wharfie v0.6.9 h1:w0xf8F/LqjuXBYYJRMWTcHWIF8p4zVKmFOOEqz74VhQ=
1211+
github.com/rancher/wharfie v0.6.9/go.mod h1:PpyuDiBgnFVd56kKtNfSS3cMDTVcRJZVYfNwxcqv50I=
12131212
github.com/rancher/wrangler/v3 v3.2.0-rc.1 h1:c0r5aBVUwWUqfeVFP9S4JGalsLra5zHZtvyteSuKHtI=
12141213
github.com/rancher/wrangler/v3 v3.2.0-rc.1/go.mod h1:8DV2nXOOiUrsoRviL3WmzjELR5B6AS8CtMGEP34E0DE=
12151214
github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk=
@@ -1326,8 +1325,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1
13261325
github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
13271326
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
13281327
github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
1329-
github.com/urfave/cli v1.22.15 h1:nuqt+pdC/KqswQKhETJjo7pvn/k4xMUxgW6liI7XpnM=
1330-
github.com/urfave/cli v1.22.15/go.mod h1:wSan1hmo5zeyLGBjRJbzRTNk8gwoYa2B9n4q9dmRIc0=
13311328
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
13321329
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
13331330
github.com/vbatts/tar-split v0.11.6 h1:4SjTW5+PU11n6fZenf2IPoV8/tz3AaYHMWjf23envGs=

main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ import (
2222
"github.com/k3s-io/k3s/pkg/cli/server"
2323
"github.com/k3s-io/k3s/pkg/configfilearg"
2424
"github.com/sirupsen/logrus"
25-
"github.com/urfave/cli"
25+
"github.com/urfave/cli/v2"
2626
)
2727

2828
func main() {
2929
app := cmds.NewApp()
30-
app.Commands = []cli.Command{
30+
app.Commands = []*cli.Command{
3131
cmds.NewServerCommand(server.Run),
3232
cmds.NewAgentCommand(agent.Run),
3333
cmds.NewKubectlCommand(kubectl.Run),

pkg/agent/config/config.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -514,10 +514,10 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
514514
// Overwrite nodeip and flannel interface and throw a warning if user explicitly set those parameters
515515
if len(vpnIPs) != 0 {
516516
logrus.Infof("Node-ip changed to %v due to VPN", vpnIPs)
517-
if len(envInfo.NodeIP) != 0 {
517+
if len(envInfo.NodeIP.Value()) != 0 {
518518
logrus.Warn("VPN provider overrides configured node-ip parameter")
519519
}
520-
if len(envInfo.NodeExternalIP) != 0 {
520+
if len(envInfo.NodeExternalIP.Value()) != 0 {
521521
logrus.Warn("VPN provider overrides node-external-ip parameter")
522522
}
523523
nodeIPs = vpnIPs
@@ -761,7 +761,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
761761
}
762762

763763
nodeConfig.AgentConfig.PauseImage = envInfo.PauseImage
764-
nodeConfig.AgentConfig.AirgapExtraRegistry = envInfo.AirgapExtraRegistry
764+
nodeConfig.AgentConfig.AirgapExtraRegistry = envInfo.AirgapExtraRegistry.Value()
765765
nodeConfig.AgentConfig.SystemDefaultRegistry = controlConfig.SystemDefaultRegistry
766766

767767
// Apply SystemDefaultRegistry to PauseImage and AirgapExtraRegistry
@@ -774,10 +774,10 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
774774
}
775775
}
776776

777-
nodeConfig.AgentConfig.ExtraKubeletArgs = envInfo.ExtraKubeletArgs
778-
nodeConfig.AgentConfig.ExtraKubeProxyArgs = envInfo.ExtraKubeProxyArgs
779-
nodeConfig.AgentConfig.NodeTaints = envInfo.Taints
780-
nodeConfig.AgentConfig.NodeLabels = envInfo.Labels
777+
nodeConfig.AgentConfig.ExtraKubeletArgs = envInfo.ExtraKubeletArgs.Value()
778+
nodeConfig.AgentConfig.ExtraKubeProxyArgs = envInfo.ExtraKubeProxyArgs.Value()
779+
nodeConfig.AgentConfig.NodeTaints = envInfo.Taints.Value()
780+
nodeConfig.AgentConfig.NodeLabels = envInfo.Labels.Value()
781781
nodeConfig.AgentConfig.ImageCredProvBinDir = envInfo.ImageCredProvBinDir
782782
nodeConfig.AgentConfig.ImageCredProvConfig = envInfo.ImageCredProvConfig
783783
nodeConfig.AgentConfig.DisableCCM = controlConfig.DisableCCM

pkg/agent/run.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ func Run(ctx context.Context, cfg cmds.Agent) error {
310310
}
311311

312312
if cfg.Rootless && !cfg.RootlessAlreadyUnshared {
313-
dualNode, err := utilsnet.IsDualStackIPStrings(cfg.NodeIP)
313+
dualNode, err := utilsnet.IsDualStackIPStrings(cfg.NodeIP.Value())
314314
if err != nil {
315315
return err
316316
}

pkg/cli/agent/agent.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/pkg/errors"
2525
"github.com/rancher/wrangler/v3/pkg/signals"
2626
"github.com/sirupsen/logrus"
27-
"github.com/urfave/cli"
27+
"github.com/urfave/cli/v2"
2828
)
2929

3030
func Run(ctx *cli.Context) error {
@@ -72,7 +72,7 @@ func Run(ctx *cli.Context) error {
7272
return fmt.Errorf("--server is required")
7373
}
7474

75-
if cmds.AgentConfig.FlannelIface != "" && len(cmds.AgentConfig.NodeIP) == 0 {
75+
if cmds.AgentConfig.FlannelIface != "" && len(cmds.AgentConfig.NodeIP.Value()) == 0 {
7676
ip, err := util.GetIPFromInterface(cmds.AgentConfig.FlannelIface)
7777
if err != nil {
7878
return err
@@ -88,7 +88,7 @@ func Run(ctx *cli.Context) error {
8888
}
8989

9090
cfg := cmds.AgentConfig
91-
cfg.Debug = ctx.GlobalBool("debug")
91+
cfg.Debug = ctx.Bool("debug")
9292
cfg.DataDir = dataDir
9393

9494
contextCtx := signals.SetupSignalContext()

pkg/cli/cert/cert.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"github.com/pkg/errors"
2525
certutil "github.com/rancher/dynamiclistener/cert"
2626
"github.com/sirupsen/logrus"
27-
"github.com/urfave/cli"
27+
"github.com/urfave/cli/v2"
2828
)
2929

3030
func commandSetup(app *cli.Context, cfg *cmds.Server, sc *server.Config) (string, error) {
@@ -71,22 +71,22 @@ func check(app *cli.Context, cfg *cmds.Server) error {
7171
return err
7272
}
7373

74-
if len(cmds.ServicesList) == 0 {
74+
if len(cmds.ServicesList.Value()) == 0 {
7575
// detecting if the command is being run on an agent or server based on presence of the server data-dir
7676
_, err := os.Stat(serverConfig.ControlConfig.DataDir)
7777
if err != nil {
7878
if !os.IsNotExist(err) {
7979
return err
8080
}
8181
logrus.Infof("Agent detected, checking agent certificates")
82-
cmds.ServicesList = services.Agent
82+
cmds.ServicesList = cli.NewStringSlice(services.Agent...)
8383
} else {
8484
logrus.Infof("Server detected, checking agent and server certificates")
85-
cmds.ServicesList = services.All
85+
cmds.ServicesList = cli.NewStringSlice(services.All...)
8686
}
8787
}
8888

89-
fileMap, err := services.FilesForServices(serverConfig.ControlConfig, cmds.ServicesList)
89+
fileMap, err := services.FilesForServices(serverConfig.ControlConfig, cmds.ServicesList.Value())
9090
if err != nil {
9191
return err
9292
}
@@ -171,22 +171,22 @@ func rotate(app *cli.Context, cfg *cmds.Server) error {
171171
return err
172172
}
173173

174-
if len(cmds.ServicesList) == 0 {
174+
if len(cmds.ServicesList.Value()) == 0 {
175175
// detecting if the command is being run on an agent or server based on presence of the server data-dir
176176
_, err := os.Stat(serverConfig.ControlConfig.DataDir)
177177
if err != nil {
178178
if !os.IsNotExist(err) {
179179
return err
180180
}
181181
logrus.Infof("Agent detected, rotating agent certificates")
182-
cmds.ServicesList = services.Agent
182+
cmds.ServicesList = cli.NewStringSlice(services.Agent...)
183183
} else {
184184
logrus.Infof("Server detected, rotating agent and server certificates")
185-
cmds.ServicesList = services.All
185+
cmds.ServicesList = cli.NewStringSlice(services.All...)
186186
}
187187
}
188188

189-
fileMap, err := services.FilesForServices(serverConfig.ControlConfig, cmds.ServicesList)
189+
fileMap, err := services.FilesForServices(serverConfig.ControlConfig, cmds.ServicesList.Value())
190190
if err != nil {
191191
return err
192192
}
@@ -200,7 +200,7 @@ func rotate(app *cli.Context, cfg *cmds.Server) error {
200200

201201
// The dynamiclistener cache file can't be simply deleted, we need to create a trigger
202202
// file to indicate that the cert needs to be regenerated on startup.
203-
for _, service := range cmds.ServicesList {
203+
for _, service := range cmds.ServicesList.Value() {
204204
if service == version.Program+services.ProgramServer {
205205
dynamicListenerRegenFilePath := filepath.Join(serverConfig.ControlConfig.DataDir, "tls", "dynamic-cert-regenerate")
206206
if err := os.WriteFile(dynamicListenerRegenFilePath, []byte{}, 0600); err != nil {
@@ -256,7 +256,7 @@ func backupCertificates(serverDataDir, agentDataDir string, fileMap map[string][
256256
}
257257

258258
func validateCertConfig() error {
259-
for _, s := range cmds.ServicesList {
259+
for _, s := range cmds.ServicesList.Value() {
260260
if !services.IsValid(s) {
261261
return errors.New("service " + s + " is not recognized")
262262
}

0 commit comments

Comments
 (0)