agent/session/plugin/main.go (89 lines of code) (raw):

package main import ( "fmt" "os" "os/signal" "syscall" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/cli" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/config" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/i18n" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/log" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/portforward" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/sendpublickey" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/session" "github.com/aliyun/aliyun_assist_client/agent/session/plugin/ssh" "github.com/spf13/pflag" ) var ( gitHash string cliVer string = "10.0.0.1" ) type Options struct { GetHelp bool GetVersion bool WebsocketUrl string IsVerbose bool IsRawMode bool } func parseOptions() Options { options := Options{} pflag.BoolVarP(&options.GetHelp, "help", "h", false, "print help") pflag.BoolVarP(&options.GetVersion, "version", "v", false, "print version") pflag.StringVarP(&options.WebsocketUrl, "WebsocketUrl", "u", "", "WebsocketUrl") pflag.BoolVarP(&options.IsVerbose, "verbose", "V", false, "enable verbose") pflag.BoolVarP(&options.IsRawMode, "rawmode", "r", false, "enable rawmode") pflag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage: %s [options]\n", os.Args[0]) fmt.Fprintln(os.Stderr) fmt.Fprintln(os.Stderr, "Aliyun Assist Copyright (c) 2017-2023 Alibaba Group Holding Limited") fmt.Fprintln(os.Stderr) fmt.Fprintln(os.Stderr, "Options:") pflag.PrintDefaults() } pflag.Parse() return options } func main() { log.InitLog("aliyun_ecs_session_log", "", true) log.GetLogger().Infoln("session plugin started_ ", os.Args[:]) cli.PlatformCompatible() cli.Version = cliVer writer := cli.DefaultWriter() stderr := cli.DefaultStderrWriter() // load current configuration profile, err := config.LoadCurrentProfile() if err != nil { cli.Errorf(stderr, "ERROR: load current configuration failed %s", err) return } // set language with current profile i18n.SetLanguage(profile.Language) // create root command rootCmd := &cli.Command{ Name: "ali-instance-cli", Short: i18n.T("Alibaba Cloud ECS DevOps Command Line Interface Version "+cli.Version, "阿里云ecs运维CLI命令行工具 "+cli.Version), Usage: "ali-instance-cli <operation> [--parameter1 value1 --parameter2 value2 ...]", Sample: "ali-instance-cli session <instance_id>", EnableUnknownFlag: true, } // add default flags config.AddFlags(rootCmd.Flags()) //openapi.AddFlags(rootCmd.Flags()) // new open api commando to process rootCmd //commando := openapi.NewCommando(writer, profile) //commando.InitWithCommand(rootCmd) ctx := cli.NewCommandContext(writer, stderr) ctx.EnterCommand(rootCmd) ctx.SetCompletion(cli.ParseCompletionForShell()) rootCmd.AddSubCommand(config.NewConfigureCommand()) //rootCmd.AddSubCommand(lib.NewOssCommand()) rootCmd.AddSubCommand(cli.NewVersionCommand()) rootCmd.AddSubCommand(session.NewSessionCommand()) rootCmd.AddSubCommand(ssh.NewSshCommand()) rootCmd.AddSubCommand(portforward.NewPortForwardCommand()) rootCmd.AddSubCommand(sendpublickey.NewSendPublicKeyCommand()) //rootCmd.AddSubCommand(cli.NewAutoCompleteCommand()) rootCmd.Execute(ctx, os.Args[1:]) } func waitSignals() error { sigChan := make(chan os.Signal, 2) signal.Notify( sigChan, syscall.SIGINT, syscall.SIGTERM, ) <-sigChan log.GetLogger().Infoln("session plugin stop", sigChan) os.Exit(1) return nil }