原创 tantianran 不背锅运维
微信号 noblameops
功能介绍 运维非简单重复劳动,背锅有理有据应对。注重运维实战,我们比谁都拼!日常分享实用干货,助你成为运维大神!遇见不背锅,遇见更好的自己。
__发表于
收录于合集 #Dev 35个
作为一名运维工程师,我们经常需要编写命令行工具来管理和监控系统。在这方面,Cobra是一个强大的开源工具,能够帮助我们快速构建出优雅且功能丰富的命令行应用。Cobra是基于Go语言开发的一个命令行库,提供了一套简单而强大的API,可以帮助我们定义命令、子命令、标志和参数等。使用Cobra,我们能够轻松创建具有交互性、易用性和可扩展性的命令行应用。
- https://github.com/spf13/cobra
- https://github.com/spf13/cobra/blob/main/site/content/user_guide.md
- https://github.com/spf13/cobra-cli
- https://github.com/spf13/cobra-cli/blob/main/README.md
本篇分享它的基本使用,模拟一个运维场景来开发一个命令行应用,假设需要一个工具来查询服务器的状态和资源使用情况。我将使用Cobra来构建这个应用,并实现两个命令:一个用于查询服务器状态,另一个用于查询服务器资源使用情况。
首先,需要在Go环境中安装Cobra库和安装Cobra命令行工具(cobra-cli)。通过以下命令,可以获取Cobra的源代码并进行安装:
tantianran@ubuntu:~/gocode/src/cobra-demo$ go get -u github.com/spf13/cobra@latest
tantianran@ubuntu:~/gocode/src/cobra-demo$ go install github.com/spf13/cobra-cli@latest
安装完成后,就可以开始使用Cobra来构建命令行应用了。
创建cobra-demo模块并启动Cobra CLI应用程序
tantianran@ubuntu:~/gocode/src$ mkdir cobra-demo
tantianran@ubuntu:~/gocode/src$ cd cobra-demo/
tantianran@ubuntu:~/gocode/src/cobra-demo$ go mod init
tantianran@ubuntu:~/gocode/src/cobra-demo$ cobra-cli init
执行上述命令后,其中包含了应用的基本结构:
tantianran@ubuntu:~/gocode/src/cobra-demo$ tree
.
├── cmd
│ └── root.go
├── go.mod
├── go.sum
├── LICENSE
└── main.go
接下来,我们需要定义两个子命令:一个用于查询服务器状态,另一个用于查询服务器资源使用情况。在cobra- demo/cmd文件夹下创建两个名为status.go和resources.go的文件,并编写以下代码:
cmd/status.go:
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
func getStatus(cmd *cobra.Command, args []string) {
// 实现查询服务器状态的逻辑
fmt.Println("Server status: Running")
}
func init() {
rootCmd.AddCommand(statusCmd)
}
var statusCmd = &cobra.Command{
Use: "status",
Short: "Get server status",
Run: getStatus,
}
cmd/resources.go:
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
func getResources(cmd *cobra.Command, args []string) {
// 实现查询服务器资源使用情况的逻辑
fmt.Println("Server resources usage:")
fmt.Println("- CPU: 80%")
fmt.Println("- Memory: 4GB used, 8GB total")
}
func init() {
rootCmd.AddCommand(resourcesCmd)
}
var resourcesCmd = &cobra.Command{
Use: "resources",
Short: "Get server resources usage",
Run: getResources,
}
接着,在server/main.go文件中,将以下代码:
import "cobra-demo/cmd"
func main() {
cmd.Execute()
}
现在,已经完成了命令的定义和逻辑实现(当然是模拟的)。可以使用以下命令构建和运行应用:
tantianran@ubuntu:~/gocode/src/cobra-demo$ go build -o cobra-demo ./main.go
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo -h
这仅仅只是用于测试, 它是一个demo, 并没有实际用途.
Usage:
cobra-demo [flags]
cobra-demo [command]
Available Commands:
completion Generate the autocompletion script for the specified shell
help Help about any command
resources Get server resources usage
status Get server status
Flags:
-h, --help help for cobra-demo
-t, --toggle Help message for toggle
Use "cobra-demo [command] --help" for more information about a command.
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo resources
Server resources usage:
- CPU: 80%
- Memory: 4GB used, 8GB total
tantianran@ubuntu:~/gocode/src/cobra-demo$ ./cobra-demo status
Server status: Running
tantianran@ubuntu:~/gocode/src/cobra-demo$
通过以上命令,我们可以分别查询服务器的状态和资源使用情况。
通过这个模拟的示例,展示了如何使用Cobra创建一个命令行应用,可以根据实际需要进一步扩展和定制,例如添加更多的子命令、标志和参数。
最后再附上最终的项目结构:
tantianran@ubuntu:~/gocode/src/cobra-demo$ tree
.
├── cmd
│ ├── resources.go
│ ├── root.go
│ └── status.go
├── cobra-demo # 这个是刚编译好的二进制
├── go.mod
├── go.sum
├── LICENSE
└── main.go
最后,做个简单总结。Cobra是一款强大的命令行库,能够帮助运维工程师快速构建出功能丰富的命令行应用。通过使用Cobra,能够提高开发效率、减少编码工作量,并创建易于使用和可扩展的命令行工具,为我们的运维工作带来便利和效益。速度玩起来!让Cobra成为你打造命令行应用的得力工具!
预览时标签不可点
微信扫一扫
关注该公众号
知道了
微信扫一扫
使用小程序
取消 允许
取消 允许
: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看