cobra 入门

任何一个知识点如果深入学习都是有很多值得深思的地方,kubectl是一个再简单不过的工具,但是它里面引用的一些第三方的包却有很值得考究,第一个是cobra。
举个例子 pkg/kubectl/cmd/exec.go


func NewCmdExec(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
    options := &ExecOptions{
        StreamOptions: StreamOptions{
            IOStreams: streams,
        },

        Executor: &DefaultRemoteExecutor{},
    }
    cmd := &cobra.Command{
        Use: "exec POD [-c CONTAINER] -- COMMAND [args...]",
        DisableFlagsInUseLine: true,
        Short:   i18n.T("Execute a command in a container"),
        Long:    "Execute a command in a container.",
        Example: exec_example,
        Run: func(cmd *cobra.Command, args []string) {
            argsLenAtDash := cmd.ArgsLenAtDash()
            cmdutil.CheckErr(options.Complete(f, cmd, args, argsLenAtDash))
            cmdutil.CheckErr(options.Validate())
            cmdutil.CheckErr(options.Run())
        },
    }
    cmd.Flags().StringVarP(&options.PodName, "pod", "p", options.PodName, "Pod name")
    // TODO support UID
    cmd.Flags().StringVarP(&options.ContainerName, "container", "c", options.ContainerName, "Container name. If omitted, the first container in the pod will be chosen")
    cmd.Flags().BoolVarP(&options.Stdin, "stdin", "i", options.Stdin, "Pass stdin to the container")
    cmd.Flags().BoolVarP(&options.TTY, "tty", "t", options.TTY, "Stdin is a TTY")
    return cmd
}

kubectl的exec命令就是通过cobra实现的,当前kubectl其他的命令也是通过cobra实现的。其实是docker 先使用的cobra的,之前docker的所有命令都是通过cobra实现的。回到正题,下面介绍cobra,通过官方文档
安装

go get -u github.com/spf13/cobra/cobra

使用的方式是: APPNAME COMMAND ARG –FLAG
APPNAME就是你开发应用的名称,譬如docker、 kubectl
COMMAND 就是命令 ,譬如 get
ARG 是参数 譬如ID
FLAG 是标志位

hugo server --port=1313

server 是COMMAND port 是FLAG

下面通过代码看看如果使用,还是官方例子,
在项目的目录下执行

cobra init 会自动创建main.go
cobra add add 添加一个add的命令
cobra add del 添加一个del的命令
cobra add mm  添加一个mm的命令

编译就可以直接运行,不需要一行代码

./appc -h
  add         A brief description of your command
  del         A brief description of your command
  help        Help about any command
  mm          A brief description of your command

如果执行命令
 ./appc add
add called

是不是很方便。
回到kubectl上面,它也是充分利用了这个工具包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳清风09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值