"strings"
"time"
- "gerrit.oran-osc.org/r/ric-plt/appmgr/pkg/appmgr"
- "gerrit.oran-osc.org/r/ric-plt/appmgr/pkg/cm"
- "gerrit.oran-osc.org/r/ric-plt/appmgr/pkg/models"
- "gerrit.oran-osc.org/r/ric-plt/appmgr/pkg/util"
+ "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/appmgr"
+ "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/cm"
+ "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/models"
+ "gerrit.o-ran-sc.org/r/ric-plt/appmgr/pkg/util"
)
type Helm struct {
func (h *Helm) AddRepo() (out []byte, err error) {
// Get helm repo user name and password from files mounted by secret object
- credFile, err := ioutil.ReadFile(viper.GetString("helm.helm-username-file"))
+ username, err := ioutil.ReadFile(viper.GetString("helm.helm-username-file"))
if err != nil {
appmgr.Logger.Info("helm_repo_username ReadFile failed: %v", err.Error())
return
}
- username := " --username " + string(credFile)
- credFile, err = ioutil.ReadFile(viper.GetString("helm.helm-password-file"))
+ password, err := ioutil.ReadFile(viper.GetString("helm.helm-password-file"))
if err != nil {
appmgr.Logger.Info("helm_repo_password ReadFile failed: %v", err.Error())
return
}
- pwd := " --password " + string(credFile)
- rname := viper.GetString("helm.repo-name")
- repo := viper.GetString("helm.repo")
+ repoArgs := fmt.Sprintf(" %s %s ", viper.GetString("helm.repo-name"), viper.GetString("helm.repo"))
+ credentials := fmt.Sprintf(" --username %s --password %s", string(username), string(password))
- return util.HelmExec(strings.Join([]string{"repo add ", rname, " ", repo, username, pwd}, ""))
+ return util.HelmExec(strings.Join([]string{"repo add ", repoArgs, credentials}, ""))
}
func (h *Helm) Install(m models.XappDescriptor) (xapp models.Xapp, err error) {
- var c interface{}
m.Namespace = h.cm.GetNamespace(m.Namespace)
out, err := h.Run(strings.Join([]string{"repo update "}, ""))
return
}
- if err = h.cm.GetConfigMap(m, &c); err != nil {
- out, err = h.Run(h.GetInstallArgs(m, false))
- if err != nil {
- return
- }
- return h.ParseStatus(*m.XappName, string(out))
- }
-
- // ConfigMap exists, try to override
- out, err = h.Run(h.GetInstallArgs(m, true))
- if err == nil {
- return h.ParseStatus(*m.XappName, string(out))
- }
-
- c, cmErr := h.cm.PurgeConfigMap(m)
out, err = h.Run(h.GetInstallArgs(m, false))
if err != nil {
return
}
-
- if cmErr == nil {
- cmErr = h.cm.RestoreConfigMap(m, c)
- }
return h.ParseStatus(*m.XappName, string(out))
}
return
}
-func (h *Helm) GetEndpointInfo(name string) (ip string, port int) {
+func (h *Helm) GetEndpointInfo(name string) (svc string, port int) {
+ port = 4560 // Default
ns := h.cm.GetNamespace("")
- args := fmt.Sprintf(" get endpoints -o=jsonpath='{.subsets[*].addresses[*].ip}' service-%s-%s-rmr -n %s", ns, name, ns)
+ args := fmt.Sprintf(" get service -n ricxapp service-%s-%s-rmr -o json", ns, name)
out, err := util.KubectlExec(args)
if err != nil {
- return
+ return fmt.Sprintf("service-%s-%s-rmr.%s", ns, name, ns), 4560
}
- appmgr.Logger.Info("Endpoint IP address of %s: %s", name, string(out))
- return fmt.Sprintf("service-%s-%s-rmr.%s", ns, name, ns), 4560
+ appmgr.Logger.Debug("Endpoint IP address of %s: %s", name, string(out))
+
+ v, err := h.cm.ParseJson(string(out))
+ if err != nil {
+ return fmt.Sprintf("service-%s-%s-rmr.%s", ns, name, ns), 4560
+ }
+
+ for _, p := range v.GetArray("spec", "ports") {
+ if string(p.GetStringBytes("name")) == "rmrdata" {
+ port = int(p.GetInt("port"))
+ break
+ }
+ }
+ appmgr.Logger.Info("service-%s-%s-rmr.%s %d", ns, name, ns, port)
+
+ return fmt.Sprintf("service-%s-%s-rmr.%s", ns, name, ns), port
}
func (h *Helm) GetNames(out string) (names []string, err error) {
return names, nil
}
-func (h *Helm) FillInstanceData(name string, out string, xapp *models.Xapp, msgs appmgr.MessageTypes) {
+func (h *Helm) FillInstanceData(name string, out string, xapp *models.Xapp, rtData appmgr.RtmData) {
ip, port := h.GetEndpointInfo(name)
if ip == "" {
appmgr.Logger.Info("Endpoint IP address not found, using CluserIP")
x.Status = strings.ToLower(x.Status)
x.IP = ip
x.Port = int64(port)
- x.TxMessages = msgs.TxMessages
- x.RxMessages = msgs.RxMessages
+ x.TxMessages = rtData.TxMessages
+ x.RxMessages = rtData.RxMessages
+ x.Policies = rtData.Policies
xapp.Instances = append(xapp.Instances, &x)
}
}
xapp.Version = h.GetVersion(name)
xapp.Status = h.GetState(out)
- h.FillInstanceData(name, out, &xapp, h.cm.GetMessages(name))
+ h.FillInstanceData(name, out, &xapp, h.cm.GetRtmData(name))
return
}
func (h *Helm) parseAllStatus(names []string) (xapps models.AllDeployedXapps, err error) {
xapps = models.AllDeployedXapps{}
for _, name := range names {
- err := h.cm.ReadSchema(name, &models.XAppConfig{})
+ var desc interface{}
+ err := h.cm.ReadSchema(name, &desc)
if err != nil {
continue
}
}
func (h *Helm) GetInstallArgs(x models.XappDescriptor, cmOverride bool) (args string) {
- args = args + " --namespace=" + x.Namespace
+ args = fmt.Sprintf("%s --namespace=%s", args, x.Namespace)
if x.HelmVersion != "" {
- args = args + " --version=" + x.HelmVersion
+ args = fmt.Sprintf("%s --version=%s", args, x.HelmVersion)
}
if x.ReleaseName != "" {
- args = args + " --name=" + x.ReleaseName
+ args = fmt.Sprintf("%s --name=%s", args, x.ReleaseName)
} else {
- args = args + " --name=" + *x.XappName
+ args = fmt.Sprintf("%s --name=%s", args, *x.XappName)
}
if cmOverride == true {
- args = args + " --set ricapp.appconfig.override=" + *x.XappName + "-appconfig"
+ args = fmt.Sprintf("%s ---set ricapp.appconfig.override=%s-appconfig", args, *x.XappName)
}
if x.OverrideFile != nil {