summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsblimkie <steven.blimkie@amdocs.com>2018-03-16 15:29:41 -0400
committersblimkie <steven.blimkie@amdocs.com>2018-03-16 15:29:41 -0400
commitb713fc2e83452517654c9e37c6380cb68bfbafe7 (patch)
tree7441c35f628e6dd1409071a9ba07fce7d03e6472
parentd41ef90610aadb5aa3372d5922155e4fc4e0a407 (diff)
Allow ingestion of edge schema at deploy time
Gizmo to optionally allow a deployer to drop in a custom edge schema at deploy time. Change-Id: I5b7ccca79bc4fdb79629d308f517d4446adeb971 Issue-ID: AAI-889 Signed-off-by: sblimkie <steven.blimkie@amdocs.com>
-rw-r--r--src/main/java/org/onap/schema/RelationshipSchemaLoader.java40
-rw-r--r--src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java14
-rw-r--r--src/test/java/org/onap/schema/RelationshipSchemaTest.java29
-rw-r--r--src/test/resources/model/DbEdgeRules_v11.json1962
4 files changed, 61 insertions, 1984 deletions
diff --git a/src/main/java/org/onap/schema/RelationshipSchemaLoader.java b/src/main/java/org/onap/schema/RelationshipSchemaLoader.java
index 761f6ad..0e10fc3 100644
--- a/src/main/java/org/onap/schema/RelationshipSchemaLoader.java
+++ b/src/main/java/org/onap/schema/RelationshipSchemaLoader.java
@@ -29,8 +29,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.SortedSet;
import java.util.Timer;
import java.util.TimerTask;
@@ -48,6 +50,7 @@ import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
import org.onap.crud.util.CrudServiceConstants;
import org.onap.crud.util.FileWatcher;
+import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
@@ -71,7 +74,7 @@ public class RelationshipSchemaLoader {
}
public synchronized static void loadModels(String version) throws CrudException {
- String pattern = String.format(".*(%s)" + fileExt, version);
+ String pattern = String.format("DbEdgeRules.*(%s)" + fileExt, version);
load(Pattern.compile(pattern), Pattern.compile(edgePropsFiles + version + fileExt));
}
@@ -111,20 +114,31 @@ public class RelationshipSchemaLoader {
private static void load(Pattern rulesPattern, Pattern edgePropsPattern) throws CrudException {
ClassLoader cl = RelationshipSchemaLoader.class.getClassLoader();
ResourcePatternResolver rulesResolver = new PathMatchingResourcePatternResolver(cl);
- List<Object> rulesFiles;
+ List<Object> rulesFiles = new ArrayList<Object>();
+ Set<String> existingFiles = new HashSet<String>();
String rulesDir = CrudServiceConstants.CRD_HOME_MODEL;
try {
- // getResources method returns objects of type "Resource"
- // 1. We are getting all the objects from the classpath which has
- // "DbEdgeRules" in the name.
- // 2. We run them through a filter and return only the objects which match
- // the supplied pattern "p"
- // 3. We then collect the objects in a list. At this point we have a list
- // of the kind of files we require.
- rulesFiles = Arrays.stream(rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt))
- .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList());
-
+ // Allow additional DBEdgeRule files to be dropped in manually (in addition to those found on the classpath)
+ File[] edgeRuleFileList = new File(rulesDir).listFiles((d, name) -> rulesPattern.matcher(name).matches());
+ for (File file : edgeRuleFileList) {
+ rulesFiles.add(file);
+ existingFiles.add(filename(file));
+ }
+
+ // Get DBEdgeRules from the jar on the classpath. Don't include any that conflict with files which
+ // were dropped manually.
+ Resource[] rawResourceList = rulesResolver.getResources("classpath*:/dbedgerules/DbEdgeRules*" + fileExt);
+ List<Resource> prunedResourceList = new ArrayList<Resource>();
+ for (Resource resource : rawResourceList) {
+ if (!existingFiles.contains(filename(resource))) {
+ prunedResourceList.add(resource);
+ }
+ }
+
+ rulesFiles.addAll(Arrays.stream(prunedResourceList.toArray(new Resource[prunedResourceList.size()]))
+ .filter(r -> !myMatcher(rulesPattern, r.getFilename()).isEmpty()).collect(Collectors.toList()));
+
// This gets all the objects of type "File" from external directory (not
// on the classpath)
// 1. From an external directory (one not on the classpath) we get all the
@@ -135,7 +149,7 @@ public class RelationshipSchemaLoader {
// this list
// to the previous collection (rulesFiles)
rulesFiles
- .addAll(Arrays.stream(new File(rulesDir).listFiles((d, name) -> edgePropsPattern.matcher(name).matches()))
+ .addAll(Arrays.stream(new File(rulesDir).listFiles( (d, name) -> edgePropsPattern.matcher(name).matches() ))
.collect(Collectors.toList()));
if (rulesFiles.isEmpty()) {
diff --git a/src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java b/src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java
index 565a215..22fead0 100644
--- a/src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java
+++ b/src/test/java/org/onap/schema/RelationshipSchemaLoaderTest.java
@@ -45,12 +45,14 @@ public class RelationshipSchemaLoaderTest {
@Test
public void loadModels() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
RelationshipSchemaLoader.loadModels();
assertFalse( RelationshipSchemaLoader.getVersionContextMap().keySet().isEmpty());
}
@Test
public void loadModelsWithAVersion() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
RelationshipSchemaLoader.loadModels("v11");
assertEquals(1, RelationshipSchemaLoader.getVersionContextMap().keySet().size());
assertEquals("v11", RelationshipSchemaLoader.getLatestSchemaVersion());
@@ -58,14 +60,25 @@ public class RelationshipSchemaLoaderTest {
@Test
public void getSchemaForVersion() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
RelationshipSchemaLoader.loadModels("v11");
String version = RelationshipSchemaLoader.getLatestSchemaVersion();
RelationshipSchema g = RelationshipSchemaLoader.getSchemaForVersion(version);
assertNotNull(g.lookupRelationType("org.onap.relationships.inventory.BelongsTo"));
}
+ public void getSchemaForVersionManualFile() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
+ RelationshipSchemaLoader.loadModels("v10");
+ String version = RelationshipSchemaLoader.getLatestSchemaVersion();
+ RelationshipSchema g = RelationshipSchemaLoader.getSchemaForVersion(version);
+ assertNotNull(g.lookupRelationType("locatedIn"));
+ }
+
+
@Test
public void getSchemaForVersionFail() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
RelationshipSchemaLoader.loadModels();
try {
RelationshipSchemaLoader.getSchemaForVersion("v1");
@@ -76,6 +89,7 @@ public class RelationshipSchemaLoaderTest {
@Test
public void setVersionContextMap() throws Exception {
+ RelationshipSchemaLoader.resetVersionContextMap();
ArrayList<String> jsonString = new ArrayList<String>();
String rules = "{" +
"\"rules\": [" +
diff --git a/src/test/java/org/onap/schema/RelationshipSchemaTest.java b/src/test/java/org/onap/schema/RelationshipSchemaTest.java
index 7d54a30..ce8559a 100644
--- a/src/test/java/org/onap/schema/RelationshipSchemaTest.java
+++ b/src/test/java/org/onap/schema/RelationshipSchemaTest.java
@@ -24,6 +24,8 @@ import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.onap.crud.exception.CrudException;
+import com.att.aft.dme2.internal.apache.commons.lang.ArrayUtils;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -60,17 +62,17 @@ public class RelationshipSchemaTest {
public void shouldContainValidTypes() throws Exception {
Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
loadRelations(versionContextMap);
- assertTrue(versionContextMap.get("v11").isValidType("groupsResourcesIn"));
- assertTrue(versionContextMap.get("v11").isValidType("uses"));
- assertFalse(versionContextMap.get("v11").isValidType("notValidType"));
+ assertTrue(versionContextMap.get("v10").isValidType("groupsResourcesIn"));
+ assertTrue(versionContextMap.get("v10").isValidType("uses"));
+ assertFalse(versionContextMap.get("v10").isValidType("notValidType"));
}
@Test
public void shouldLookUpByRelation() throws Exception {
Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
loadRelations(versionContextMap);
- assertNotNull(versionContextMap.get("v11").lookupRelation("availability-zone:complex:groupsResourcesIn"));
- assertTrue(versionContextMap.get("v11")
+ assertNotNull(versionContextMap.get("v10").lookupRelation("availability-zone:complex:groupsResourcesIn"));
+ assertTrue(versionContextMap.get("v10")
.lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("prevent-delete"));
}
@@ -78,8 +80,8 @@ public class RelationshipSchemaTest {
public void shouldLookUpByRelationType() throws Exception {
Map<String, RelationshipSchema> versionContextMap = new ConcurrentHashMap<>();
loadRelations(versionContextMap);
- assertNotNull(versionContextMap.get("v11").lookupRelationType("groupsResourcesIn"));
- assertTrue(versionContextMap.get("v11")
+ assertNotNull(versionContextMap.get("v10").lookupRelationType("groupsResourcesIn"));
+ assertTrue(versionContextMap.get("v10")
.lookupRelation("availability-zone:complex:groupsResourcesIn").containsKey("prevent-delete"));
}
@@ -88,7 +90,14 @@ public class RelationshipSchemaTest {
File dir = new File(classLoader.getResource("model").getFile());
File[] allFiles = dir.listFiles((d, name) ->
(propsFilePattern.matcher(name).matches() || rulesFilePattern.matcher(name).matches()));
-
+
+ // Special handling for the v12 file, as it is used for a special test
+ for (File f : allFiles) {
+ if (f.getName().equals("edge_properties_v11.json")) {
+ allFiles = (File[]) ArrayUtils.removeElement(allFiles, f);
+ }
+ }
+
Arrays.stream(allFiles).sorted(Comparator.comparing(File::getName))
.collect(Collectors.groupingBy(f -> myMatcher(versionPattern, f.getName())))
.forEach((e, f) -> map.put(e, jsonFilesLoader(f)));
@@ -104,7 +113,9 @@ public class RelationshipSchemaTest {
}
try {
- rsSchema = new RelationshipSchema(fileContents);
+ if (fileContents.size() == 2) {
+ rsSchema = new RelationshipSchema(fileContents);
+ }
} catch (CrudException e) {
e.printStackTrace();
} catch (IOException e) {
diff --git a/src/test/resources/model/DbEdgeRules_v11.json b/src/test/resources/model/DbEdgeRules_v11.json
deleted file mode 100644
index d24acd7..0000000
--- a/src/test/resources/model/DbEdgeRules_v11.json
+++ /dev/null
@@ -1,1962 +0,0 @@
-{
- "rules": [
- {
- "from": "availability-zone",
- "to": "complex",
- "label": "groupsResourcesIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from" : "auth-info-item",
- "to" : "tenant",
- "label" : "defaultTenant",
- "direction" : "OUT",
- "multiplicity" : "One2One",
- "isParent" : "false",
- "usesResource" : "false",
- "hasDelTarget" : "false",
- "SVC-INFRA" : "false"
- },
- {
- "from": "generic-vnf",
- "to": "license-key-resource",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "availability-zone",
- "to": "service-capability",
- "label": "supportsServiceCapability",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "cloud-region",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "cloud-region",
- "to": "l3-network",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "cloud-region",
- "to": "tenant",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "auth-info-item",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "image",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "flavor",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "availability-zone",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "oam-network",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "dvs-switch",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "volume-group",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "group-assignment",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "snapshot",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "${direction}"
- },
- {
- "from": "cloud-region",
- "to": "zone",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "complex",
- "to": "ctag-pool",
- "label": "hasCtagPool",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "complex",
- "to": "l3-network",
- "label": "usesL3Network",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "ctag-pool",
- "to": "availability-zone",
- "label": "supportsAvailabilityZone",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "customer",
- "to": "service-subscription",
- "label": "subscribesTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "dvs-switch",
- "to": "availability-zone",
- "label": "existsIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "l-interface",
- "label": "hasLInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "availability-zone",
- "label": "hasAvailabilityZone",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "lag-interface",
- "label": "hasLAGInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "l3-network",
- "label": "usesL3Network",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "pserver",
- "label": "runsOnPserver",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "vnf-image",
- "label": "usesVnfImage",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "vserver",
- "label": "runsOnVserver",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "service-instance",
- "label": "hasInstance",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "site-pair-set",
- "label": "hasSitePairSet",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "network-profile",
- "label": "hasNetworkProfile",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "pnf",
- "label": "hostedOn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "group-assignment",
- "to": "tenant",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "group-assignment",
- "to": "pserver",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "image",
- "to": "metadatum",
- "label": "hasMetaDatum",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vnfc",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "l3-interface-ipv4-address-list",
- "label": "hasIpAddress",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "l3-interface-ipv6-address-list",
- "label": "hasIpAddress",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "l-interface",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "logical-link",
- "label": "usesLogicalLink",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "lag-interface",
- "to": "logical-link",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "vlan",
- "label": "hasVlan",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l-interface",
- "to": "sriov-vf",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-interface-ipv4-address-list",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-interface-ipv6-address-list",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-interface-ipv4-address-list",
- "to": "l3-network",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-interface-ipv6-address-list",
- "to": "l3-network",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-interface-ipv4-address-list",
- "to": "subnet",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "l3-interface-ipv6-address-list",
- "to": "subnet",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "l3-network",
- "to": "vpn-binding",
- "label": "usesVpnBinding",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "l3-network",
- "to": "instance-group",
- "label": "memberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "subnet",
- "label": "hasSubnet",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "service-instance",
- "label": "hasInstance",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "ctag-assignment",
- "label": "hasCtagAssignment",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "network-policy",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "segmentation-assignment",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "l3-network",
- "to": "route-table-reference",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "lag-interface",
- "to": "lag-link",
- "label": "usesLAGLink",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "lag-interface",
- "to": "p-interface",
- "label": "usesPInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "lag-interface",
- "to": "l-interface",
- "label": "hasLInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "lag-link",
- "label": "usesLAGLink",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "pnf",
- "label": "bridgedTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "logical-link",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "model",
- "to": "model-ver",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-ver",
- "to": "model-element",
- "label": "startsWith",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-element",
- "to": "model-ver",
- "label": "isA",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "model-ver",
- "to": "metadatum",
- "label": "hasMetaData",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-element",
- "to": "model-element",
- "label": "connectsTo",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-element",
- "to": "model-constraint",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-element",
- "to": "constrained-element-set",
- "label": "connectsTo",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "model-constraint",
- "to": "constrained-element-set",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "constrained-element-set",
- "to": "element-choice-set",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "element-choice-set",
- "to": "model-element",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "named-query",
- "to": "model",
- "label": "relatedTo",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "named-query",
- "to": "named-query-element",
- "label": "startsWith",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "named-query-element",
- "to": "named-query-element",
- "label": "connectsTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "named-query-element",
- "to": "model",
- "label": "isA",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "named-query-element",
- "to": "property-constraint",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "named-query-element",
- "to": "related-lookup",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "instance-group",
- "to": "model",
- "label": "targets",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "newvce",
- "to": "l-interface",
- "label": "hasLInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "oam-network",
- "to": "complex",
- "label": "definedFor",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "oam-network",
- "to": "service-capability",
- "label": "supportsServiceCapability",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "p-interface",
- "to": "l-interface",
- "label": "hasLInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "p-interface",
- "to": "physical-link",
- "label": "usesPhysicalLink",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "p-interface",
- "to": "logical-link",
- "label": "usesLogicalLink",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "port-group",
- "to": "cvlan-tag",
- "label": "hasCTag",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pserver",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "pserver",
- "to": "cloud-region",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pserver",
- "to": "availability-zone",
- "label": "existsIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "pserver",
- "to": "lag-interface",
- "label": "hasLAGInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pserver",
- "to": "p-interface",
- "label": "hasPinterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pserver",
- "to": "zone",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "pnf",
- "to": "p-interface",
- "label": "hasPinterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pnf",
- "to": "lag-interface",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "pnf",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "pnf",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "pnf",
- "to": "zone",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "zone",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "cvlan-tag",
- "label": "hasIPAGFacingVLAN",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "pnf",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-subscription",
- "to": "service-instance",
- "label": "hasInstance",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "site-pair-set",
- "to": "routing-instance",
- "label": "hasRoutingInstance",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "routing-instance",
- "to": "site-pair",
- "label": "hasSitePair",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "site-pair",
- "to": "class-of-service",
- "label": "hasClassOfService",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "tenant",
- "to": "l3-network",
- "label": "usesL3Network",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "tenant",
- "to": "service-subscription",
- "label": "relatedTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "tenant",
- "to": "vserver",
- "label": "owns",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "${direction}"
- },
- {
- "from": "vce",
- "to": "availability-zone",
- "label": "hasAvailabilityZone",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vce",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vce",
- "to": "port-group",
- "label": "hasPortGroup",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vce",
- "to": "vserver",
- "label": "runsOnVserver",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vce",
- "to": "service-instance",
- "label": "hasServiceInstance",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "virtual-data-center",
- "to": "generic-vnf",
- "label": "hasVNF",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "!${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vlan",
- "to": "l3-interface-ipv4-address-list",
- "label": "hasIpAddress",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vlan",
- "to": "l3-interface-ipv6-address-list",
- "label": "hasIpAddress",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vpls-pe",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vpls-pe",
- "to": "ctag-pool",
- "label": "usesCtagPool",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vpls-pe",
- "to": "p-interface",
- "label": "hasPinterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vpls-pe",
- "to": "lag-interface",
- "label": "hasLAGinterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vserver",
- "to": "flavor",
- "label": "hasFlavor",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vserver",
- "to": "image",
- "label": "hasImage",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vserver",
- "to": "l-interface",
- "label": "hasLInterface",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vserver",
- "to": "pserver",
- "label": "runsOnPserver",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vserver",
- "to": "volume",
- "label": "hasVolume",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vserver",
- "to": "vnfc",
- "label": "hosts",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vserver",
- "to": "snapshot",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "connector",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "metadatum",
- "label": "hasMetaData",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "logical-link",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "vlan",
- "label": "dependsOn",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "service-instance",
- "label": "dependsOn",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "connector",
- "to": "virtual-data-center",
- "label": "contains",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "connector",
- "to": "metadatum",
- "label": "hasMetaData",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "virtual-data-center",
- "to": "logical-link",
- "label": "contains",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "generic-vnf",
- "label": "bridgedTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "pserver",
- "label": "bridgedTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "vlan",
- "to": "multicast-configuration",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "volume-group",
- "to": "complex",
- "label": "existsIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "volume-group",
- "to": "tenant",
- "label": "belongsTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "ipsec-configuration",
- "to": "vig-server",
- "label": "hasVigServer",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "ipsec-configuration",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vf-module",
- "to": "volume-group",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vserver",
- "to": "vf-module",
- "label": "isPartOf",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vf-module",
- "to": "l3-network",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vf-module",
- "to": "vnfc",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "vf-module",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "volume-group",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "vnfc",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vlan",
- "to": "logical-link",
- "label": "usesLogicalLink",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "${direction}",
- "SVC-INFRA": "${direction}",
- "prevent-delete": "NONE"
- },
- {
- "from": "vpn-binding",
- "to": "route-target",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "ctag-assignment",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "generic-vnf",
- "label": "isPartOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "l3-network",
- "label": "isPartOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "network-policy",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "vlan",
- "label": "isPartOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "l-interface",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "instance-group",
- "label": "isMemberOf",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "tunnel-xconnect",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "cloud-region",
- "label": "existsIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "logical-link",
- "to": "vpn-binding",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "entitlement",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "license",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vce",
- "to": "entitlement",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "vce",
- "to": "license",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "zone",
- "to": "complex",
- "label": "existsIn",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "service-instance",
- "to": "allotted-resource",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "service-instance",
- "to": "allotted-resource",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "allotted-resource",
- "to": "vpn-binding",
- "label": "belongsTo",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "allotted-resource",
- "to": "allotted-resource",
- "label": "bindsTo",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "generic-vnf",
- "to": "complex",
- "label": "locatedIn",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "!${direction}"
- },
- {
- "from": "generic-vnf",
- "to": "ctag-pool",
- "label": "usesCtagPool",
- "direction": "OUT",
- "multiplicity": "Many2Many",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "p-interface",
- "to": "sriov-pf",
- "label": "has",
- "direction": "OUT",
- "multiplicity": "One2One",
- "contains-other-v": "${direction}",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- },
- {
- "from": "sriov-vf",
- "to": "sriov-pf",
- "label": "uses",
- "direction": "OUT",
- "multiplicity": "Many2One",
- "contains-other-v": "NONE",
- "delete-other-v": "NONE",
- "SVC-INFRA": "NONE",
- "prevent-delete": "NONE"
- }
- ]
-}