"github.com/spf13/viper"
"log"
"net/http"
+ "time"
)
// API functions
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"))
}
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)
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)
}
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}
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))
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
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
}
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) {
func main() {
Logger = NewLogger("xapp-manager")
-
+ Logger.SetMdc("appmgr", "0.1.9")
loadConfig()
m := XappManager{}
}
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
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)
Id string `json:"id"`
Version int `json:"version"`
EventType string `json:"eventType"`
- XApps string `json:"xApps"`
+ XApps string `json:"xApps"`
}
type Subscription struct {
# 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'