123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package config
- import (
- "fmt"
- "log"
- "xg_auto_deploy/internal/models"
- "xg_auto_deploy/internal/utils"
- "github.com/spf13/viper"
- )
- type configFile struct {
- v *viper.Viper
- baseNodeConfig *models.ServerNodeInfo
- subNodeConfig map[string]*models.ServerNodeInfo
- xginiMap map[string]string
- clusterMap map[string]string
- }
- func InitNodeSetting(path string) *configFile {
- config := configFile{
- v: viper.New(),
- baseNodeConfig: &models.ServerNodeInfo{},
- subNodeConfig: make(map[string]*models.ServerNodeInfo),
- xginiMap: make(map[string]string),
- clusterMap: make(map[string]string),
- }
- config.openConfigFile(path)
- config.parseConfigfile()
- return &config
- }
- func (config *configFile) parseConfigfile() {
- selectNodeConfig := func(key, value string, serverNodeTemp *models.ServerNodeInfo) {
- switch key {
- case "ip_port":
- serverNodeTemp.IpPort = value
- case "target_file":
- serverNodeTemp.TargetFile = value
- case "local_file":
- serverNodeTemp.LocalFile = value
- case "user_password":
- r, l := utils.SplitColon(value)
- serverNodeTemp.User = r
- serverNodeTemp.Password = l
- case "xugu_addr":
- serverNodeTemp.XuguAddr = value
- }
- }
-
- for key, value := range config.v.GetStringMapString("node") {
-
- subNodeConfigTempMap := config.v.GetStringMapString(fmt.Sprintf("node." + key))
- if len(subNodeConfigTempMap) != 0 {
-
- serverNodeTemp := models.ServerNodeInfo{}
- for k, v := range subNodeConfigTempMap {
- selectNodeConfig(k, v, &serverNodeTemp)
- }
-
- config.subNodeConfig[key] = &serverNodeTemp
- }
-
- selectNodeConfig(key, value, config.baseNodeConfig)
- }
-
- for _, serverNodeTemp := range config.subNodeConfig {
- checkServerNodeInfoIsEmpty(serverNodeTemp, config.baseNodeConfig)
- }
-
- for key, value := range config.v.GetStringMapString("xugu") {
- config.xginiMap[key] = value
- }
-
- for key, value := range config.v.GetStringMapString("cluster") {
- config.clusterMap[key] = value
- }
-
-
-
-
-
- }
- func (config *configFile) openConfigFile(path string) {
-
- config.v.SetConfigType("toml")
- config.v.SetConfigFile(path)
- if err := config.v.ReadInConfig(); err != nil {
- log.Fatalf("读取配置文件失败: %v", err)
- }
- }
- func checkServerNodeInfoIsEmpty(nodeInfo *models.ServerNodeInfo, baseNodeInfo *models.ServerNodeInfo) {
- isEmpty := func(s string) bool {
- return len(s) == 0
- }
-
-
-
- if isEmpty(nodeInfo.LocalFile) {
- nodeInfo.LocalFile = baseNodeInfo.LocalFile
- }
- if isEmpty(nodeInfo.TargetFile) {
- nodeInfo.TargetFile = baseNodeInfo.TargetFile
- }
- if isEmpty(nodeInfo.User) {
- nodeInfo.User = baseNodeInfo.User
- }
- if isEmpty(nodeInfo.Password) {
- nodeInfo.Password = baseNodeInfo.Password
- }
- if isEmpty(nodeInfo.XuguAddr) {
- nodeInfo.XuguAddr = baseNodeInfo.XuguAddr
- }
- }
- func (config *configFile) GetXuguini() map[string]string {
- return config.xginiMap
- }
- func (config *configFile) GetCluster() map[string]string {
- return config.clusterMap
- }
- func (config *configFile) GetNodeConfig() map[string]*models.ServerNodeInfo {
- return config.subNodeConfig
- }
|