mirror of
https://github.com/0xJacky/nginx-ui.git
synced 2025-05-11 10:25:52 +02:00
feat: use settings file to predefine nodes #169
This commit is contained in:
parent
b429c15893
commit
a689608bdb
7 changed files with 191 additions and 48 deletions
|
@ -44,6 +44,7 @@ func InitAfterDatabase() {
|
|||
registerPredefinedUser,
|
||||
cert.InitRegister,
|
||||
InitCronJobs,
|
||||
registerPredefinedClusterNodes,
|
||||
analytic.RetrieveNodesStatus,
|
||||
}
|
||||
|
||||
|
|
71
internal/kernal/cluster.go
Normal file
71
internal/kernal/cluster.go
Normal file
|
@ -0,0 +1,71 @@
|
|||
package kernal
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/internal/logger"
|
||||
"github.com/0xJacky/Nginx-UI/model"
|
||||
"github.com/0xJacky/Nginx-UI/query"
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"gorm.io/gen/field"
|
||||
"net/url"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func registerPredefinedClusterNodes() {
|
||||
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
|
||||
}
|
47
internal/kernal/cluster_test.go
Normal file
47
internal/kernal/cluster_test.go
Normal file
|
@ -0,0 +1,47 @@
|
|||
package kernal
|
||||
|
||||
import (
|
||||
"github.com/0xJacky/Nginx-UI/settings"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_parseNodeUrl(t *testing.T) {
|
||||
settings.Init("../../app.example.ini")
|
||||
t.Log(settings.ClusterSettings.Node)
|
||||
node := settings.ClusterSettings.Node[0]
|
||||
|
||||
env, err := parseNodeUrl(node)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assert.Equal(t, "node1", env.Name)
|
||||
assert.Equal(t, "http://10.0.0.1:9000", env.URL)
|
||||
assert.Equal(t, "my-node-secret", env.Token)
|
||||
assert.Equal(t, true, env.Enabled)
|
||||
|
||||
node = settings.ClusterSettings.Node[1]
|
||||
|
||||
env, err = parseNodeUrl(node)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assert.Equal(t, "node2", env.Name)
|
||||
assert.Equal(t, "http://10.0.0.2:9000", env.URL)
|
||||
assert.Equal(t, "my-node-secret", env.Token)
|
||||
assert.Equal(t, true, env.Enabled)
|
||||
|
||||
node = settings.ClusterSettings.Node[2]
|
||||
|
||||
env, err = parseNodeUrl(node)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
assert.Equal(t, "node3", env.Name)
|
||||
assert.Equal(t, "http://10.0.0.3", env.URL)
|
||||
assert.Equal(t, "my-node-secret", env.Token)
|
||||
assert.Equal(t, true, env.Enabled)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue