开发 k8s 管理平台 - k8sailor 02. 使用 cobra 初始化程序命令与参数

原文地址: https://tangx.in/posts/books/k8sailor/chapter01/02-design-cobra-command/

tag: https://github.com/tangx/k8sailor/tree/feat/01-cobra-command

为了更加方便的管理配置文件的来源, 这里使用 cobra 进行命令行构建

效果如下

1
2
3
4
5
6
7
8
9
cd cmd/k8sailor && go run .
k8s 管理平台

Usage:
  k8sailor [flags]

Flags:
      --config string   k8s 配置授权文件 (default "./k8sconfig/config.yml")
  -h, --help            help for k8sailor

编码

变量管理

cmd/k8sailor/global 目录中管理 全局 变量。

其中,定义一个 CmdFlag 结构体管理所有 cobra flags。

1
2
3
4
5
6
7
type CmdFlags struct {
	Config string `flag:"config" usage:"k8s 配置授权文件" persistent:"true"`
}

var Flags = &CmdFlags{
	Config: "./k8sconfig/config.yml",
}

cobra

cmd/k8sailor/cmd 中管理所有 cobra 命令。 root.go

在代码中使用了 cobrautils 库帮助管理 flag 绑定。

1
2
3
func init() {
	cobrautils.BindFlags(rootCmd, global.Flags)
}

启动

main.go 调用 cmd/root.go 的启动函数。 运行结果如上所示。

目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# tree 
.
├── README.md
├── cmd
│   └── k8sailor
│       ├── cmd
│       │   └── root.go
│       ├── global
│       │   └── config.go
│       ├── k8sconfig
│       │   └── config.yml
│       └── main.go
├── go.mod
└── go.sum

6 directories, 9 files