summaryrefslogtreecommitdiffstats
path: root/src/orchestrator/pkg/module/app_intent.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/orchestrator/pkg/module/app_intent.go')
-rw-r--r--src/orchestrator/pkg/module/app_intent.go112
1 files changed, 109 insertions, 3 deletions
diff --git a/src/orchestrator/pkg/module/app_intent.go b/src/orchestrator/pkg/module/app_intent.go
index a3f4b832..2b2c0fa5 100644
--- a/src/orchestrator/pkg/module/app_intent.go
+++ b/src/orchestrator/pkg/module/app_intent.go
@@ -16,6 +16,11 @@
package module
+/*
+This file deals with the backend implementation of
+Adding/Querying AppIntents for each application in the composite-app
+*/
+
import (
"encoding/json"
"reflect"
@@ -41,13 +46,15 @@ type MetaData struct {
// AllOf consists of AnyOfArray and ClusterNames array
type AllOf struct {
+ ProviderName string `json:"provider-name,omitempty"`
ClusterName string `json:"cluster-name,omitempty"`
ClusterLabelName string `json:"cluster-label-name,omitempty"`
AnyOfArray []AnyOf `json:"anyOf,omitempty"`
}
-// AnyOf consists of Array of ClusterLabelNames
+// AnyOf consists of Array of ProviderName & ClusterLabelNames
type AnyOf struct {
+ ProviderName string `json:"provider-name,omitempty"`
ClusterName string `json:"cluster-name,omitempty"`
ClusterLabelName string `json:"cluster-label-name,omitempty"`
}
@@ -69,9 +76,16 @@ type SpecData struct {
type AppIntentManager interface {
CreateAppIntent(a AppIntent, p string, ca string, v string, i string) (AppIntent, error)
GetAppIntent(ai string, p string, ca string, v string, i string) (AppIntent, error)
+ GetAllIntentsByApp(aN, p, ca, v, i string) (SpecData, error)
+ GetAllAppIntents(p, ca, v, i string) (ApplicationsAndClusterInfo, error)
DeleteAppIntent(ai string, p string, ca string, v string, i string) error
}
+//AppIntentQueryKey required for query
+type AppIntentQueryKey struct {
+ AppName string `json:"app-name"`
+}
+
// AppIntentKey is used as primary key
type AppIntentKey struct {
Name string `json:"appintent"`
@@ -81,6 +95,28 @@ type AppIntentKey struct {
Intent string `json:"genericplacement"`
}
+// AppIntentFindByAppKey required for query
+type AppIntentFindByAppKey struct {
+ Project string `json:"project"`
+ CompositeApp string `json:"compositeapp"`
+ CompositeAppVersion string `json:"compositeappversion"`
+ Intent string `json:"genericplacement"`
+ AppName string `json:"app-name"`
+}
+
+// ApplicationsAndClusterInfo type represents the list of
+type ApplicationsAndClusterInfo struct {
+ ArrayOfAppClusterInfo []AppClusterInfo `json:"applications"`
+}
+
+// AppClusterInfo is a type linking the app and the clusters
+// on which they need to be installed.
+type AppClusterInfo struct {
+ Name string `json:"name"`
+ AllOfArray []AllOf `json:"allOf,omitempty"`
+ AnyOfArray []AnyOf `json:"anyOf,omitempty"`
+}
+
// We will use json marshalling to convert to string to
// preserve the underlying structure.
func (ak AppIntentKey) String() string {
@@ -105,7 +141,8 @@ func NewAppIntentClient() *AppIntentClient {
}
}
-// CreateAppIntent creates an entry for AppIntent in the db. Other input parameters for it - projectName, compositeAppName, version, intentName.
+// CreateAppIntent creates an entry for AppIntent in the db.
+// Other input parameters for it - projectName, compositeAppName, version, intentName.
func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v string, i string) (AppIntent, error) {
//Check for the AppIntent already exists here.
@@ -140,7 +177,11 @@ func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v st
Intent: i,
}
- err = db.DBconn.Insert(c.storeName, akey, nil, c.tagMetaData, a)
+ qkey := AppIntentQueryKey{
+ AppName: a.Spec.AppName,
+ }
+
+ err = db.DBconn.Insert(c.storeName, akey, qkey, c.tagMetaData, a)
if err != nil {
return AppIntent{}, pkgerrors.Wrap(err, "Create DB entry error")
}
@@ -176,6 +217,71 @@ func (c *AppIntentClient) GetAppIntent(ai string, p string, ca string, v string,
return AppIntent{}, pkgerrors.New("Error getting AppIntent")
}
+/*
+GetAllIntentsByApp takes in parameters AppName, CompositeAppName, CompositeNameVersion
+and GenericPlacementIntentName. Returns SpecData which contains
+all the intents for the app.
+*/
+func (c *AppIntentClient) GetAllIntentsByApp(aN, p, ca, v, i string) (SpecData, error) {
+ k := AppIntentFindByAppKey{
+ Project: p,
+ CompositeApp: ca,
+ CompositeAppVersion: v,
+ Intent: i,
+ AppName: aN,
+ }
+ result, err := db.DBconn.Find(c.storeName, k, c.tagMetaData)
+ if err != nil {
+ return SpecData{}, pkgerrors.Wrap(err, "Get SpecData error")
+ }
+ var a AppIntent
+ err = db.DBconn.Unmarshal(result[0], &a)
+ if err != nil {
+ return SpecData{}, pkgerrors.Wrap(err, "Unmarshalling SpecData")
+ }
+ return a.Spec, nil
+
+}
+
+/*
+GetAllAppIntents takes in paramaters ProjectName, CompositeAppName, CompositeNameVersion
+and GenericPlacementIntentName. Returns the ApplicationsAndClusterInfo Object - an array of AppClusterInfo
+*/
+func (c *AppIntentClient) GetAllAppIntents(p, ca, v, i string) (ApplicationsAndClusterInfo, error) {
+ k := AppIntentKey{
+ Name: "",
+ Project: p,
+ CompositeApp: ca,
+ Version: v,
+ Intent: i,
+ }
+ result, err := db.DBconn.Find(c.storeName, k, c.tagMetaData)
+ if err != nil {
+ return ApplicationsAndClusterInfo{}, pkgerrors.Wrap(err, "Get AppClusterInfo error")
+ }
+
+ var a AppIntent
+ var appClusterInfoArray []AppClusterInfo
+
+ if len(result) != 0 {
+ for i := range result {
+ a = AppIntent{}
+ err = db.DBconn.Unmarshal(result[i], &a)
+ if err != nil {
+ return ApplicationsAndClusterInfo{}, pkgerrors.Wrap(err, "Unmarshalling AppIntent")
+ }
+ appName := a.Spec.AppName
+ allOfArray := a.Spec.Intent.AllOfArray
+ anyOfArray := a.Spec.Intent.AnyOfArray
+ appClusterInfo := AppClusterInfo{appName, allOfArray,
+ anyOfArray}
+ appClusterInfoArray = append(appClusterInfoArray, appClusterInfo)
+ }
+ }
+ applicationsAndClusterInfo := ApplicationsAndClusterInfo{appClusterInfoArray}
+ return applicationsAndClusterInfo, err
+}
+
// DeleteAppIntent delete an AppIntent
func (c *AppIntentClient) DeleteAppIntent(ai string, p string, ca string, v string, i string) error {
k := AppIntentKey{