Merge branch 'release/2.0.0' of ssh://git.yunion.io/~qiujian/onecloud into hotfix/qj-misc-bugfix-20180808

This commit is contained in:
Qiu Jian
2018-08-09 00:44:45 +08:00
208 changed files with 103417 additions and 149 deletions
+6 -4
View File
@@ -5,9 +5,11 @@ import (
"os"
"github.com/yunionio/log"
"github.com/yunionio/structarg"
"github.com/yunionio/onecloud/pkg/util/aliyun"
"github.com/yunionio/onecloud/pkg/util/aliyun/shell"
"github.com/yunionio/onecloud/pkg/util/shellutils"
"github.com/yunionio/structarg"
_ "github.com/yunionio/onecloud/pkg/util/aliyun/shell"
)
type BaseOptions struct {
@@ -35,7 +37,7 @@ func getSubcommandParser() (*structarg.ArgumentParser, error) {
type HelpOptions struct {
SUBCOMMAND string `help:"sub-command name"`
}
shell.R(&HelpOptions{}, "help", "Show help of a subcommand", func(args *HelpOptions) error {
shellutils.R(&HelpOptions{}, "help", "Show help of a subcommand", func(args *HelpOptions) error {
helpstr, e := subcmd.SubHelpString(args.SUBCOMMAND)
if e != nil {
return e
@@ -44,7 +46,7 @@ func getSubcommandParser() (*structarg.ArgumentParser, error) {
return nil
}
})
for _, v := range shell.CommandTable {
for _, v := range shellutils.CommandTable {
_, e := subcmd.AddSubParser(v.Options, v.Command, v.Desc, v.Callback)
if e != nil {
return nil, e
+4 -4
View File
@@ -4,17 +4,17 @@ import (
"github.com/yunionio/jsonutils"
"github.com/yunionio/onecloud/pkg/mcclient/modules"
"github.com/yunionio/onecloud/pkg/util/printjson"
"github.com/yunionio/onecloud/pkg/util/printutils"
)
func printList(list *modules.ListResult, columns []string) {
printjson.PrintList(list, columns)
printutils.PrintJSONList(list, columns)
}
func printObject(obj jsonutils.JSONObject) {
printjson.PrintObject(obj)
printutils.PrintJSONObject(obj)
}
func printBatchResults(results []modules.SubmitResult, columns []string) {
printjson.PrintBatchResults(results, columns)
printutils.PrintJSONBatchResults(results, columns)
}
+118
View File
@@ -0,0 +1,118 @@
package main
import (
"fmt"
"os"
"github.com/yunionio/log"
"github.com/yunionio/structarg"
"github.com/yunionio/onecloud/pkg/util/esxi"
"github.com/yunionio/onecloud/pkg/util/shellutils"
_ "github.com/yunionio/onecloud/pkg/util/esxi/shell"
)
type BaseOptions struct {
Help bool `help:"Show help"`
Host string `help:"Host IP or NAME" default:"$VMWARE_HOST"`
Port int `help:"Service port" default:"$VMWARE_PORT"`
Account string `help:"VCenter or ESXi Account" default:"$VMWARE_ACCOUNT"`
Password string `help:"Password" default:"$VMWARE_PASSWORD"`
SUBCOMMAND string `help:"aliyuncli subcommand" subcommand:"true"`
}
func getSubcommandParser() (*structarg.ArgumentParser, error) {
parse, e := structarg.NewArgumentParser(&BaseOptions{},
"govmcli",
"Command-line interface to VMware VSphere Webservice API.",
`See "govmcli help COMMAND" for help on a specific command.`)
if e != nil {
return nil, e
}
subcmd := parse.GetSubcommand()
if subcmd == nil {
return nil, fmt.Errorf("No subcommand argument.")
}
type HelpOptions struct {
SUBCOMMAND string `help:"sub-command name"`
}
shellutils.R(&HelpOptions{}, "help", "Show help of a subcommand", func(args *HelpOptions) error {
helpstr, e := subcmd.SubHelpString(args.SUBCOMMAND)
if e != nil {
return e
} else {
fmt.Print(helpstr)
return nil
}
})
for _, v := range shellutils.CommandTable {
_, e := subcmd.AddSubParser(v.Options, v.Command, v.Desc, v.Callback)
if e != nil {
return nil, e
}
}
return parse, nil
}
func showErrorAndExit(e error) {
log.Errorf("%s", e)
os.Exit(1)
}
func newClient(options *BaseOptions) (*esxi.SESXiClient, error) {
if len(options.Host) == 0 {
return nil, fmt.Errorf("Missing host")
}
if len(options.Account) == 0 {
return nil, fmt.Errorf("Missing account")
}
if len(options.Password) == 0 {
return nil, fmt.Errorf("Missing password")
}
return esxi.NewESXiClient("", "", options.Host, options.Port, options.Account, options.Password)
}
func main() {
parser, e := getSubcommandParser()
if e != nil {
showErrorAndExit(e)
}
e = parser.ParseArgs(os.Args[1:], false)
options := parser.Options().(*BaseOptions)
if options.Help {
fmt.Print(parser.HelpString())
} else {
subcmd := parser.GetSubcommand()
subparser := subcmd.GetSubParser()
if e != nil {
if subparser != nil {
fmt.Print(subparser.Usage())
} else {
fmt.Print(parser.Usage())
}
showErrorAndExit(e)
} else {
suboptions := subparser.Options()
if options.SUBCOMMAND == "help" {
e = subcmd.Invoke(suboptions)
} else {
var esxicli *esxi.SESXiClient
esxicli, e = newClient(options)
if e != nil {
showErrorAndExit(e)
}
e = subcmd.Invoke(esxicli, suboptions)
}
if e != nil {
showErrorAndExit(e)
}
}
}
}