多个API节点时选择一个作为主节点

This commit is contained in:
刘祥超
2022-04-23 12:32:13 +08:00
parent 492d24f28a
commit 2487c69136
6 changed files with 44 additions and 22 deletions

View File

@@ -92,6 +92,7 @@ func (this *IndexAction) RunGet(params struct{}) {
"name": node.Name, "name": node.Name,
"accessAddrs": node.AccessAddrs, "accessAddrs": node.AccessAddrs,
"restAccessAddrs": restAccessAddrs, "restAccessAddrs": restAccessAddrs,
"isPrimary": node.IsPrimary,
"status": maps.Map{ "status": maps.Map{
"isActive": status.IsActive, "isActive": status.IsActive,
"updatedAt": status.UpdatedAt, "updatedAt": status.UpdatedAt,

View File

@@ -129,6 +129,7 @@ func (this *IndexAction) RunGet(params struct {
"restAccessAddrs": restAccessAddrs, "restAccessAddrs": restAccessAddrs,
"hasHTTPS": hasHTTPS, "hasHTTPS": hasHTTPS,
"certs": certs, "certs": certs,
"isPrimary": node.IsPrimary,
} }
this.Show() this.Show()

View File

@@ -29,13 +29,13 @@ func (this *UpdateAction) RunGet(params struct {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
node := nodeResp.ApiNode var node = nodeResp.ApiNode
if node == nil { if node == nil {
this.WriteString("要操作的节点不存在") this.WriteString("要操作的节点不存在")
return return
} }
httpConfig := &serverconfigs.HTTPProtocolConfig{} var httpConfig = &serverconfigs.HTTPProtocolConfig{}
if len(node.HttpJSON) > 0 { if len(node.HttpJSON) > 0 {
err = json.Unmarshal(node.HttpJSON, httpConfig) err = json.Unmarshal(node.HttpJSON, httpConfig)
if err != nil { if err != nil {
@@ -43,7 +43,7 @@ func (this *UpdateAction) RunGet(params struct {
return return
} }
} }
httpsConfig := &serverconfigs.HTTPSProtocolConfig{} var httpsConfig = &serverconfigs.HTTPSProtocolConfig{}
if len(node.HttpsJSON) > 0 { if len(node.HttpsJSON) > 0 {
err = json.Unmarshal(node.HttpsJSON, httpsConfig) err = json.Unmarshal(node.HttpsJSON, httpsConfig)
if err != nil { if err != nil {
@@ -53,11 +53,11 @@ func (this *UpdateAction) RunGet(params struct {
} }
// 监听地址 // 监听地址
listens := []*serverconfigs.NetworkAddressConfig{} var listens = []*serverconfigs.NetworkAddressConfig{}
listens = append(listens, httpConfig.Listen...) listens = append(listens, httpConfig.Listen...)
listens = append(listens, httpsConfig.Listen...) listens = append(listens, httpsConfig.Listen...)
restHTTPConfig := &serverconfigs.HTTPProtocolConfig{} var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{}
if len(node.RestHTTPJSON) > 0 { if len(node.RestHTTPJSON) > 0 {
err = json.Unmarshal(node.RestHTTPJSON, restHTTPConfig) err = json.Unmarshal(node.RestHTTPJSON, restHTTPConfig)
if err != nil { if err != nil {
@@ -65,7 +65,7 @@ func (this *UpdateAction) RunGet(params struct {
return return
} }
} }
restHTTPSConfig := &serverconfigs.HTTPSProtocolConfig{} var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{}
if len(node.RestHTTPSJSON) > 0 { if len(node.RestHTTPSJSON) > 0 {
err = json.Unmarshal(node.RestHTTPSJSON, restHTTPSConfig) err = json.Unmarshal(node.RestHTTPSJSON, restHTTPSConfig)
if err != nil { if err != nil {
@@ -75,20 +75,20 @@ func (this *UpdateAction) RunGet(params struct {
} }
// 监听地址 // 监听地址
restListens := []*serverconfigs.NetworkAddressConfig{} var restListens = []*serverconfigs.NetworkAddressConfig{}
restListens = append(restListens, restHTTPConfig.Listen...) restListens = append(restListens, restHTTPConfig.Listen...)
restListens = append(restListens, restHTTPSConfig.Listen...) restListens = append(restListens, restHTTPSConfig.Listen...)
// 证书信息 // 证书信息
certs := []*sslconfigs.SSLCertConfig{} var certs = []*sslconfigs.SSLCertConfig{}
sslPolicyId := int64(0) var sslPolicyId = int64(0)
if httpsConfig.SSLPolicyRef != nil && httpsConfig.SSLPolicyRef.SSLPolicyId > 0 { if httpsConfig.SSLPolicyRef != nil && httpsConfig.SSLPolicyRef.SSLPolicyId > 0 {
sslPolicyConfigResp, err := this.RPC().SSLPolicyRPC().FindEnabledSSLPolicyConfig(this.AdminContext(), &pb.FindEnabledSSLPolicyConfigRequest{SslPolicyId: httpsConfig.SSLPolicyRef.SSLPolicyId}) sslPolicyConfigResp, err := this.RPC().SSLPolicyRPC().FindEnabledSSLPolicyConfig(this.AdminContext(), &pb.FindEnabledSSLPolicyConfigRequest{SslPolicyId: httpsConfig.SSLPolicyRef.SSLPolicyId})
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
return return
} }
sslPolicyConfigJSON := sslPolicyConfigResp.SslPolicyJSON var sslPolicyConfigJSON = sslPolicyConfigResp.SslPolicyJSON
if len(sslPolicyConfigJSON) > 0 { if len(sslPolicyConfigJSON) > 0 {
sslPolicyId = httpsConfig.SSLPolicyRef.SSLPolicyId sslPolicyId = httpsConfig.SSLPolicyRef.SSLPolicyId
@@ -102,7 +102,7 @@ func (this *UpdateAction) RunGet(params struct {
} }
} }
accessAddrs := []*serverconfigs.NetworkAddressConfig{} var accessAddrs = []*serverconfigs.NetworkAddressConfig{}
if len(node.AccessAddrsJSON) > 0 { if len(node.AccessAddrsJSON) > 0 {
err = json.Unmarshal(node.AccessAddrsJSON, &accessAddrs) err = json.Unmarshal(node.AccessAddrsJSON, &accessAddrs)
if err != nil { if err != nil {
@@ -122,6 +122,7 @@ func (this *UpdateAction) RunGet(params struct {
"certs": certs, "certs": certs,
"sslPolicyId": sslPolicyId, "sslPolicyId": sslPolicyId,
"accessAddrs": accessAddrs, "accessAddrs": accessAddrs,
"isPrimary": node.IsPrimary,
} }
this.Show() this.Show()
@@ -139,6 +140,7 @@ func (this *UpdateAction) RunPost(params struct {
AccessAddrsJSON []byte AccessAddrsJSON []byte
Description string Description string
IsOn bool IsOn bool
IsPrimary bool
Must *actions.Must Must *actions.Must
}) { }) {
@@ -146,11 +148,11 @@ func (this *UpdateAction) RunPost(params struct {
Field("name", params.Name). Field("name", params.Name).
Require("请输入API节点名称") Require("请输入API节点名称")
httpConfig := &serverconfigs.HTTPProtocolConfig{} var httpConfig = &serverconfigs.HTTPProtocolConfig{}
httpsConfig := &serverconfigs.HTTPSProtocolConfig{} var httpsConfig = &serverconfigs.HTTPSProtocolConfig{}
// 监听地址 // 监听地址
listens := []*serverconfigs.NetworkAddressConfig{} var listens = []*serverconfigs.NetworkAddressConfig{}
err := json.Unmarshal(params.ListensJSON, &listens) err := json.Unmarshal(params.ListensJSON, &listens)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -170,8 +172,8 @@ func (this *UpdateAction) RunPost(params struct {
} }
// Rest监听地址 // Rest监听地址
restHTTPConfig := &serverconfigs.HTTPProtocolConfig{} var restHTTPConfig = &serverconfigs.HTTPProtocolConfig{}
restHTTPSConfig := &serverconfigs.HTTPSProtocolConfig{} var restHTTPSConfig = &serverconfigs.HTTPSProtocolConfig{}
if params.RestIsOn { if params.RestIsOn {
restListens := []*serverconfigs.NetworkAddressConfig{} restListens := []*serverconfigs.NetworkAddressConfig{}
err = json.Unmarshal(params.RestListensJSON, &restListens) err = json.Unmarshal(params.RestListensJSON, &restListens)
@@ -191,7 +193,7 @@ func (this *UpdateAction) RunPost(params struct {
} }
// 证书 // 证书
certIds := []int64{} var certIds = []int64{}
if len(params.CertIdsJSON) > 0 { if len(params.CertIdsJSON) > 0 {
err = json.Unmarshal(params.CertIdsJSON, &certIds) err = json.Unmarshal(params.CertIdsJSON, &certIds)
if err != nil { if err != nil {
@@ -203,7 +205,7 @@ func (this *UpdateAction) RunPost(params struct {
this.Fail("请添加至少一个证书") this.Fail("请添加至少一个证书")
} }
certRefs := []*sslconfigs.SSLCertRef{} var certRefs = []*sslconfigs.SSLCertRef{}
for _, certId := range certIds { for _, certId := range certIds {
certRefs = append(certRefs, &sslconfigs.SSLCertRef{ certRefs = append(certRefs, &sslconfigs.SSLCertRef{
IsOn: true, IsOn: true,
@@ -217,7 +219,7 @@ func (this *UpdateAction) RunPost(params struct {
} }
// 创建策略 // 创建策略
sslPolicyId := params.SslPolicyId var sslPolicyId = params.SslPolicyId
if sslPolicyId == 0 { if sslPolicyId == 0 {
if len(certIds) > 0 { if len(certIds) > 0 {
sslPolicyCreateResp, err := this.RPC().SSLPolicyRPC().CreateSSLPolicy(this.AdminContext(), &pb.CreateSSLPolicyRequest{ sslPolicyCreateResp, err := this.RPC().SSLPolicyRPC().CreateSSLPolicy(this.AdminContext(), &pb.CreateSSLPolicyRequest{
@@ -249,7 +251,7 @@ func (this *UpdateAction) RunPost(params struct {
} }
// 访问地址 // 访问地址
accessAddrs := []*serverconfigs.NetworkAddressConfig{} var accessAddrs = []*serverconfigs.NetworkAddressConfig{}
err = json.Unmarshal(params.AccessAddrsJSON, &accessAddrs) err = json.Unmarshal(params.AccessAddrsJSON, &accessAddrs)
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)
@@ -291,6 +293,7 @@ func (this *UpdateAction) RunPost(params struct {
RestHTTPSJSON: restHTTPSJSON, RestHTTPSJSON: restHTTPSJSON,
AccessAddrsJSON: params.AccessAddrsJSON, AccessAddrsJSON: params.AccessAddrsJSON,
IsOn: params.IsOn, IsOn: params.IsOn,
IsPrimary: params.IsPrimary,
}) })
if err != nil { if err != nil {
this.ErrorPage(err) this.ErrorPage(err)

View File

@@ -22,7 +22,9 @@
</tr> </tr>
</thead> </thead>
<tr v-for="node in nodes"> <tr v-for="node in nodes">
<td><a :href="'/api/node?nodeId=' + node.id">{{node.name}}</a></td> <td><a :href="'/api/node?nodeId=' + node.id">{{node.name}}</a>
<grey-label v-if="node.isPrimary">主节点</grey-label>
</td>
<td> <td>
<div v-if="node.accessAddrs != null && node.accessAddrs.length > 0"> <div v-if="node.accessAddrs != null && node.accessAddrs.length > 0">
<div v-for="addr in node.accessAddrs"> <div v-for="addr in node.accessAddrs">

View File

@@ -43,6 +43,14 @@
<network-addresses-view :v-addresses="node.restAccessAddrs"></network-addresses-view> <network-addresses-view :v-addresses="node.restAccessAddrs"></network-addresses-view>
<p class="comment">通过HTTP访问API节点的网络地址。</p> <p class="comment">通过HTTP访问API节点的网络地址。</p>
</td> </td>
</tr>
<tr>
<td>主节点</td>
<td>
<span v-if="node.isPrimary" class="green">Y</span>
<span v-else class="disabled">N</span>
<p class="comment" v-if="node.isPrimary">设置为主节点后,主要的后台任务会在此节点上运行。</p>
</td>
</tr> </tr>
<tr> <tr>
<td>描述</td> <td>描述</td>

View File

@@ -58,8 +58,15 @@
<textarea name="description" maxlength="200" rows="3" v-model="node.description"></textarea> <textarea name="description" maxlength="200" rows="3" v-model="node.description"></textarea>
</td> </td>
</tr> </tr>
<tr>
<td>主节点</td>
<td>
<checkbox name="isPrimary" v-model="node.isPrimary"></checkbox>
<p class="comment">设置为主节点后,主要的后台任务会在此节点上运行。</p>
</td>
</tr>
<tr> <tr>
<td>是否启用</td> <td>启用</td>
<td> <td>
<div class="ui checkbox"> <div class="ui checkbox">
<input type="checkbox" name="isOn" value="1" v-model="node.isOn"/> <input type="checkbox" name="isOn" value="1" v-model="node.isOn"/>