前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2.5. [kustz] 使用 cobra 实现 kustz 命令

2.5. [kustz] 使用 cobra 实现 kustz 命令

原创
作者头像
老麦
发布2022-11-23 15:14:40
1900
发布2022-11-23 15:14:40
举报
文章被收录于专栏:Go与云原生Go与云原生

2.5. kustz 使用 cobra 实现 kustz 命令

image.png
image.png

大家好, 我是老麦。 一个运维小学生。

有了前面几章的努力, 我们的命令行工具 kustz 终于要问世了。

代码还是在 Github, 文章中有不清楚的可以上去看看

https://github.com/tangx/kustz/tree/chapter/05-build-kustz-cli-with-cobra

image.png
image.png

kustz 命令

当前命令功能就很简单。

  1. default: 输出 kustz 默认配置
  2. render: 读取 kustz 配置并生成 kustomize 配置四件套。
代码语言:shell
复制
$ kustz -h

Available Commands:
  default     在屏幕上打印 kustz 默认配置
  render      读取 kustz 配置, 生成 kustomize 所需文件

编码

本章的代码都很简单, 就是设计的文件比较多。

使用 cobra 创建命令

cobra 真的是一个非常好用的命令行工具。

代码语言:shell
复制
go get -u github.com/spf13/cobra

/cmd/kustz/cmd/root.go 中创建 根命令 rootCmd

并定义 执行函数 Execute。

代码语言:go
复制
func Execute() error {
	return rootCmd.Execute()
}

/cmd/kustz/cmd/default.go 中创建 子命令 default, 无任何参数。

/cmd/kustz/cmd/render.go 中创建 子命令 render, 有一个参数 config, 实现根据配置管理应用。

而在外部 /cmd/kustz/main.go 中, 只有一个入口函数 main 调用 rootCmd 的执行。 保持文件清洁干爽。

花开两朵。 在 /pkg/kustz/cmd.go 文件中, 提供了 函数方法 供之前的命令调用

default

使用 go:embed 将配置文件 kustz.yml 嵌入到应用中。 配置随着代码走, 测试分发两不误。

代码语言:go
复制
//go:embed kustz.yml
var defaultConfig string

func DefaultConfig() {
	fmt.Println(defaultConfig)
}

这里只是简单的配置文件打印标准输出。 如果需要保存到文件, 用户可以自行使用 重定向符

render

通过 RenderAll 方法将之间的 Deployment, Ingress, Service, Kustomization 都保存成了对应文件。

代码语言:go
复制
func (kz *Config) RenderAll() error {
}

在 Kustomize 章节已经硬编码 Resources 的资源文件名称。 因此这里可就定义了这几个文件名的常量。

代码语言:go
复制
const (
	FileDeployment    = "deployment.yml"
	FileIngress       = "ingress.yml"
	FileService       = "service.yml"
	FileKustomization = "kustomization.yml"
)

/pkg/kubeutils/yaml.go 中, 将 dep, svc, ing 等编码成 YAML 的时候, 用到了 sigs.k8s.io/yaml (k8syaml) 库, 而非 gopkg.in/yaml.v2 (pkgyaml)。

跟踪一下 k8syaml 的代码就很容易知道, 前者在 pkgyaml 的基础上, 针对性的为 k8s 做了很多优化。

编译及测试

代码语言:shell
复制
$ go build ./cmd/kustz

$ ./kustz default > abc.yml
$ ./kustz render -c abc.yml

如果不行, 检查一下代码吧。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.5. kustz 使用 cobra 实现 kustz 命令
    • kustz 命令
      • 编码
        • 使用 cobra 创建命令
      • 编译及测试
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档