bsm/cmd/install.go

85 lines
2.4 KiB
Go
Raw Normal View History

2024-03-02 15:53:58 +08:00
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",
2024-03-02 16:13:28 +08:00
Short: "<ServiceKey> 安装一个微服务.",
2024-03-02 15:53:58 +08:00
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."
}