finish auto_config
This commit is contained in:
91
utils/auto_config/auto_config.go
Normal file
91
utils/auto_config/auto_config.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package autoconfig
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
type ConfigServer struct {
|
||||
Name string
|
||||
Host string `yaml:"Host"`
|
||||
Port int `yaml:"Port"`
|
||||
}
|
||||
|
||||
func AutoGetAllServerConfig() []*ConfigServer {
|
||||
var servers []*ConfigServer
|
||||
etcPath := AutoGetEtcYaml()
|
||||
err := filepath.Walk(*etcPath+"/server", func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Skip if not a file or not a yaml file
|
||||
if info.IsDir() || filepath.Ext(path) != ".yaml" {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Read file
|
||||
data, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Unmarshal the yaml content
|
||||
var server ConfigServer
|
||||
err = yaml.Unmarshal(data, &server)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dirs := strings.Split(path, "/")
|
||||
|
||||
server.Name = dirs[len(dirs)-3]
|
||||
// Add the server to the list
|
||||
servers = append(servers, &server)
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
panic("Error: " + err.Error())
|
||||
}
|
||||
return servers
|
||||
}
|
||||
|
||||
func AutoGetEtcYaml() *string {
|
||||
var currentFilePath string
|
||||
var ok bool
|
||||
|
||||
_, currentFilePath, _, ok = runtime.Caller(1)
|
||||
if !ok {
|
||||
panic("Error: Unable to get the current file path.")
|
||||
}
|
||||
|
||||
dirs := strings.Split(currentFilePath, "/")
|
||||
dirs = dirs[0 : len(dirs)-1]
|
||||
|
||||
for len(dirs) != 0 {
|
||||
curPath := strings.Join(dirs, "/")
|
||||
|
||||
dirs = dirs[0 : len(dirs)-1]
|
||||
|
||||
// 列出所有 curPath 下的文件夹
|
||||
files, err := ioutil.ReadDir(curPath)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
|
||||
// 查找每个文件夹下是否存在 server
|
||||
for _, file := range files {
|
||||
if file.Name() == "server" {
|
||||
return &curPath
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
7
utils/auto_config/auto_config_test.go
Normal file
7
utils/auto_config/auto_config_test.go
Normal file
@@ -0,0 +1,7 @@
|
||||
package autoconfig
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestAutoConfig(t *testing.T) {
|
||||
AutoGetEtcYaml()
|
||||
}
|
||||
Reference in New Issue
Block a user