Add blueprint input

Add blueprint json input support for DCAE call

Issue-ID: CLAMP-142
Change-Id: I52657ff7ead38681eae2744a30271f0a1b825bb6
Signed-off-by: Determe, Sebastien (sd378r) <sd378r@intl.att.com>
diff --git a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
index f20668e..26281da 100644
--- a/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
+++ b/src/main/java/org/onap/clamp/clds/client/DcaeDispatcherServices.java
@@ -25,6 +25,7 @@
 

 import com.att.eelf.configuration.EELFLogger;

 import com.att.eelf.configuration.EELFManager;

+import com.fasterxml.jackson.databind.JsonNode;

 import com.fasterxml.jackson.databind.node.ObjectNode;

 

 import java.util.Date;

@@ -152,16 +153,19 @@
      *            The deployment ID

      * @param serviceTypeId

      *            Service type ID

-     * @param blueprintInput

+     * @param blueprintInputJson

      *            The value for each blueprint parameters in a flat JSON

      * @return The status URL

      */

-    public String createNewDeployment(String deploymentId, String serviceTypeId) {

+    public String createNewDeployment(String deploymentId, String serviceTypeId, JsonNode blueprintInputJson) {

         Date startTime = new Date();

         LoggingUtils.setTargetContext("DCAE", "createNewDeployment");

         try {

             ObjectNode rootNode = (ObjectNode) refProp.getJsonTemplate("dcae.deployment.template");

             rootNode.put("serviceTypeId", serviceTypeId);

+            if (blueprintInputJson != null) {

+                rootNode.put("inputs", blueprintInputJson);

+            }

             String apiBodyString = rootNode.toString();

             logger.info("Dcae api Body String - " + apiBodyString);

             String url = refProp.getStringValue(DCAE_URL_PROPERTY_NAME) + DCAE_URL_PREFIX + deploymentId;

diff --git a/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java b/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java
index 9b8d9d9..118059d 100644
--- a/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java
+++ b/src/main/java/org/onap/clamp/clds/model/properties/AbstractModelElement.java
@@ -26,29 +26,26 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 /**
  * Provide base ModelElement functionality. Perform base parsing of properties
- * for a ModelElement (such as, VesCollector, Policy, Tca, Holmes,
- * ...)
+ * for a ModelElement (such as, VesCollector, Policy, Tca, Holmes, ...)
  */
 public abstract class AbstractModelElement {
 
     protected static final EELFLogger logger = EELFManager.getInstance().getLogger(AbstractModelElement.class);
     protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
-
     private final String type;
     private final ModelBpmn modelBpmn;
     private final String id;
     protected String topicPublishes;
     protected final JsonNode modelElementJsonNode;
     private boolean isFound;
-
     private final ModelProperties modelProp;
-
     private static final String LOG_ELEMENT_NOT_FOUND = "Value '{}' for key 'name' not found in JSON";
     private static final String LOG_ELEMENT_NOT_FOUND_IN_JSON = "Value '{}' for key 'name' not found in JSON {}";
 
@@ -118,6 +115,27 @@
     }
 
     /**
+     * Return the Json value field of the json node element that has a name
+     * field equals to the given name.
+     */
+    public static JsonNode getJsonNodeByName(JsonNode nodeIn, String name) {
+        JsonNode vnode = null;
+        if (nodeIn != null) {
+            for (JsonNode node : nodeIn) {
+                if (node.path("name").asText().equals(name)) {
+                    vnode = node.path("value");
+                }
+            }
+        }
+        if (vnode == null) {
+            logger.warn(LOG_ELEMENT_NOT_FOUND, name);
+        } else {
+            logger.debug(LOG_ELEMENT_NOT_FOUND_IN_JSON, name, nodeIn.toString());
+        }
+        return vnode;
+    }
+
+    /**
      * Return the value field of the json node element that has a name field
      * that equals the given name.
      */
diff --git a/src/main/java/org/onap/clamp/clds/model/properties/Global.java b/src/main/java/org/onap/clamp/clds/model/properties/Global.java
index ef36fef..c4532b2 100644
--- a/src/main/java/org/onap/clamp/clds/model/properties/Global.java
+++ b/src/main/java/org/onap/clamp/clds/model/properties/Global.java
@@ -23,12 +23,12 @@
 
 package org.onap.clamp.clds.model.properties;
 
-import java.util.List;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.fasterxml.jackson.databind.JsonNode;
 
+import java.util.List;
+
 /**
  * Parse global json properties.
  * <p>
@@ -38,14 +38,15 @@
  * ,"kings_mountain","Secaucus","lisle","concord","houston","akron"]}]
  */
 public class Global {
-    protected static final EELFLogger       logger      = EELFManager.getInstance().getLogger(Global.class);
-    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
 
-    private String                  service;
-    private String                  actionSet;
-    private List<String>            resourceVf;
-    private List<String>            resourceVfc;
-    private List<String>            location;
+    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(Global.class);
+    protected static final EELFLogger auditLogger = EELFManager.getInstance().getAuditLogger();
+    private String service;
+    private String actionSet;
+    private List<String> resourceVf;
+    private List<String> resourceVfc;
+    private JsonNode deployParameters;
+    private List<String> location;
 
     /**
      * Parse global given json node.
@@ -58,6 +59,7 @@
         actionSet = AbstractModelElement.getValueByName(globalNode, "actionSet");
         resourceVf = AbstractModelElement.getValuesByName(globalNode, "vf");
         resourceVfc = AbstractModelElement.getValuesByName(globalNode, "vfc");
+        deployParameters = AbstractModelElement.getJsonNodeByName(globalNode, "deployParameters");
         location = AbstractModelElement.getValuesByName(globalNode, "location");
     }
 
@@ -83,6 +85,10 @@
         return actionSet;
     }
 
+    public void setActionSet(String actionSet) {
+        this.actionSet = actionSet;
+    }
+
     /**
      * @return the resourceVf
      */
@@ -128,4 +134,11 @@
         this.location = location;
     }
 
+    public JsonNode getDeployParameters() {
+        return deployParameters;
+    }
+
+    public void setDeployParameters(JsonNode deployParameters) {
+        this.deployParameters = deployParameters;
+    }
 }
diff --git a/src/main/java/org/onap/clamp/clds/service/CldsService.java b/src/main/java/org/onap/clamp/clds/service/CldsService.java
index e828f84..2b6862d 100644
--- a/src/main/java/org/onap/clamp/clds/service/CldsService.java
+++ b/src/main/java/org/onap/clamp/clds/service/CldsService.java
@@ -377,6 +377,20 @@
         return names;
     }
 
+    private void fillInCldsModel(CldsModel model) {
+        if (model.getTemplateName() != null) {
+            CldsTemplate template = cldsDao.getTemplate(model.getTemplateName());
+            if (template != null) {
+                model.setTemplateId(template.getId());
+                model.setDocText(template.getPropText());
+                // This is to provide the Bpmn XML when Template part in UI
+                // is
+                // disabled
+                model.setBpmnText(template.getBpmnText());
+            }
+        }
+    }
+
     /**
      * REST service that saves and processes an action for a CLDS model by name.
      *
@@ -400,7 +414,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     public Response putModelAndProcessAction(@PathParam("action") String action,
             @PathParam("modelName") String modelName, @QueryParam("test") String test, CldsModel model)
-            throws TransformerException, ParseException, GeneralSecurityException, DecoderException {
+            throws TransformerException, ParseException {
         Date startTime = new Date();
         CldsModel retrievedModel = null;
         Boolean errorCase = false;
@@ -412,9 +426,7 @@
             isAuthorized(permisionManage);
             isAuthorizedForVf(model);
             String userId = getUserId();
-            String actionStateCd = CldsEvent.ACTION_STATE_INITIATED;
             logger.info("PUT actionCd={}", actionCd);
-            logger.info("PUT actionStateCd={}", actionStateCd);
             logger.info("PUT modelName={}", modelName);
             logger.info("PUT test={}", test);
             logger.info("PUT bpmnText={}", model.getBpmnText());
@@ -422,17 +434,7 @@
             logger.info("PUT userId={}", userId);
             logger.info("PUT getTypeId={}", model.getTypeId());
             logger.info("PUT deploymentId={}", model.getDeploymentId());
-            if (model.getTemplateName() != null) {
-                CldsTemplate template = cldsDao.getTemplate(model.getTemplateName());
-                if (template != null) {
-                    model.setTemplateId(template.getId());
-                    model.setDocText(template.getPropText());
-                    // This is to provide the Bpmn XML when Template part in UI
-                    // is
-                    // disabled
-                    model.setBpmnText(template.getBpmnText());
-                }
-            }
+            this.fillInCldsModel(model);
             // save model to db
             model.setName(modelName);
             model.save(cldsDao, getUserId());
@@ -568,9 +570,8 @@
         Date startTime = new Date();
         LoggingUtils.setRequestContext("CldsService: GET sdc services", getPrincipalName());
         String retStr;
-        String responseStr = sdcCatalogServices.getSdcServicesInformation(null);
         try {
-            retStr = createUiServiceFormatJson(responseStr);
+            retStr = createUiServiceFormatJson(sdcCatalogServices.getSdcServicesInformation(null));
         } catch (IOException e) {
             logger.error("IOException during SDC communication", e);
             throw new SdcCommunicationException("IOException during SDC communication", e);
@@ -814,12 +815,12 @@
         LoggingUtils.setRequestContext("CldsService: Deploy model", getPrincipalName());
         Boolean errorCase = false;
         try {
-            try {
-                checkForDuplicateServiceVf(modelName, model.getPropText());
-            } catch (IOException | BadRequestException e) {
-                errorCase = true;
-                logger.error("Exception occured during duplicate check for service and VF", e);
-            }
+            fillInCldsModel(model);
+            String bpmnJson = cldsBpmnTransformer.doXslTransformToString(model.getBpmnText());
+            logger.info("PUT bpmnJson={}", bpmnJson);
+            ModelProperties modelProp = new ModelProperties(modelName, model.getControlName(), CldsEvent.ACTION_DEPLOY,
+                    false, bpmnJson, model.getPropText());
+            checkForDuplicateServiceVf(modelName, model.getPropText());
             String deploymentId = "";
             // If model is already deployed then pass same deployment id
             if (model.getDeploymentId() != null && !model.getDeploymentId().isEmpty()) {
@@ -828,7 +829,7 @@
                 deploymentId = "closedLoop_" + UUID.randomUUID() + "_deploymentId";
             }
             String createNewDeploymentStatusUrl = dcaeDispatcherServices.createNewDeployment(deploymentId,
-                    model.getTypeId());
+                    model.getTypeId(), modelProp.getGlobal().getDeployParameters());
             String operationStatus = "processing";
             long waitingTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(10);
             while ("processing".equalsIgnoreCase(operationStatus)) {
@@ -930,7 +931,8 @@
         if (service != null && resourceVf != null && !resourceVf.isEmpty()) {
             List<CldsModelProp> cldsModelPropList = cldsDao.getDeployedModelProperties();
             for (CldsModelProp cldsModelProp : cldsModelPropList) {
-                JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText()).get("global");
+                JsonNode currentNode = JacksonUtils.getObjectMapperInstance().readTree(cldsModelProp.getPropText())
+                        .get("global");
                 String currentService = AbstractModelElement.getValueByName(currentNode, "service");
                 List<String> currentVf = AbstractModelElement.getValuesByName(currentNode, "vf");
                 if (currentVf != null && !currentVf.isEmpty()) {
diff --git a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
index a7ab94c..25daf01 100644
--- a/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
+++ b/src/test/java/org/onap/clamp/clds/model/prop/ModelPropertiesTest.java
@@ -28,6 +28,7 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -84,6 +85,17 @@
                 tca.getTcaItem().getTcaThresholds().get(1).getFieldPath());
         assertEquals("GREATER_OR_EQUAL", tca.getTcaItem().getTcaThresholds().get(1).getOperator());
         assertEquals(Integer.valueOf(123), tca.getTcaItem().getTcaThresholds().get(1).getThreshold());
+        // Test global prop
+        assertEquals("vnfRecipe", prop.getGlobal().getActionSet());
+        assertEquals("4cc5b45a-1f63-4194-8100-cd8e14248c92", prop.getGlobal().getService());
+        assertTrue(Arrays.equals(new String[] {
+                "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"
+        }, prop.getGlobal().getResourceVf().toArray()));
+        assertTrue(Arrays.equals(new String[] {
+                "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1"
+        }, prop.getGlobal().getLocation().toArray()));
+        assertEquals("value1", prop.getGlobal().getDeployParameters().get("input1").asText());
+        assertEquals("value2", prop.getGlobal().getDeployParameters().get("input2").asText());
     }
 
     @Test
@@ -108,6 +120,17 @@
         assertTrue(holmes.isFound());
         assertEquals("configPolicy1", holmes.getConfigPolicyName());
         assertEquals("blabla", holmes.getCorrelationLogic());
+        // Test global prop
+        assertEquals("vnfRecipe", prop.getGlobal().getActionSet());
+        assertEquals("4cc5b45a-1f63-4194-8100-cd8e14248c92", prop.getGlobal().getService());
+        assertTrue(Arrays.equals(new String[] {
+                "f5213e3a-9191-4362-93b5-b67f8d770e44"
+        }, prop.getGlobal().getResourceVf().toArray()));
+        assertTrue(Arrays.equals(new String[] {
+                "SNDGCA64", "ALPRGAED", "LSLEILAA", "MDTWNJC1"
+        }, prop.getGlobal().getLocation().toArray()));
+        assertEquals("value1", prop.getGlobal().getDeployParameters().get("input1").asText());
+        assertEquals("value2", prop.getGlobal().getDeployParameters().get("input2").asText());
     }
 
     @Test
diff --git a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
index 43fecc9..6ac97ec 100644
--- a/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
+++ b/src/test/resources/example/model-properties/holmes/modelBpmnProperties.json
@@ -1,109 +1,122 @@
 {
-  "Holmes_0i4n2mm": [
-    {
-      "name": "correlationalLogic",
-      "value": "blabla"
-    },
-    {
-      "name": "configPolicyName",
-      "value": "configPolicy1"
-    }
-  ],
-  "Policy_0honxgv": {
-    "policy1": [
-      {
-        "name": "pname",
-        "value": "policy1"
-      },
-      {
-        "name": "pid",
-        "value": "0"
-      },
-      {
-        "name": "timeout",
-        "value": "345"
-      },
-      {
-        "policyConfigurations": [
-          [
-            {
-              "name": "maxRetries",
-              "value": [
-                "3"
-              ]
-            },
-            {
-              "name": "retryTimeLimit",
-              "value": [
-                "180"
-              ]
-            },
-            {
-              "name": "_id",
-              "value": [
-                "dGLuNqg"
-              ]
-            },
-            {
-              "name": "parentPolicy",
-              "value": [
-                ""
-              ]
-            },
-            {
-              "name": "targetResourceId",
-              "value": [
-                "resourceid"
-              ]
-            }
-          ]
-        ]
-      }
-    ]
-  },
-  "global": [
-    {
-      "name": "actionSet",
-      "value": [
-        "vnfRecipe"
-      ]
-    },
-    {
-      "name": "vf",
-      "value": [
-        "f5213e3a-9191-4362-93b5-b67f8d770e44"
-      ]
-    },
-    {
-      "name": "location",
-      "value": [
-        "SNDGCA64",
-        "ALPRGAED",
-        "LSLEILAA",
-        "MDTWNJC1"
-      ]
-    }
-  ],
-  "shared": {
-    "byService": {
-      "": {
-        "vf": {
-          "": ""
-        },
-        "location": {
-          "": ""
-        },
-        "alarmCondition": {
-          "": ""
-        }
-      }
-    },
-    "byVf": {
-      "": {
-        "vfc": {
-          "": ""
-        }
-      }
-    }
-  }
+	"Holmes_0i4n2mm": [
+		{
+			"name": "correlationalLogic",
+			"value": "blabla"
+		},
+		{
+			"name": "configPolicyName",
+			"value": "configPolicy1"
+		}
+	],
+	"Policy_0honxgv": {
+		"policy1": [
+			{
+				"name": "pname",
+				"value": "policy1"
+			},
+			{
+				"name": "pid",
+				"value": "0"
+			},
+			{
+				"name": "timeout",
+				"value": "345"
+			},
+			{
+				"policyConfigurations": [
+					[
+						{
+							"name": "maxRetries",
+							"value": [
+								"3"
+							]
+						},
+						{
+							"name": "retryTimeLimit",
+							"value": [
+								"180"
+							]
+						},
+						{
+							"name": "_id",
+							"value": [
+								"dGLuNqg"
+							]
+						},
+						{
+							"name": "parentPolicy",
+							"value": [
+								""
+							]
+						},
+						{
+							"name": "targetResourceId",
+							"value": [
+								"resourceid"
+							]
+						}
+					]
+				]
+			}
+		]
+	},
+	"global": [
+		{
+			"name": "actionSet",
+			"value": [
+				"vnfRecipe"
+			]
+		},
+		{
+			"name": "service",
+			"value": [
+				"4cc5b45a-1f63-4194-8100-cd8e14248c92"
+			]
+		},
+		{
+			"name": "vf",
+			"value": [
+				"f5213e3a-9191-4362-93b5-b67f8d770e44"
+			]
+		},
+		{
+			"name": "location",
+			"value": [
+				"SNDGCA64",
+				"ALPRGAED",
+				"LSLEILAA",
+				"MDTWNJC1"
+			]
+		},
+		{
+			"name": "deployParameters",
+			"value": {
+				"input1": "value1",
+				"input2": "value2"
+			}
+		}
+	],
+	"shared": {
+		"byService": {
+			"": {
+				"vf": {
+					"": ""
+				},
+				"location": {
+					"": ""
+				},
+				"alarmCondition": {
+					"": ""
+				}
+			}
+		},
+		"byVf": {
+			"": {
+				"vfc": {
+					"": ""
+				}
+			}
+		}
+	}
 }
diff --git a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
index 8e2780c..ce0f317 100644
--- a/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
+++ b/src/test/resources/example/model-properties/tca/modelBpmnProperties.json
@@ -1,145 +1,152 @@
 {
-  "TCA_1jy9to4": {
-    "group1": [
-      {
-        "name": "tname",
-        "value": "group1"
-      },
-      {
-        "name": "tuuid",
-        "value": "f734f031-10aa-t8fb-330f-04dde2886325"
-      },
-      {
-        "name": "tcaPolId",
-        "value": "policy1"
-      },
-      {
-        "name": "eventName",
-        "value": "vFirewallBroadcastPackets"
-      },
-      {
-        "name": "controlLoopSchemaType",
-        "value": "VNF"
-      },
-      {
-        "serviceConfigurations": [
-          [
-            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
-            "LESS_OR_EQUAL",
-            "123",
-            "ABATED"
-          ],
-          [
-            "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
-            "GREATER_OR_EQUAL",
-            "123",
-            "ONSET"
-          ]
-        ]
-      }
-    ]
-  },
-  "Policy_0honxgv": {
-    "policy1": [
-      {
-        "name": "pname",
-        "value": "policy1"
-      },
-      {
-        "name": "pid",
-        "value": "0"
-      },
-      {
-        "name": "timeout",
-        "value": "345"
-      },
-      {
-        "policyConfigurations": [
-          [
-            {
-              "name": "maxRetries",
-              "value": [
-                "3"
-              ]
-            },
-            {
-              "name": "retryTimeLimit",
-              "value": [
-                "180"
-              ]
-            },
-            {
-              "name": "_id",
-              "value": [
-                "dGLuNqg"
-              ]
-            },
-            {
-              "name": "parentPolicy",
-              "value": [
-                ""
-              ]
-            },
-            {
-              "name": "targetResourceId",
-              "value": [
-                "resourceid"
-              ]
-            }
-          ]
-        ]
-      }
-    ]
-  },
-  "global": [
-    {
-      "name": "actionSet",
-      "value": [
-        "vnfRecipe"
-      ]
-    },
-    {
-      "name": "service",
-      "value": [
-        "4cc5b45a-1f63-4194-8100-cd8e14248c92"
-      ]
-    },
-    {
-      "name": "vf",
-      "value": [
-        "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"
-      ]
-    },
-    {
-      "name": "location",
-      "value": [
-        "SNDGCA64",
-        "ALPRGAED",
-        "LSLEILAA",
-        "MDTWNJC1"
-      ]
-    }
-  ],
-  "shared": {
-    "byService": {
-      "": {
-        "vf": {
-          "": ""
-        },
-        "location": {
-          "": ""
-        },
-        "alarmCondition": {
-          "": ""
-        }
-      }
-    },
-    "byVf": {
-      "": {
-        "vfc": {
-          "": ""
-        }
-      }
-    }
-  }
+	"TCA_1jy9to4": {
+		"group1": [
+			{
+				"name": "tname",
+				"value": "group1"
+			},
+			{
+				"name": "tuuid",
+				"value": "f734f031-10aa-t8fb-330f-04dde2886325"
+			},
+			{
+				"name": "tcaPolId",
+				"value": "policy1"
+			},
+			{
+				"name": "eventName",
+				"value": "vFirewallBroadcastPackets"
+			},
+			{
+				"name": "controlLoopSchemaType",
+				"value": "VNF"
+			},
+			{
+				"serviceConfigurations": [
+					[
+						"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated",
+						"LESS_OR_EQUAL",
+						"123",
+						"ABATED"
+					],
+					[
+						"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta",
+						"GREATER_OR_EQUAL",
+						"123",
+						"ONSET"
+					]
+				]
+			}
+		]
+	},
+	"Policy_0honxgv": {
+		"policy1": [
+			{
+				"name": "pname",
+				"value": "policy1"
+			},
+			{
+				"name": "pid",
+				"value": "0"
+			},
+			{
+				"name": "timeout",
+				"value": "345"
+			},
+			{
+				"policyConfigurations": [
+					[
+						{
+							"name": "maxRetries",
+							"value": [
+								"3"
+							]
+						},
+						{
+							"name": "retryTimeLimit",
+							"value": [
+								"180"
+							]
+						},
+						{
+							"name": "_id",
+							"value": [
+								"dGLuNqg"
+							]
+						},
+						{
+							"name": "parentPolicy",
+							"value": [
+								""
+							]
+						},
+						{
+							"name": "targetResourceId",
+							"value": [
+								"resourceid"
+							]
+						}
+					]
+				]
+			}
+		]
+	},
+	"global": [
+		{
+			"name": "actionSet",
+			"value": [
+				"vnfRecipe"
+			]
+		},
+		{
+			"name": "service",
+			"value": [
+				"4cc5b45a-1f63-4194-8100-cd8e14248c92"
+			]
+		},
+		{
+			"name": "vf",
+			"value": [
+				"023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"
+			]
+		},
+		{
+			"name": "location",
+			"value": [
+				"SNDGCA64",
+				"ALPRGAED",
+				"LSLEILAA",
+				"MDTWNJC1"
+			]
+		},
+		{
+			"name": "deployParameters",
+			"value": {
+				"input1": "value1",
+				"input2": "value2"
+			}
+		}
+	],
+	"shared": {
+		"byService": {
+			"": {
+				"vf": {
+					"": ""
+				},
+				"location": {
+					"": ""
+				},
+				"alarmCondition": {
+					"": ""
+				}
+			}
+		},
+		"byVf": {
+			"": {
+				"vfc": {
+					"": ""
+				}
+			}
+		}
+	}
 }