diff options
Diffstat (limited to 'javatoscachecker/checker')
10 files changed, 304 insertions, 1455 deletions
diff --git a/javatoscachecker/checker/pom.xml b/javatoscachecker/checker/pom.xml index a408bc6..f8bbbd3 100644 --- a/javatoscachecker/checker/pom.xml +++ b/javatoscachecker/checker/pom.xml @@ -1,152 +1,162 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + * Copyright (c) 2017 <AT&T>. All rights reserved. + * =================================================================== + * 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. +--> + <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>org.onap.tosca</groupId> + <groupId>org.onap.modeling.toscaparsers</groupId> <artifactId>checker</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>1.0.0-SNAPSHOT</version> </parent> <artifactId>Checker</artifactId> <packaging>jar</packaging> <name>Checker</name> <build> - <sourceDirectory>src/main/java</sourceDirectory> - <plugins> - <plugin> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <source>1.8</source> - <target>1.8</target> - <encoding>${project.build.sourceEncoding}</encoding> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <version>2.10</version> - <executions> - <execution> - <id>copy-dependencies</id> - <phase>package</phase> - <goals> - <goal>copy-dependencies</goal> - </goals> - <configuration> - <outputDirectory>${project.build.directory}/deps</outputDirectory> - <overWriteReleases>false</overWriteReleases> - <overWriteSnapshots>false</overWriteSnapshots> - <overWriteIfNewer>true</overWriteIfNewer> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>buildnumber-maven-plugin</artifactId> - <version>1.4</version> - <executions> - <execution> - <phase>validate</phase> - <goals> - <goal>create</goal> - </goals> - </execution> - </executions> - <configuration> - <doCheck>false</doCheck> - <doUpdate>false</doUpdate> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>2.1</version> - <configuration> - <archive> - <manifest> - <addDefaultImplementationEntries>true</addDefaultImplementationEntries> - </manifest> - <manifestEntries> - <Implementation-Build>${buildNumber}</Implementation-Build> - </manifestEntries> - </archive> - </configuration> - </plugin> + <sourceDirectory>src/main/java</sourceDirectory> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + <encoding>${project.build.sourceEncoding}</encoding> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-dependency-plugin</artifactId> + <version>2.10</version> + <executions> + <execution> + <id>copy-dependencies</id> + <phase>package</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/deps</outputDirectory> + <overWriteReleases>false</overWriteReleases> + <overWriteSnapshots>false</overWriteSnapshots> + <overWriteIfNewer>true</overWriteIfNewer> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <version>1.4</version> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>create</goal> + </goals> + </execution> + </executions> + <configuration> + <doCheck>false</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <version>3.0.2</version> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <Implementation-Build>${buildNumber}</Implementation-Build> + </manifestEntries> + </archive> + </configuration> + </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-assembly-plugin</artifactId> - <version>2.6</version> - <configuration> - <descriptorRefs> - <descriptorRef>jar-with-dependencies</descriptorRef> - </descriptorRefs> - <archive> - <manifest> - <mainClass>org.onap.tosca.checker.Checker</mainClass> - </manifest> - <manifestEntries> - <Implementation-Build>${buildNumber}</Implementation-Build> - </manifestEntries> - </archive> - </configuration> - <executions> - <execution> - <id>make-assembly</id> <!-- this is used for inheritance merges --> - <phase>package</phase> <!-- bind to the packaging phase --> - <goals> - <goal>single</goal> - </goals> - </execution> - </executions> - </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-assembly-plugin</artifactId> + <version>2.6</version> + <configuration> + <descriptorRefs> + <descriptorRef>jar-with-dependencies</descriptorRef> + </descriptorRefs> + <archive> + <manifest> + <mainClass>org.onap.tosca.checker.Checker</mainClass> + </manifest> + <manifestEntries> + <Implementation-Build>${buildNumber}</Implementation-Build> + </manifestEntries> + </archive> + </configuration> + <executions> + <execution> + <id>make-assembly</id> <!-- this is used for inheritance merges --> + <phase>package</phase> <!-- bind to the packaging phase --> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>3.0.0-M1</version> + <configuration> + <doctitle>API for ${project.name} ${project.version}</doctitle> + <windowtitle>API for ${project.name} ${project.version}</windowtitle> + </configuration> + </plugin> + + <!-- blackduck maven plugin --> + <!-- + <plugin> + <groupId>com.blackducksoftware.integration</groupId> + <artifactId>hub-maven-plugin</artifactId> + <version>2.0.0</version> + <inherited>false</inherited> + <configuration> + <hubProjectName>${project.name}</hubProjectName> + <outputDirectory>${project.basedir}</outputDirectory> + <deployHubBdio>false</deployHubBdio> + </configuration> + <executions> + <execution> + <id>create-bdio-file</id> + <phase>package</phase> + <goals> + <goal>build-bom</goal> + </goals> + </execution> + </executions> + </plugin> + --> + </plugins> + </build> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>3.0.2</version> - <executions> - <execution> - <goals> - <goal>test-jar</goal> - </goals> - </execution> - </executions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-javadoc-plugin</artifactId> - <version>3.0.0-M1</version> - <configuration> - <doctitle>API for ${project.name} ${project.version}</doctitle> - <windowtitle>API for ${project.name} ${project.version}</windowtitle> - </configuration> - </plugin> - <!-- blackduck maven plugin --> - <plugin> - <groupId>com.blackducksoftware.integration</groupId> - <artifactId>hub-maven-plugin</artifactId> - <version>2.0.0</version> - <inherited>false</inherited> - <configuration> - <hubProjectName>${project.name}</hubProjectName> - <outputDirectory>${project.basedir}</outputDirectory> - <deployHubBdio>false</deployHubBdio> - </configuration> - <executions> - <execution> - <id>create-bdio-file</id> - <phase>package</phase> - <goals> - <goal>build-bom</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> - </build> - <dependencies> + <dependencies> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> @@ -193,9 +203,9 @@ <version>[0.9.11,)</version> </dependency> <dependency> - <groupId>org.onap.tosca</groupId> + <groupId>org.onap.modeling.toscaparsers</groupId> <artifactId>kwalify</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>1.0.0-SNAPSHOT</version> </dependency> </dependencies> </project> diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java index 9991c86..4218b85 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Checker.java @@ -131,7 +131,7 @@ public class Checker { private Target target = null; //what we're validating at the moment private Map<String, Target> grammars = new HashMap<String, Target>(); //grammars for the different tosca versions - private CheckerConfiguration config = new CheckerConfiguration(); + private CheckerConfiguration config; private Catalog catalog; private TargetLocator locator = new CommonLocator(); @@ -139,22 +139,26 @@ public class Checker { private Messages messages; private Logger log = Logger.getLogger(Checker.class.getName()); + private static String[] EMPTY_STRING_ARRAY = new String[0]; + private static final String[] grammarFiles = new String[] {"tosca/tosca_simple_yaml_1_0.grammar", + "tosca/tosca_simple_yaml_1_1.grammar"}; - public Checker() throws CheckerException { + public Checker(CheckerConfiguration theConfig) throws CheckerException { + this.config = theConfig; loadGrammars(); loadAnnotations(); messages = new Messages(); } - /* Need a proper way to indicate where the grammars are and how they should be identified - */ - private final String[] grammarFiles = new String[] {"tosca/tosca_simple_yaml_1_0.grammar", - "tosca/tosca_simple_yaml_1_1.grammar"}; + public Checker() throws CheckerException { + this(new CheckerConfiguration()); + } + private void loadGrammars() throws CheckerException { - for (String grammarFile: grammarFiles) { + for (String grammarFile: this.config.grammars()) { Target grammarTarget = this.locator.resolve(grammarFile); if (grammarTarget == null) { log.warning("Failed to locate grammar " + grammarFile); @@ -181,7 +185,7 @@ public class Checker { log.warning("Invalid grammar " + grammarFile + ": cannot locate tosca_definitions_versions"); } if (versions == null || versions.isEmpty()) { - log.warning("Invalid grammar " + grammarFile + ": no tosca_definitions_versions specified"); + log.warning("Invalid grammar " + grammarFile + ": no tosca_definitions_version specified"); continue; } @@ -1593,8 +1597,8 @@ available and the available targets won't be re-processed. //topology_template_definition and sub-rules /* */ - @Checks(path="/topology_template") - protected void check_topology_template( + @Catalogs(path="/topology_template") + protected void catalog_topology_template( Map<String,Map> theDef, final CheckContext theContext) { theContext.enter("topology_template"); @@ -1602,22 +1606,32 @@ available and the available targets won't be re-processed. try { theDef.entrySet().stream() .forEach(e -> catalogs(e.getKey(), e.getValue(), theContext)); + } + finally { + theContext.exit(); + } + } + + /** */ + @Checks(path="/topology_template") + protected void check_topology_template( + Map<String,Map> theDef, final CheckContext theContext) { + + theContext.enter("topology_template"); + + try { + // theDef.entrySet().stream() + // .forEach(e -> catalogs(e.getKey(), e.getValue(), theContext)); theDef.entrySet().stream() .forEach(e -> checks(e.getKey(), e.getValue(), theContext)); -/* - for (Iterator<Map.Entry<String,Object>> ri = theDef.entrySet().iterator(); - ri.hasNext(); ) { - Map.Entry<String,Object> e = ri.next(); - checks(e.getKey(), e.getValue(), theContext); - } -*/ } finally { theContext.exit(); } } + /* * Once the syntax of the imports section is validated parse/validate/catalog * all the imported template information */ @@ -1806,7 +1820,7 @@ available and the available targets won't be re-processed. } } - @Checks(path="topology_template/outputs") + @Checks(path="/topology_template/outputs") protected void check_outputs(Map<String, Map> theOutputs, CheckContext theContext) { theContext.enter("outputs"); @@ -1834,7 +1848,12 @@ available and the available targets won't be re-processed. !checkDefinition(theName, theDef, theContext)) { return; } - //check the expression + + //check value + Object value = theDef.get("value"); + if (value != null) { + checkDataValuation(value, theDef, theContext); + } } finally { theContext.exit(); @@ -2802,7 +2821,7 @@ available and the available targets won't be re-processed. return true; } defs = Maps.newHashMap(defs); // - + boolean res = true; if (theSpecType == null) { theSpecType = (String)theSpec.get("type"); @@ -2819,8 +2838,6 @@ available and the available targets won't be re-processed. while (i.hasNext() && !defs.isEmpty()) { Map.Entry<String,Map> type = i.next(); -//System.out.println(" **** type : " + type.getKey() ); - Map<String, Map> typeDefs = (Map<String,Map>)type.getValue() .get(theFacet.name()); if (null == typeDefs) { @@ -2828,7 +2845,7 @@ available and the available targets won't be re-processed. } MapDifference<String, Map> diff = Maps.difference(defs, typeDefs); - + //this are the ones this type and the spec have in common (same key, //different values) Map<String, MapDifference.ValueDifference<Map>> facetDefs = @@ -3444,7 +3461,7 @@ System.out.println(" **** unassigned -> " + unassignedEntry.getKey() + " : " + u * @return true if any handler returned true (if they returned something at all), false otherwise (even when no * handlers were found) */ - protected boolean handles(String theHandlerKey, Object... theArgs) { + protected boolean handles(String theHandlerKey, Object... theArgs) { boolean handled = false; Map<Method, Object> entries = handlers.row(theHandlerKey); @@ -3455,7 +3472,7 @@ System.out.println(" **** unassigned -> " + unassignedEntry.getKey() + " : " + u res = entry.getKey().invoke(entry.getValue(), theArgs); } catch (Exception x) { - log.log(Level.WARNING, theHandlerKey + " by " + entry.getKey() + " failed", x); + log.log(Level.WARNING, theHandlerKey + " by " + entry.getKey() + " failed", x); } handled |= res == null ? false : (res instanceof Boolean && ((Boolean)res).booleanValue()); } @@ -3630,11 +3647,12 @@ System.out.println(" **** unassigned -> " + unassignedEntry.getKey() + " : " + u public static class CheckerConfiguration { - private boolean allowAugmentation = true; - private String defaultImportsPath = null; - private String defaultCheckerRoots = null; + private boolean allowAugmentation = true; + private String defaultImportsPath = null; + private List<String> grammars = new LinkedList<String>(); protected CheckerConfiguration() { + withGrammars(Checker.grammarFiles); } public CheckerConfiguration allowAugmentation(boolean doAllow) { @@ -3646,7 +3664,7 @@ System.out.println(" **** unassigned -> " + unassignedEntry.getKey() + " : " + u return this.allowAugmentation; } - public CheckerConfiguration defaultImportsPath(String thePath) { + public CheckerConfiguration withDefaultImportsPath(String thePath) { this.defaultImportsPath = thePath; return this; } @@ -3655,6 +3673,16 @@ System.out.println(" **** unassigned -> " + unassignedEntry.getKey() + " : " + u return this.defaultImportsPath; } + public CheckerConfiguration withGrammars(String... theGrammars) { + for (String grammar: theGrammars) { + this.grammars.add(grammar); + } + return this; + } + + public String[] grammars() { + return this.grammars.toArray(new String[0]); + } } } diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java index fc29dcf..2a75cfd 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/Data.java @@ -79,6 +79,8 @@ public class Data { public String name(); + public boolean isScalar(); + public Evaluator evaluator(); public Evaluator constraintsEvaluator(); @@ -92,6 +94,10 @@ public class Data { return null; } + public boolean isScalar() { + return false; + } + public Evaluator evaluator() { return Data::evalUser; } @@ -99,56 +105,65 @@ public class Data { public Evaluator constraintsEvaluator() { return Data::evalUserConstraints; } + + public String toString() { + return "UserType(scalar=false)"; + } }; public static enum CoreType implements Type { - String("string", + String("string", true, (expr,def,ctx) -> expr != null && expr instanceof String, Data::evalScalarConstraints), - Integer("integer", + Integer("integer", true, (expr,def,ctx) -> Data.valueOf(ctx, expr, Integer.class), Data::evalScalarConstraints), - Float("float", + Float("float", true, (expr,def,ctx) -> Data.valueOf(ctx, expr, Double.class, Integer.class), Data::evalScalarConstraints), - Boolean("boolean", + Boolean("boolean", true, (expr,def,ctx) -> Data.valueOf(ctx, expr, Boolean.class), Data::evalScalarConstraints), - Null("null", + Null("null", true, (expr,def,ctx) -> expr.equals("null"), null), - Timestamp("timestamp", + Timestamp("timestamp", true, (expr,def,ctx) -> timestampRegex.matcher(expr.toString()).matches(), null), - List("list", Data::evalList, Data::evalListConstraints), - Map("map", Data::evalMap, Data::evalMapConstraints), - Version("version", + List("list", false, Data::evalList, Data::evalListConstraints), + Map("map", false, Data::evalMap, Data::evalMapConstraints), + Version("version", true, (expr,def,ctx) -> versionRegex.matcher(expr.toString()).matches(), null), /* use a scanner and check that the upper bound is indeed greater than - * the lower bound */ - Range("range", + * the lower bound. Marked as a scalar because its evaluator does not record a context error */ + Range("range", true, (expr,def,ctx) -> { return rangeRegex.matcher(expr.toString()).matches();}, null ), - Size("scalar-unit.size", + Size("scalar-unit.size", true, (expr,def,ctx) -> sizeRegex.matcher(expr.toString()).matches(), null), - Time("scalar-unit.time", + Time("scalar-unit.time", true, (expr,def,ctx) -> timeRegex.matcher(expr.toString()).matches(), null), - Frequency("scalar-unit.frequency", + Frequency("scalar-unit.frequency", true, (expr,def,ctx) -> frequencyRegex.matcher(expr.toString()).matches(), null); private String toscaName; + private boolean isScalar; private Evaluator valueEvaluator, constraintsEvaluator; - private CoreType(String theName, Evaluator theValueEvaluator, Evaluator theConstraintsEvaluator) { + private CoreType(String theName, + boolean theIsScalar, + Evaluator theValueEvaluator, + Evaluator theConstraintsEvaluator) { this.toscaName = theName; + this.isScalar = theIsScalar; this.valueEvaluator = theValueEvaluator; this.constraintsEvaluator = theConstraintsEvaluator; @@ -162,6 +177,10 @@ public class Data { return this.toscaName; } + public boolean isScalar() { + return this.isScalar; + } + public Evaluator evaluator() { return this.valueEvaluator; } @@ -169,6 +188,7 @@ public class Data { public Evaluator constraintsEvaluator() { return this.constraintsEvaluator; } + } private static Pattern timestampRegex = null, @@ -274,15 +294,11 @@ public class Data { private static boolean evalCollection(Collection theVals, Map theDef, Checker.CheckContext theCtx) { - -//System.out.println("evalCollection: " + theDef + ", " + theVals); - Data.Type entryType = null; Map entryTypeDef = (Map)theDef.get("entry_schema"); if (null != entryTypeDef) entryType = typeByName((String)entryTypeDef.get("type")); -//System.out.println("evalCollection, entry definition: " + entryTypeDef); boolean res = true; for (Object val: theVals) { //check if the value is not a function call @@ -316,8 +332,6 @@ public class Data { private static boolean evalCollectionConstraints(Collection theVals, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalCollectionConstraints: " + theDef + ", " + theVals); - //should check overall constraints if (theVals == null) @@ -330,32 +344,28 @@ public class Data { String entryTypeName = (String)entryTypeDef.get("type"); Data.Type entryType = typeByName(entryTypeName); -//System.out.println("evalCollectionConstraints, entry definition: " + entryTypeDef); - boolean res = true; for (Object val: theVals) { Evaluator entryEvaluator = entryType.constraintsEvaluator(); if (entryEvaluator != null && !entryEvaluator.eval(val, entryTypeDef, theCtx)) { res= false; - //the constraints evaluator should have already added an error, but it also adds some context - //theCtx.addError("Value " + val + " failed evaluation", null); + if (entryType.isScalar()) { + theCtx.addError("Value " + val + " failed constraints evaluation", null); + } } } return res; } /* - * All required properties across the hierarchical defintion must be present - * TODO: The expr cannot contain any entry not specified in the type definition + * TODO: check that */ public static boolean evalUser(Object theVal, Map theDef, Checker.CheckContext theCtx) { -//System.out.println("evalUser: " + theDef + ", " + theVal); - boolean res = true; - Map val = (Map)theVal; + Map val = new HashMap((Map)theVal); //must be done with respect to the super-type(s) definition Iterator<Map.Entry> props = theCtx.catalog() .facets(Construct.Data, @@ -364,20 +374,25 @@ public class Data { while (props.hasNext()) { Map.Entry propEntry = props.next(); Map propDef = (Map)propEntry.getValue(); - Object propVal = val.get(propEntry.getKey()); - -//System.out.println("evalUser: " + propVal); + Object propVal = val.remove(propEntry.getKey()); if (propVal != null) { Data.Type propType = typeByName((String)propDef.get("type")); if (!propType.evaluator().eval(propVal, propDef, theCtx)) { res= false; - //the constraints evaluator should have already added an error - //theCtx.addError("Property " + propEntry.getKey() + " failed evaluation for " + propVal, null); + if (propType.isScalar()) { + theCtx.addError("Property " + propEntry.getKey() + " failed evaluation for " + propVal + " as " + propType.name(), null); + } } } } + + if (!val.isEmpty()) { + theCtx.addError("Entries " + val + " were not expected for type " + theDef.get("type"), null); + res = false; + } + return res; } @@ -528,11 +543,52 @@ public class Data { private static boolean evalConcat( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("concat: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() < 2) { + theCtx.addError("concat: requires a minimum of 2 arguments", null); + return false; + } + + //TODO: every argument must be or yield a String value + //cannot be done in full + return true; } private static boolean evalToken( Object theVal, Map theDef, Checker.CheckContext theCtx) { + + Map val = (Map)theVal; + Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); + + if (!(entry.getValue() instanceof List)) { + theCtx.addError("token: argument expression not a list", null); + return false; + } + + List args = (List)entry.getValue(); + if (args.size() != 3) { + theCtx.addError("token: requires 3 arguments", null); + return false; + } + + //the first 2 argument must be String expressions so require more elaborate estimation + //but the third one must be an integer + + if (!(args.get(2) instanceof Integer)) { + theCtx.addError("token: 3rd argument must be an integer (substring index), found " + args.get(2).getClass(),null); + return false; + } + return true; } @@ -542,7 +598,7 @@ public class Data { Map.Entry entry = (Map.Entry)val.entrySet().iterator().next(); if (!(entry.getValue() instanceof String)) { - theCtx.addError("get_input: argument must be a String" ,null); + theCtx.addError("get_input: argument must be a String", null); return false; } @@ -644,6 +700,8 @@ public class Data { return false; } + //follow all 'HSOTED_ON' relationships to find a host, if any .. + return true; } else { @@ -715,7 +773,6 @@ public class Data { { String facetName = (String)args.get(facetNameIndex); for (Facet facet: theFacets) { -//System.out.println("get_data: looking at " + facetConstruct + " " + facetConstructType + ", " + facet + " " + facetName); facetSpec = theCtx.catalog() .getFacetDefinition( facetConstruct, diff --git a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/annotations/Checks.java b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/annotations/Checks.java index 856ac1b..54e5685 100644 --- a/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/annotations/Checks.java +++ b/javatoscachecker/checker/src/main/java/org/onap/tosca/checker/annotations/Checks.java @@ -38,5 +38,6 @@ import java.lang.annotation.Target; */ public @interface Checks { String path() default "/"; - String[] version() default { "1.0", "1.0.0", "1.1", "1.1.0" }; + String[] version() default { "tosca_simple_yaml_1_0", "tosca_simple_yaml_1_0_0", + "tosca_simple_yaml_1_1", "tosca_simple_yaml_1_1_0" }; } diff --git a/javatoscachecker/checker/src/main/resources/tosca/tosca_simple_yaml_1_1.grammar b/javatoscachecker/checker/src/main/resources/tosca/tosca_simple_yaml_1_1.grammar index e199680..39b11d9 100644 --- a/javatoscachecker/checker/src/main/resources/tosca/tosca_simple_yaml_1_1.grammar +++ b/javatoscachecker/checker/src/main/resources/tosca/tosca_simple_yaml_1_1.grammar @@ -286,8 +286,6 @@ _property_definition: &property_definition # type: str # required: no -#see section A.5.8 -#_property_assignment_definition: &property_assignment_definition #see 3.5.10 _attribute_definition: &attribute_definition @@ -1407,7 +1405,7 @@ _topology_template_definition: &topology_template_definition type: map mapping: =: - *property_definition + *parameter_definition node_templates: desc: "definition of the node templates of the topology" name: node_templates @@ -1431,7 +1429,7 @@ _topology_template_definition: &topology_template_definition type: map mapping: =: - *attribute_assignment_definition + *parameter_definition groups: desc: "An optional list of Group definitions whose members are node templates defined within this same Topology Template" name: groups diff --git a/javatoscachecker/checker/src/test/java/org/onap/tosca/checker/test/CSAR.java b/javatoscachecker/checker/src/test/java/org/onap/tosca/checker/test/CSAR.java deleted file mode 100644 index aeeef20..0000000 --- a/javatoscachecker/checker/src/test/java/org/onap/tosca/checker/test/CSAR.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.onap.tosca.checker.test; - -import java.net.URI; - -import org.onap.tosca.checker.Checker; -import org.onap.tosca.checker.Target; -import org.onap.tosca.checker.Catalog; -import org.onap.tosca.checker.CSARRepository; - -public class CSAR { - - public static void main(String[] theArgs) { - - if (theArgs.length == 0) { - System.err.println("You need to specify a CSAR archive to process"); - return; - } - - try { - CSARRepository repo = new CSARRepository(theArgs[0], new URI(theArgs[0])); - Checker checker = new Checker(); - checker.setTargetLocator(repo.getTargetLocator()); - checker.check(repo.mainTarget()); - - Catalog cat = checker.catalog(); - for (Target t: cat.targets()) { - System.err.println(t.getLocation() + "\n" + cat.importString(t) + "\n" + t.getReport()); - } - } - catch (Exception x) { - x.printStackTrace(); - } - } - -} diff --git a/javatoscachecker/checker/src/test/tosca/dcae_uservice_tosca.yaml b/javatoscachecker/checker/src/test/tosca/dcae_uservice_tosca.yaml deleted file mode 100644 index 2c5c028..0000000 --- a/javatoscachecker/checker/src/test/tosca/dcae_uservice_tosca.yaml +++ /dev/null @@ -1,653 +0,0 @@ -# First attempt at microservice definitions in tosca-yaml. -# Ted Johnson, Dec. 2015 -## Ralph Knag, config additions , Feb. 2016 - -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -metadata: - template_version: 1.0.2 - - -data_types: -######################################################## -### data types related to schemas - - baseFieldDefinition: - description: base class for field definitions - properties: - name: - required: true - type: string - type: - required: true - type: string - constraints: - - valid_values: [ string, int, float, ipv4, ipv6, date, date_time, list, map, other] - format: - required: false - type: string - default_value: - required: false - type: string - comment: - required: false - type: string - constraints: - description: Properties that the field must satisfy - required: false - type: list - entry_schema: - type: string - constraints: - list_delimiter: - description: delimiter when list data packed into a string type. - required: false - type: string -# subtype can be used for policy override allowed? - subType: - required: false - type : string - constraints: - - valid_values: [ policyOveride, noPolicyOverride ] - - positionalFieldDefinition: - derived_from: baseFieldDefinition - description: fields with a fixed-position schema - properties: - position: - required: true - type: integer - constraints: - - greater_or_equal: 0 - - pathFieldDefinition: - derived_from: baseFieldDefinition - description: fields accessed via navigation - properties: - path: - required: true - type: string - - fieldDefinition: - derived_from: baseFieldDefinition - description: positional or path field - properties: - path: - required: false - type: string - position: - required: false - type: integer - constraints: - - greater_or_equal: 0 - comment: - required: false - type: string - length: - required: false - type: integer - constraints: - - greater_than: 0 - - fieldList: - description: fields in a schema - properties: - fieldList: - required: true - type: list - entry_schema: - type: fieldDefinition - - - -######################################################## -### data types related to data properties - - sortedBy: - description: sorting properties of a data set - properties: - fields: - required: true - type: list - entry_schema: - type: fieldDefinition - sorting: - required: true - type: string - default: fullySorted - constraints: - - valid_values: [ fullySorted, partiallySorted ] - lag: - description: maximum disorder in a partially sorted - required: false - type: integer - constraints: - - greater_or_equal: 0 - - keyFields: - description: key fields of a data set - properties: - fields: - required: true - type: list - entry_schema: - type: fieldDefinition - timestamp: - required: false - type: integer - -############################################################### -############################################################### - -node_types: - - dcaeCatalogNodes: - derived_from: tosca.nodes.Root - properties: - UUID: - required: true - type: string - name: - required: true - type: string - version: - required: true - type: string - constraints: - - pattern: \d+[.]\d+[.]\d+ - schemaVersion: - required: false - type: integer - default: 1 - - -######################################################## -### node types related to schemas - - - baseDataFormat: - description: base data format - derived_from: dcaeCatalogNodes - properties: - fieldList: - required: true - type: list - entry_schema: - type: fieldDefinition - formatType: - type: string - required: true - constraints: - - valid_values: [ fixed_format, variable_format, json ] - formatSubType: - required: true - type: string - fullList: - type: string - required: true - constraints: - - valid_values: [ yes, no ] - default: yes - capabilities: - dataProperties: - type: dcaeCatalog.capabilities.dataFormat - - baseVariableDataFormat: - derived_from: baseDataFormat - description: base class for fixed-position data formats - properties: - formatType: - type: string - required: true - constraints: - - equal: variable_format - - -# probably more needed here - not sure baseDataFormat is sufficient...rhk - jsonDataFormat: - derived_from: baseVariableDataFormat - description: JSON format - properties: - formatSubType: - required: true - type: string - default: json - constraints: - - equal: json - endOfRecord: - required: false - type: string - numFields: - required: false - type: integer - - baseFixedDataFormat: - derived_from: baseDataFormat - description: base class for fixed-position data formats - properties: - formatType: - type: string - required: true - constraints: - - equal: fixed_format - - delimitedAsciiDataFormat: - derived_from: baseFixedDataFormat - description: delimited ascii format - properties: - formatSubType: - required: true - type: string - default: delimitedAscii - constraints: - - equal: delimitedAscii - delimiter: - required: true - type: string - default: | - endOfRecord: - required: false - type: string - numFields: - required: false - type: integer - - fixedWidthAsciiDataFormat: - derived_from: baseFixedDataFormat - description: delimited ascii format - properties: - formatSubType: - required: true - type: string - default: fixedWidthAscii - constraints: - - equal: fixedWidthAscii - endOfRecord: - required: false - type: string - numFields: - required: false - type: integer - - fixedBinaryDataFormat: - derived_from: baseFixedDataFormat - description: binary data, e.g. thrift messages, protocol buffers - properties: - formatSubType: - required: true - type: string - default: fixedBinaryData - constraints: - - equal: fixedBinaryData - binaryFormat: - required: true - type: string - - -############################################### -### Node types related to data properties - - dataProperties: - description: Essential non-schema information about a data set - derived_from: dcaeCatalogNodes - properties: - sort: - required: false - type: sortedBy - keys: - required: false - type: keyFields - timestamp: - description: the field indicating the time when corresponding event occurred - required: false - type: string - duration: - description: the field indicating the length of the described measurement - required: false - type: string - period: - description: how often the data is generated. 0 means continuously. - required: true - type: integer - default: 0 - constraints: - - greater_or_equal: 0 - capabilities: - dataProperties: - type: dcaeCatalog.capabilities.dataProperties - - - keyedDataProperties: - derived_from: dataProperties - description: Data sets that are required to hav a key - properties: - keys: - required: true - type: keyFields - - referenceDataProperties: - derived_from: dataProperties - description: data set from external source that is joined against streaming data - properties: - updateType: - description: how the reference data is refreshed - snapshots, incremental, or both - required: true - type: string - - keyedReferenceDataProperties: - derived_from: referenceDataProperties - description: reference data that maps a key to a value, generally with a valid time interval - properties: - keys: - required: true - type: keyFields - startTimeField: - description: the time when the key --> value mapping became valid - required: false - type: string - endTimeField: - description: time when the key --> value mapping ceased to be valid - required: false - type: string - - -####################################################################### -#### Things which describe how a data source can be accessed - - - - dataDelivery: - description: the means of connecting to a data source. very incomplete. - derived_from: dcaeCatalogNodes - properties: - deliveryMechanism: - description: the general method by which data is delivered from a source. - required: true - type: string - constraints: - - valid_values: [stream, file, database, table ] - polling: - description: push vs. pull - required: true - type: string - constraints: - - valid_values: [ push, pull] - capabilities: - dataDelivery: - type: dcaeCatalog.capabilities.dataDelivery - - streamDataDelivery: - description: a data source that is a streaming source. - derived_from: dataDelivery - properties: - deliveryMechanism: - description: the general method by which data is delivered from a source. - required: true - type: string - constraints: - - equal: stream - polling: - description: push vs. pull - required: true - type: string - constraints: - - equal: push - - - genericCDAPDelivery: - description: a streaming data source delivered via the CDAP generic - derived_from: streamDataDelivery - - - -# A UEB stream is kafka plus security TBD - dmaapMessageDelivery: - description: a streaming data source delivered via a kafka queue - derived_from: streamDataDelivery - properties: - servers: - description: the servers to contact to access the kafka queue. - required: true - type: list - entry_schema: - type: string - constraints: - topic: - description: the stream identifier (topic in kafka terminology) - required: true - type: string - numPartitions: - description: the number of partitions for the kafka topic - required: false - default: 1 - type: integer - PartitioningMethod: - description: the mechanism that assigns records to partitions - required: false - type: string - partitionSubscriptions: - description: if specified, the set of partitions that contain a particular substream - required: false - type: list - entry_schema: - type: integer - - - dmaapDataRouterDelivery: - description: a data source that is delivered via files. - derived_from: dataDelivery - properties: - deliveryMechanism: - description: the general method by which data is delivered from a source. - required: true - type: string - constraints: - - valid_values: [file] - fileName: - description: a name (or naming scheme) of the file - required: true - type: string - - fileDataDelivery: - description: a data source that is delivered via files. - derived_from: dataDelivery - properties: - deliveryMechanism: - description: the general method by which data is delivered from a source. - required: true - type: string - constraints: - - valid_values: [file] - fileName: - description: a name (or naming scheme) of the file - required: true - type: string - - pulledFileDelivery: - description: a data source that is delivered via files pulled from an external source - derived_from: fileDataDelivery - properties: - uri: - description: the thing to access to get a new file - required: true - type: string - trigger: - description: a description of the thing that triggers pulling a new file. - required: true - type: string - - - -#################################### -### Description of a data source (data output) - - dataSource: - description: a generic data source description, link to schema, properties, delivery - derived_from: dcaeCatalogNodes -# properties: - requirements: - - dataFormat: - capability: dcaeCatalog.capabilities.dataFormat - - dataDelivery: - capability: dcaeCatalog.capabilities.dataDelivery - - dataProperties: - capability: dcaeCatalog.capabilities.dataProperties - capabilities: - dataSource: - type: dcaeCatalog.capabilities.dataSource - occurrences: [0, UNBOUNDED] - -########################## -### Description of a data requirement (data input) - dataRequirement: - description: a generic data source description, link to schema, properties, delivery - derived_from: dcaeCatalogNodes -# properties: - requirements: - - dataFormat: - capability: dcaeCatalog.capabilities.dataFormat - occurrences: [1, UNBOUNDED] - - dataProperties: - capability: dcaeCatalog.capabilities.dataProperties - - dataDelivery: - capability: dcaeCatalog.capabilities.dataDelivery - capabilities: - dataRequirement: - type: dcaeCatalog.capabilities.dataRequirement - occurrences: [0, UNBOUNDED] - - - - - -#################################### -### Description of a processingModuleParameters (module parameters excluding input/output descriptions -### allows any baseDataFormat derived input - processingModuleParameters: - description: - derived_from: baseDataFormat - properties: - dataType: - required: true - type: string - capabilities: - moduleParameters: - type: dcaeCatalog.capabilities.processingModuleParameters - - -################################ -### Module Dependencies - - instantiationDependency: - description: code dependencies (possible transitive) - derived_from: dcaeCatalogNodes - properties: - dependencyType: - required: false - type: string - constraints: - - valid_values: [R, Python, CDAP] - dependencyValue: - required: true - type: string - capabilities: - dataProperties: - type: dcaeCatalog.capabilities.instantiationDependency - occurrences: [0, UNBOUNDED] - requirements: - - dependencies: - capability: dcaeCatalog.capabilities.instantiationDependency - occurrences: [0, UNBOUNDED] - -#################################### -### Description of a processingModuleDeployment - deployment attributes - - processingModuleDeployment: - description: deployment attributes - derived_from: dcaeCatalogNodes - properties: - language: - required: true - type: string - version: - type: string - required: true - deploymentType: - required: true - type: string - capabilities: - moduleDeployment: - type: dcaeCatalog.capabilities.processingModuleDeployment - occurrences: [0, UNBOUNDED] - requirements: - - dependencies: - capability: dcaeCatalog.capabilities.instantiationDependency - occurrences: [0, UNBOUNDED] - -#################################### -### Description of a processingModuleMetaData - search tags - - processingModuleMetadata: - description: metadata tags - derived_from: dcaeCatalogNodes - properties: - metaDataList: - required: true - type: list - entry_schema: - type: string - constraints: - capabilities: - metadata: - type: dcaeCatalog.capabilities.processingModuleMetadata - occurrences: [0, UNBOUNDED] - - -#################################### -### Description of a processingModule - - processingModule: - description: full processing module description - derived_from: dcaeCatalogNodes - properties: - moduleDescription: - required: true - type: string - requirements: - - processingModuleparameters: - capability: dcaeCatalog.capabilities.processingModuleParameters - occurrences: [0, UNBOUNDED] - - processingModuleDeployment: - capability: dcaeCatalog.capabilities.processingModuleDeployment - occurrences: [1, UNBOUNDED] - - processingModuleMetadata: - capability: dcaeCatalog.capabilities.processingModuleMetadata - occurrences: [1, UNBOUNDED] - - dataRequirementsList: - capability: dcaeCatalog.capabilities.dataRequirement - occurrences: [1, UNBOUNDED] - - dataSourcesList: - capability: dcaeCatalog.capabilities.dataSource - occurrences: [1, UNBOUNDED] - -capability_types: - dcaeCatalog.capabilities.dataFormat: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.dataProperties: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.dataDelivery: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.instantiationDependency: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.processingModuleMetadata: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.processingModuleParameters: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.processingModuleDeployment: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.dataRequirement: - derived_from: tosca.capabilities.Root - dcaeCatalog.capabilities.dataSource: - derived_from: tosca.capabilities.Root - - diff --git a/javatoscachecker/checker/src/test/tosca/mini_ceil_tosca.yaml b/javatoscachecker/checker/src/test/tosca/mini_ceil_tosca.yaml deleted file mode 100644 index 9879746..0000000 --- a/javatoscachecker/checker/src/test/tosca/mini_ceil_tosca.yaml +++ /dev/null @@ -1,108 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_0_0 - -imports: - - dcae_uservice_tosca.yaml - -topology_template: - - node_templates: - - HostComputeStats_Ceilometer: - type: delimitedAsciiDataFormat - properties: - name: HostComputeStats_Ceilometer - UUID: HostComputeStats_Ceilometer - version: 1.0.0 - delimiter: "|" - fieldList: - - - name: DATETIME_FTP_COLLECTION - type: date_time -# subType: 1.0 - subType: "yyyymmddhhmmss" - - - name: DATETIME_OSS - type: date_time - subType: "yyyymmddhhmmss" - - - name: DATETIMEUTC - type: date_time - subType: "yyyymmddhhmmss" - - - name: DATETIMEZONE - type: date_time - subType: "yyyymmddhhmmss zzz" - - - name: EMS_NAME - type: string - comment: "Element Manager System Name?" - - - name: NE_VERSION - type: string - comment: "Network Element Version????" - - - name: PERIOD - type: int - comment: "Sample period in seconds" - - - name: SUSPECTFLAG - type: string - comment: "Data suspect? Null means ok?" - - - name: SERVICE - type: string - - - name: resourceid - type: string - - - name: hardware.cpu.load.1min - type: float - comment: "CPU load in in the last one minute" - - - name: hardware.cpu.load.5min - type: float - comment: "CPU load in in the last five minutes" - - - name: hardware.cpu.load.15min - type: float - comment: "CPU load in in the last fifteen minutes" - - - name: hardware.cpu.memory.total - type: float - comment: "Total memory size in KB" - - - name: hardware.cpu.memory.avail - type: float - comment: "Memory available in KB" - - - name: hardware.cpu.swap.total - type: float - comment: "Total swap size in KB" - - - name: hardware.cpu.swap.avail - type: float - comment: "Swap available in KB" - - - name: hardware.network.ip.incoming.datagrams - type: float - comment: "Cumulative incoming datagrams" - - - name: hardware.network.ip.outgoing.datagrams - type: float - comment: "Cumulative outgoing datagrams" - - - name: hardware.network.ip.incoming.blocks - type: float - comment: "Cumulative incoming blocks" - - - name: hardware.network.ip.outgoing.blocks - type: float - comment: "Cumulative outgoing blocks" - - - name: hardware.system_states.cpu.idle - type: float - comment: "CPU Percent idle" - formatType: fixed_format - formatSubType: delimitedAscii - fullList: true - numFields: 22 diff --git a/javatoscachecker/checker/src/test/tosca/ucpe_schema.yml b/javatoscachecker/checker/src/test/tosca/ucpe_schema.yml deleted file mode 100644 index 5c5ac5a..0000000 --- a/javatoscachecker/checker/src/test/tosca/ucpe_schema.yml +++ /dev/null @@ -1,403 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_0_0 -description: CCD uCPE specific data types - -metadata: - template_name: uCPE_schema - template_version: "0.1" - -imports: - - tosca/tosca-network-types.yaml - -data_types: - - routing-rule: - properties: - logical-interface-name: - type: string - ip-version: - type: string - mtu: - type: integer - is-unnumbered: - type: boolean - unnumbered-local-address: - type: string - unnumbered-remote-address: - type: string - cos-model: - type: string - pe-shaping: - type: string - bgp-v4-neighbor-address: - type: string - bgp-v4-peer-as: - type: string - bgp-v4-md5-key: - type: string - bgp-v4-my-as: - type: string - bgp-v6-neighbor-address: - type: string - bgp-v6-peer-as: - type: string - bgp-v6-md5-key: - type: string - bgp-v6-my-as: - type: string - bgp-v4-keep-alive-timer: - type: string - bgp-v6-keep-alive-timer: - type: string - bgp-v4-hold-timer: - type: string - bgp-v6-hold-timer: - type: string - v4-isp-lan-ip-blocks: - type: list - entry_schema: string - v6-isp-lan-ip-blocks: - type: list - entry_schema: string - -node_types: - - com.att.d2.resource.ucpe.networkInterface: - derived_from: tosca.nodes.Root - properties: - service_port_name: - type: string - physical_port_name: - type: string - physical_speed: - type: integer - physical_speed_units: - type: string - default: "Gbps" - requirements: - - host: - capability: com.att.d2.capabilities.hostedOn -# node: com.att.d2.resource.uCPE - capabilities: - link: tosca.capabilities.network.Linkable - -#do not know to what degree we still need the two specalized versions below - com.att.d2.resource.ucpe.lan_networkInterface: - derived_from: com.att.d2.resource.ucpe.networkInterface - requirements: - - host: - capability: com.att.d2.capabilities.hostedOn - node: com.att.d2.resource.uCPE - - com.att.d2.resource.ucpe.wan_networkInterface: - derived_from: com.att.d2.resource.ucpe.networkInterface - properties: - internet_connection_type: - type: string - default: "AVPN" - constraints: - - valid_values: ["AVPN", "AVPNIVLAN", "3RDPARTYINTERNET", "MIS", "GMIS", "ASE", "ASEOD", "3RDPARTYETHERNET", "3RDPARTYMPLS", "HSIA-E"] - requirements: - - host: - capability: com.att.d2.capabilities.hostedOn - node: com.att.d2.resource.uCPE - - -#the participation of a network interface in a VLAN needs to carry a 'tag' attribute (tagged/untagged values) -#previously we attached this attribute to the Port -# com.att.d2.resource.ucpe.lan_port: -# properties: -# tag: -# type: string -# default: "tagged" -# constraints: -# - valid_values: [tagged, untagged] -# -# now it has to go in the relationship between the networkInterface and the VLAN, i.e. LinksTo -# - - com.att.d2.resource.ucpe.vlan: -# can't use as a base type anymore as it has a Linkable capability -# derived_from: tosca.nodes.network.Network - properties: - vlan_id: - type: string - requirements: - - link: - capability: tosca.capabilities.network.Linkable - node: com.att.d2.resource.ucpe.networkInterface - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - node: com.att.d2.resource.ucpe.VNF - relationship: tosca.relationships.network.BindsTo - - - #virtual network functions to be hosted by a uCPE - com.att.d2.resource.ucpe.VNF: - derived_from: tosca.nodes.Root - properties: - att-part-number: - type: string - constraints: - - max_length: 255 - - vendor-name: - type: string - constraints: - - max_length: 255 - vendor-part-number: - type: string - constraints: - - max_length: 255 - vendor-model: - type: string - constraints: - - max_length: 255 - vendor-model-description: - type: string - constraints: - - max_length: 255 - - vcpu-default: - type: integer - constraints: - - less_or_equal: 16 - vcpu-min: - type: integer - constraints: - - less_or_equal: 16 - vcpu-max: - type: integer - constraints: - - less_or_equal: 16 - - vmemory-default: - type: integer - vmemory-units: - type: string - default: "GB" - vmemory-min: - type: integer - constraints: - - less_or_equal: 16 - vmemory-max: - type: integer - constraints: - - less_or_equal: 16 - - vdisk-default: - type: integer - vdisk-units: - type: string - default: "GB" - vdisk-min: - type: integer - constraints: - - less_or_equal: 16 - vdisk-max: - type: integer - constraints: - - less_or_equal: 128 - -#what is this guy?? - vnf-type: - type: string - - software-version: - type: version - software-version-state: - type: integer - software-file-name: - type: string - constraints: - - max_length: 255 - - vnf-feature: - type: list - entry_schema: string - - vnf-instance-id: - type: string - constraints: - - max_length: 255 - - management-option: - type: string - default: ATT - constraints: - - valid_values: ["CUSTOMER", "ATT"] - - requirements: - - host: - capability: com.att.d2.capabilities.hostedOn - - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: [1,UNBOUNDED] - - - com.att.d2.resource.uCPE: # base node type for uCPE - derived_from: tosca.nodes.Root - properties: - att-part-number: - type: string - vendor-name: - type: string - required: true - vendor-model: - type: string - required: true - - total-vcpu: - type: integer - description: number of vCPUs - total-memory: - type: integer - description: GB - total-disk: - type: integer - description: GB - - base-system-image-file-name: - type: string - linux-host-vendor: - type: string - linux-host-os-version: - type: version - base-system-software: - type: string - jdm-vcpu: - type: integer - jdm-memory: - type: integer - description: GB - jdm-disk: - type: integer - description: GB - jdm-version: - type: string - jcp-vcpu: - type: integer - jcp-memory: - type: integer - description: GB - jcp-disk: - type: integer - description: GB - jcp-version: - type: version - - capabilities: - vnf_hosting: - type: com.att.d2.capabilities.hostedOn - valid_source_types: [com.att.d2.resource.ucpe.VNF] - description: Provides hosting capability for VNFs - WAN_connectivity: - type: com.att.d2.capabilities.hostedOn - valid_source_types: [com.att.d2.resource.ucpe.wan_networkInterface] - description: external WAN1 n/w interface - occurrences: [1,2] - LAN_connectivity: - type: com.att.d2.capabilities.hostedOn - valid_source_types: [com.att.d2.resource.ucpe.lan_networkInterface] - description: external LAN n/w interface - occurrences: [1,8] - -# specific VNFs - - com.att.d2.resource.vRouter: - derived_from: com.att.d2.resource.ucpe.VNF - properties: - management-v6-address: - type: string - nm-lan-v6-address: - type: string - nm-lan-v6-prefix-length: - type: string - management-v4-address: - type: string - nm-lan-v4-address: - type: string - nm-lan-v4-prefix-length: - type: string - - routing-instance-name: - type: string - routing-instances: - type: map - entry_schema: - type: routing-rule - - com.att.d2.resource.vWANx: - derived_from: com.att.d2.resource.ucpe.VNF - properties: -# att-part-number: -# type: string -# default: "VCX-SUB-00255-U" - vendor-name: - type: string - default: "VendorX" - vendor-model: - type: string - default: "WANx-VM00" - - vcpu-default: - type: integer - default: 1 - vcpu-min: - type: integer - default: 1 - vcpu-max: - type: integer - default: 1 - - vmemory-default: - type: integer - default: 1 - vmemory-min: - type: integer - default: 1 - vmemory-max: - type: integer - default: 1 - - vdisk-default: - type: integer - default: 20 - vdisk-min: - type: integer - default: 2 - vdisk-max: - type: integer - default: 20 - - vnf-type: - type: string - default: "Advanced WANx" - software-version: - description: "The WANx software version. The value must match the AT&T part number." - type: version - default: 9.2.0 - - software-file-name: - type: string - default: "vnfImageFilename" - - vnf-instance-id: - type: string - description: "The WANx hostname." - - com.att.d2.resource.vFW: - derived_from: com.att.d2.resource.ucpe.VNF - - - -############################ -# Customized capability types definitions -############################ -capability_types: - - com.att.d2.capabilities.hostedOn: - derived_from: tosca.capabilities.Root - diff --git a/javatoscachecker/checker/src/test/tosca/workflow_1.yaml b/javatoscachecker/checker/src/test/tosca/workflow_1.yaml deleted file mode 100644 index fda6a27..0000000 --- a/javatoscachecker/checker/src/test/tosca/workflow_1.yaml +++ /dev/null @@ -1,46 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1_0 - -imports: - - example: tosca/tosca-examples-types.yaml - -topology_template: - - inputs: - software_version: - type: version - default: 0.1 - management_option: - type: string - default: ATT - constraints: - - valid_values: [ ATT, CUSTOMER ] - - node_templates: - my_server: - type: tosca.nodes.Compute - mysql: - type: tosca.nodes.DBMS.MySQL - requirements: - - host: my_server - interfaces: - tosca.interfaces.nodes.custom.Backup: -# operations: - backup: backup.sh - workflows: - backup: - description: Performs a snapshot of the MySQL data. - preconditions: - - target: my_server - condition: - - assert: - - state: [{equal: available}] - - target: mysql - condition: - - assert: - - state: [{valid_values: [started, available]}] - - my_attribute: [{equal: ready }] - steps: - my_step: - target: mysql - activities: - - call_operation: tosca.interfaces.nodes.custom.Backup.backup |