package cmd import ( "fmt" "os" "path" "path/filepath" "git.apinb.com/bsm-sdk/engine/env" "git.apinb.com/bsm-sdk/engine/utils" "github.com/spf13/cobra" ) var installCmd = &cobra.Command{ Use: "install", Short: " 安装一个微服务.", Run: func(cmd *cobra.Command, args []string) { if len(args) != 1 { fmt.Println("Please input the name of the microservice to be installed!") return } srv := args[0] execbin := filepath.Join(env.MeshEnv.Prefix, srv) binExists := utils.PathExists(execbin) if binExists { fmt.Println(srv, "microservice already exists") } else { installExecute(srv) } }, } func installExecute(srv string) { fmt.Println("[1/6] Check local direct[logs,etc].") if !utils.PathExists(env.MeshEnv.Prefix) { utils.CreateDir(env.MeshEnv.Prefix) } logsPath := path.Join(env.MeshEnv.Prefix, "logs") if !utils.PathExists(logsPath) { utils.CreateDir(logsPath) } etcPath := path.Join(env.MeshEnv.Prefix, "etc") if !utils.PathExists(etcPath) { utils.CreateDir(etcPath) } fmt.Println("[2/6] Check OS ENV BlocksMesh_Workspace,BlocksMesh_RuntimeMode:", env.MeshEnv.Workspace, ",", env.MeshEnv.RuntimeMode) service, info := getMs(srv) fmt.Println("[3/6] Search Microservice:", info) if service != nil { yamlUrl := fmt.Sprintf("%s%s/%s/%s_%s.yaml", service.OssUrl, service.EtcPath, env.MeshEnv.Workspace, srv, env.MeshEnv.RuntimeMode) body, err := utils.HttpGet(yamlUrl) checkError(err) fmt.Println("[4/6] Download YAML Configure:", yamlUrl, " [OK]") yamlPath := filepath.Join(env.MeshEnv.Prefix, service.EtcPath, fmt.Sprintf("%s_%s.yaml", srv, env.MeshEnv.RuntimeMode)) utils.StringToFile(yamlPath, string(body)) downUrl := service.OssUrl + service.FilePath fmt.Println("[5/6] Download Binrary File:", downUrl) binPath := filepath.Join(env.MeshEnv.Prefix, srv) DownloadFile(downUrl, binPath, func(length, downLen int64) { fmt.Fprintf(os.Stdout, "Total:%d KB, Current:%d KB, Percent:%.2f%%\r", length, downLen, (float32(downLen)/float32(length))*100) }) fmt.Println("[6/6] Restart Microservice:", srv) service.Start() fmt.Println("Install Successful!") } } func getMs(srv string) (*Service, string) { reles := getRegistryReleases() for _, v := range reles.Data { if v.ServiceKey == srv { return &v, fmt.Sprintf("Ident:%s, Version:%s, Oss:%s", v.Identity, v.Version, v.OssUrl) } } return nil, "Not Found." }