Skip to content

Latest commit

 

History

History

cli

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

c* 增加一个命令

  • cli/cmd/ 下增加一个 <CMD>.go
  • <CMD>.go 中增加以下配置(代码):
package cmd

import (
	. "github.com/erda-project/erda/tools/cli/command"
)

// 后面有Command结构体的详细参数
var <CMD> = Command{
	Name:      "cmdname",  // 显示在命令行中的名字
	ShortHelp: "较短描述,在列出命令处显示此内容",
	LongHelp: "较长描述,在详细描述改命令时候显示此内容",
	Run: Run<CMD>,
}

func Run<CMD>(ctx *Context, moreArgs...) error {
        // impl cmd here
}
  • make cli
  • bin 目录下生成了 dice binary

struct Command

ParentName

指定上级命令,默认是root,也就是当前命令是1级命令

内容为上文中的 <CMD>, 而非 Command.Name

Name

在命令行中显示的名字

ShortHelp

较短的描述,在命令的列表中显示

LongHelp

较长的描述,在命令详细信息中显示

Hidden

是否在命令列表中隐藏改命令

DontHideCursor

是否在命令执行期间显示光标

默认在命令执行时隐藏光标

Args

  • example:
[]Arg { 
        IPArg{}.Name("ip_arg"),
	StringArg{}.Name("str_arg"),
	BoolArg{}.Name("bool_arg").Option(), 
}

下文另外说明 Arg

Flags

  • example
[]Flag{ 
        StringFlag{"H", "host", "1.2.3.4", "doc"}, 
        BoolFlag{"A", "another", true, "doc"}, 
        IntFlag{"O", "ohyoyo", 1, "doc"}, 
}

下文另外说明 Flag

Run

具体实现命令的地方, 函数参数类型跟上述 ArgsFlags 有关

以上面2个例子为例

函数类型为:

func Run<CMD>(ctx *Context, arg1 net.IP, arg2 string, arg3 bool, flag1 string, flag2 bool, flag3 int) error

Arg

Command 结构体中 Args 字段的内容

Method: Name

命令行中显示的参数名字

Method: Option

是否为可选参数

注意: 只有在Arg列表的最后一个可用

Type: StringArg

转换后参数类型:string

Type: IntArg

转换后参数类型:int

Type: FloatArg

转换后参数类型:float64

Type: IPArg

转换后参数类型:net.IP

Flag

Command 结构体中 Flags 字段的内容

Field: Short

flag shorthand letter

Field: Name

flag full name

Field: Doc

Field: Default

Context

Run<CMD>的第一个参数统一是 ctx *Context.

Context.StatusInfo

当前用户信息

Context.Conf

配置项

Context.Debug

是否为debug模式

Context.HttpClient

特定配置的 pkg/httpclient, 在cli中使用这个,而非 pkg/httpclient,

如果是对openapi的请求,使用Context.Get系列方法

func: Context.Get

已经将 OPENAPIHost 以及 Authorization 以及 OPENAPISESSION cookie 写入请求,

所以对于openapi的请求,全部使用这类方法

func: Context.Post

已经将 OPENAPIHost 以及 Authorization 以及 OPENAPISESSION cookie 写入请求,

所以对于openapi的请求,全部使用这类方法

func: Context.Delete

已经将 OPENAPIHost 以及 Authorization 以及 OPENAPISESSION cookie 写入请求,

所以对于openapi的请求,全部使用这类方法

func: Context.Put

已经将 OPENAPIHost 以及 Authorization 以及 OPENAPISESSION cookie 写入请求,

所以对于openapi的请求,全部使用这类方法

func: Context.Patch

已经将 OPENAPIHost 以及 Authorization 以及 OPENAPISESSION cookie 写入请求,

所以对于openapi的请求,全部使用这类方法

func: Context.CurrentOrg

当前 Org

func: Context.Projects

当前用户可见的projects

func: Context.Applications

当前用户可见的app

func: Context.DiceYml

当前环境的 dice.yml 路径

func: Context.DevDiceYml

当前环境的 dice_development.yml 路径

func: Context.TestDiceYml

当前环境的 dice_test.yml 路径

func: Context.StagingDiceYml

当前环境的 dice_staging.yml 路径

func: Context.ProdDiceYml

当前环境的 dice_production.yml 路径