IT七剑客 IT七剑客
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
  • 从零开始写 k8s 发布工具(一)

  • 从零开始写 k8s 发布工具(二)

  • 从零开始写 k8s 发布工具(三)

  • 从零开始写 k8s 发布工具(四)

    • 使用 cobrautils 为命令添加更实用的命令参数
      • cobra flag
      • cobrautils 库
  • istio的环境准备

  • istioVirtualService

  • 老麦 Go
  • 从零开始写 k8s 发布工具(四)
老麦
2023-01-31
目录

使用 cobrautils 为命令添加更实用的命令参数

# 4.1. 使用 cobrautils 为命令添加更实用的命令参数

logo

之前的章节, 我们陆陆续续给 kustz 库添加了很多丰富服务的配置

但 kustz 命令, 还是处于一个很原始的命令状态。 接下来我们给 kustz 添加一些更丰富的参数 , 使 kustz 用起来更顺手。

在 CICD 的中, 一般情况下 变量,健康检查, 镜像策略 等很难发生变动。 而镜像名称 经常性 的在每次打包后发生变化。

每次CI触发都去修改 kustz.yml 配置显然是不可能的。 因此, 我们需要绑定更丰富的参数来支持我们 CI 的运行。

# cobra flag

之前在 /cmd/kustz/cmd/render.go 中, 我们为命令添加了一个指定配置文件的参数。

func init() {
	cmdRender.Flags().StringVarP(&config, "config", "c", "kustz.yml", "kustz config")
}

var config string
1
2
3
4
5

这种方法是 cobra 官方提供的基本模式。 在绑定的时候, 需要一行写一个, 并且不支持 指针参数 。

# cobrautils 库

接下来我们使用自己封装的 cobrautils 库。

$ go get -u github.com/go-jarvis/cobrautils
1

详细描述参考 https://github.com/go-jarvis/cobrautils

func init() {
	cobrautils.BindFlags(cmdRender, flags)
}

// KustzFlag 定义 flag
type KustzFlag struct {
	Config   string `flag:"config" usage:"kustz config" shorthand:"c"`
	Image    string `flag:"image" usage:"image name"`
	Replicas *int   `flag:"replicas" usage:"pod replicas number"`
}

// 初始化默认值
var flags = &KustzFlag{
	Config: "kustz.yml",
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

可以看到, 使用 cobrautils 之后。

  1. 使用结构体组合了所有参数, 每个字段通过注释描述, 作用更清晰, 耦合度更高。
  2. 支持 指针参数, 解决了 零值 带来的负面影响。
  3. 一行命令解决了所有参数的绑定。

其实如果喜欢的话, 可以将 /pkg/kustz/kustz.go 中的完整 Config 做成参数。

在 /cmd/kustz/cmd/render.go 中, 将 Image, Replicas 两个参数注入到配置文件中即可。


func render() {
	kz := kustz.NewKustzFromConfig(flags.Config)

	if flags.Image != "" {
		kz.Service.Image = flags.Image
	}
	if flags.Replicas != nil {
		kz.Service.Replicas = int32(*flags.Replicas)
	}

	kz.RenderAll()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
编辑 (opens new window)
上次更新: 2023/02/05, 02:48:13
镜像拉取鉴权和策略
install

← 镜像拉取鉴权和策略 install→

最近更新
01
Coding 102 Writing code other people can read
02-26
02
Kotlin Flow响应式编程,StateFlow和SharedFlow
02-05
03
Kotlin Flow响应式编程,操作符函数进阶
02-05
更多文章>
Theme by Vdoing | Copyright © 2022-2023 IT七剑客 | MIT License
  • 闽ICP备2021006579号-4
  • 闽公网安备 35012102500470号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式