From d4ee0c786ca2cc27b35fdfaa7d9d53718fa0bd20 Mon Sep 17 00:00:00 2001 From: Denes Nemeth Date: Thu, 31 May 2018 13:59:34 +0200 Subject: Fix template generation for R2 Change-Id: Ibf53ee4f203f248c930611812f3eb248e3023be8 Signed-off-by: Denes Nemeth Issue-ID: VFC-728 --- .../OnapAbstractVnfdBuilder.java | 83 +++++++++++++++++++++- 1 file changed, 80 insertions(+), 3 deletions(-) (limited to 'nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapAbstractVnfdBuilder.java') diff --git a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapAbstractVnfdBuilder.java b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapAbstractVnfdBuilder.java index f7f247a0..5e9be7f6 100644 --- a/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapAbstractVnfdBuilder.java +++ b/nokiav2/driver/src/main/java/org/onap/vfc/nfvo/driver/vnfm/svnfm/nokia/packagetransformer/OnapAbstractVnfdBuilder.java @@ -21,6 +21,7 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import java.util.HashMap; import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; @@ -33,9 +34,9 @@ import static org.onap.vfc.nfvo.driver.vnfm.svnfm.nokia.util.CbamUtils.childElem import static org.slf4j.LoggerFactory.getLogger; /** - * Transforms a CBAM package into an ONAP package + * Generic non ONAP version dependent package conversion */ -public class OnapAbstractVnfdBuilder { +abstract class OnapAbstractVnfdBuilder { public static final String DESCRIPTION = "description"; public static final String PROPERTIES = "properties"; public static final String REQUIREMENTS = "requirements"; @@ -63,7 +64,7 @@ public class OnapAbstractVnfdBuilder { return null; } - private JsonElement get(String name, Set> nodes) { + protected JsonElement get(String name, Set> nodes) { for (Map.Entry node : nodes) { if (name.equals(node.getKey())) { return node.getValue(); @@ -71,4 +72,80 @@ public class OnapAbstractVnfdBuilder { } throw new NoSuchElementException("The VNFD does not have a node called " + name + " but required by an other node"); } + + protected String buildEcp(String name, JsonElement ecp, Set> nodes) { + if (ecp.getAsJsonObject().has(REQUIREMENTS)) { + String icpName = getRequirement(ecp.getAsJsonObject().get(REQUIREMENTS).getAsJsonArray(), "internal_connection_point"); + if (icpName != null) { + return buildEcpInternal(name, icpName, nodes); + } else { + logger.warn("The {} ecp does not have an internal connection point", name); + } + } else { + logger.warn("The {} ecp does not have an requirements section", name); + } + return ""; + } + + private String buildEcpInternal(String ecpName, String icpName, Set> nodes) { + JsonObject icpNode = get(icpName, nodes).getAsJsonObject(); + if (icpNode.has(REQUIREMENTS)) { + String vdu = getRequirement(icpNode.getAsJsonObject().get(REQUIREMENTS).getAsJsonArray(), "virtual_binding"); + //internal connection point is bound to VDU + if (vdu != null) { + return buildVduCpd(ecpName, vdu, child(icpNode, PROPERTIES)); + } else { + logger.warn("The {} internal connection point of the {} ecp does not have a VDU", icpName, ecpName); + } + } else { + logger.warn("The {} internal connection point of the {} ecp does not have a requirements section", icpName, ecpName); + } + return ""; + } + + /** + * @param cbamVnfd the CBAM VNFD + * @return the converted ONAP VNFD + */ + public String toOnapVnfd(String cbamVnfd) { + JsonObject root = new Gson().toJsonTree(new Yaml().load(cbamVnfd)).getAsJsonObject(); + JsonObject topologyTemplate = child(root, "topology_template"); + JsonObject substitution_mappings = child(topologyTemplate, "substitution_mappings"); + Map virtualLinks = new HashMap<>(); + if (topologyTemplate.has("node_templates")) { + Set> nodeTemplates = child(topologyTemplate, "node_templates").entrySet(); + StringBuilder body = new StringBuilder(); + for (Map.Entry node : nodeTemplates) { + String type = childElement(node.getValue().getAsJsonObject(), "type").getAsString(); + if ("tosca.nodes.nfv.VDU".equals(type)) { + body.append(buildVdu(node.getKey(), substitution_mappings, node.getValue().getAsJsonObject(), nodeTemplates)); + } else if ("tosca.nodes.nfv.VirtualStorage".equals(type)) { + body.append(buildVolume(node.getKey(), node.getValue().getAsJsonObject())); + } else if ("tosca.nodes.nfv.VL".equals(type)) { + virtualLinks.put(node.getKey(), node.getValue()); + body.append(buildVl(node.getValue().getAsJsonObject().get(PROPERTIES).getAsJsonObject(), node.getKey())); + } else if ("tosca.nodes.nfv.ICP".equals(type)) { + body.append(buildIcp(node.getKey(), node.getValue().getAsJsonObject())); + } else if ("tosca.nodes.nfv.ECP".equals(type)) { + body.append(buildEcp(node.getKey(), node.getValue(), nodeTemplates)); + } else { + logger.warn("The {} type is not converted", type); + } + } + return buildHeader(topologyTemplate, virtualLinks) + body.toString(); + } + return buildHeader(topologyTemplate, virtualLinks); + } + + abstract protected String buildHeader(JsonObject toplogyTemplate, Map virtualLinks); + + abstract protected String buildVduCpd(String name, String vdu, JsonObject properties); + + abstract protected String buildVdu(String name, JsonObject vnf, JsonObject vdu, Set> nodes); + + abstract protected String buildIcp(String name, JsonObject icp); + + abstract protected String buildVolume(String nodeName, JsonObject volume); + + abstract protected String buildVl(JsonObject vlProperties, String name); } -- cgit 1.2.3-korg