summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKiran Kamineni <kiran.k.kamineni@intel.com>2019-05-16 20:58:34 -0700
committerKiran Kamineni <kiran.k.kamineni@intel.com>2019-05-16 20:58:34 -0700
commit3775c137dd3381ae4e180f827ca90f8543a50999 (patch)
treeaf8a324db898e2d1b241a9c335767c2fe0eae5ce
parentc8d038951d41978bb00005e23081e6562c0ab754 (diff)
Support user_directives that are attributes lists
Support the attributes in user_directives attributes are lists of the following form: "attributes": [ { "attribute_value": "foo", "attribute_name": "bar" }, { "attribute_value": "value2", "attribute_name": "name2" } ] Issue-ID: ONAPARC-349 Change-Id: I576bc251d1566dc26696f12f826a09bacb7417a0 Signed-off-by: Kiran Kamineni <kiran.k.kamineni@intel.com>
-rw-r--r--src/k8splugin/api/brokerhandler.go65
-rw-r--r--src/k8splugin/api/brokerhandler_test.go30
2 files changed, 81 insertions, 14 deletions
diff --git a/src/k8splugin/api/brokerhandler.go b/src/k8splugin/api/brokerhandler.go
index 80ab643c..dca64788 100644
--- a/src/k8splugin/api/brokerhandler.go
+++ b/src/k8splugin/api/brokerhandler.go
@@ -16,6 +16,7 @@ package api
import (
"encoding/json"
"io"
+ "log"
"net/http"
"k8splugin/internal/app"
@@ -56,6 +57,52 @@ type brokerGETResponse struct {
WorkloadStatus string `json:"workload_status"`
}
+// getUserDirectiveValue parses the following kind of json
+// "user_attributes": {
+// "attributes": [
+// {
+// "attribute_value": "foo",
+// "attribute_name": "bar"
+// },
+// {
+// "attribute_value": "value2",
+// "attribute_name": "name2"
+// }
+// ]
+// }
+func (b brokerRequest) getUserDirectiveValue(inp string) string {
+ attributes, ok := b.UserDirectives["attributes"].([]interface{})
+ if !ok {
+ log.Println("Unable to cast attributes to []interface{}")
+ return ""
+ }
+
+ for _, value := range attributes {
+
+ attribute, ok := value.(map[string]interface{})
+ if !ok {
+ log.Println("Unable to cast attribute to map[string]interface{}")
+ return ""
+ }
+
+ attributename, ok := attribute["attribute_name"].(string)
+ if !ok {
+ log.Println("Unable to cast attribute_name to string")
+ return ""
+ }
+ if attributename == inp {
+ attributevalue, ok := attribute["attribute_value"].(string)
+ if !ok {
+ log.Println("Unable to cast attribute_value to string")
+ return ""
+ }
+
+ return attributevalue
+ }
+ }
+ return ""
+}
+
func (b brokerInstanceHandler) createHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
cloudRegion := vars["cloud-region"]
@@ -77,29 +124,29 @@ func (b brokerInstanceHandler) createHandler(w http.ResponseWriter, r *http.Requ
return
}
- rbName, ok := req.UserDirectives["definition-name"]
- if !ok {
+ rbName := req.getUserDirectiveValue("definition-name")
+ if rbName == "" {
http.Error(w, "definition-name is missing from user-directives", http.StatusBadRequest)
return
}
- rbVersion, ok := req.UserDirectives["definition-version"]
- if !ok {
+ rbVersion := req.getUserDirectiveValue("definition-version")
+ if rbVersion == "" {
http.Error(w, "definition-version is missing from user-directives", http.StatusBadRequest)
return
}
- profileName, ok := req.UserDirectives["profile-name"]
- if !ok {
+ profileName := req.getUserDirectiveValue("profile-name")
+ if profileName == "" {
http.Error(w, "profile-name is missing from user-directives", http.StatusBadRequest)
return
}
// Setup the resource parameters for making the request
var instReq app.InstanceRequest
- instReq.RBName = rbName.(string)
- instReq.RBVersion = rbVersion.(string)
- instReq.ProfileName = profileName.(string)
+ instReq.RBName = rbName
+ instReq.RBVersion = rbVersion
+ instReq.ProfileName = profileName
instReq.CloudRegion = cloudRegion
resp, err := b.client.Create(instReq)
diff --git a/src/k8splugin/api/brokerhandler_test.go b/src/k8splugin/api/brokerhandler_test.go
index 16046634..e7ff08c4 100644
--- a/src/k8splugin/api/brokerhandler_test.go
+++ b/src/k8splugin/api/brokerhandler_test.go
@@ -52,8 +52,17 @@ func TestBrokerCreateHandler(t *testing.T) {
input: bytes.NewBuffer([]byte(`{
"vf-module-model-customization-id": "84sdfkio938",
"user_directives": {
- "definition-name": "test-rbdef",
- "definition-version": "v1" }
+ "attributes": [
+ {
+ "attribute_name": "definition-name",
+ "attribute_value": "test-rbdef"
+ },
+ {
+ "attribute_name": "definition-version",
+ "attribute_value": "v1"
+ }
+ ]
+ }
}`)),
expectedCode: http.StatusBadRequest,
},
@@ -62,9 +71,20 @@ func TestBrokerCreateHandler(t *testing.T) {
input: bytes.NewBuffer([]byte(`{
"vf-module-model-customization-id": "84sdfkio938",
"user_directives": {
- "definition-name": "test-rbdef",
- "definition-version": "v1",
- "profile-name": "profile1"
+ "attributes": [
+ {
+ "attribute_name": "definition-name",
+ "attribute_value": "test-rbdef"
+ },
+ {
+ "attribute_name": "definition-version",
+ "attribute_value": "v1"
+ },
+ {
+ "attribute_name": "profile-name",
+ "attribute_value": "profile1"
+ }
+ ]
}
}`)),
expected: brokerPOSTResponse{