summaryrefslogtreecommitdiffstats
path: root/src/orchestrator/pkg/module
diff options
context:
space:
mode:
Diffstat (limited to 'src/orchestrator/pkg/module')
-rw-r--r--src/orchestrator/pkg/module/app.go1
-rw-r--r--src/orchestrator/pkg/module/composite_profile.go6
-rw-r--r--src/orchestrator/pkg/module/instantiation.go143
-rw-r--r--src/orchestrator/pkg/module/module.go4
4 files changed, 150 insertions, 4 deletions
diff --git a/src/orchestrator/pkg/module/app.go b/src/orchestrator/pkg/module/app.go
index 1e1a5974..40659de8 100644
--- a/src/orchestrator/pkg/module/app.go
+++ b/src/orchestrator/pkg/module/app.go
@@ -38,6 +38,7 @@ type AppMetaData struct {
}
//AppContent contains fileContent
+// TODO : This should have been []byte
type AppContent struct {
FileContent string
}
diff --git a/src/orchestrator/pkg/module/composite_profile.go b/src/orchestrator/pkg/module/composite_profile.go
index dca2116a..25a9721c 100644
--- a/src/orchestrator/pkg/module/composite_profile.go
+++ b/src/orchestrator/pkg/module/composite_profile.go
@@ -121,7 +121,7 @@ func (c *CompositeProfileClient) CreateCompositeProfile(cpf CompositeProfile, p
return cpf, nil
}
-// GetCompositeProfile shall take arguments - name of the composite profile, name of //// the project, name of the composite app and version of the composite app. It shall return the CompositeProfile if its present.
+// GetCompositeProfile shall take arguments - name of the composite profile, name of the project, name of the composite app and version of the composite app. It shall return the CompositeProfile if its present.
func (c *CompositeProfileClient) GetCompositeProfile(cpf string, p string, ca string, v string) (CompositeProfile, error) {
key := CompositeProfileKey{
Name: cpf,
@@ -147,7 +147,7 @@ func (c *CompositeProfileClient) GetCompositeProfile(cpf string, p string, ca st
return CompositeProfile{}, pkgerrors.New("Error getting CompositeProfile")
}
-// GetCompositeProfile shall take arguments - name of the composite profile, name of //// the project, name of the composite app and version of the composite app. It shall return the CompositeProfile if its present.
+// GetCompositeProfiles shall take arguments - name of the project, name of the composite profile and version of the composite app. It shall return an array of CompositeProfile.
func (c *CompositeProfileClient) GetCompositeProfiles(p string, ca string, v string) ([]CompositeProfile, error) {
key := CompositeProfileKey{
Name: "",
@@ -175,7 +175,7 @@ func (c *CompositeProfileClient) GetCompositeProfiles(p string, ca string, v str
return resp, nil
}
-// DeleteCompositeProfile the intent from the database
+// DeleteCompositeProfile deletes the compsiteApp profile from the database
func (c *CompositeProfileClient) DeleteCompositeProfile(cpf string, p string, ca string, v string) error {
key := CompositeProfileKey{
Name: cpf,
diff --git a/src/orchestrator/pkg/module/instantiation.go b/src/orchestrator/pkg/module/instantiation.go
new file mode 100644
index 00000000..3c704181
--- /dev/null
+++ b/src/orchestrator/pkg/module/instantiation.go
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2020 Intel Corporation, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package module
+
+import (
+ "fmt"
+ "github.com/onap/multicloud-k8s/src/orchestrator/utils/helm"
+
+ "github.com/onap/multicloud-k8s/src/orchestrator/utils/types"
+ pkgerrors "github.com/pkg/errors"
+
+ "encoding/base64"
+ "log"
+)
+
+// ManifestFileName is the name given to the manifest file in the profile package
+const ManifestFileName = "manifest.yaml"
+
+// InstantiationClient implements the InstantiationManager
+type InstantiationClient struct {
+ storeName string
+ tagMetaData string
+}
+
+// InstantiationManager is an interface which exposes the
+// InstantiationManager functionalities
+type InstantiationManager interface {
+ //ApproveInstantiation(p string, ca string, v string, di string) (error)
+ Instantiate(p string, ca string, v string, di string) error
+}
+
+// NewInstantiationClient returns an instance of InstantiationClient
+func NewInstantiationClient() *InstantiationClient {
+ return &InstantiationClient{
+ storeName: "orchestrator",
+ tagMetaData: "instantiation",
+ }
+}
+
+// TODO
+//ApproveInstantiation approves an instantiation
+// func (c InstantiationClient) ApproveInstantiation(p string, ca string, v string, di string) (error){
+// }
+
+func getOverrideValuesByAppName(ov []OverrideValues, a string) map[string]string {
+ for _, eachOverrideVal := range ov {
+ if eachOverrideVal.AppName == a {
+ return eachOverrideVal.ValuesObj
+ }
+ }
+ return map[string]string{}
+}
+
+// GetSortedTemplateForApp returns the sorted templates.
+//It takes in arguments - appName, project, compositeAppName, releaseName, compositeProfileName, array of override values
+func GetSortedTemplateForApp(appName, p, ca, v, rName, cp string, overrideValues []OverrideValues) ([]types.KubernetesResourceTemplate, error) {
+
+ log.Println("Processing App.. ", appName)
+
+ var sortedTemplates []types.KubernetesResourceTemplate
+
+ aC, err := NewAppClient().GetAppContent(appName, p, ca, v)
+ if err != nil {
+ return sortedTemplates, pkgerrors.Wrap(err, fmt.Sprint("Not finding the content of app:: ", appName))
+ }
+ appContent, err := base64.StdEncoding.DecodeString(aC.FileContent)
+ if err != nil {
+ return sortedTemplates, pkgerrors.Wrap(err, "Fail to convert to byte array")
+ }
+ log.Println("Got the app content..")
+
+ appPC, err := NewAppProfileClient().GetAppProfileContentByApp(p, ca, v, cp, appName)
+ if err != nil {
+ return sortedTemplates, pkgerrors.Wrap(err, fmt.Sprintf("Not finding the appProfileContent for:: %s", appName))
+ }
+ appProfileContent, err := base64.StdEncoding.DecodeString(appPC.Profile)
+ if err != nil {
+ return sortedTemplates, pkgerrors.Wrap(err, "Fail to convert to byte array")
+ }
+
+ log.Println("Got the app Profile content ...")
+
+ overrideValuesOfApp := getOverrideValuesByAppName(overrideValues, appName)
+ //Convert override values from map to array of strings of the following format
+ //foo=bar
+ overrideValuesOfAppStr := []string{}
+ if overrideValuesOfApp != nil {
+ for k, v := range overrideValuesOfApp {
+ overrideValuesOfAppStr = append(overrideValuesOfAppStr, k+"="+v)
+ }
+ }
+
+ sortedTemplates, err = helm.NewTemplateClient("", "default", rName,
+ ManifestFileName).Resolve(appContent,
+ appProfileContent, overrideValuesOfAppStr,
+ rName, appName)
+
+ log.Printf("The len of the sortedTemplates :: %d", len(sortedTemplates))
+
+ return sortedTemplates, err
+}
+
+// Instantiate methods takes in project
+func (c InstantiationClient) Instantiate(p string, ca string, v string, di string) error {
+
+ dIGrp, err := NewDeploymentIntentGroupClient().GetDeploymentIntentGroup(di, p, ca, v)
+ if err != nil {
+ return pkgerrors.Wrap(err, "Not finding the deploymentIntentGroup")
+ }
+ rName := dIGrp.Spec.Version //rName is releaseName
+ overrideValues := dIGrp.Spec.OverrideValuesObj
+ cp := dIGrp.Spec.Profile
+
+ log.Printf("dIGrp :: %s, releaseName :: %s and cp :: %s \n", dIGrp.MetaData.Name, rName, cp)
+ allApps, err := NewAppClient().GetApps(p, ca, v)
+ if err != nil {
+ return pkgerrors.Wrap(err, "Not finding the apps")
+ }
+ for _, eachApp := range allApps {
+ sortedTemplates, err := GetSortedTemplateForApp(eachApp.Metadata.Name, p, ca, v, rName, cp, overrideValues)
+ if err != nil {
+ return pkgerrors.Wrap(err, "Unable to get the sorted templates for app")
+ }
+ log.Printf("Resolved all the templates for app :: %s under the compositeApp...", eachApp.Metadata.Name)
+ log.Printf("sortedTemplates :: %v ", sortedTemplates)
+ }
+ log.Printf("Done with instantiation...")
+ return err
+}
diff --git a/src/orchestrator/pkg/module/module.go b/src/orchestrator/pkg/module/module.go
index c697bbff..e05b8753 100644
--- a/src/orchestrator/pkg/module/module.go
+++ b/src/orchestrator/pkg/module/module.go
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,6 +29,7 @@ type Client struct {
CompositeProfile *CompositeProfileClient
AppProfile *AppProfileClient
// Add Clients for API's here
+ Instantiation *InstantiationClient
}
// NewClient creates a new client for using the services
@@ -45,5 +46,6 @@ func NewClient() *Client {
c.CompositeProfile = NewCompositeProfileClient()
c.AppProfile = NewAppProfileClient()
// Add Client API handlers here
+ c.Instantiation = NewInstantiationClient()
return c
}