72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
|
package cluster
|
||
|
|
||
|
import (
|
||
|
"github.com/0xJacky/Nginx-UI/model"
|
||
|
"github.com/0xJacky/Nginx-UI/query"
|
||
|
"github.com/0xJacky/Nginx-UI/settings"
|
||
|
"github.com/uozi-tech/cosy/logger"
|
||
|
"gorm.io/gen/field"
|
||
|
"net/url"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func RegisterPredefinedNodes() {
|
||
|
if len(settings.ClusterSettings.Node) == 0 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
q := query.Environment
|
||
|
for _, nodeUrl := range settings.ClusterSettings.Node {
|
||
|
func() {
|
||
|
node, err := parseNodeUrl(nodeUrl)
|
||
|
if err != nil {
|
||
|
logger.Error(nodeUrl, err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if node.Name == "" {
|
||
|
logger.Error(nodeUrl, "Node name is required")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if node.URL == "" {
|
||
|
logger.Error(nodeUrl, "Node URL is required")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if node.Token == "" {
|
||
|
logger.Error(nodeUrl, "Node Token is required")
|
||
|
return
|
||
|
}
|
||
|
|
||
|
_, err = q.Where(q.URL.Eq(node.URL)).
|
||
|
Attrs(field.Attrs(node)).
|
||
|
FirstOrCreate()
|
||
|
if err != nil {
|
||
|
logger.Error(node.URL, err)
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func parseNodeUrl(nodeUrl string) (env *model.Environment, err error) {
|
||
|
u, err := url.Parse(nodeUrl)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
var sb strings.Builder
|
||
|
sb.WriteString(u.Scheme)
|
||
|
sb.WriteString("://")
|
||
|
sb.WriteString(u.Host)
|
||
|
sb.WriteString(u.Path)
|
||
|
|
||
|
env = &model.Environment{
|
||
|
Name: u.Query().Get("name"),
|
||
|
URL: sb.String(),
|
||
|
Token: u.Query().Get("node_secret"),
|
||
|
Enabled: u.Query().Get("enabled") == "true",
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|