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
- }
- }
- //k,v读取出来的是父节点的参数
- for key, value := range config.v.GetStringMapString("node") {
- //读取的是[node]的子组[node.*]
- subNodeConfigTempMap := config.v.GetStringMapString(fmt.Sprintf("node." + key))
- if len(subNodeConfigTempMap) != 0 {
- //子组[node.*]参数解析
- serverNodeTemp := models.ServerNodeInfo{}
- for k, v := range subNodeConfigTempMap {
- selectNodeConfig(k, v, &serverNodeTemp)
- }
- //config.subNodeConfig[fmt.Sprintf("node."+key)] = &serverNodeTemp
- config.subNodeConfig[key] = &serverNodeTemp
- }
- //基类节点的参数解析
- selectNodeConfig(key, value, config.baseNodeConfig)
- }
- //检查子节点配置信息是否为空,为空则用基节点信息替换
- for _, serverNodeTemp := range config.subNodeConfig {
- checkServerNodeInfoIsEmpty(serverNodeTemp, config.baseNodeConfig)
- }
- //获取配置文件里的xugu
- for key, value := range config.v.GetStringMapString("xugu") {
- config.xginiMap[key] = value
- }
- //获取配置文件里的cluster
- for key, value := range config.v.GetStringMapString("cluster") {
- config.clusterMap[key] = value
- }
- //输出服务器节点配置信息
- // fmt.Printf("config.baseNodeConfig: %v\n", config.baseNodeConfig)
- // for k, v := range config.subNodeConfig {
- // fmt.Printf("subNodeConfigK: %s,subNodeConfigV: %v \n", k, *v)
- // }
- }
- func (config *configFile) openConfigFile(path string) {
- //读取指定config.toml配置文件
- 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.IpPort) {
- // nodeInfo.IpPort = baseNodeInfo.IpPort
- // }
- 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
- }
|