Return service names of xApps instead of IP 97/997/1
authorMohamed Abukar <abukar.mohamed@nokia.com>
Mon, 23 Sep 2019 14:34:31 +0000 (17:34 +0300)
committerMohamed Abukar <abukar.mohamed@nokia.com>
Mon, 23 Sep 2019 14:34:41 +0000 (17:34 +0300)
Change-Id: Ic28fe710bb15379e7ce2dd0d571c12bc543c9745
Signed-off-by: Mohamed Abukar <abukar.mohamed@nokia.com>
cmd/appmgr/api.go
cmd/appmgr/desc.go
cmd/appmgr/helm.go
cmd/appmgr/main.go
cmd/appmgr/subscriptions.go
cmd/appmgr/types.go
container-tag.yaml

index db54eb2..e805a51 100755 (executable)
@@ -26,6 +26,7 @@ import (
        "github.com/spf13/viper"
        "log"
        "net/http"
+       "time"
 )
 
 // API functions
@@ -181,6 +182,13 @@ func (m *XappManager) deployXapp(w http.ResponseWriter, r *http.Request) {
                return
        }
 
+       for i := 0; i < 3; i++ {
+               if xapp, err = m.helm.Status(xapp.Name); xapp.Instances != nil {
+                       break;
+               }
+               time.Sleep(time.Duration(5) * time.Second)
+       }
+
        respondWithJSON(w, http.StatusCreated, xapp)
 
        m.sd.Publish(xapp, EventType("created"))
index 7f33444..d7c2d5e 100755 (executable)
@@ -72,7 +72,7 @@ func (cm *ConfigMap) UploadConfig() (cfg []XAppConfig) {
                }
 
                c := XAppConfig{
-                       Metadata: ConfigMetadata{Name: name, Namespace: ns, ConfigName: name + "-appconfig"},
+                       Metadata: ConfigMetadata{Name: name, Namespace: ns, ConfigName: cm.GetConfigMapName(name, ns)},
                }
 
                err := cm.ReadSchema(name, &c)
@@ -162,7 +162,7 @@ func (cm *ConfigMap) ApplyConfigMap(r XAppConfig, action string) (err error) {
 
 func (cm *ConfigMap) GetConfigMap(m XappDeploy, c *interface{}) (err error) {
        if m.ConfigName == "" {
-               m.ConfigName = m.Name + "-appconfig"
+               m.ConfigName = cm.GetConfigMapName(m.Name, m.Namespace)
        }
        return cm.ReadConfigMap(m.ConfigName, m.Namespace, c)
 }
@@ -196,7 +196,7 @@ func (cm *ConfigMap) DeleteConfigMap(r XAppConfig) (c interface{}, err error) {
 
 func (cm *ConfigMap) PurgeConfigMap(m XappDeploy) (c interface{}, err error) {
        if m.ConfigName == "" {
-               m.ConfigName = m.Name + "-appconfig"
+               m.ConfigName = cm.GetConfigMapName(m.Name, m.Namespace)
        }
        md := ConfigMetadata{Name: m.Name, Namespace: m.Namespace, ConfigName: m.ConfigName}
 
@@ -205,7 +205,7 @@ func (cm *ConfigMap) PurgeConfigMap(m XappDeploy) (c interface{}, err error) {
 
 func (cm *ConfigMap) RestoreConfigMap(m XappDeploy, c interface{}) (err error) {
        if m.ConfigName == "" {
-               m.ConfigName = m.Name + "-appconfig"
+               m.ConfigName = cm.GetConfigMapName(m.Name, m.Namespace)
        }
        md := ConfigMetadata{Name: m.Name, Namespace: m.Namespace, ConfigName: m.ConfigName}
        time.Sleep(time.Duration(10 * time.Second))
@@ -293,7 +293,7 @@ func (cm *ConfigMap) GetMessages(name string) (msgs MessageTypes) {
        log.Println("Fetching tx/rx messages for: ", name)
 
        ns := cm.GetNamespace("")
-       args := fmt.Sprintf("get configmap -o jsonpath='{.data.config-file\\.json}' -n %s %s-appconfig", ns, name)
+       args := fmt.Sprintf("get configmap -o jsonpath='{.data.config-file\\.json}' -n %s %s", ns, cm.GetConfigMapName(name, ns))
        out, err := KubectlExec(args)
        if err != nil {
                return
@@ -316,6 +316,10 @@ func (cm *ConfigMap) GetMessages(name string) (msgs MessageTypes) {
        return
 }
 
+func (cm *ConfigMap) GetConfigMapName(xappName, namespace string) (string) {
+       return " configmap-" + namespace + "-" + xappName + "-appconfig"
+}
+
 func (cm *ConfigMap) GetNamespace(ns string) string {
        if ns != "" {
                return ns
index 874ae2b..8a8154a 100755 (executable)
@@ -274,13 +274,16 @@ func (h *Helm) GetAddress(out string) (ip, port string) {
 }
 
 func (h *Helm) GetEndpointInfo(name string) (ip string, port int) {
-       args := fmt.Sprintf(" get endpoints -o=jsonpath='{.subsets[*].addresses[*].ip}' %s -n %s", name, h.cm.GetNamespace(""))
+       ns := h.cm.GetNamespace("")
+       args := fmt.Sprintf(" get endpoints -o=jsonpath='{.subsets[*].addresses[*].ip}' service-%s-%s-rmr -n %s", ns, name, ns)
        out, err := KubectlExec(args)
        if err != nil {
                return
        }
+       Logger.Info("Endpoint IP address of %s: %s", name, string(out))
 
-       return string(out), 4560
+       // "service-<namespace>-<chartname>-rmr.<namespace>"
+       return "service-" + ns + "-" + name + "-rmr." + ns, 4560
 }
 
 func (h *Helm) GetNames(out string) (names []string, err error) {
index 954f957..8788405 100755 (executable)
@@ -23,7 +23,7 @@ var Logger *Log
 
 func main() {
        Logger = NewLogger("xapp-manager")
-
+       Logger.SetMdc("appmgr", "0.1.9")
        loadConfig()
 
        m := XappManager{}
index 40735a9..53bc212 100755 (executable)
@@ -36,6 +36,15 @@ func (sd *SubscriptionDispatcher) Initialize() {
 }
 
 func (sd *SubscriptionDispatcher) Add(sr SubscriptionReq) (resp SubscriptionResp) {
+       // Skip duplicates
+       for v := range sd.subscriptions.IterBuffered() {
+               r := v.Val.(Subscription).req
+               if r.TargetUrl == sr.TargetUrl && r.EventType == sr.EventType {
+                       Logger.Info("Similar subscription already exists!")
+                       return
+               }
+       }
+
        key := ksuid.New().String()
        resp = SubscriptionResp{key, 0, sr.EventType}
        sr.Id = key
@@ -108,10 +117,10 @@ func (sd *SubscriptionDispatcher) notifyClients(xapps []Xapp, et EventType) {
 
 func (sd *SubscriptionDispatcher) notify(xapps []Xapp, et EventType, s Subscription, seq int) error {
        xappData, err := json.Marshal(xapps)
-        if err != nil {
-                Logger.Info("json.Marshal failed: %v", err)
-                return err
-        }
+       if err != nil {
+               Logger.Info("json.Marshal failed: %v", err)
+               return err
+       }
 
        notif := SubscriptionNotif{Id: s.req.Id, Version: seq, EventType: string(et), XApps: string(xappData)}
        jsonData, err := json.Marshal(notif)
index 34e3b74..1c9556d 100755 (executable)
@@ -123,7 +123,7 @@ type SubscriptionNotif struct {
        Id        string `json:"id"`
        Version   int    `json:"version"`
        EventType string `json:"eventType"`
-       XApps     string `json:"xApps"`
+       XApps     string `json:"xApps"`
 }
 
 type Subscription struct {
index 9d2da80..fa695b0 100644 (file)
@@ -1,4 +1,4 @@
 # The Jenkins job uses this string for the tag in the image name
 # for example nexus3.o-ran-sc.org:10004/my-image-name:my-tag
 ---
-tag: '0.1.6'
+tag: '0.1.9'