ne service and instance

This commit is contained in:
2023-09-20 17:37:18 +08:00
parent e44a178b3e
commit dec03c02f2
4 changed files with 196 additions and 46 deletions

View File

@@ -329,6 +329,20 @@ udm:
filter: "{\"0\":\"IPV4\",\"1\":\"IPV6\",\"2\":\"IPV4V6\",\"3\":\"Ethernet\",\"4\":\"Unstruction\",\"5\":\"IPV4 & IPV6\",\"6\":\"IPV4 & IPV4V6\",\"7\":\"IPV6 & IPV4V6\",\"8\":\"IPV4 & IPV6 & IPV4V6\"}"
display: "Allowed PDU Session Types"
comment: ""
- name: "5qi"
type: "int"
value: "9"
access: "read-write"
filter: "0~255"
display: "5qi"
comment: ""
- name: "priorityLevel"
type: "int"
value: "9"
access: "read-write"
filter: "1~127"
display: "Priority Level"
comment: ""
- name: "defaultSSCmode"
type: "enum"
value: "0"
@@ -399,20 +413,6 @@ udm:
filter: "{\"0\":\"Null\",\"1\":\"Required\",\"2\":\"Preferred\",\"3\":\"Not Needed\"}"
display: "User Plane Confidentiality"
comment: ""
- name: "5qi"
type: "int"
value: "9"
access: "read-write"
filter: "0~255"
display: "5qi"
comment: ""
- name: "priorityLevel"
type: "int"
value: "9"
access: "read-write"
filter: "1~127"
display: "Priority Level"
comment: ""
- name: "arpPriorityLevel"
type: "int"
value: "6"
@@ -517,6 +517,34 @@ udm:
filter: "{\"0\":\"IPV4\",\"1\":\"IPV6\",\"2\":\"IPV4V6\",\"3\":\"IPV4 or IPV6\"}"
display: "Pdn Type"
comment: ""
- name: "qci"
type: "int"
value: '9'
access: "read-write"
filter: '1~255'
display: "qci"
comment: "1~255"
- name: "arpPriorityLevel"
type: "int"
value: '8'
access: "read-write"
filter: '1~127'
display: "ARP Priority"
comment: "1~127"
- name: "arpPreemptCap"
type: "enum"
value: '0'
access: "read-write"
filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}"
display: "ARP Preemption Capability"
comment: ""
- name: "arpPreemptVuln"
type: "enum"
value: '0'
access: "read-write"
filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}"
display: "ARP Preemption Vulnerability"
comment: ""
- name: "contextIdentifier"
type: "int"
value: '1'
@@ -559,34 +587,6 @@ udm:
filter: '4~4'
display: "Charging Characteristic"
comment: "4~4"
- name: "qci"
type: "int"
value: '9'
access: "read-write"
filter: '1~255'
display: "qci"
comment: "1~255"
- name: "arpPriorityLevel"
type: "int"
value: '8'
access: "read-write"
filter: '1~127'
display: "ARP Priority"
comment: "1~127"
- name: "arpPreemptCap"
type: "enum"
value: '0'
access: "read-write"
filter: "{\"0\":\"Not Preempt\",\"1\":\"May Preempt\"}"
display: "ARP Preemption Capability"
comment: ""
- name: "arpPreemptVuln"
type: "enum"
value: '0'
access: "read-write"
filter: "{\"0\":\"Not Preemptable\",\"1\":\"Preemptable\"}"
display: "ARP Preemption Vulnerability"
comment: ""
applicationServer:
display: "Application Server"
array:
@@ -633,7 +633,7 @@ udm:
display: "Rep Data Size Limit"
comment: "0~65535"
- name: "includeRegisterRequest"
type: "enum"
type: "bool"
value: 'false'
access: "read-write"
filter: 'false;true;'

View File

@@ -28,11 +28,19 @@ var (
UriNeInfo = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo"
// NE backup file
UriNeCmFile = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}"
// service action uri, action: start/stop/restart
UriNeService = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/service/{action}"
// nf instance action uri, action: start/stop/restart
UriNeInstance = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/instance/{action}"
CustomUriParamOmcNeConfig = config.UriPrefix + "/systemManagement/v1/elementType/%s/objectType/config/omcNeConfig"
CustomNeCmUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/cm"
CustomUriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo"
CustomUriNeCmFile = config.UriPrefix + "/systemManagement/{apiVersion}/{neType}/neBackup/{fileName}"
// service action uri, action: start/stop/restart
CustomUriNeService = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/service/{action}"
// nf instance action uri, action: start/stop/restart
CustomUriNeInstance = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/instance/{action}"
)
func init() {
@@ -737,3 +745,144 @@ func DeleteNeBackupFile(w http.ResponseWriter, r *http.Request) {
services.ResponseStatusOK204NoContent(w)
}
func PostNeServiceAction(w http.ResponseWriter, r *http.Request) {
log.Debug("PostNeServiceAction processing... ")
_, err := services.CheckFrontValidRequest(w, r)
if err != nil {
log.Error("Request error:", err)
return
}
vars := mux.Vars(r)
neType := vars["elementTypeValue"]
if neType == "" {
log.Error("elementTypeValue is empty")
services.ResponseNotFound404UriNotExist(w, r)
return
}
//neTypeUpper := strings.ToUpper(neType)
neTypeLower := strings.ToLower(neType)
action := vars["action"]
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
// neInfo := new(dborm.NeInfo)
neInfo, err := dborm.XormGetNeInfo(neType, neId)
if err != nil {
log.Errorf("Failed to get ne_info:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
log.Debug("neInfo:", neInfo)
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
switch neTypeLower {
case "omc":
actionCmd := fmt.Sprintf("sudo %s/bin/omcsvc.sh %s", config.GetYamlConfig().NE.OmcDir, action)
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh %s omc:", action, err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
case "ims":
actionCmd := fmt.Sprintf("sudo ims-%s", action)
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh sudo ims-%s command:", action, err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
default:
actionCmd := fmt.Sprintf("sudo systemctl %s %s.service", action, neTypeLower)
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh sudo systemctl command:", err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
}
services.ResponseStatusOK204NoContent(w)
}
func PostNeInstanceAction(w http.ResponseWriter, r *http.Request) {
log.Debug("PostNeInstanceAction processing... ")
_, err := services.CheckFrontValidRequest(w, r)
if err != nil {
log.Error("Request error:", err)
return
}
vars := mux.Vars(r)
neType := vars["elementTypeValue"]
if neType == "" {
log.Error("elementTypeValue is empty")
services.ResponseNotFound404UriNotExist(w, r)
return
}
//neTypeUpper := strings.ToUpper(neType)
//neTypeLower := strings.ToLower(neType)
action := vars["action"]
neId := services.GetUriParamString(r, "ne_id", ",", false, false)
// neInfo := new(dborm.NeInfo)
neInfo, err := dborm.XormGetNeInfo(neType, neId)
if err != nil {
log.Errorf("Failed to get ne_info:", err)
services.ResponseInternalServerError500DatabaseOperationFailed(w)
return
}
log.Debug("neInfo:", neInfo)
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
switch action {
case "poweron":
actionCmd := "sudo poweron"
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh %s omc:", action, err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
case "poweroff":
actionCmd := "sudo poweroff"
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh sudo poweroff:", err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
case "reboot":
actionCmd := "sudo reboot"
cmd := exec.Command("ssh", sshHost, actionCmd)
out, err := cmd.CombinedOutput()
log.Debugf("Exec output: %v", string(out))
if err != nil {
log.Error("Faile to execute ssh sudo reboot:", err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
default:
log.Error("Faile to execute ssh sudo systemctl command:", err)
services.ResponseInternalServerError500ProcessError(w, err)
return
}
services.ResponseStatusOK204NoContent(w)
}

View File

@@ -19,10 +19,8 @@ import (
var (
// parameter config management
ParamConfigUri = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
ParamConfigUrl = config.DefaultUriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
CustomParamConfigUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
CustomParamConfigUrl = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}"
)
func GetParamConfigFromNF(w http.ResponseWriter, r *http.Request) {

View File

@@ -172,7 +172,10 @@ func init() {
Register("POST", cm.CustomUriNeInfo, cm.PostNeInfo, nil)
Register("PUT", cm.CustomUriNeInfo, cm.PutNeInfo, nil)
Register("DELETE", cm.CustomUriNeInfo, cm.DeleteNeInfo, nil)
//ne service action handle
Register("POST", cm.UriNeService, cm.PostNeServiceAction, nil)
//ne service action handle
Register("POST", cm.UriNeInstance, cm.PostNeInstanceAction, nil)
// Post MML command to NF
Register("POST", mml.UriMML, mml.PostMMLToNF, nil)
Register("POST", mml.UriMMLDiscard, mml.PostMMLToNF, nil)