diff options
Diffstat (limited to 'src')
91 files changed, 6585 insertions, 5134 deletions
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy new file mode 100644 index 0000000..2162213 --- /dev/null +++ b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy @@ -0,0 +1,31 @@ +/*-
+ * ============LICENSE_START======================================================= + * MODEL LOADER SERVICE + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END=========================================================
+ */
+
+beans{
+ xmlns cxf: "http://camel.apache.org/schema/cxf"
+ xmlns jaxrs: "http://cxf.apache.org/jaxrs"
+ xmlns util: "http://www.springframework.org/schema/util"
+
+ modelLoader(org.openecomp.modelloader.service.ModelLoaderService)
+
+ util.list(id: 'modelLoaderServices') {
+ ref(bean:'modelLoader')
+ }
+}
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt new file mode 100644 index 0000000..508361d --- /dev/null +++ b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt @@ -0,0 +1,21 @@ +/*-
+ * ============LICENSE_START======================================================= + * MODEL LOADER SERVICE + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END=========================================================
+ */
+
+Place any docs here that you want to access within the ajsc upon deployment of your service.
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt new file mode 100644 index 0000000..f80be9b --- /dev/null +++ b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt @@ -0,0 +1,21 @@ +/*-
+ * ============LICENSE_START======================================================= + * MODEL LOADER SERVICE + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. 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. + * ============LICENSE_END=========================================================
+ */
+
+3rd party JAR's needed by your jars (if any) for a ajsc deployment package go here...
diff --git a/src/main/docker/startup.sh b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props index c4a4d5f..aab4afa 100644 --- a/src/main/docker/startup.sh +++ b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props @@ -1,27 +1,21 @@ -### +###
# ============LICENSE_START======================================================= # MODEL LOADER SERVICE # ================================================================================ # Copyright (C) 2017 AT&T Intellectual Property. 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 +# 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. -# ============LICENSE_END========================================================= -### - -BIN_DIR=`dirname $0` - -echo "Checking environment for configuration options" -$BIN_DIR/update_config.sh - -echo "Starting up model loader..." -$BIN_DIR/jetty.sh run > /dev/null 2>&1 +# ============LICENSE_END=========================================================
+###
+
+EXAMPLE.PROPERTY=EXAMLE_VALUE
diff --git a/src/test/resources/models/vnf-model.xml b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route index 2dd44b5..170c466 100644 --- a/src/test/resources/models/vnf-model.xml +++ b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route @@ -1,27 +1,24 @@ -<!-- +<!--
============LICENSE_START======================================================= MODEL LOADER SERVICE ================================================================================ Copyright (C) 2017 AT&T Intellectual Property. 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 + 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. - ============LICENSE_END========================================================= - --> - -<model xmlns="http://org.openecomp.aai.inventory/v8"> - <model-id>model-id</model-id> - <model-type>widget</model-type> - <model-name>generic-vnf</model-name> - <model-version>v1.0</model-version> - <model-name-version-id>model-vid</model-name-version-id> -</model> + ============LICENSE_END=========================================================
+ -->
+
+<route xmlns="http://camel.apache.org/schema/spring" trace="true">
+ <from uri="att-dme2-servlet:///__module_ajsc_namespace_name__/__module_ajsc_namespace_version__/model-service?matchOnUriPrefix=true" />
+ <to uri="cxfbean:modelLoaderServices" />
+</route>
diff --git a/src/main/assemble/ajsc_module_assembly.xml b/src/main/assemble/ajsc_module_assembly.xml new file mode 100644 index 0000000..520870f --- /dev/null +++ b/src/main/assemble/ajsc_module_assembly.xml @@ -0,0 +1,86 @@ +<!--
+ ============LICENSE_START======================================================= + MODEL LOADER SERVICE + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. 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. + ============LICENSE_END=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>${version}</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/routes/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/routes/</outputDirectory>
+ <includes>
+ <include>*.route</include>
+ </includes>
+
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/docs/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/docs/</outputDirectory>
+ <includes>
+ <include>*.*</include>
+ <!-- <include>*.vm</include> -->
+ </includes>
+
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/lib/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/extJars/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/extJars/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </fileSet>
+
+ <!-- also try to grab outputs from the "jar" plugin's package phase -->
+ <fileSet>
+ <directory>${project.basedir}/target/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/conf/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/conf/</outputDirectory>
+ <includes>
+ <include>*.*</include>
+ </includes>
+
+ </fileSet>
+ </fileSets>
+
+</assembly>
+
diff --git a/src/main/webapp/WEB-INF/rest-servlet.xml b/src/main/assemble/ajsc_props_assembly.xml index 6a23c2b..e26497b 100644 --- a/src/main/webapp/WEB-INF/rest-servlet.xml +++ b/src/main/assemble/ajsc_props_assembly.xml @@ -1,32 +1,43 @@ -<!-- +<!--
============LICENSE_START======================================================= MODEL LOADER SERVICE ================================================================================ Copyright (C) 2017 AT&T Intellectual Property. 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 + 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. - ============LICENSE_END========================================================= - --> - -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:context="http://www.springframework.org/schema/context" - xmlns:mvc="http://www.springframework.org/schema/mvc" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd - http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> - - <bean id="modelLoader" class="org.openecomp.modelloader.service.ModelLoaderService" init-method="start"/> - - -</beans> + ============LICENSE_END=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>${version}_properties</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/props</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/props/</outputDirectory>
+ <includes>
+ <include>*.props</include>
+ </includes>
+
+ </fileSet>
+
+ </fileSets>
+
+</assembly>
+
diff --git a/src/main/assemble/ajsc_runtime_assembly.xml b/src/main/assemble/ajsc_runtime_assembly.xml new file mode 100644 index 0000000..c5c515a --- /dev/null +++ b/src/main/assemble/ajsc_runtime_assembly.xml @@ -0,0 +1,64 @@ +<!--
+ ============LICENSE_START======================================================= + MODEL LOADER SERVICE + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. 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. + ============LICENSE_END=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>runtimeEnvironment</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/context/</directory>
+ <outputDirectory>runtime/context/</outputDirectory>
+ <includes>
+ <include>*.context</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/serviceProperties/</directory>
+ <outputDirectory>runtime/serviceProperties/</outputDirectory>
+ <includes>
+ <include>*.props</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroRole</directory>
+ <outputDirectory>runtime/shiroRole/</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroUser</directory>
+ <outputDirectory>runtime/shiroUser/</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroUserRole</directory>
+ <outputDirectory>runtime/shiroUserRole</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/src/main/bin/start.sh b/src/main/bin/start.sh new file mode 100644 index 0000000..cb1e9a9 --- /dev/null +++ b/src/main/bin/start.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +BASEDIR="/opt/app/model-loader/" +AJSC_HOME="$BASEDIR" + +if [ -z "$CONFIG_HOME" ]; then + echo "CONFIG_HOME must be set in order to start up process" + exit 1 +fi + +CLASSPATH="$AJSC_HOME/lib/*" +CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/" +CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/" +PROPS="-DAJSC_HOME=$AJSC_HOME" +PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/" +PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml" +PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME" +PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader" +PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1" +PROPS="$PROPS -Dserver.port=8080" +PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME" +JVM_MAX_HEAP=${MAX_HEAP:-1024} + +echo $CLASSPATH + +exec java -Xmx${JVM_MAX_HEAP}m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081 diff --git a/src/main/config/ajsc-chef.jks b/src/main/config/ajsc-chef.jks Binary files differnew file mode 100644 index 0000000..aeca770 --- /dev/null +++ b/src/main/config/ajsc-chef.jks diff --git a/src/main/config/ajsc-jetty.xml b/src/main/config/ajsc-jetty.xml new file mode 100644 index 0000000..43741bd --- /dev/null +++ b/src/main/config/ajsc-jetty.xml @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START======================================================= + MODEL LOADER SERVICE + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. 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. + ============LICENSE_END=========================================================
+ -->
+
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+<Configure id="ajsc-server" class="org.eclipse.jetty.server.Server">
+ <!-- DO NOT REMOVE!!!! This is setting up the AJSC Context -->
+ <New id="ajscContext" class="org.eclipse.jetty.webapp.WebAppContext">
+ <Set name="contextPath"><SystemProperty name="AJSC_CONTEXT_PATH" /></Set>
+ <Set name="extractWAR">true</Set>
+ <Set name="tempDirectory"><SystemProperty name="AJSC_TEMP_DIR" /></Set>
+ <Set name="war"><SystemProperty name="AJSC_WAR_PATH" /></Set>
+ <Set name="descriptor"><SystemProperty name="AJSC_HOME" />/etc/runner-web.xml</Set>
+ <Set name="overrideDescriptor"><SystemProperty name="AJSC_HOME" />/etc/ajsc-override-web.xml</Set>
+ <Set name="throwUnavailableOnStartupException">true</Set>
+ <Set name="servletHandler">
+ <New class="org.eclipse.jetty.servlet.ServletHandler">
+ <Set name="startWithUnavailable">false</Set>
+ </New>
+ </Set>
+ <Set name="extraClasspath"><SystemProperty name="AJSC_HOME" />/extJars/httpclient-4.5.jar,<SystemProperty name="AJSC_HOME" />/extJars/httpcore-4.4.1.jar,<SystemProperty name="AJSC_HOME" />/extJars/json-20131018.jar</Set>
+ </New>
+
+ <Set name="handler">
+ <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
+ <Set name="Handlers">
+ <Array type="org.eclipse.jetty.webapp.WebAppContext">
+ <Item>
+ <Ref refid="ajscContext" />
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+
+ <Call name="addBean">
+ <Arg>
+ <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+ <Set name="contexts">
+ <Ref refid="Contexts" />
+ </Set>
+ <Call id="extAppHotDeployProvider" name="addAppProvider">
+ <Arg>
+ <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+ <Set name="monitoredDirName"><SystemProperty name="AJSC_HOME" />/extApps</Set>
+ <Set name="scanInterval">10</Set>
+ <Set name="extractWars">true</Set>
+ </New>
+ </Arg>
+ </Call>
+ </New>
+ </Arg>
+ </Call>
+
+ <Call name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server">
+ <Ref refid="ajsc-server" />
+ </Arg>
+ <Set name="port"><SystemProperty name="AJSC_HTTP_PORT" default="80" /></Set>
+ </New>
+ </Arg>
+ </Call>
+
+ <Get name="ThreadPool">
+ <Set name="minThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MIN" /></Set>
+ <Set name="maxThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MAX" /></Set>
+ <Set name="idleTimeout"><SystemProperty name="AJSC_JETTY_IDLETIME_MAX" /></Set>
+ <Set name="detailedDump">false</Set>
+ </Get>
+
+</Configure>
diff --git a/src/main/config/ajsc-override-web.xml b/src/main/config/ajsc-override-web.xml new file mode 100644 index 0000000..b0d44f3 --- /dev/null +++ b/src/main/config/ajsc-override-web.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ============LICENSE_START======================================================= + MODEL LOADER SERVICE + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. 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. + ============LICENSE_END=========================================================
+ -->
+
+<!--
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ metadata-complete="false" version="3.0">
+
+ <filter-mapping>
+ <filter-name>InterceptorFilter</filter-name>
+ <url-pattern>/services/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>InterceptorFilter</filter-name>
+ <url-pattern>/rest/*</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
+ <filter-name>springSecurityFilterChain</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <servlet-mapping>
+ <servlet-name>ManagementServlet</servlet-name>
+ <url-pattern>/mgmt</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>RestletServlet</servlet-name>
+ <url-pattern>/rest/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>CamelServlet</servlet-name>
+ <url-pattern>/services/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>jsp</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ <url-pattern>*.jspf</url-pattern>
+ <url-pattern>*.jspx</url-pattern>
+ <url-pattern>*.xsp</url-pattern>
+ <url-pattern>*.JSP</url-pattern>
+ <url-pattern>*.JSPF</url-pattern>
+ <url-pattern>*.JSPX</url-pattern>
+ <url-pattern>*.XSP</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/src/main/config/ajscJetty.jks b/src/main/config/ajscJetty.jks Binary files differnew file mode 100644 index 0000000..48cdbff --- /dev/null +++ b/src/main/config/ajscJetty.jks diff --git a/src/main/config/cadi.properties b/src/main/config/cadi.properties new file mode 100644 index 0000000..c3b8b14 --- /dev/null +++ b/src/main/config/cadi.properties @@ -0,0 +1,56 @@ +###
+# ============LICENSE_START======================================================= +# MODEL LOADER SERVICE +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. 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. +# ============LICENSE_END=========================================================
+###
+
+#This properties file is used for defining AAF properties related to the CADI framework. This file is used for running AAF framework
+
+#In order to test functionality of cadi-ajsc-plugin locally cross domain cookie. Cadi "should" find your hostname for you.
+#However, we have seen some situations where this fails. A Local testing
+#modification can include modifying your hosts file so that you can use "mywebserver.att.com" for your localhost in order
+#to test/verify GLO functionality locally. If you are on a Windows machine, you will already have a machine name associated with
+#it that will utilize an AT&T domain such as "sbc.com". You may need to add your domain to this as a comma separated list depending
+#upon your particular machine domain. This property is commented out as cadi SHOULD find your machine name. With version 1.2.1 of cadi,
+#it appears to resolve Mac machine names as well, now. But, this can be somewhat inconsistent depending on your specific working envrironment.
+hostname=mywebserver.att.com
+
+#Setting csp_domain to PROD will allow for testing using your attuid and password through GLO.
+csp_domain=PROD
+csp_devl_localhost=true
+
+basic_realm=csp.att.com
+#basic_realm=aaf.att.com
+basic_warn=TRUE
+
+cadi_loglevel=WARN
+cadi_keyfile=target/swm/package/nix/dist_files/appl/model-loader/etc/keyfile
+
+# Configure AAF
+#These are dummy values add appropriate values required
+aaf_url=url
+
+#AJSC - MECHID
+#These are dummy values add appropriate values required
+aaf_id=dummyid@ajsc.att.com
+aaf_password=enc:277edqJCjT0RlUI3BtbDQa-3Ha-CQGd
+aaf_timeout=5000
+aaf_clean_interval=30000
+aaf_user_expires=5000
+aaf_high_count=1000
+
+
diff --git a/src/main/resources/model-loader.properties b/src/main/config/jul-redirect.properties index 7b8f63d..b94397e 100644 --- a/src/main/resources/model-loader.properties +++ b/src/main/config/jul-redirect.properties @@ -1,43 +1,32 @@ -### +###
# ============LICENSE_START======================================================= # MODEL LOADER SERVICE # ================================================================================ # Copyright (C) 2017 AT&T Intellectual Property. 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 +# 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. -# ============LICENSE_END========================================================= -### - -# Model Loader Distribution Client Configuration -ml.distribution.ACTIVE_SERVER_TLS_AUTH=false -ml.distribution.ASDC_ADDRESS= -ml.distribution.CONSUMER_GROUP=aai-ml-group -ml.distribution.CONSUMER_ID=aai-ml -ml.distribution.ENVIRONMENT_NAME= -ml.distribution.KEYSTORE_PASSWORD= -ml.distribution.KEYSTORE_FILE=asdc-client.jks -ml.distribution.PASSWORD= -ml.distribution.POLLING_INTERVAL=30 -ml.distribution.POLLING_TIMEOUT=20 -ml.distribution.USER=ci -ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG - -# Model Loader AAI REST Client Configuration -ml.aai.BASE_URL= -ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/ -ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/ -ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images -ml.aai.KEYSTORE_FILE=aai-os-cert.p12 -ml.aai.KEYSTORE_PASSWORD= -ml.aai.AUTH_USER=ModelLoader -ml.aai.AUTH_PASSWORD= +# ============LICENSE_END=========================================================
+###
+
+# Bridge JUL->slf4j Logging Configuration File
+#
+# This file bridges the JUL logging infrastructure into
+# SLF4J so JUL logs go to logback implementation provided
+# in this project. SLF4J also captures log4j and has
+# other framework options as well providing a common
+# logging infrastructure for capturing all logs from different
+# libraries using different frameworks in one place.
+
+# Global properties
+handlers=org.slf4j.bridge.SLF4JBridgeHandler
+.level= ALL
diff --git a/src/main/config/keyfile b/src/main/config/keyfile new file mode 100644 index 0000000..882e86a --- /dev/null +++ b/src/main/config/keyfile @@ -0,0 +1,27 @@ +ZuIwp0TkyVPDeX1Up-8JtkMWvjsCpoiu1_VKeWrtrvxunvAke8_tiFyHPPyb2nkhepFYj6tXzpfS +rGz5XF_TH9NbsKaP8u0HV5clz2WriYQRvHS85vjY7hXxkpFuLb7zkLAPqTyIDpj7FiW61NzsRUAq +TM8jH16jr7mBNnb56w24mNGOwznMPcIZKcjgZU1ekaPDFpWyhQElU7Y0q_94P_Gkk45r66Hj22sU +OiOaaftmudZlswLw8-8Zaakqf2yW9HjMVfuYCwSodBHCW5rdB3Ctb5W36rnD_AQco3Ky2PgPmqvk +QkJYuUHpbuDqVHqLOajlKSIGMTIqAIBg51fRaaONtD-Q5xzY8E5wO1YWTLKcP5tsNvUpzM8Wu3NS +ynpGpUcvlTqWWsGzTbzOyamyKkdNdx97sSqjM25Zh1-ps48h6cddGYWpab7SUvqRCS11QBUyLTry +2iwTEHMhHRIbo7PO99ALQfuq9gI1zKGfurJdvLBeBaFs5SCF0AiCZ3WcDO8Rv3HpxVZ2_ShbDxb0 +eMoO6SotXu51fj8Y3-WqsfZziQyEsHyqpg5uQ6yUtz01h5YHLEoVuotF1U4agmQR6kEkYk-wNOiZ +v-8gaA9gtbLoAdKhuKFxQgQLNMf6GzVzZNujbmDzLoZAP_mXAv29aBPaf64Ugzv-Oa5GZdBgD-Xd +_pahML-ionw99r0TnkpShYmDqMKhMdjaP3m87WIAZkIB-L-VTyKcEsJ4340VSzCOsv3waiM0S89u +4cMcG5y-PLY8IoipIlLUPTWD3SjcQ9DV1Dt3T5KjdWLsj48D3W4K4e9PB8yxs0gtUjgVUR2_xEir +G5eDO9Ac1eHFWGDFFP0SgG-TbHJUKlvy9mwLzmU0fC3xPjhqmIr-v0HxF7HN-tmb1LHDorno8tSN +u7kUGcKSchIiFfvkd066crUb2mH7PnXTaWmAjyVj9VsBExFUYEdpHMAV4sAP9-RxZGDRt46UhrDK +QZvvNhBVyOEjHPHWI4vl1r1v8HNH1_2jZu5DVJWyHWR56aCo1lhFH9_X6UAHUHbnXViDONZOVXlT +9-WD0tk2zJGuwrhdZDAnPnAmjfwbwbpnr5Hmex1i1JiD7WVyP1kbfoej2TmdiYbxr9oBYaGQ29JI +aHod7MQCLtvL1z5XgnDPLZ4y3_9SbqHKYbNa8UgZkTLF5EacGThYVFDLA9cbafHDtR1kMGE3vv4D +EJ-0pAYTOGmKlVI7DwNyKsY9JTyudrxTqhOxi9jgcJNWiUaNe9yhL8Pyc2YBqUTTYhh_a2d1rvkZ +0Gh1crviVxqBrIkRKaMRXZ4f1vDLz-3NvG_vwPOo8WRFo5nGmSdTw7CjBaigJ_cYCfDhoP11pEnw +cndsZNcHs-v05LlxeIIMDD_f5Bvz-il_DLA4eK2HqgLdxh8ziSDl2azk14MJY4amzz6reEXUuKLV +RsZGf_jbDGKhE2HuDQ5ovoLOi4OqE1oRuqh-dGxitrYouP2SN1l_1tCEMRth86FMV-6AQtZsvdUo +y9MtQ7e35atjA8nHtgADlDTmJBKQiUHUsOZ77p1qp17HAFMovUkc739opfEYnKUn6Itpw5Ipm_Is +ra6chJUfMpOFof5rb5OjqFAN27c_-mPo1lQU3ndYlKGh_n5V8ufX6v2Yri8WzOPf6hjVYotkmoMP +NPAICDCB8W5ddBjsopzLVVEtaXDu9Qj6-zf77hT4iQ7rBd2Ner8iLqN3Kis0dvkNM3_uH8onau1G +Y_YYw7PPSZyd2S_7Dd6G-IG4ayO6e5DD6oUwwekyiQI_3rTXNa_wldGxqW9u818010ekE4Qdlfcj +beIn7fAeaOjReZ87hRgWyMs-EgTVHw8RL3yI_O6VvRTVRONRF1Y4C_-IYa8z-bfrwXx3BBd9TTgb +EnS9wVOyC2OgUN6BhPLGLhxzkJ05nEjizXEc9t5EPYoSRwesajGGrrG_0-qWbuU5hKLPLkyeJLHb +5HXOTVsrUR59Vov2M3_EswkxcImblox3k3VS2yihZMGyfqLzZIUXgd8ufkevKKU6DxwacGTb
\ No newline at end of file diff --git a/src/main/config/runner-web.xml b/src/main/config/runner-web.xml new file mode 100644 index 0000000..99d9191 --- /dev/null +++ b/src/main/config/runner-web.xml @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ============LICENSE_START======================================================= + MODEL LOADER SERVICE + ================================================================================ + Copyright (C) 2017 AT&T Intellectual Property. 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. + ============LICENSE_END=========================================================
+ -->
+
+<!--
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ metadata-complete="false" version="3.0">
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>/WEB-INF/spring-servlet.xml,
+ classpath:applicationContext.xml
+ </param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>spring.profiles.default</param-name>
+ <param-value>nooauth</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>ManagementServlet</servlet-name>
+ <servlet-class>ajsc.ManagementServlet</servlet-class>
+ </servlet>
+
+
+ <filter>
+ <filter-name>InterceptorFilter</filter-name>
+ <filter-class>ajsc.filters.InterceptorFilter</filter-class>
+ <init-param>
+ <param-name>preProcessor_interceptor_config_file</param-name>
+ <param-value>/etc/PreProcessorInterceptors.properties</param-value>
+ </init-param>
+ <init-param>
+ <param-name>postProcessor_interceptor_config_file</param-name>
+ <param-value>/etc/PostProcessorInterceptors.properties</param-value>
+ </init-param>
+
+ </filter>
+
+ <servlet>
+ <servlet-name>RestletServlet</servlet-name>
+ <servlet-class>ajsc.restlet.RestletSpringServlet</servlet-class>
+ <init-param>
+ <param-name>org.restlet.component</param-name>
+ <param-value>restletComponent</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet>
+ <servlet-name>CamelServlet</servlet-name>
+ <servlet-class>ajsc.servlet.AjscCamelServlet</servlet-class>
+ </servlet>
+
+
+ <filter>
+ <filter-name>springSecurityFilterChain</filter-name>
+ <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+ </filter>
+
+ <servlet>
+ <servlet-name>spring</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+<!-- <servlet-mapping>
+ <servlet-name>spring</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>-->
+
+<!-- BEGIN jsp -->
+
+ <servlet id="jsp">
+ <servlet-name>jsp</servlet-name>
+ <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+ </servlet>
+
+
+
+
+
+ <!-- BEGIN static content -->
+ <servlet>
+ <servlet-name>default</servlet-name>
+ <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+ <init-param>
+ <param-name>dirAllowed</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ </servlet>
+ <!-- END static content -->
+</web-app>
diff --git a/src/main/docker/.dockerignore b/src/main/docker/.dockerignore deleted file mode 100644 index 1128374..0000000 --- a/src/main/docker/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -*.war -*.jsonld
\ No newline at end of file diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile index 99c34fd..9aafdda 100644 --- a/src/main/docker/Dockerfile +++ b/src/main/docker/Dockerfile @@ -1,53 +1,24 @@ -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - FROM ubuntu:14.04 -ARG jettyrel=9.3.9.v20160517 -ARG jettydist=jetty-distribution-${jettyrel} -ARG jettybase=/opt/jetty - -RUN apt-get update && apt-get --force-yes -y -f install wget - -# Install java8 -RUN apt-get install -y software-properties-common -# sudo -E is required to preserve the environment -# If you remove that line, it will most like freeze at this step +ARG MICRO_HOME=/opt/app/model-loader +ARG BIN_HOME=$MICRO_HOME/bin -RUN apt-get install --reinstall ca-certificates && \ - sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk - -# Setup JAVA_HOME, this is useful for docker commandline +RUN apt-get update +# Install and setup java8 +RUN apt-get update && apt-get install -y software-properties-common +## sudo -E is required to preserve the environment. If you remove that line, it will most like freeze at this step +RUN sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk +## Setup JAVA_HOME, this is useful for docker commandline ENV JAVA_HOME usr/lib/jvm/java-8-openjdk-amd64 RUN export JAVA_HOME -RUN wget http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/${jettyrel}/${jettydist}.tar.gz -RUN gunzip ${jettydist}.tar.gz && tar xvf ${jettydist}.tar - -COPY model-loader* $jettydist/webapps/model-loader/ - -COPY startup.sh update_config.sh ${jettydist}/bin/ -RUN chmod 700 ${jettydist}/bin/startup.sh && chmod 700 ${jettydist}/bin/update_config.sh -RUN mkdir -p ${jettybase} -RUN mv ${jettydist} ${jettybase}/${jettydist} -RUN rm -rf $jettybase/$jettydist/demo-base +# Build up the deployment folder structure +RUN mkdir -p $MICRO_HOME +ADD swm/package/nix/dist_files/appl/model-loader/* $MICRO_HOME/ +RUN mkdir -p $BIN_HOME +COPY *.sh $BIN_HOME +RUN chmod 755 $BIN_HOME/* +RUN ln -s /logs $MICRO_HOME/logs -CMD /opt/jetty/*/bin/startup.sh +CMD ["/opt/app/model-loader/bin/start.sh"] diff --git a/src/main/docker/update_config.sh b/src/main/docker/update_config.sh deleted file mode 100644 index 77916ed..0000000 --- a/src/main/docker/update_config.sh +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/bash - -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - -# -# This script will update the config file, with config values supplied -# through environment variables, if set -# - -CONFIG_FILE=`dirname $0`/../webapps/model-loader/WEB-INF/classes/model-loader.properties - -# Distribution client configuration -ENVVAR=DISTR_CLIENT_ACTIVE_SERVER_TLS_AUTH -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.ACTIVE_SERVER_TLS_AUTH/s/.*/ml.distribution.ACTIVE_SERVER_TLS_AUTH=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_ASDC_ADDRESS -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.ASDC_ADDRESS/s/.*/ml.distribution.ASDC_ADDRESS=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_CONSUMER_GROUP -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.CONSUMER_GROUP/s/.*/ml.distribution.CONSUMER_GROUP=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_CONSUMER_ID -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.CONSUMER_ID/s/.*/ml.distribution.CONSUMER_ID=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_ENVIRONMENT_NAME -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.ENVIRONMENT_NAME/s/.*/ml.distribution.ENVIRONMENT_NAME=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_KEYSTORE_PASSWORD -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.KEYSTORE_PASSWORD/s/.*/ml.distribution.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_KEYSTORE_FILE -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.KEYSTORE_FILE/s/.*/ml.distribution.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_PASSWORD -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.PASSWORD/s/.*/ml.distribution.PASSWORD=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_POLLING_INTERVAL -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.POLLING_INTERVAL/s/.*/ml.distribution.POLLING_INTERVAL=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_POLLING_TIMEOUT -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.POLLING_TIMEOUT/s/.*/ml.distribution.POLLING_TIMEOUT=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_USER -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.USER/s/.*/ml.distribution.USER=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=DISTR_CLIENT_ARTIFACT_TYPES -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.distribution.ARTIFACT_TYPES/s/.*/ml.distribution.ARTIFACT_TYPES=$ENVVALUE/" $CONFIG_FILE; - - -# Model Loader Application Server REST Client Configuration -ENVVAR=APP_SERVER_BASE_URL -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.BASE_URL/s/.*/ml.aai.BASE_URL=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_MODEL_URL -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.MODEL_URL/s/.*/ml.aai.MODEL_URL=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_NAMED_QUERY_URL -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.NAMED_QUERY_URL/s/.*/ml.aai.NAMED_QUERY_URL=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_VNF_IMAGE_URL -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.VNF_IMAGE_URL/s/.*/ml.aai.VNF_IMAGE_URL=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_KEYSTORE_FILE -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.KEYSTORE_FILE/s/.*/ml.aai.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_KEYSTORE_PASSWORD -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.KEYSTORE_PASSWORD/s/.*/ml.aai.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_AUTH_USER -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.AUTH_USER/s/.*/ml.aai.AUTH_USER=$ENVVALUE/" $CONFIG_FILE; - -ENVVAR=APP_SERVER_AUTH_PASSWORD -ENVVALUE=${!ENVVAR} -ENVVALUE=${ENVVALUE//\//\\/} -[ -z ${!ENVVAR+x} ] \ - || sed -i "/ml.aai.AUTH_PASSWORD/s/.*/ml.aai.AUTH_PASSWORD=$ENVVALUE/" $CONFIG_FILE; diff --git a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java index 26f13ad..107010d 100644 --- a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java +++ b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java @@ -1,36 +1,36 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.config; import org.eclipse.jetty.util.security.Password; import org.openecomp.sdc.api.consumer.IConfiguration; -import java.io.File; -import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Properties; public class ModelLoaderConfig implements IConfiguration { - + // Configuration file structure public static final String PREFIX_MODEL_LOADER_CONFIG = "ml"; public static final String PREFIX_DISTRIBUTION_CLIENT = @@ -86,17 +86,9 @@ public class ModelLoaderConfig implements IConfiguration { * @param modelLoaderProperties properties needed to be configured for the model loader * @param certLocation location of the certificate */ - public ModelLoaderConfig(Properties modelLoaderProperties) { + public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) { this.modelLoaderProperties = modelLoaderProperties; - - String aaiKeystoreFile = modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE); - if(aaiKeystoreFile != null){ - URL keystoreURL = this.getClass().getClassLoader().getResource(aaiKeystoreFile); - if(keystoreURL != null){ - File fKeystoreLocation = new File(keystoreURL.getPath()); - this.certLocation = fKeystoreLocation.getParent(); - } - } + this.certLocation = certLocation; // Get list of artifacts artifactTypes = new ArrayList<String>(); @@ -185,12 +177,12 @@ public class ModelLoaderConfig implements IConfiguration { return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL); } - public String getAaiModelUrl() { - return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL); + public String getAaiModelUrl(String version) { + return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL).replace("v*", version); } - public String getAaiNamedQueryUrl() { - return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL); + public String getAaiNamedQueryUrl(String version) { + return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL).replace("v*", version); } public String getAaiVnfImageUrl() { @@ -232,4 +224,9 @@ public class ModelLoaderConfig implements IConfiguration { return false; } + + public boolean isFilterInEmptyResources() { + return false; + } + } diff --git a/src/main/java/org/openecomp/modelloader/entity/Artifact.java b/src/main/java/org/openecomp/modelloader/entity/Artifact.java index fb0ec9f..88c75eb 100644 --- a/src/main/java/org/openecomp/modelloader/entity/Artifact.java +++ b/src/main/java/org/openecomp/modelloader/entity/Artifact.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity; public abstract class Artifact { @@ -25,14 +27,14 @@ public abstract class Artifact { private String payload; private ArtifactType type; + public Artifact(ArtifactType type) { + this.type = type; + } + public ArtifactType getType() { return type; } - public void setType(ArtifactType type) { - this.type = type; - } - public String getPayload() { return payload; } diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java index 16f2c87..bd6a861 100644 --- a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java +++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java @@ -1,37 +1,39 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.entity; - -import org.openecomp.modelloader.config.ModelLoaderConfig; - -import java.util.List; - -public abstract class ArtifactHandler { - - protected ModelLoaderConfig config; - - public ArtifactHandler(ModelLoaderConfig config) { - this.config = config; - } - - public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId); - -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity;
+
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+
+import java.util.List;
+
+public abstract class ArtifactHandler {
+
+ protected ModelLoaderConfig config;
+
+ public ArtifactHandler(ModelLoaderConfig config) {
+ this.config = config;
+ }
+
+ public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java index 8977e3c..381733b 100644 --- a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java +++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java @@ -1,25 +1,30 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity; public enum ArtifactType { - MODEL, NAMED_QUERY, VNF_CATALOG; + MODEL, + MODEL_V8, + NAMED_QUERY, + VNF_CATALOG; } diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java index b2e1fdb..9b4c587 100644 --- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java +++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.catalog; import org.openecomp.modelloader.entity.Artifact; @@ -25,7 +27,7 @@ import org.openecomp.modelloader.entity.ArtifactType; public class VnfCatalogArtifact extends Artifact { public VnfCatalogArtifact(String payload) { + super(ArtifactType.VNF_CATALOG); setPayload(payload); - setType(ArtifactType.VNF_CATALOG); } } diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java index 189b069..5c526a6 100644 --- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java +++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java @@ -1,184 +1,192 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.entity.catalog; - -import com.sun.jersey.api.client.ClientResponse; - -import generated.VnfCatalog; -import generated.VnfCatalog.PartNumberList; - -import inventory.aai.openecomp.org.v8.VnfImage; - -import org.eclipse.persistence.jaxb.MarshallerProperties; -import org.openecomp.cl.api.Logger; -import org.openecomp.cl.eelf.LoggerFactory; -import org.openecomp.modelloader.config.ModelLoaderConfig; -import org.openecomp.modelloader.entity.Artifact; -import org.openecomp.modelloader.entity.ArtifactHandler; -import org.openecomp.modelloader.restclient.AaiRestClient; -import org.openecomp.modelloader.restclient.AaiRestClient.MimeType; -import org.openecomp.modelloader.service.ModelLoaderMsgs; - -import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import javax.ws.rs.core.Response; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; - - -public class VnfCatalogArtifactHandler extends ArtifactHandler { - - private static Logger logger = LoggerFactory.getInstance() - .getLogger(VnfCatalogArtifactHandler.class.getName()); - - public VnfCatalogArtifactHandler(ModelLoaderConfig config) { - super(config); - } - - @Override - public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) { - for (Artifact art : artifacts) { - VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art; - String artifactPayload = vnfCatalog.getPayload(); - - AaiRestClient restClient = new AaiRestClient(this.config); - List<VnfImage> putImages = new ArrayList<VnfImage>(); - - try { - JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class); - Unmarshaller unmarshaller = inputContext.createUnmarshaller(); - StringReader reader = new StringReader(artifactPayload); - VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader); - - int numParts = cat.getPartNumberList().size(); - - for (int i = 0; i < numParts; i++) { - - PartNumberList pnl = cat.getPartNumberList().get(i); - - String application = pnl.getVendorInfo().getVendorModel(); - String applicationVendor = pnl.getVendorInfo().getVendorName(); - - int numVersions = pnl.getSoftwareVersionList().size(); - - for (int j = 0; j < numVersions; j++) { - String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion(); - - String imageId = "vnf image " + applicationVendor + " " + application + " " - + applicationVersion; - - String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() - + "?application-vendor=" + applicationVendor + "&application=" + application - + "&application-version=" + applicationVersion; - - ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON); - if (tryGet == null) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Ingestion failed on " + imageId + ". Rolling back distribution."); - failureCleanup(putImages, restClient, distributionId); - return false; - } - if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) { - // this vnf-image not already in the db, need to add - // only do this on 404 bc other error responses could mean there - // are problems that - // you might not want to try to PUT against - - VnfImage image = new VnfImage(); - image.setApplication(application); - image.setApplicationVendor(applicationVendor); - image.setApplicationVersion(applicationVersion); - String uuid = UUID.randomUUID().toString(); - image.setUuid(uuid); // need to create uuid - - System.setProperty("javax.xml.bind.context.factory", - "org.eclipse.persistence.jaxb.JAXBContextFactory"); - JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class); - Marshaller marshaller = jaxbContext.createMarshaller(); - marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json"); - marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false); - marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); - StringWriter writer = new StringWriter(); - marshaller.marshal(image, writer); - String payload = writer.toString(); - - String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/" - + uuid; - - ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId, - MimeType.JSON); - if (putResp == null - || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution."); - failureCleanup(putImages, restClient, distributionId); - return false; - } - putImages.add(image); - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested."); - } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) { - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - imageId + " already exists. Skipping ingestion."); - } else { - // if other than 404 or 200, something went wrong - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus() - + ". Rolling back distribution."); - failureCleanup(putImages, restClient, distributionId); - return false; - } - } - } - - } catch (JAXBException e) { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Ingestion failed. " + e.getMessage() + ". Rolling back distribution."); - failureCleanup(putImages, restClient, distributionId); - return false; - } - } - - return true; - } - - /* - * if something fails in the middle of ingesting the catalog we want to - * rollback any changes to the db - */ - private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) { - for (VnfImage image : putImages) { - String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/" - + image.getUuid(); - restClient.getAndDeleteResource(url, transId); // try to delete the image, - // if something goes wrong - // we can't really do - // anything here - } - } - -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.catalog;
+
+import com.sun.jersey.api.client.ClientResponse;
+
+import generated.VnfCatalog;
+import generated.VnfCatalog.PartNumberList;
+
+import inventory.aai.openecomp.org.v8.VnfImage;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.openecomp.cl.api.Logger;
+import org.openecomp.cl.eelf.LoggerFactory;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.entity.ArtifactHandler;
+import org.openecomp.modelloader.restclient.AaiRestClient;
+import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
+import org.openecomp.modelloader.service.ModelLoaderMsgs;
+import org.springframework.web.util.UriUtils;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+
+public class VnfCatalogArtifactHandler extends ArtifactHandler {
+
+ private static Logger logger = LoggerFactory.getInstance()
+ .getLogger(VnfCatalogArtifactHandler.class.getName());
+
+ public VnfCatalogArtifactHandler(ModelLoaderConfig config) {
+ super(config);
+ }
+
+ @Override
+ public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
+ for (Artifact art : artifacts) {
+ VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;
+ String artifactPayload = vnfCatalog.getPayload();
+
+ AaiRestClient restClient = new AaiRestClient(this.config);
+ List<VnfImage> putImages = new ArrayList<VnfImage>();
+
+ try {
+ JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);
+ Unmarshaller unmarshaller = inputContext.createUnmarshaller();
+ StringReader reader = new StringReader(artifactPayload);
+ VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);
+
+ int numParts = cat.getPartNumberList().size();
+
+ for (int i = 0; i < numParts; i++) {
+
+ PartNumberList pnl = cat.getPartNumberList().get(i);
+
+ String application = pnl.getVendorInfo().getVendorModel();
+ String applicationVendor = pnl.getVendorInfo().getVendorName();
+
+ int numVersions = pnl.getSoftwareVersionList().size();
+
+ for (int j = 0; j < numVersions; j++) {
+ String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();
+
+ String imageId = "vnf image " + applicationVendor + " " + application + " "
+ + applicationVersion;
+
+ String queryURI = "application-vendor=" + applicationVendor + "&application=" + application + "&application-version=" + applicationVersion;
+
+ String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "?" + UriUtils.encodePath(queryURI, "UTF-8");
+
+ ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);
+ if (tryGet == null) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+ "Ingestion failed on " + imageId + ". Rolling back distribution.");
+ failureCleanup(putImages, restClient, distributionId);
+ return false;
+ }
+ if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
+ // this vnf-image not already in the db, need to add
+ // only do this on 404 bc other error responses could mean there
+ // are problems that
+ // you might not want to try to PUT against
+
+ VnfImage image = new VnfImage();
+ image.setApplication(application);
+ image.setApplicationVendor(applicationVendor);
+ image.setApplicationVersion(applicationVersion);
+ String uuid = UUID.randomUUID().toString();
+ image.setUuid(uuid); // need to create uuid
+
+ System.setProperty("javax.xml.bind.context.factory",
+ "org.eclipse.persistence.jaxb.JAXBContextFactory");
+ JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);
+ Marshaller marshaller = jaxbContext.createMarshaller();
+ marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
+ marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+ marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
+ marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
+ StringWriter writer = new StringWriter();
+ marshaller.marshal(image, writer);
+ String payload = writer.toString();
+
+ String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
+ + uuid;
+
+ ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,
+ MimeType.JSON);
+ if (putResp == null
+ || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+ "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");
+ failureCleanup(putImages, restClient, distributionId);
+ return false;
+ }
+ putImages.add(image);
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");
+ } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+ imageId + " already exists. Skipping ingestion.");
+ } else {
+ // if other than 404 or 200, something went wrong
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+ "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()
+ + ". Rolling back distribution.");
+ failureCleanup(putImages, restClient, distributionId);
+ return false;
+ }
+ }
+ }
+
+ } catch (JAXBException e) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
+ "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
+ failureCleanup(putImages, restClient, distributionId);
+ return false;
+ } catch (UnsupportedEncodingException e) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
+ failureCleanup(putImages, restClient, distributionId);
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /*
+ * if something fails in the middle of ingesting the catalog we want to
+ * rollback any changes to the db
+ */
+ private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {
+ for (VnfImage image : putImages) {
+ String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
+ + image.getUuid();
+ restClient.getAndDeleteResource(url, transId); // try to delete the image,
+ // if something goes wrong
+ // we can't really do
+ // anything here
+ }
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java new file mode 100644 index 0000000..2add53e --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/AbstractModelArtifact.java @@ -0,0 +1,85 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.openecomp.modelloader.config.ModelLoaderConfig; +import org.openecomp.modelloader.entity.Artifact; +import org.openecomp.modelloader.entity.ArtifactType; +import org.openecomp.modelloader.restclient.AaiRestClient; + +public abstract class AbstractModelArtifact extends Artifact { + + private String modelNamespace; + private String modelNamespaceVersion; + private Set<String> referencedModelIds = new HashSet<String>(); + + public AbstractModelArtifact(ArtifactType type) { + super(type); + } + + public Set<String> getDependentModelIds() { + return referencedModelIds; + } + + public void addDependentModelId(String dependentModelId) { + this.referencedModelIds.add(dependentModelId); + } + + public String getModelNamespace() { + return modelNamespace; + } + + public void setModelNamespace(String modelNamespace) { + this.modelNamespace = modelNamespace; + + // Get the version from the namespace (in format 'http://org.openecomp.aai.inventory/v9') + String[] parts = modelNamespace.split("/"); + modelNamespaceVersion = parts[parts.length-1].trim(); + } + + public String getModelNamespaceVersion() { + return modelNamespaceVersion; + } + + public abstract String getUniqueIdentifier(); + + public abstract boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels); + + public abstract void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId); + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("\nType=" + getType().toString() +"\nId=" + getUniqueIdentifier() +"\nVersion=" + getModelNamespaceVersion() + "\nDependant models: "); + for (String dep : referencedModelIds) { + sb.append(dep + " "); + } + + return sb.toString(); + } + + +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java b/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java new file mode 100644 index 0000000..3a31756 --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/IModelParser.java @@ -0,0 +1,31 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import java.util.List; + +import org.openecomp.modelloader.entity.Artifact; + +public interface IModelParser { + public List<Artifact> parse(byte[] artifactPayload, String artifactName); +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java index 904dba9..f316e28 100644 --- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java @@ -1,60 +1,210 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; -import org.openecomp.modelloader.entity.Artifact; +import java.io.StringWriter; +import java.util.List; -import java.util.HashSet; -import java.util.Set; +import javax.ws.rs.core.Response; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; -public class ModelArtifact extends Artifact { +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.config.ModelLoaderConfig; +import org.openecomp.modelloader.entity.ArtifactType; +import org.openecomp.modelloader.restclient.AaiRestClient; +import org.openecomp.modelloader.service.ModelLoaderMsgs; +import org.w3c.dom.Node; - String nameVersionId; - Set<String> referencedModelIds = new HashSet<String>(); +import com.sun.jersey.api.client.ClientResponse; - public String getNameVersionId() { - return nameVersionId; - } +public class ModelArtifact extends AbstractModelArtifact { - public void setNameVersionId(String nameVersionId) { - this.nameVersionId = nameVersionId; - } + private static final String AAI_MODEL_VER_SUB_URL = "/model-vers/model-ver"; + + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifact.class.getName()); + + private String modelVerId; + private String modelInvariantId; + private Node modelVer; + private boolean firstVersionOfModel = false; - public Set<String> getDependentModelIds() { - return referencedModelIds; - } + public ModelArtifact() { + super(ArtifactType.MODEL); + } - public void addDependentModelId(String dependentModelId) { - this.referencedModelIds.add(dependentModelId); + public String getModelVerId() { + return modelVerId; + } + + public void setModelVerId(String modelVerId) { + this.modelVerId = modelVerId; + } + + public String getModelInvariantId() { + return modelInvariantId; + } + + public void setModelInvariantId(String modelInvariantId) { + this.modelInvariantId = modelInvariantId; + } + + public Node getModelVer() { + return modelVer; + } + + public void setModelVer(Node modelVer) { + this.modelVer = modelVer; + } + + @Override + public String getUniqueIdentifier() { + return getModelInvariantId() + "|" + getModelVerId(); } @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("NameVersId=" + nameVersionId + "(" + getType().toString() + ") ==> "); - for (String dep : referencedModelIds) { - sb.append(dep + " "); + public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) { + ClientResponse getResponse = aaiClient.getResource(getModelUrl(config), distId, AaiRestClient.MimeType.XML); + if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) { + // Only attempt the PUT if the model doesn't already exist + ClientResponse putResponse = aaiClient.putResource(getModelUrl(config), getPayload(), distId, AaiRestClient.MimeType.XML); + if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) { + addedModels.add(this); + + // Flag this as the first version of the model that has been added. + firstVersionOfModel = true; + + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested."); + } + else { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier() + + ". Rolling back distribution."); + return false; + } } + else { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getModelInvariantId() + " already exists. Skipping ingestion."); + getResponse = aaiClient.getResource(getModelVerUrl(config), distId, AaiRestClient.MimeType.XML); + if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) { + // Only attempt the PUT if the model-ver doesn't already exist + ClientResponse putResponse = null; - return sb.toString(); + try { + putResponse = aaiClient.putResource(getModelVerUrl(config), nodeToString(getModelVer()), distId, AaiRestClient.MimeType.XML); + } catch (TransformerException e) { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier() + + ": " + e.getMessage() + ". Rolling back distribution."); + return false; + } + if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) { + addedModels.add(this); + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested."); + } + else { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + + getUniqueIdentifier() + ". Rolling back distribution."); + return false; + } + } + else { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " already exists. Skipping ingestion."); + } + } + + return true; } + + @Override + public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) { + String url = getModelVerUrl(config); + if (firstVersionOfModel) { + // If this was the first version of the model which was added, we want to remove the entire + // model rather than just the version. + url = getModelUrl(config); + } + + // Best effort to delete. Nothing we can do in the event this fails. + aaiClient.getAndDeleteResource(url, distId); + } + + private String getModelUrl(ModelLoaderConfig config) { + String baseURL = config.getAaiBaseUrl().trim(); + String subURL = null; + String instance = null; + + subURL = config.getAaiModelUrl(getModelNamespaceVersion()).trim(); + instance = getModelInvariantId(); + + if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) { + baseURL = baseURL + "/"; + } + + if ( baseURL.endsWith("/") && subURL.startsWith("/") ) { + baseURL = baseURL.substring(0, baseURL.length()-1); + } + if (!subURL.endsWith("/")) { + subURL = subURL + "/"; + } + + String url = baseURL + subURL + instance; + return url; + } + + private String getModelVerUrl(ModelLoaderConfig config) { + String baseURL = config.getAaiBaseUrl().trim(); + String subURL = null; + String instance = null; + + subURL = config.getAaiModelUrl(getModelNamespaceVersion()).trim() + getModelInvariantId() + AAI_MODEL_VER_SUB_URL; + instance = getModelVerId(); + + if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) { + baseURL = baseURL + "/"; + } + + if ( baseURL.endsWith("/") && subURL.startsWith("/") ) { + baseURL = baseURL.substring(0, baseURL.length()-1); + } + + if (!subURL.endsWith("/")) { + subURL = subURL + "/"; + } + + String url = baseURL + subURL + instance; + return url; + } + + private String nodeToString(Node node) throws TransformerException { + StringWriter sw = new StringWriter(); + Transformer t = TransformerFactory.newInstance().newTransformer(); + t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + t.transform(new DOMSource(node), new StreamResult(sw)); + return sw.toString(); + } } diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java index fb269b1..13ef1b1 100644 --- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java @@ -1,127 +1,79 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; -import com.sun.jersey.api.client.ClientResponse; - import org.openecomp.cl.api.Logger; import org.openecomp.cl.eelf.LoggerFactory; import org.openecomp.modelloader.config.ModelLoaderConfig; import org.openecomp.modelloader.entity.Artifact; import org.openecomp.modelloader.entity.ArtifactHandler; -import org.openecomp.modelloader.entity.ArtifactType; import org.openecomp.modelloader.restclient.AaiRestClient; import org.openecomp.modelloader.service.ModelLoaderMsgs; import java.util.ArrayList; import java.util.List; -import javax.ws.rs.core.Response; public class ModelArtifactHandler extends ArtifactHandler { - private static Logger logger = LoggerFactory.getInstance() - .getLogger(ArtifactHandler.class.getName()); - + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactHandler.class.getName()); + public ModelArtifactHandler(ModelLoaderConfig config) { super(config); } @Override - public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) { + public boolean pushArtifacts(List<Artifact> artifacts, String distributionID) { ModelSorter modelSorter = new ModelSorter(); - List<Artifact> sortedModelArtifacts = modelSorter.sort(artifacts); - - // Push the ordered list of model artifacts to A&AI. If one fails, we need - // to roll back + List<Artifact> sortedModelArtifacts; + try { + sortedModelArtifacts = modelSorter.sort(artifacts); + } + catch (RuntimeException ex) { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Unable to resolve models: " + ex.getMessage()); + return false; + } + + // Push the ordered list of model artifacts to A&AI. If one fails, we need to roll back // the changes. - List<ModelArtifact> completedModels = new ArrayList<ModelArtifact>(); + List<AbstractModelArtifact> completedModels = new ArrayList<AbstractModelArtifact>(); AaiRestClient aaiClient = new AaiRestClient(config); for (Artifact art : sortedModelArtifacts) { - ModelArtifact model = (ModelArtifact) art; - ClientResponse getResponse = aaiClient.getResource(getUrl(model), distributionId, - AaiRestClient.MimeType.XML); - if ((getResponse == null) - || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) { - // Only attempt the PUT if the model doesn't already exist - ClientResponse putResponse = aaiClient.putResource(getUrl(model), model.getPayload(), - distributionId, AaiRestClient.MimeType.XML); - if ((putResponse != null) - && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode())) { - completedModels.add(model); - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " - + model.getNameVersionId() + " successfully ingested."); - } else { - logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, - "Ingestion failed for " + model.getType().toString() + " " + model.getNameVersionId() - + ". Rolling back distribution."); - - for (ModelArtifact modelToDelete : completedModels) { - // Best effort to delete. Nothing we can do in the event this fails. - aaiClient.getAndDeleteResource(getUrl(modelToDelete), distributionId); - } - - return false; + AbstractModelArtifact model = (AbstractModelArtifact)art; + if (model.push(aaiClient, config, distributionID, completedModels) != true) { + for (AbstractModelArtifact modelToDelete : completedModels) { + modelToDelete.rollbackModel(aaiClient, config, distributionID); } - } else { - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " - + model.getNameVersionId() + " already exists. Skipping ingestion."); + + return false; } } return true; } - private String getUrl(ModelArtifact model) { - String baseUrl = config.getAaiBaseUrl().trim(); - String subUrl = null; - if (model.getType().equals(ArtifactType.MODEL)) { - subUrl = config.getAaiModelUrl().trim(); - } else { - subUrl = config.getAaiNamedQueryUrl().trim(); - } - - if ((!baseUrl.endsWith("/")) && (!subUrl.startsWith("/"))) { - baseUrl = baseUrl + "/"; - } - - if (baseUrl.endsWith("/") && subUrl.startsWith("/")) { - baseUrl = baseUrl.substring(0, baseUrl.length() - 1); - } - - if (!subUrl.endsWith("/")) { - subUrl = subUrl + "/"; - } - - String url = baseUrl + subUrl + model.getNameVersionId(); - return url; - } - - /** - * This method is used for the test REST interface to load models without an - * ASDC. - * - * @param payload content of the request - */ + // This method is used for the test REST interface to load models without an ASDC public void loadModelTest(byte[] payload) { List<Artifact> modelArtifacts = new ArrayList<Artifact>(); ModelArtifactParser parser = new ModelArtifactParser(); diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java index 625145f..d81539c 100644 --- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java @@ -1,197 +1,194 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; import org.openecomp.cl.api.Logger; import org.openecomp.cl.eelf.LoggerFactory; import org.openecomp.modelloader.entity.Artifact; -import org.openecomp.modelloader.entity.ArtifactType; import org.openecomp.modelloader.service.ModelLoaderMsgs; -import org.openecomp.modelloader.util.JsonXmlConverter; + import org.w3c.dom.Document; +import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import java.io.StringReader; -import java.io.StringWriter; import java.util.ArrayList; import java.util.List; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -public class ModelArtifactParser { - - private static String MODELS_ELEMENT = "models"; - private static String MODEL_ELEMENT = "model"; - private static String NAMED_QUERIES_ELEMENT = "named-queries"; - private static String NAMED_QUERY_ELEMENT = "named-query"; - private static String MODEL_NAME_VERSION_ID = "model-name-version-id"; - private static String NAMED_QUERY_VERSION_ID = "named-query-uuid"; - private static String RELATIONSHIP_DATA = "relationship-data"; - private static String RELATIONSHIP_KEY = "relationship-key"; - private static String RELATIONSHIP_VALUE = "relationship-value"; - private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-name-version-id"; - - private static Logger logger = LoggerFactory.getInstance() - .getLogger(ModelArtifactParser.class.getName()); - - /** - * This method parses the given artifact payload in byte array format and - * generates a list of model artifacts according to the content. - * - * @param artifactPayload - * artifact content to be parsed - * @param artifactName - * name of the artifact - * @return a list of model artifacts - */ - public List<Artifact> parse(byte[] artifactPayload, String artifactName) { - String payload = new String(artifactPayload); - List<Artifact> modelList = new ArrayList<Artifact>(); - - try { - // Artifact could be JSON or XML - if (JsonXmlConverter.isValidJson(payload)) { - payload = JsonXmlConverter.convertJsonToXml(payload); - } - - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - InputSource is = new InputSource(new StringReader(payload)); - Document doc = builder.parse(is); - - if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) - || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) { - ModelArtifact model = parseModel(doc.getDocumentElement(), payload); - if (model != null) { - modelList.add(model); - } else { - // TODO: A WARN message? - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Unable to parse artifact " + artifactName); - } - } else if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT)) - || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT))) { - // The complete set of models/named-queries were contained in this - // artifact - NodeList nodeList = doc.getDocumentElement().getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node childNode = nodeList.item(i); - if ((childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) - || (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) { - String modelPayload = nodeToString(childNode); - ModelArtifact model = parseModel(childNode, modelPayload); - if (model != null) { - modelList.add(model); - } else { - // TODO: A WARN message? - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Unable to parse artifact " + artifactName); - modelList.clear(); - break; - } - } - } - } - } catch (Exception ex) { - // This may not be an error. We may be receiving an artifact that is - // unrelated - // to models. In this case, we just ignore it. - // TODO: A WARN message? - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage()); - } - - return modelList; - } - - private ModelArtifact parseModel(Node modelNode, String payload) { - ModelArtifact model = new ModelArtifact(); - model.setPayload(payload); - - if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) { - model.setType(ArtifactType.MODEL); - } else { - model.setType(ArtifactType.NAMED_QUERY); - } - - parseNode(modelNode, model); - - if (model.getNameVersionId() == null) { - return null; - } - - return model; - } - - private void parseNode(Node node, ModelArtifact model) { - if (node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)) { - model.setNameVersionId(node.getTextContent().trim()); - } else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) { - model.setNameVersionId(node.getTextContent().trim()); - } else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) { - parseRelationshipNode(node, model); - } else { - NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node childNode = nodeList.item(i); - parseNode(childNode, model); - } - } - } - - private void parseRelationshipNode(Node node, ModelArtifact model) { - String key = null; - String value = null; - - NodeList nodeList = node.getChildNodes(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node childNode = nodeList.item(i); - if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) { - key = childNode.getTextContent().trim(); - } else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) { - value = childNode.getTextContent().trim(); - } - } - - if ((key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY))) { - if (value != null) { - model.addDependentModelId(value); - } - } - } - - private String nodeToString(Node node) throws TransformerException { - StringWriter sw = new StringWriter(); - Transformer transfomer = TransformerFactory.newInstance().newTransformer(); - transfomer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - transfomer.transform(new DOMSource(node), new StreamResult(sw)); - return sw.toString(); - } + + +public class ModelArtifactParser implements IModelParser { + + private static String MODEL_VER = "model-ver"; + private static String MODEL_VERSION_ID = "model-version-id"; + private static String MODEL_INVARIANT_ID = "model-invariant-id"; + private static String RELATIONSHIP = "relationship"; + private static String RELATIONSHIP_DATA = "relationship-data"; + private static String RELATIONSHIP_KEY = "relationship-key"; + private static String RELATIONSHIP_VALUE = "relationship-value"; + private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id"; + private static String MODEL_VER_ELEMENT_RELATIONSHIP_KEY = "model-ver.model-version-id"; + + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactParser.class.getName()); + + public List<Artifact> parse(byte[] artifactPayload, String artifactName) { + String payload = new String(artifactPayload); + List<Artifact> modelList = new ArrayList<Artifact>(); + + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(payload)); + Document doc = builder.parse(is); + + ModelArtifact model = parseModel(doc.getDocumentElement(), payload); + + if (model != null) { + logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> " + + "Model-invariant-Id: "+ model.getModelInvariantId() + + " Model-Version-Id: "+ model.getModelVerId()); + modelList.add(model); + } + else { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName); + return null; + } + } + catch (Exception ex) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage()); + } + + return modelList; + } + + private ModelArtifact parseModel(Node modelNode, String payload) { + ModelArtifact model = new ModelArtifact(); + model.setPayload(payload); + + Element e = (Element)modelNode; + model.setModelNamespace(e.getAttribute("xmlns")); + + parseNode(modelNode, model); + + if ( (model.getModelInvariantId() == null) || (model.getModelVerId() == null) ){ + return null; + } + + return model; + } + + private void parseNode(Node node, ModelArtifact model) { + if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) { + model.setModelInvariantId(node.getTextContent().trim()); + } + else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) { + model.setModelVerId(node.getTextContent().trim()); + } + else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP)) { + String dependentModelKey = parseRelationshipNode(node, model); + if (dependentModelKey != null) { + model.addDependentModelId(dependentModelKey); + } + } + else { + if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) { + model.setModelVer(node); + if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) { + Element e = (Element) node; + e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", model.getModelNamespace()); + } + } + + NodeList nodeList = node.getChildNodes(); + + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + parseNode(childNode, model); + } + } + } + + private String parseRelationshipNode(Node node, ModelArtifact model) { + String currentKey = null; + String currentValue = null; + String modelVersionIdValue = null; + String modelInvariantIdValue = null; + + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + + if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) { + NodeList relDataChildList = childNode.getChildNodes(); + + for (int j = 0; j < relDataChildList.getLength(); j++) { + Node relDataChildNode = relDataChildList.item(j); + + if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) { + currentKey = relDataChildNode.getTextContent().trim(); + + if (currentValue != null) { + if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) { + modelVersionIdValue = currentValue; + } + else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) { + modelInvariantIdValue = currentValue; + } + + currentKey = null; + currentValue = null; + } + } + else if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) { + currentValue = relDataChildNode.getTextContent().trim(); + + if (currentKey != null) { + if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) { + modelVersionIdValue = currentValue; + } + else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) { + modelInvariantIdValue = currentValue; + } + + currentKey = null; + currentValue = null; + } + } + } + } + } + + if ( (modelVersionIdValue != null) && (modelInvariantIdValue != null) ) { + return modelInvariantIdValue + "|" + modelVersionIdValue; + } + + return null; + + } + } diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java new file mode 100644 index 0000000..aa3283f --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelParserFactory.java @@ -0,0 +1,87 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import java.io.StringReader; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.service.ModelLoaderMsgs; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.xml.sax.InputSource; + +public class ModelParserFactory { + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelParserFactory.class.getName()); + + private static String MODEL_ELEMENT = "model"; + private static String NAMED_QUERY_ELEMENT = "named-query"; + + public static IModelParser createModelParser(byte[] artifactPayload, String artifactName) { + Document doc = null; + + try { + String payload = new String(artifactPayload); + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder; + builder = factory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(payload)); + doc = builder.parse(is); + } catch (Exception e) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName); + return null; + } + + if (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) { + return new NamedQueryArtifactParser(); + } + + if (!doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + + ": Invalid root element: " + doc.getDocumentElement().getNodeName()); + return null; + } + + Element e = doc.getDocumentElement(); + String ns = e.getAttribute("xmlns"); + String[] parts = ns.split("/"); + + if (parts.length < 1) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + + ": Could not parse namespace version"); + return null; + } + + String modelNamespaceVersion = parts[parts.length-1].trim().replace("v", ""); + int version = Integer.parseInt(modelNamespaceVersion); + + if (version > 8) { + return new ModelArtifactParser(); + } + + return new ModelV8ArtifactParser(); + } +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java index 4dcda71..274b18f 100644 --- a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; import jline.internal.Log; @@ -42,11 +44,11 @@ public class ModelSorter { * Wraps a Model object to form dependencies other Models using Edges. */ static class Node { - private final ModelArtifact model; + private final AbstractModelArtifact model; private final HashSet<Edge> inEdges; private final HashSet<Edge> outEdges; - public Node(ModelArtifact model) { + public Node(AbstractModelArtifact model) { this.model = model; inEdges = new HashSet<Edge>(); outEdges = new HashSet<Edge>(); @@ -61,19 +63,18 @@ public class ModelSorter { @Override public String toString() { - return model.getNameVersionId(); + return model.getUniqueIdentifier(); } @Override public boolean equals(Object other) { - ModelArtifact otherModel = ((Node) other).model; - return this.model.getNameVersionId().equals(otherModel.getNameVersionId()); + AbstractModelArtifact otherModel = ((Node) other).model; + return this.model.getUniqueIdentifier().equals(otherModel.getUniqueIdentifier()); } @Override public int hashCode() { - return this.model.getNameVersionId().hashCode(); - + return this.model.getUniqueIdentifier().hashCode(); } } @@ -111,7 +112,7 @@ public class ModelSorter { Collection<Node> nodes = createNodes(originalList); Collection<Node> sortedNodes = sortNodes(nodes); - + List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size()); for (Node node : sortedNodes) { sortedModelsList.add(node.model); @@ -131,23 +132,24 @@ public class ModelSorter { // load list of models into a map, so we can later replace referenceIds with // real Models - HashMap<String, ModelArtifact> versionIdToModelMap = new HashMap<String, ModelArtifact>(); + HashMap<String, AbstractModelArtifact> versionIdToModelMap = new HashMap<String, AbstractModelArtifact>(); for (Artifact art : models) { - ModelArtifact ma = (ModelArtifact) art; - versionIdToModelMap.put(ma.getNameVersionId(), ma); + AbstractModelArtifact ma = (AbstractModelArtifact) art; + versionIdToModelMap.put(ma.getUniqueIdentifier(), ma); } HashMap<String, Node> nodes = new HashMap<String, Node>(); // create a node for each model and its referenced models for (Artifact art : models) { - ModelArtifact model = (ModelArtifact) art; + AbstractModelArtifact model = (AbstractModelArtifact) art; + // node might have been created by another model referencing it - Node node = nodes.get(model.getNameVersionId()); + Node node = nodes.get(model.getUniqueIdentifier()); if (null == node) { node = new Node(model); - nodes.put(model.getNameVersionId(), node); + nodes.put(model.getUniqueIdentifier(), node); } for (String referencedModelId : model.getDependentModelIds()) { @@ -156,7 +158,7 @@ public class ModelSorter { if (null == referencedNode) { // create node - ModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId); + AbstractModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId); if (referencedModel == null) { Log.debug("ignoring " + referencedModelId); continue; // referenced model not supplied, no need to sort it @@ -179,7 +181,6 @@ public class ModelSorter { * @return a sorted collection of the given nodes */ private Collection<Node> sortNodes(Collection<Node> unsortedNodes) { - // L <- Empty list that will contain the sorted elements ArrayList<Node> nodeList = new ArrayList<Node>(); @@ -230,4 +231,5 @@ public class ModelSorter { return nodeList; } + } diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java new file mode 100644 index 0000000..847f880 --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8Artifact.java @@ -0,0 +1,122 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.config.ModelLoaderConfig; +import org.openecomp.modelloader.entity.Artifact; +import org.openecomp.modelloader.entity.ArtifactType; +import org.openecomp.modelloader.restclient.AaiRestClient; +import org.openecomp.modelloader.service.ModelLoaderMsgs; + +import com.sun.jersey.api.client.ClientResponse; + +public class ModelV8Artifact extends AbstractModelArtifact { + private static String AAI_CONVERSION_URL = "/aai/tools/modeltransform"; + + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifact.class.getName()); + + private String modelNameVersionId; + private ModelArtifact translatedModel; + + public ModelV8Artifact() { + super(ArtifactType.MODEL_V8); + } + + public String getModelNameVersionId() { + return modelNameVersionId; + } + + public void setModelNameVersionId(String modelNameVersionId) { + this.modelNameVersionId = modelNameVersionId; + } + + @Override + public String getUniqueIdentifier() { + return getModelNameVersionId(); + } + + @Override + public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) { + // For a legacy model (version <= v8), we need to call out to an A&AI endpoint to convert to the proper format + ClientResponse response = aaiClient.postResource(getConversionUrl(config), constructTransformPayload(), distId, AaiRestClient.MimeType.XML); + if ( (response == null) || (response.getStatus() != Response.Status.OK.getStatusCode()) ) { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + + getType().toString() + " " + getModelNameVersionId() + ". Unable to convert model. Rolling back distribution."); + return false; + } + + String translatedPayload = response.getEntity(String.class); + + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Translated artifact payload:\n" + translatedPayload); + + ModelArtifactParser parser = new ModelArtifactParser(); + + List<Artifact> parsedArtifacts = parser.parse(translatedPayload.getBytes(), "translated-payload"); + if (parsedArtifacts == null || parsedArtifacts.isEmpty()) { + return false; + } + + translatedModel = (ModelArtifact)parsedArtifacts.get(0); + return translatedModel.push(aaiClient, config, distId, addedModels); + } + + @Override + public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) { + if (translatedModel != null) { + translatedModel.rollbackModel(aaiClient, config, distId); + } + } + + + private String constructTransformPayload() { + // A&AI requires that to transform a legacy model, we need to use the v8 namespace (even + // if the version < 8) + return getPayload().replaceFirst("aai.inventory/v.", "aai.inventory/v8"); + } + + private String getConversionUrl(ModelLoaderConfig config) { + String baseUrl = config.getAaiBaseUrl().trim(); + String subUrl = AAI_CONVERSION_URL; + + if ( (!baseUrl.endsWith("/")) && (!subUrl.startsWith("/")) ) { + baseUrl = baseUrl + "/"; + } + + if ( baseUrl.endsWith("/") && subUrl.startsWith("/") ) { + baseUrl = baseUrl.substring(0, baseUrl.length()-1); + } + + if (!subUrl.endsWith("/")) { + subUrl = subUrl + "/"; + } + + String url = baseUrl + subUrl; + return url; + } +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java new file mode 100644 index 0000000..f5ecb2b --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParser.java @@ -0,0 +1,136 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.entity.Artifact; +import org.openecomp.modelloader.service.ModelLoaderMsgs; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + + +public class ModelV8ArtifactParser implements IModelParser { + + private static String MODEL_NAME_VERSION_ID = "model-name-version-id"; + private static String RELATIONSHIP_DATA = "relationship-data"; + private static String RELATIONSHIP_KEY = "relationship-key"; + private static String RELATIONSHIP_VALUE = "relationship-value"; + private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-name-version-id"; + + + private static Logger logger = LoggerFactory.getInstance().getLogger(ModelV8ArtifactParser.class.getName()); + + public List<Artifact> parse(byte[] artifactPayload, String artifactName) { + String payload = new String(artifactPayload); + List<Artifact> modelList = new ArrayList<Artifact>(); + + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(payload)); + Document doc = builder.parse(is); + + ModelV8Artifact model = parseModel(doc.getDocumentElement(), payload); + + if (model != null) { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> " + "Model-Named-Version-Id: "+ model.getModelNameVersionId()); + modelList.add(model); + } + else { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse legacy model artifact " + artifactName); + return null; + } + } + catch (Exception ex) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse legacy model artifact " + artifactName + ": " + ex.getLocalizedMessage()); + } + + return modelList; + } + + private ModelV8Artifact parseModel(Node modelNode, String payload) { + ModelV8Artifact model = new ModelV8Artifact(); + model.setPayload(payload); + + Element e = (Element)modelNode; + model.setModelNamespace(e.getAttribute("xmlns")); + + parseNode(modelNode, model); + + if (model.getModelNameVersionId() == null) { + return null; + } + + return model; + } + + private void parseNode(Node node, ModelV8Artifact model) { + if (node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)) { + model.setModelNameVersionId(node.getTextContent().trim()); + } + else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) { + parseRelationshipNode(node, model); + } + else { + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + parseNode(childNode, model); + } + } + } + + private void parseRelationshipNode(Node node, ModelV8Artifact model) { + String key = null; + String value = null; + + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) { + key = childNode.getTextContent().trim(); + } + else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) { + value = childNode.getTextContent().trim(); + } + } + + if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) ) { + if (value != null) { + model.addDependentModelId(value); + } + } + } +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java new file mode 100644 index 0000000..1a4ceaa --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifact.java @@ -0,0 +1,113 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.config.ModelLoaderConfig; +import org.openecomp.modelloader.entity.ArtifactType; +import org.openecomp.modelloader.restclient.AaiRestClient; +import org.openecomp.modelloader.service.ModelLoaderMsgs; + +import com.sun.jersey.api.client.ClientResponse; + +public class NamedQueryArtifact extends AbstractModelArtifact { + + private Logger logger = LoggerFactory.getInstance().getLogger(NamedQueryArtifact.class.getName()); + + private String namedQueryUuid; + + public NamedQueryArtifact() { + super(ArtifactType.NAMED_QUERY); + } + + public String getNamedQueryUuid() { + return namedQueryUuid; + } + + public void setNamedQueryUuid(String namedQueryUuid) { + this.namedQueryUuid = namedQueryUuid; + } + + @Override + public String getUniqueIdentifier() { + return getNamedQueryUuid(); + } + + @Override + public boolean push(AaiRestClient aaiClient, ModelLoaderConfig config, String distId, List<AbstractModelArtifact> addedModels) { + ClientResponse getResponse = aaiClient.getResource(getNamedQueryUrl(config), distId, AaiRestClient.MimeType.XML); + if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) { + // Only attempt the PUT if the model doesn't already exist + ClientResponse putResponse = aaiClient.putResource(getNamedQueryUrl(config), getPayload(), distId, AaiRestClient.MimeType.XML); + if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) { + addedModels.add(this); + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " successfully ingested."); + } + else { + logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + getType().toString() + " " + getUniqueIdentifier() + + ". Rolling back distribution."); + return false; + } + } + else { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, getType().toString() + " " + getUniqueIdentifier() + " already exists. Skipping ingestion."); + } + + return true; + } + + @Override + public void rollbackModel(AaiRestClient aaiClient, ModelLoaderConfig config, String distId) { + // Best effort to delete. Nothing we can do in the event this fails. + aaiClient.getAndDeleteResource(getNamedQueryUrl(config), distId); + } + + private String getNamedQueryUrl(ModelLoaderConfig config) { + String baseURL = config.getAaiBaseUrl().trim(); + String subURL = null; + String instance = null; + + subURL = config.getAaiNamedQueryUrl(getModelNamespaceVersion()).trim(); + instance = this.getNamedQueryUuid(); + + if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) { + baseURL = baseURL + "/"; + } + + if ( baseURL.endsWith("/") && subURL.startsWith("/") ) { + baseURL = baseURL.substring(0, baseURL.length()-1); + } + + if (!subURL.endsWith("/")) { + subURL = subURL + "/"; + } + + String url = baseURL + subURL + instance; + return url; + } +} diff --git a/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java new file mode 100644 index 0000000..3643f18 --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParser.java @@ -0,0 +1,136 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.entity.Artifact; +import org.openecomp.modelloader.service.ModelLoaderMsgs; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + + +public class NamedQueryArtifactParser implements IModelParser { + + private static String NAMED_QUERY_VERSION_ID = "named-query-uuid"; + private static String RELATIONSHIP_DATA = "relationship-data"; + private static String RELATIONSHIP_KEY = "relationship-key"; + private static String RELATIONSHIP_VALUE = "relationship-value"; + private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id"; + + + private static Logger logger = LoggerFactory.getInstance().getLogger(NamedQueryArtifactParser.class.getName()); + + public List<Artifact> parse(byte[] artifactPayload, String artifactName) { + String payload = new String(artifactPayload); + List<Artifact> modelList = new ArrayList<Artifact>(); + + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(payload)); + Document doc = builder.parse(is); + + NamedQueryArtifact model = parseModel(doc.getDocumentElement(), payload); + + if (model != null) { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Named-Query parsed =====>>>> " + "Named-Query-UUID: "+ model.getNamedQueryUuid()); + modelList.add(model); + } + else { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse named-query artifact " + artifactName); + return null; + } + } + catch (Exception ex) { + logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse named-query artifact " + artifactName + ": " + ex.getLocalizedMessage()); + } + + return modelList; + } + + private NamedQueryArtifact parseModel(Node modelNode, String payload) { + NamedQueryArtifact model = new NamedQueryArtifact(); + model.setPayload(payload); + + Element e = (Element)modelNode; + model.setModelNamespace(e.getAttribute("xmlns")); + + parseNode(modelNode, model); + + if (model.getNamedQueryUuid() == null) { + return null; + } + + return model; + } + + private void parseNode(Node node, NamedQueryArtifact model) { + if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) { + model.setNamedQueryUuid(node.getTextContent().trim()); + } + else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) { + parseRelationshipNode(node, model); + } + else { + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + parseNode(childNode, model); + } + } + } + + private void parseRelationshipNode(Node node, NamedQueryArtifact model) { + String key = null; + String value = null; + + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) { + key = childNode.getTextContent().trim(); + } + else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) { + value = childNode.getTextContent().trim(); + } + } + + if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) ) { + if (value != null) { + model.addDependentModelId(value); + } + } + } +} diff --git a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java index 6079d5d..0ef2a42 100644 --- a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java +++ b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java @@ -1,75 +1,77 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.notification; - -import org.openecomp.sdc.api.consumer.IDistributionStatusMessage; -import org.openecomp.sdc.utils.DistributionStatusEnum; - -public class DistributionStatusMsg implements IDistributionStatusMessage { - private DistributionStatusEnum status; - private String distributionId; - private String consumerId; - private String artifactUrl; - - /** - * Creates a new DistributionStatusMsg instance. - * - * @param status - The distribution status to be reported. - * @param distributionId - The identifier of the distribution who's status is being rported on. - * @param consumerId - Identifier of the consumer associated with the distribution. - * @param artifactUrl - Resource identifier for the artifact. - */ - public DistributionStatusMsg(DistributionStatusEnum status, - String distributionId, - String consumerId, - String artifactUrl) { - this.status = status; - this.distributionId = distributionId; - this.consumerId = consumerId; - this.artifactUrl = artifactUrl; - } - - @Override - public long getTimestamp() { - long currentTimeMillis = System.currentTimeMillis(); - return currentTimeMillis; - } - - @Override - public DistributionStatusEnum getStatus() { - return status; - } - - @Override - public String getDistributionID() { - return distributionId; - } - - @Override - public String getConsumerID() { - return consumerId; - } - - @Override - public String getArtifactURL() { - return artifactUrl; - } -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.notification;
+
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
+import org.openecomp.sdc.utils.DistributionStatusEnum;
+
+public class DistributionStatusMsg implements IDistributionStatusMessage {
+ private DistributionStatusEnum status;
+ private String distributionId;
+ private String consumerId;
+ private String artifactUrl;
+
+ /**
+ * Creates a new DistributionStatusMsg instance.
+ *
+ * @param status - The distribution status to be reported.
+ * @param distributionId - The identifier of the distribution who's status is being rported on.
+ * @param consumerId - Identifier of the consumer associated with the distribution.
+ * @param artifactUrl - Resource identifier for the artifact.
+ */
+ public DistributionStatusMsg(DistributionStatusEnum status,
+ String distributionId,
+ String consumerId,
+ String artifactUrl) {
+ this.status = status;
+ this.distributionId = distributionId;
+ this.consumerId = consumerId;
+ this.artifactUrl = artifactUrl;
+ }
+
+ @Override
+ public long getTimestamp() {
+ long currentTimeMillis = System.currentTimeMillis();
+ return currentTimeMillis;
+ }
+
+ @Override
+ public DistributionStatusEnum getStatus() {
+ return status;
+ }
+
+ @Override
+ public String getDistributionID() {
+ return distributionId;
+ }
+
+ @Override
+ public String getConsumerID() {
+ return consumerId;
+ }
+
+ @Override
+ public String getArtifactURL() {
+ return artifactUrl;
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java index 3b32315..059964e 100644 --- a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java +++ b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.notification; import org.openecomp.sdc.api.IDistributionClient; @@ -40,8 +42,9 @@ import org.openecomp.modelloader.config.ModelLoaderConfig; import org.openecomp.modelloader.entity.Artifact; import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact; import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler; +import org.openecomp.modelloader.entity.model.IModelParser; import org.openecomp.modelloader.entity.model.ModelArtifactHandler; -import org.openecomp.modelloader.entity.model.ModelArtifactParser; +import org.openecomp.modelloader.entity.model.ModelParserFactory; import org.openecomp.modelloader.service.ModelLoaderMsgs; import org.slf4j.MDC; @@ -80,7 +83,6 @@ public class EventCallback implements INotificationCallback { List<IArtifactInfo> artifacts = getArtifacts(data); List<Artifact> modelArtifacts = new ArrayList<Artifact>(); List<Artifact> catalogArtifacts = new ArrayList<Artifact>(); - ModelArtifactParser modelArtParser = new ModelArtifactParser(); for (IArtifactInfo artifact : artifacts) { // Grab the current time so we can measure the download time for the @@ -102,16 +104,22 @@ public class EventCallback implements INotificationCallback { break; } - logger.debug("Artifact: " + artifact.getArtifactName() + " Payload:\n" + new String(downloadResult.getArtifactPayload())); + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, + "Downloaded artifact: " + artifact.getArtifactName() + " Payload:\n" + new String(downloadResult.getArtifactPayload())); publishDownloadSuccess(data, artifact, downloadResult); - if ((artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0) - || (artifact.getArtifactType() - .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) { - modelArtifacts.addAll(modelArtParser.parse(downloadResult.getArtifactPayload(), - downloadResult.getArtifactName())); + if ((artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0) + || (artifact.getArtifactType().compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) { + IModelParser parser = ModelParserFactory.createModelParser(downloadResult.getArtifactPayload(), downloadResult.getArtifactName()); + List<Artifact> parsedArtifacts = parser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName()); + if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) { + modelArtifacts.addAll(parsedArtifacts); + } else { + success = false; + publishDeployFailure(data, artifact); + break; + } } else if (artifact.getArtifactType() .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) { catalogArtifacts @@ -150,6 +158,8 @@ public class EventCallback implements INotificationCallback { } } } + } else { + statusString = "FAILURE"; } auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, @@ -212,9 +222,6 @@ public class EventCallback implements INotificationCallback { metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success", artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString()); - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, - "Downloaded artifact: " + artifact.getArtifactName()); - if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Failed to publish download success status: " diff --git a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java index e13bdbd..4d5e487 100644 --- a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java +++ b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.restclient; import com.sun.jersey.api.client.Client; @@ -292,6 +294,84 @@ public class AaiRestClient { } /** + * Send a POST request to the A&AI. + * + * @param url + * - the url + * @param transId + * - transaction ID + * @param payload + * - the XML or JSON payload for the request + * @param mimeType + * - the content type (XML or JSON) + * @return ClientResponse + */ + public ClientResponse postResource(String url, String payload, String transId, MimeType mimeType) { + ClientResponse result = null; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + long startTimeInMs = 0; + MdcOverride override = new MdcOverride(); + + try { + Client client = setupClient(); + + baos = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(baos); + if (logger.isDebugEnabled()) { + client.addFilter(new LoggingFilter(ps)); + } + + // Grab the current time so that we can use it for metrics purposes later. + startTimeInMs = System.currentTimeMillis(); + override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs)); + + if (useBasicAuth()) { + result = client.resource(url).header(HEADER_TRANS_ID, transId) + .header(HEADER_FROM_APP_ID, ML_APP_NAME) + .header(HEADER_AUTHORIZATION, getAuthenticationCredentials()) + .type(mimeType.getHttpHeaderType()).post(ClientResponse.class, payload); + } else { + result = client.resource(url).header(HEADER_TRANS_ID, transId) + .header(HEADER_FROM_APP_ID, ML_APP_NAME).type(mimeType.getHttpHeaderType()) + .post(ClientResponse.class, payload); + } + } catch (Exception ex) { + logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "POST", url, ex.getLocalizedMessage()); + return null; + } finally { + if (logger.isDebugEnabled()) { + logger.debug(baos.toString()); + } + } + + if ((result != null) && ((result.getStatus() == Response.Status.CREATED.getStatusCode()) + || (result.getStatus() == Response.Status.OK.getStatusCode()))) { + logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "POST", url, + Integer.toString(result.getStatus())); + metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, + new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()) + .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, + result.getResponseStatus().toString()), + override, "POST", url, Integer.toString(result.getStatus())); + } else { + // If response is not 200 OK, then additionally log the reason + String respMsg = result.getEntity(String.class); + if (respMsg == null) { + respMsg = result.getStatusInfo().getReasonPhrase(); + } + logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, "POST", url, + Integer.toString(result.getStatus()), respMsg); + metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, + new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()) + .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION, + result.getResponseStatus().toString()), + override, "POST", url, Integer.toString(result.getStatus()), respMsg); + } + + return result; + } + + /** * Does a GET on a resource to retrieve the resource version, and then DELETE * that version. * diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java index 689115e..99c5735 100644 --- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java +++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java @@ -1,53 +1,55 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.service; - -import java.io.IOException; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; - -public interface ModelLoaderInterface { - - @GET - @Path("/loadModel/{modelid}") - public Response loadModel(@PathParam("modelid") String modelid); - - @PUT - @Path("/saveModel/{modelid}/{modelname}") - public Response saveModel(@PathParam("modelid") String modelid, - @PathParam("modelname") String modelname); - - @POST - @Consumes("application/xml") - @Produces("application/xml") - @Path("/ingestModel/{modelid}") - public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req, - String payload) throws IOException; -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.service;
+
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+
+public interface ModelLoaderInterface {
+
+ @GET
+ @Path("/loadModel/{modelid}")
+ public Response loadModel(@PathParam("modelid") String modelid);
+
+ @PUT
+ @Path("/saveModel/{modelid}/{modelname}")
+ public Response saveModel(@PathParam("modelid") String modelid,
+ @PathParam("modelname") String modelname);
+
+ @POST
+ @Consumes("application/xml")
+ @Produces("application/xml")
+ @Path("/ingestModel/{modelid}")
+ public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req,
+ String payload) throws IOException;
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java index b81c541..2d3137b 100644 --- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java +++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java @@ -1,102 +1,110 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.service; - -import com.att.eelf.i18n.EELFResourceManager; - -import org.openecomp.cl.eelf.LogMessageEnum; - -public enum ModelLoaderMsgs implements LogMessageEnum { - - /** - * Arguments: None. - */ - LOADING_CONFIGURATION, - - /** - * Arguments: None. - */ - STOPPING_CLIENT, - - /** - * Arguments: {0} = message. - */ - INITIALIZING, - - /** - * Arguments: {0} = reason. - */ - ASDC_CONNECTION_ERROR, - - /** - * Arguments: {0} = message. - */ - DISTRIBUTION_EVENT, - - /** - * Arguments: {0} = error message. - */ - DISTRIBUTION_EVENT_ERROR, - - /** - * Arguments: {0} = request type. - * {1} = endpoint. - * {2} = result code. - */ - AAI_REST_REQUEST_SUCCESS, - - /** - * Arguments: {0} = request type. - * {1} = endpoint. - * {2} = result code. - * {3} = result. - * message - */ - AAI_REST_REQUEST_UNSUCCESSFUL, - - /** - * Arguments: {0} = request type. - * {1} = endpoint. - * {2} = error message. - */ - AAI_REST_REQUEST_ERROR, - - /** - * Arguments: {0} = artifact name. - * {1} = result. - */ - DOWNLOAD_COMPLETE, - - /** - * Arguments: {0} = event. - * {1} = artifact name. - * {2} = result. - */ - EVENT_PUBLISHED; - - /** - * Load message bundle (ModelLoaderMsgs.properties file) - */ - static { - EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs"); - } - -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.service;
+
+import com.att.eelf.i18n.EELFResourceManager;
+
+import org.openecomp.cl.eelf.LogMessageEnum;
+
+public enum ModelLoaderMsgs implements LogMessageEnum {
+
+ /**
+ * Arguments: None.
+ */
+ LOADING_CONFIGURATION,
+
+ /**
+ * Arguments: None.
+ */
+ STOPPING_CLIENT,
+
+ /**
+ * Arguments: {0} = message.
+ */
+ INITIALIZING,
+
+ /**
+ * Arguments: {0} = reason.
+ */
+ ASDC_CONNECTION_ERROR,
+
+ /**
+ * Arguments: {0} = message.
+ */
+ DISTRIBUTION_EVENT,
+
+ /**
+ * Arguments: {0} = error message.
+ */
+ DISTRIBUTION_EVENT_ERROR,
+
+ /**
+ * Arguments: {0} = request type.
+ * {1} = endpoint.
+ * {2} = result code.
+ */
+ AAI_REST_REQUEST_SUCCESS,
+
+ /**
+ * Arguments: {0} = request type.
+ * {1} = endpoint.
+ * {2} = result code.
+ * {3} = result.
+ * message
+ */
+ AAI_REST_REQUEST_UNSUCCESSFUL,
+
+ /**
+ * Arguments: {0} = request type.
+ * {1} = endpoint.
+ * {2} = error message.
+ */
+ AAI_REST_REQUEST_ERROR,
+
+ /**
+ * Arguments:
+ * {0} = artifact name
+ */
+ ARTIFACT_PARSE_ERROR,
+
+ /**
+ * Arguments: {0} = artifact name.
+ * {1} = result.
+ */
+ DOWNLOAD_COMPLETE,
+
+ /**
+ * Arguments: {0} = event.
+ * {1} = artifact name.
+ * {2} = result.
+ */
+ EVENT_PUBLISHED;
+
+ /**
+ * Load message bundle (ModelLoaderMsgs.properties file)
+ */
+ static {
+ EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs");
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java index 16aba7e..786f1a2 100644 --- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java +++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.service; import org.openecomp.sdc.api.IDistributionClient; @@ -31,11 +33,13 @@ import org.openecomp.modelloader.config.ModelLoaderConfig; import org.openecomp.modelloader.entity.model.ModelArtifactHandler; import org.openecomp.modelloader.notification.EventCallback; +import java.io.FileInputStream; import java.io.IOException; +import java.util.Date; import java.util.Properties; +import java.util.Timer; +import java.util.TimerTask; -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Response; @@ -44,131 +48,157 @@ import javax.ws.rs.core.Response; * capabilities between AAI and an ASDC. */ public class ModelLoaderService implements ModelLoaderInterface { - - protected static String CONFIG_FILE = "model-loader.properties"; - - private IDistributionClient client; - private ModelLoaderConfig config; - - static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName()); - - /** - * Responsible for loading configuration files and calling initialization. - */ - @PostConstruct - protected void start() { - // Load model loader system configuration - logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION); - Properties configProperties = new Properties(); - try { - configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)); - } catch (IOException e) { - String errorMsg = "Failed to load configuration: " + e.getMessage(); - logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); - shutdown(); - } - - config = new ModelLoaderConfig(configProperties); - init(); - } - - /** - * Responsible for stopping the connection to the distribution client before - * the resource is destroyed. - */ - @PreDestroy - protected void preShutdownOperations() { - logger.info(ModelLoaderMsgs.STOPPING_CLIENT); - if (client != null) { - client.stop(); - } - } - - /** - * Responsible for loading configuration files, initializing model - * distribution clients, and starting them. - */ - protected void init() { - // Initialize distribution client - logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client..."); - client = DistributionClientFactory.createDistributionClient(); - IDistributionClientResult initResult = client.init(config, new EventCallback(client, config)); - if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - String errorMsg = "Failed to initialize distribution client: " - + initResult.getDistributionMessageResult(); - logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); - shutdown(); - } - - // Start distribution client - logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client..."); - IDistributionClientResult startResult = client.start(); - if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - String errorMsg = "Failed to start distribution client: " - + startResult.getDistributionMessageResult(); - logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); - shutdown(); - } - - logger.debug(ModelLoaderMsgs.INITIALIZING, - "Succcessfully loaded service: " + this.getClass().getSimpleName()); - } - - /** - * Shut down the process. - */ - private void shutdown() { - preShutdownOperations(); - - // TODO: Find a better way to shut down the model loader. - try { - // Give logs time to write to file - Thread.sleep(2000); - } catch (InterruptedException e) { - // Nothing we can do at this point - } - - Runtime.getRuntime().halt(1); - } - - /** (non-Javadoc) - * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String) - */ - @Override - public Response loadModel(String modelid) { - Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build(); - - return response; - } - - /** (non-Javadoc) - * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String) - */ - @Override - public Response saveModel(String modelid, String modelname) { - Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}") - .build(); - - return response; - } - - @Override - public Response ingestModel(String modelid, HttpServletRequest req, String payload) - throws IOException { - Response response; - - if (config.getIngestSimulatorEnabled()) { - logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact"); - - ModelArtifactHandler handler = new ModelArtifactHandler(config); - handler.loadModelTest(payload.getBytes()); - - response = Response.ok().build(); - } else { - logger.debug("Simulation interface disabled"); - response = Response.serverError().build(); - } - - return response; - } + + protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/" + : System.getProperty("file.separator"); + + protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP; + protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP; + protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties"; + + private IDistributionClient client; + private ModelLoaderConfig config; + private Timer timer = null; + + static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName()); + + /** + * Responsible for loading configuration files and calling initialization. + */ + public ModelLoaderService() { + start(); + } + + protected void start() { + // Load model loader system configuration + logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION); + Properties configProperties = new Properties(); + try { + configProperties.load(new FileInputStream(CONFIG_FILE)); + } catch (IOException e) { + String errorMsg = "Failed to load configuration: " + e.getMessage(); + logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); + shutdown(); + } + + config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION); + init(); + + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable(){ + public void run() { + preShutdownOperations(); + } + })); + } + + /** + * Responsible for stopping the connection to the distribution client before + * the resource is destroyed. + */ + protected void preShutdownOperations() { + logger.info(ModelLoaderMsgs.STOPPING_CLIENT); + if (client != null) { + client.stop(); + } + } + + /** + * Responsible for loading configuration files, initializing model + * distribution clients, and starting them. + */ + protected void init() { + // Initialize distribution client + logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client..."); + client = DistributionClientFactory.createDistributionClient(); + EventCallback callback = new EventCallback(client, config); + + IDistributionClientResult initResult = client.init(config, callback); + + if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + String errorMsg = "Failed to initialize distribution client: " + + initResult.getDistributionMessageResult(); + logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); + + // Kick off a timer to retry the SDC connection + timer = new Timer(); + TimerTask task = new SdcConnectionJob(client, config, callback, timer); + timer.schedule(task, new Date(), 60000); + } + else { + // Start distribution client + logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client..."); + IDistributionClientResult startResult = client.start(); + if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + String errorMsg = "Failed to start distribution client: " + + startResult.getDistributionMessageResult(); + logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); + + // Kick off a timer to retry the SDC connection + timer = new Timer(); + TimerTask task = new SdcConnectionJob(client, config, callback, timer); + timer.schedule(task, new Date(), 60000); + } + else { + logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established"); + } + } + } + + /** + * Shut down the process. + */ + private void shutdown() { + preShutdownOperations(); + + // TODO: Find a better way to shut down the model loader. + try { + // Give logs time to write to file + Thread.sleep(2000); + } catch (InterruptedException e) { + // Nothing we can do at this point + } + + Runtime.getRuntime().halt(1); + } + + /** (non-Javadoc) + * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String) + */ + @Override + public Response loadModel(String modelid) { + Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build(); + + return response; + } + + /** (non-Javadoc) + * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String) + */ + @Override + public Response saveModel(String modelid, String modelname) { + Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}") + .build(); + + return response; + } + + @Override + public Response ingestModel(String modelid, HttpServletRequest req, String payload) + throws IOException { + Response response; + + if (config.getIngestSimulatorEnabled()) { + logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact"); + + ModelArtifactHandler handler = new ModelArtifactHandler(config); + handler.loadModelTest(payload.getBytes()); + + response = Response.ok().build(); + } else { + logger.debug("Simulation interface disabled"); + response = Response.serverError().build(); + } + + return response; + } } diff --git a/src/main/java/org/openecomp/modelloader/service/SdcConnectionJob.java b/src/main/java/org/openecomp/modelloader/service/SdcConnectionJob.java new file mode 100644 index 0000000..bb3741c --- /dev/null +++ b/src/main/java/org/openecomp/modelloader/service/SdcConnectionJob.java @@ -0,0 +1,79 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.service; + +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; + +import org.openecomp.cl.api.Logger; +import org.openecomp.cl.eelf.LoggerFactory; +import org.openecomp.modelloader.config.ModelLoaderConfig; +import org.openecomp.modelloader.notification.EventCallback; +import org.openecomp.sdc.api.IDistributionClient; +import org.openecomp.sdc.api.results.IDistributionClientResult; +import org.openecomp.sdc.utils.DistributionActionResultEnum; + +public class SdcConnectionJob extends TimerTask { + static Logger logger = LoggerFactory.getInstance().getLogger(SdcConnectionJob.class.getName()); + + private IDistributionClient client; + private ModelLoaderConfig config; + private EventCallback callback; + private Timer timer; + + public SdcConnectionJob(IDistributionClient client, + ModelLoaderConfig config, + EventCallback callback, + Timer timer) { + this.client = client; + this.timer = timer; + this.callback = callback; + this.config = config; + } + + @Override + public void run() { + + IDistributionClientResult initResult = client.init(config, callback); + + if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + String errorMsg = "Failed to initialize distribution client: " + + initResult.getDistributionMessageResult(); + logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); + return; + } + + IDistributionClientResult startResult = client.start(); + if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + String errorMsg = "Failed to start distribution client: " + + startResult.getDistributionMessageResult(); + logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg); + return; + } + + // Success. Cancel the timer job + timer.cancel(); + logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established"); + } +} diff --git a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java index ca63b23..621f704 100644 --- a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java +++ b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java @@ -1,79 +1,81 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.util; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.json.XML; - -public class JsonXmlConverter { - - /** - * Determines whether or not the supplied text string represents a valid - * JSON structure or not. - * - * @param text - The text to be evaluated. - * - * @return - true if the string represents a valid JSON object, - * false, otherwise. - */ - public static boolean isValidJson(String text) { - try { - new JSONObject(text); - } catch (JSONException ex) { - try { - new JSONArray(text); - } catch (JSONException ex1) { - return false; - } - } - - return true; - } - - /** - * Takes a text string representing a valid JSON structure and converts it to - * an equivalent XML string. - * - * @param jsonText - The JSON string to convert to XML. - * - * @return - An XML string representation of the supplied JSON string. - */ - public static String convertJsonToXml(String jsonText) { - JSONObject jsonObj = new JSONObject(jsonText); - String xmlText = XML.toString(jsonObj); - return xmlText; - } - - /** - * Takes a text string representing a valid XML structure and converts it to - * an equivalent JSON string. - * - * @param xmlText - The XML string to convert to JSON. - * - * @return - A JSON string representation of the supplied XML string. - */ - public static String convertXmlToJson(String xmlText) { - JSONObject jsonObj = XML.toJSONObject(xmlText); - return jsonObj.toString(); - } -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.util;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.XML;
+
+public class JsonXmlConverter {
+
+ /**
+ * Determines whether or not the supplied text string represents a valid
+ * JSON structure or not.
+ *
+ * @param text - The text to be evaluated.
+ *
+ * @return - true if the string represents a valid JSON object,
+ * false, otherwise.
+ */
+ public static boolean isValidJson(String text) {
+ try {
+ new JSONObject(text);
+ } catch (JSONException ex) {
+ try {
+ new JSONArray(text);
+ } catch (JSONException ex1) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Takes a text string representing a valid JSON structure and converts it to
+ * an equivalent XML string.
+ *
+ * @param jsonText - The JSON string to convert to XML.
+ *
+ * @return - An XML string representation of the supplied JSON string.
+ */
+ public static String convertJsonToXml(String jsonText) {
+ JSONObject jsonObj = new JSONObject(jsonText);
+ String xmlText = XML.toString(jsonObj);
+ return xmlText;
+ }
+
+ /**
+ * Takes a text string representing a valid XML structure and converts it to
+ * an equivalent JSON string.
+ *
+ * @param xmlText - The XML string to convert to JSON.
+ *
+ * @return - A JSON string representation of the supplied XML string.
+ */
+ public static String convertXmlToJson(String xmlText) {
+ JSONObject jsonObj = XML.toJSONObject(xmlText);
+ return jsonObj.toString();
+ }
+}
diff --git a/src/main/resources/aai-os-cert.p12 b/src/main/resources/aai-os-cert.p12 Binary files differdeleted file mode 100644 index ee57120..0000000 --- a/src/main/resources/aai-os-cert.p12 +++ /dev/null diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml deleted file mode 100644 index 48233fe..0000000 --- a/src/main/resources/logback.xml +++ /dev/null @@ -1,195 +0,0 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<configuration scan="true" scanPeriod="3 seconds" debug="false"> - <!--<jmxConfigurator /> --> - <!-- directory path for all other type logs --> - - <property name="logDir" value="logs" /> - - - <!-- specify the component name <ECOMP-component-name>::= "MSO" | "DCAE" - | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC" --> - <property name="componentName" value="AAI-ML"></property> - - <!-- default eelf log file names --> - <property name="generalLogName" value="error" /> - <property name="metricsLogName" value="metrics" /> - <property name="auditLogName" value="audit" /> - <property name="debugLogName" value="debug" /> - - <property name="errorLogPattern" - value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{RequestId}|%thread|ModelLoader|%mdc{PartnerName}|%logger||%.-5level|%msg%n" /> - <property name="auditMetricPattern" value="%m%n" /> - - <property name="logDirectory" value="${logDir}/${componentName}" /> - - <!-- Example evaluator filter applied against console appender --> - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - - <!-- ============================================================================ --> - <!-- EELF Appenders --> - <!-- ============================================================================ --> - - <!-- The EELFAppender is used to record events to the general application - log --> - - <appender name="EELF" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${generalLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - <maxHistory>60</maxHistory> - </rollingPolicy> - <encoder> - <pattern>${errorLogPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender"> - <!-- deny all events with a level below INFO, that is TRACE and DEBUG --> - <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> - <level>INFO</level> - </filter> - <queueSize>256</queueSize> - <appender-ref ref="EELF" /> - </appender> - - - <appender name="EELFAudit" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${auditLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - <maxHistory>60</maxHistory> - </rollingPolicy> - <encoder> - <pattern>${auditMetricPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFAudit" /> - </appender> - - - <appender name="EELFMetrics" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${metricsLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - <maxHistory>60</maxHistory> - </rollingPolicy> - <encoder> - <pattern>${auditMetricPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFMetrics" /> - </appender> - - - <appender name="EELFDebug" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${debugLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - <maxHistory>60</maxHistory> - </rollingPolicy> - <encoder> - <pattern>${errorLogPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFDebug" /> - <includeCallerData>true</includeCallerData> - </appender> - - - <!-- ============================================================================ --> - <!-- EELF loggers --> - <!-- ============================================================================ --> - <logger name="com.att.eelf" level="info" additivity="false"> - <appender-ref ref="asyncEELF" /> - <appender-ref ref="asyncEELFDebug" /> - </logger> - - <logger name="com.att.eelf.security" level="info" additivity="false"> - <appender-ref ref="asyncEELFSecurity" /> - </logger> - <logger name="com.att.eelf.perf" level="info" additivity="false"> - <appender-ref ref="asyncEELFPerformance" /> - </logger> - <logger name="com.att.eelf.server" level="info" additivity="false"> - <appender-ref ref="asyncEELFServer" /> - </logger> - <logger name="com.att.eelf.policy" level="info" additivity="false"> - <appender-ref ref="asyncEELFPolicy" /> - </logger> - <logger name="com.att.eelf.audit" level="info" additivity="false"> - <appender-ref ref="asyncEELFAudit" /> - </logger> - <logger name="com.att.eelf.metrics" level="info" additivity="false"> - <appender-ref ref="asyncEELFMetrics" /> - </logger> - - <!-- Spring related loggers --> - <logger name="org.springframework" level="WARN" /> - <logger name="org.springframework.beans" level="WARN" /> - <logger name="org.springframework.web" level="WARN" /> - <logger name="com.blog.spring.jms" level="WARN" /> - - <logger name="com.att" level="INFO" /> - - <!-- Model Loader loggers --> - <logger name="org.openecomp.modelloader" level="INFO" /> - - <!-- Other Loggers that may help troubleshoot --> - <logger name="net.sf" level="WARN" /> - <logger name="org.apache.commons.httpclient" level="WARN" /> - <logger name="org.apache.commons" level="WARN" /> - <logger name="org.apache.coyote" level="WARN" /> - <logger name="org.apache.jasper" level="WARN" /> - - <!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging. - May aid in troubleshooting) --> - <logger name="org.apache.camel" level="WARN" /> - <logger name="org.apache.cxf" level="WARN" /> - <logger name="org.apache.camel.processor.interceptor" level="WARN" /> - <logger name="org.apache.cxf.jaxrs.interceptor" level="WARN" /> - <logger name="org.apache.cxf.service" level="WARN" /> - <logger name="org.restlet" level="WARN" /> - <logger name="org.apache.camel.component.restlet" level="WARN" /> - - <!-- logback internals logging --> - <logger name="ch.qos.logback.classic" level="WARN" /> - <logger name="ch.qos.logback.core" level="WARN" /> - - <root> - <appender-ref ref="asyncEELF" /> - <!-- <appender-ref ref="asyncEELFDebug" /> --> - </root> - -</configuration> diff --git a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties b/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties deleted file mode 100644 index 9abd55c..0000000 --- a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties +++ /dev/null @@ -1,81 +0,0 @@ -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - -#Resource key=Error Code|Message text|Resolution text |Description text -####### -#Newlines can be utilized to add some clarity ensuring continuing line -#has atleast one leading space -#ResourceKey=\ -# ERR0000E\ -# Sample error msg txt\ -# Sample resolution msg\ -# Sample description txt -# -###### -#Error code classification category -#100 Permission errors -#200 Availability errors/Timeouts -#300 Data errors -#400 Schema Interface type/validation errors -#500 Business process errors -#900 Unknown errors -# -######################################################################## - -#AVAILABILITY ERRORS - -LOADING_FROM_FILE=\ - FILEMON2001I|\ - Loading service properties from file {0}|\ - None. Attempting to load file|\ - Attempting to load service properties from the given service file - -FILE_SUCCESSFULLY_LOADED=\ - FILEMON2002I|\ - File {0} is loaded into the map and the corresponding system properties have been refreshed|\ - None. Successfully loaded file|\ - The given service file and its properties were successfully loaded - -FILE_CANNOT_BE_LOADED=\ - FILEMON2003E|\ - File {0} cannot be loaded into the map|\ - Please check the file permissions and format of the file|\ - Unable to load the given service file due to an error - -CANNOT_READ_FILE_STREAM=\ - FILEMON2004E|\ - Error reading the file stream for file {0}|\ - Please ensure that the file exists and the permissions are set correctly|\ - Unable to read the file stream for the given file - -#UNKNOWN ERRORS - -FILE_LISTENER_ATTACH_FAILED=\ - FILEMON9002W|\ - Unable to attach file change listener to file {0} due to an internal error|\ - Failed to attach file change listener to the given file. Please check the reported exception for details|\ - The file will not be actively monitored for changes - - -PROP_MAP_CREATION_FAILED=\ - FILEMON9001E|\ - Internal Error occurred while creating property map for service files|\ - Error occurred due to an internal issue. Please check the reported exception for details |\ - Failed to create a property map for the service files diff --git a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties index 53c96dc..8e2d043 100644 --- a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties +++ b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties @@ -1,112 +1,118 @@ -### +###
# ============LICENSE_START======================================================= # MODEL LOADER SERVICE # ================================================================================ # Copyright (C) 2017 AT&T Intellectual Property. 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 +# 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. -# ============LICENSE_END========================================================= -### - -#Resource key=Error Code|Message text|Resolution text |Description text -####### -#Newlines can be utilized to add some clarity ensuring continuing line -#has at least one leading space -#ResourceKey=\ -# ERR0000E\ -# Sample error msg txt\ -# Sample resolution msg\ -# Sample description txt -# -###### -#Error code classification category -#000 Info/Debug -#100 Permission errors -#200 Availability errors/Timeouts -#300 Data errors -#400 Schema Interface type/validation errors -#500 Business process errors -#900 Unknown errors -# -######################################################################## - -# INFO Level Logs -LOADING_CONFIGURATION=\ - MDLSVC0001I|\ - Loading configuration |\ - None. Attempting to load configuration|\ - Attempting to load Model Loader Service configuration - -STOPPING_CLIENT=\ - MDLSVC0002I|\ - Stopping distribution client|\ - None. Stopping service|\ - Stopping the Model Service distribution client - -DISTRIBUTION_EVENT=\ - MDLSVC0003I|\ - Distribution event: {0}|\ - None. Processing distribution.|\ - A distribution event was received from the ASDC - -AAI_REST_REQUEST_SUCCESS=\ - MDLSVC0004I|\ - Sent {0} request to {1}. Response: {2}|\ - None. Successfully sent REST request to AAI.|\ - The given request was sent to the specified endpoint. - -AAI_REST_REQUEST_UNSUCCESSFUL=\ - MDLSVC0005I|\ - Sent {0} request to {1}. Response code: {2}, Response message: {3}|\ - REST request to AAI unsuccessful. Check response code, and message. |\ - The given request was unsuccessful. - -DOWNLOAD_COMPLETE=\ - MDLSVC0006I|\ - Download of artifact {0} from ASDC complete. Result: {1}|\ - None.|\ - An artifact was downloaded from the ASDC - -EVENT_PUBLISHED=\ - MDLSVC0007I|\ - Published {0} event for artifact {1}. Result: {2}|\ - None.|\ - An event was published to the event bus - -# ERROR Level Logs -ASDC_CONNECTION_ERROR=\ - MDLSVC2001E|\ - Unable to register with ASDC: {0}|\ - Check configuration. Check network connection to ASDC|\ - During initialization, was not able to register with the configured ASDC instance - -DISTRIBUTION_EVENT_ERROR=\ - MDLSVC2002E|\ - Distribution event error: {0}|\ - Check configuration. Check network connection to ASDC and UEB|\ - A failure occurred processing a distribution event - -AAI_REST_REQUEST_ERROR=\ - MDLSVC2003E|\ - Failed to send {0} request to {1}: {2}|\ - Check configuration. Check network connection to AAI.|\ - A failure occurred attempting to send a request to the AAI - -# DEBUG Level Logs -INITIALIZING=\ - MDLSVC0001D|\ - init(): {0}|\ - None. Initializing service|\ - Debug information during model loader initialization - - +# ============LICENSE_END=========================================================
+###
+
+#Resource key=Error Code|Message text|Resolution text |Description text
+#######
+#Newlines can be utilized to add some clarity ensuring continuing line
+#has at least one leading space
+#ResourceKey=\
+# ERR0000E\
+# Sample error msg txt\
+# Sample resolution msg\
+# Sample description txt
+#
+######
+#Error code classification category
+#000 Info/Debug
+#100 Permission errors
+#200 Availability errors/Timeouts
+#300 Data errors
+#400 Schema Interface type/validation errors
+#500 Business process errors
+#900 Unknown errors
+#
+########################################################################
+
+# INFO Level Logs
+LOADING_CONFIGURATION=\
+ MDLSVC0001I|\
+ Loading configuration |\
+ None. Attempting to load configuration|\
+ Attempting to load Model Loader Service configuration
+
+STOPPING_CLIENT=\
+ MDLSVC0002I|\
+ Stopping distribution client|\
+ None. Stopping service|\
+ Stopping the Model Service distribution client
+
+DISTRIBUTION_EVENT=\
+ MDLSVC0003I|\
+ Distribution event: {0}|\
+ None. Processing distribution.|\
+ A distribution event was received from the ASDC
+
+AAI_REST_REQUEST_SUCCESS=\
+ MDLSVC0004I|\
+ Sent {0} request to {1}. Response: {2}|\
+ None. Successfully sent REST request to AAI.|\
+ The given request was sent to the specified endpoint.
+
+AAI_REST_REQUEST_UNSUCCESSFUL=\
+ MDLSVC0005I|\
+ Sent {0} request to {1}. Response code: {2}, Response message: {3}|\
+ REST request to AAI unsuccessful. Check response code, and message. |\
+ The given request was unsuccessful.
+
+DOWNLOAD_COMPLETE=\
+ MDLSVC0006I|\
+ Download of artifact {0} from ASDC complete. Result: {1}|\
+ None.|\
+ An artifact was downloaded from the ASDC
+
+EVENT_PUBLISHED=\
+ MDLSVC0007I|\
+ Published {0} event for artifact {1}. Result: {2}|\
+ None.|\
+ An event was published to the event bus
+
+# ERROR Level Logs
+ASDC_CONNECTION_ERROR=\
+ MDLSVC2001E|\
+ Unable to register with ASDC: {0}|\
+ Check configuration. Check network connection to ASDC|\
+ During initialization, was not able to register with the configured ASDC instance
+
+DISTRIBUTION_EVENT_ERROR=\
+ MDLSVC2002E|\
+ Distribution event error: {0}|\
+ Check configuration. Check network connection to ASDC and UEB|\
+ A failure occurred processing a distribution event
+
+AAI_REST_REQUEST_ERROR=\
+ MDLSVC2003E|\
+ Failed to send {0} request to {1}: {2}|\
+ Check configuration. Check network connection to AAI.|\
+ A failure occurred attempting to send a request to the AAI
+
+ARTIFACT_PARSE_ERROR=\
+ MDLSVC2004E|\
+ Failed to parse artifact: {0}|\
+ Check artifact. |\
+ A failure occurred attempting to parse artifact from SDC
+
+# DEBUG Level Logs
+INITIALIZING=\
+ MDLSVC0001D|\
+ init(): {0}|\
+ None. Initializing service|\
+ Debug information during model loader initialization
+
+
diff --git a/src/main/resources/schema/aai_schema_v8.xsd b/src/main/resources/schema/aai_schema_v8.xsd index 66bc3db..14f2610 100644 --- a/src/main/resources/schema/aai_schema_v8.xsd +++ b/src/main/resources/schema/aai_schema_v8.xsd @@ -1,2462 +1,2462 @@ -<?xml version="1.0" encoding="UTF-8" standalone="yes"?> -<!-- +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
============LICENSE_START======================================================= MODEL LOADER SERVICE ================================================================================ Copyright (C) 2017 AT&T Intellectual Property. 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 + 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. - ============LICENSE_END========================================================= - --> - -<xs:schema elementFormDefault="qualified" version="1.0" - targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8" - xmlns:xs="http://www.w3.org/2001/XMLSchema"> - - <xs:element name="inventory-item-data"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="inventory-item"> - <xs:complexType> - <xs:sequence> - <xs:element name="inventory-item-type" type="xs:string" - minOccurs="0" /> - <xs:element name="inventory-item-link" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:inventory-item-data" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element ref="tns:tagged-inventory-item-list" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="tagged-inventory-item-list"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:inventory-item" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="edge-tag-query-result"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:tagged-inventory-item-list" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="start-node-filter"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="include-node-filter"> - <xs:complexType> - <xs:sequence> - <xs:element name="include-node-type" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="secondary-filter"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - <xs:element name="filter-type" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="edge-tag-query-request"> - <xs:complexType> - <xs:sequence> - <xs:element name="edge-tag" type="xs:string" minOccurs="0" /> - <xs:element name="result-detail" type="xs:string" - minOccurs="0" /> - <xs:element name="start-node-type" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:start-node-filter" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element ref="tns:include-node-filter" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element ref="tns:secondary-filter" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="result-data"> - <xs:complexType> - <xs:sequence> - <xs:element name="resource-type" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-link" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="search-results"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:result-data" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="relationship-data"> - <xs:complexType> - <xs:sequence> - <xs:element name="relationship-key" type="xs:string" /> - <xs:element name="relationship-value" type="xs:string" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="related-to-property"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-key" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="relationship"> - <xs:complexType> - <xs:sequence> - <xs:element name="related-to" type="xs:string" minOccurs="0" /> - <xs:element name="related-link" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-data" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element ref="tns:related-to-property" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="relationship-list"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:relationship" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="oam-network"> - <xs:complexType> - <xs:sequence> - <xs:element name="network-uuid" type="xs:string" /> - <xs:element name="network-name" type="xs:string" /> - <xs:element name="cvlan-tag" type="xs:unsignedInt" /> - <xs:element name="ipv4-oam-gateway-address" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-gateway-address-prefix-length" - type="xs:int" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="oam-networks"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:oam-network" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="dvs-switch"> - <xs:complexType> - <xs:sequence> - <xs:element name="switch-name" type="xs:string" /> - <xs:element name="vcenter-url" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="dvs-switches"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="availability-zone"> - <xs:complexType> - <xs:sequence> - <xs:element name="availability-zone-name" type="xs:string" /> - <xs:element name="hypervisor-type" type="xs:string" /> - <xs:element name="operational-state" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="az-and-dvs-switches"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:dvs-switches" minOccurs="0" /> - <xs:element ref="tns:availability-zone" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="sdn-zone-response"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:oam-networks" minOccurs="0" /> - <xs:element ref="tns:az-and-dvs-switches" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="search"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:edge-tag-query-result" minOccurs="0" /> - <xs:element ref="tns:edge-tag-query-request" minOccurs="0" /> - <xs:element ref="tns:search-results" minOccurs="0" /> - <xs:element ref="tns:sdn-zone-response" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="update-node-key"> - <xs:complexType> - <xs:sequence> - <xs:element name="key-name" type="xs:string" minOccurs="0" /> - <xs:element name="key-value" type="xs:string" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="action-data"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="action"> - <xs:complexType> - <xs:sequence> - <xs:element name="action-type" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:action-data" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="update"> - <xs:complexType> - <xs:sequence> - <xs:element name="update-node-type" type="xs:string" /> - <xs:element ref="tns:update-node-key" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element name="update-node-uri" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="key-data"> - <xs:complexType> - <xs:sequence> - <xs:element name="key-name" type="xs:string" minOccurs="0" /> - <xs:element name="key-value" type="xs:string" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="notify"> - <xs:complexType> - <xs:sequence> - <xs:element name="event-id" type="xs:string" /> - <xs:element name="node-type" type="xs:string" minOccurs="0" /> - <xs:element name="event-trigger" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="selflink" type="xs:string" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="actions"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:update" minOccurs="0" /> - <xs:element ref="tns:notify" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ctag-pool"> - <xs:complexType> - <xs:sequence> - <xs:element name="target-pe" type="xs:string" /> - <xs:element name="availability-zone-name" type="xs:string" /> - <xs:element name="ctag-pool-purpose" type="xs:string" /> - <xs:element name="ctag-values" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ctag-pools"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="complex"> - <xs:complexType> - <xs:sequence> - <xs:element name="physical-location-id" type="xs:string" /> - <xs:element name="data-center-code" type="xs:string" - minOccurs="0" /> - <xs:element name="complex-name" type="xs:string" - minOccurs="0" /> - <xs:element name="identity-url" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="physical-location-type" type="xs:string" /> - <xs:element name="street1" type="xs:string" /> - <xs:element name="street2" type="xs:string" minOccurs="0" /> - <xs:element name="city" type="xs:string" /> - <xs:element name="state" type="xs:string" minOccurs="0" /> - <xs:element name="postal-code" type="xs:string" /> - <xs:element name="country" type="xs:string" /> - <xs:element name="region" type="xs:string" /> - <xs:element name="latitude" type="xs:string" minOccurs="0" /> - <xs:element name="longitude" type="xs:string" minOccurs="0" /> - <xs:element name="elevation" type="xs:string" minOccurs="0" /> - <xs:element name="lata" type="xs:string" minOccurs="0" /> - <xs:element ref="tns:ctag-pools" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="complexes"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="volume-group"> - <xs:complexType> - <xs:sequence> - <xs:element name="volume-group-id" type="xs:string" /> - <xs:element name="volume-group-name" type="xs:string" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="volume-groups"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:volume-group" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="volume"> - <xs:complexType> - <xs:sequence> - <xs:element name="volume-id" type="xs:string" /> - <xs:element name="volume-selflink" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="volumes"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l3-interface-ipv4-address-list"> - <xs:complexType> - <xs:sequence> - <xs:element name="l3-interface-ipv4-address" type="xs:string" /> - <xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vlan-id-inner" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vlan-id-outer" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="is-floating" type="xs:boolean" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-network-id" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-subnet-id" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l3-interface-ipv6-address-list"> - <xs:complexType> - <xs:sequence> - <xs:element name="l3-interface-ipv6-address" type="xs:string" /> - <xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vlan-id-inner" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vlan-id-outer" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="is-floating" type="xs:boolean" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-network-id" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-subnet-id" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vlan"> - <xs:complexType> - <xs:sequence> - <xs:element name="vlan-interface" type="xs:string" /> - <xs:element name="vlan-id-inner" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vlan-id-outer" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-value" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-units" type="xs:string" - minOccurs="0" /> - <xs:element name="vlan-description" type="xs:string" - minOccurs="0" /> - <xs:element name="backdoor-connection" type="xs:string" - minOccurs="0" /> - <xs:element name="vpn-id" type="xs:string" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l3-interface-ipv4-address-list" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element ref="tns:l3-interface-ipv6-address-list" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vlans"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="sriov-vf"> - <xs:complexType> - <xs:sequence> - <xs:element name="pci-id" type="xs:string" /> - <xs:element name="vf-vlan-filter" type="xs:string" - minOccurs="0" /> - <xs:element name="vf-mac-filter" type="xs:string" - minOccurs="0" /> - <xs:element name="vf-vlan-strip" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-mac-anti-spoof-check" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-mirrors" type="xs:string" minOccurs="0" /> - <xs:element name="vf-broadcast-allow" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-unknown-multicast-allow" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-unknown-unicast-allow" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-insert-stag" type="xs:boolean" - minOccurs="0" /> - <xs:element name="vf-link-status" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-network-id" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="sriov-vfs"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l-interface"> - <xs:complexType> - <xs:sequence> - <xs:element name="interface-name" type="xs:string" /> - <xs:element name="interface-role" type="xs:string" - minOccurs="0" /> - <xs:element name="v6-wan-link-ip" type="xs:string" - minOccurs="0" /> - <xs:element name="selflink" type="xs:string" minOccurs="0" /> - <xs:element name="interface-id" type="xs:string" - minOccurs="0" /> - <xs:element name="macaddr" type="xs:string" minOccurs="0" /> - <xs:element name="network-name" type="xs:string" - minOccurs="0" /> - <xs:element name="management-option" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:vlans" minOccurs="0" /> - <xs:element ref="tns:sriov-vfs" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l3-interface-ipv4-address-list" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element ref="tns:l3-interface-ipv6-address-list" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l-interfaces"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:l-interface" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vserver"> - <xs:complexType> - <xs:sequence> - <xs:element name="vserver-id" type="xs:string" /> - <xs:element name="vserver-name" type="xs:string" /> - <xs:element name="vserver-name2" type="xs:string" - minOccurs="0" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="vserver-selflink" type="xs:string" /> - <xs:element name="in-maint" type="xs:boolean" /> - <xs:element name="is-closed-loop-disabled" type="xs:boolean" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:volumes" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vservers"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="tenant"> - <xs:complexType> - <xs:sequence> - <xs:element name="tenant-id" type="xs:string" /> - <xs:element name="tenant-name" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:vservers" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="tenants"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="flavor"> - <xs:complexType> - <xs:sequence> - <xs:element name="flavor-id" type="xs:string" /> - <xs:element name="flavor-name" type="xs:string" /> - <xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" /> - <xs:element name="flavor-ram" type="xs:int" minOccurs="0" /> - <xs:element name="flavor-disk" type="xs:int" minOccurs="0" /> - <xs:element name="flavor-ephemeral" type="xs:int" - minOccurs="0" /> - <xs:element name="flavor-swap" type="xs:string" - minOccurs="0" /> - <xs:element name="flavor-is-public" type="xs:boolean" - minOccurs="0" /> - <xs:element name="flavor-selflink" type="xs:string" /> - <xs:element name="flavor-disabled" type="xs:boolean" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="flavors"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="group-assignment"> - <xs:complexType> - <xs:sequence> - <xs:element name="group-id" type="xs:string" /> - <xs:element name="group-type" type="xs:string" /> - <xs:element name="group-name" type="xs:string" /> - <xs:element name="group-description" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="group-assignments"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:group-assignment" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="snapshot"> - <xs:complexType> - <xs:sequence> - <xs:element name="snapshot-id" type="xs:string" /> - <xs:element name="snapshot-name" type="xs:string" - minOccurs="0" /> - <xs:element name="snapshot-architecture" type="xs:string" - minOccurs="0" /> - <xs:element name="snapshot-os-distro" type="xs:string" - minOccurs="0" /> - <xs:element name="snapshot-os-version" type="xs:string" - minOccurs="0" /> - <xs:element name="application" type="xs:string" - minOccurs="0" /> - <xs:element name="application-vendor" type="xs:string" - minOccurs="0" /> - <xs:element name="application-version" type="xs:string" - minOccurs="0" /> - <xs:element name="snapshot-selflink" type="xs:string" - minOccurs="0" /> - <xs:element name="prev-snapshot-id" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="snapshots"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="metadatum"> - <xs:complexType> - <xs:sequence> - <xs:element name="metaname" type="xs:string" /> - <xs:element name="metaval" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="metadata"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="image"> - <xs:complexType> - <xs:sequence> - <xs:element name="image-id" type="xs:string" /> - <xs:element name="image-name" type="xs:string" /> - <xs:element name="image-architecture" type="xs:string" - minOccurs="0" /> - <xs:element name="image-os-distro" type="xs:string" /> - <xs:element name="image-os-version" type="xs:string" /> - <xs:element name="application" type="xs:string" - minOccurs="0" /> - <xs:element name="application-vendor" type="xs:string" - minOccurs="0" /> - <xs:element name="application-version" type="xs:string" - minOccurs="0" /> - <xs:element name="image-selflink" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:metadata" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="images"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="availability-zones"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:availability-zone" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="cloud-region"> - <xs:complexType> - <xs:sequence> - <xs:element name="cloud-owner" type="xs:string" /> - <xs:element name="cloud-region-id" type="xs:string" /> - <xs:element name="cloud-type" type="xs:string" minOccurs="0" /> - <xs:element name="owner-defined-type" type="xs:string" - minOccurs="0" /> - <xs:element name="cloud-region-version" type="xs:string" - minOccurs="0" /> - <xs:element name="identity-url" type="xs:string" - minOccurs="0" /> - <xs:element name="cloud-zone" type="xs:string" minOccurs="0" /> - <xs:element name="complex-name" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:volume-groups" minOccurs="0" /> - <xs:element ref="tns:tenants" minOccurs="0" /> - <xs:element ref="tns:flavors" minOccurs="0" /> - <xs:element ref="tns:group-assignments" minOccurs="0" /> - <xs:element ref="tns:snapshots" minOccurs="0" /> - <xs:element ref="tns:images" minOccurs="0" /> - <xs:element ref="tns:dvs-switches" minOccurs="0" /> - <xs:element ref="tns:oam-networks" minOccurs="0" /> - <xs:element ref="tns:availability-zones" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="cloud-regions"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:cloud-region" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="network-profile"> - <xs:complexType> - <xs:sequence> - <xs:element name="nm-profile-name" type="xs:string" /> - <xs:element name="community-string" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="network-profiles"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:network-profile" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="p-interface"> - <xs:complexType> - <xs:sequence> - <xs:element name="interface-name" type="xs:string" /> - <xs:element name="speed-value" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-units" type="xs:string" - minOccurs="0" /> - <xs:element name="port-description" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-identifier" type="xs:string" - minOccurs="0" /> - <xs:element name="interface-role" type="xs:string" - minOccurs="0" /> - <xs:element name="interface-type" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="p-interfaces"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:p-interface" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="lag-interface"> - <xs:complexType> - <xs:sequence> - <xs:element name="interface-name" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-value" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-units" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="lag-interfaces"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:lag-interface" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="pserver"> - <xs:complexType> - <xs:sequence> - <xs:element name="hostname" type="xs:string" /> - <xs:element name="ptnii-equip-name" type="xs:string" - minOccurs="0" /> - <xs:element name="number-of-cpus" type="xs:int" - minOccurs="0" /> - <xs:element name="disk-in-gigabytes" type="xs:int" - minOccurs="0" /> - <xs:element name="ram-in-megabytes" type="xs:int" - minOccurs="0" /> - <xs:element name="equip-type" type="xs:string" minOccurs="0" /> - <xs:element name="equip-vendor" type="xs:string" - minOccurs="0" /> - <xs:element name="equip-model" type="xs:string" - minOccurs="0" /> - <xs:element name="fqdn" type="xs:string" minOccurs="0" /> - <xs:element name="pserver-selflink" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="serial-number" type="xs:string" - minOccurs="0" /> - <xs:element name="pserver-id" type="xs:string" minOccurs="0" /> - <xs:element name="internet-topology" type="xs:string" - minOccurs="0" /> - <xs:element name="in-maint" type="xs:boolean" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="pserver-name2" type="xs:string" - minOccurs="0" /> - <xs:element name="purpose" type="xs:string" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:p-interfaces" minOccurs="0" /> - <xs:element ref="tns:lag-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="pservers"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="virtual-data-center"> - <xs:complexType> - <xs:sequence> - <xs:element name="vdc-id" type="xs:string" /> - <xs:element name="vdc-name" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="virtual-data-centers"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:virtual-data-center" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="cloud-infrastructure"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:complexes" minOccurs="0" /> - <xs:element ref="tns:cloud-regions" minOccurs="0" /> - <xs:element ref="tns:network-profiles" minOccurs="0" /> - <xs:element ref="tns:pservers" minOccurs="0" /> - <xs:element ref="tns:virtual-data-centers" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="license-key-resource"> - <xs:complexType> - <xs:sequence> - <xs:element name="uuid" type="xs:string" /> - <xs:element name="assignment-type" type="xs:string" - minOccurs="0" /> - <xs:element name="assignment-status" type="xs:string" - minOccurs="0" /> - <xs:element name="assignment-group-uuid" type="xs:string" /> - <xs:element name="assignment-date" type="xs:string" - minOccurs="0" /> - <xs:element name="name" type="xs:string" minOccurs="0" /> - <xs:element name="model-uuid" type="xs:string" minOccurs="0" /> - <xs:element name="model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key-file-url" type="xs:string" - minOccurs="0" /> - <xs:element name="supplier-release-list" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="license-key-resources"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:license-key-resource" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="license-management"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:license-key-resources" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="connector"> - <xs:complexType> - <xs:sequence> - <xs:element name="resource-instance-id" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:metadata" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="connectors"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-instance"> - <xs:complexType> - <xs:sequence> - <xs:element name="service-instance-id" type="xs:string" /> - <xs:element name="service-instance-name" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="bandwidth-total" type="xs:string" - minOccurs="0" /> - <xs:element name="bandwidth-up-wan1" type="xs:string" - minOccurs="0" /> - <xs:element name="bandwidth-down-wan1" type="xs:string" - minOccurs="0" /> - <xs:element name="bandwidth-up-wan2" type="xs:string" - minOccurs="0" /> - <xs:element name="bandwidth-down-wan2" type="xs:string" - minOccurs="0" /> - <xs:element name="vhn-portal-url" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-status" type="xs:string" - minOccurs="0" /> - <xs:element name="service-instance-location-id" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:metadata" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-instances"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:service-instance" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-subscription"> - <xs:complexType> - <xs:sequence> - <xs:element name="service-type" type="xs:string" /> - <xs:element name="temp-ub-sub-account-id" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:service-instances" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-subscriptions"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:service-subscription" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="customer"> - <xs:complexType> - <xs:sequence> - <xs:element name="global-customer-id" type="xs:string" /> - <xs:element name="subscriber-name" type="xs:string" /> - <xs:element name="subscriber-type" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:service-subscriptions" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="customers"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="business"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:connectors" minOccurs="0" /> - <xs:element ref="tns:customers" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vnf-image"> - <xs:complexType> - <xs:sequence> - <xs:element name="uuid" type="xs:string" /> - <xs:element name="application" type="xs:string" /> - <xs:element name="application-vendor" type="xs:string" /> - <xs:element name="application-version" type="xs:string" - minOccurs="0" /> - <xs:element name="selflink" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vnf-images"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service"> - <xs:complexType> - <xs:sequence> - <xs:element name="service-id" type="xs:string" /> - <xs:element name="service-description" type="xs:string" /> - <xs:element name="service-selflink" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="service-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="services"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-capability"> - <xs:complexType> - <xs:sequence> - <xs:element name="service-type" type="xs:string" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-capabilities"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:service-capability" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="element-choice-set"> - <xs:complexType> - <xs:sequence> - <xs:element name="element-choice-set-uuid" type="xs:string" /> - <xs:element name="element-choice-set-name" type="xs:string" /> - <xs:element name="cardinality" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:model-elements" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="element-choice-sets"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:element-choice-set" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="constrained-element-set"> - <xs:complexType> - <xs:sequence> - <xs:element name="constrained-element-set-uuid" type="xs:string" /> - <xs:element name="constraint-type" type="xs:string" /> - <xs:element name="check-type" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:element-choice-sets" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="constrained-element-sets"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:constrained-element-set" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model-constraint"> - <xs:complexType> - <xs:sequence> - <xs:element name="model-constraint-uuid" type="xs:string" /> - <xs:element name="constrained-element-set-uuid-to-replace" - type="xs:string" /> - <xs:element ref="tns:constrained-element-sets" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model-constraints"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:model-constraint" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model-element"> - <xs:complexType> - <xs:sequence> - <xs:element name="model-element-uuid" type="xs:string" /> - <xs:element name="new-data-del-flag" type="xs:string" /> - <xs:element name="cardinality" type="xs:string" /> - <xs:element name="linkage-points" minOccurs="0"> - <xs:complexType> - <xs:sequence> - <xs:element name="linkage-point" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:model-elements" minOccurs="0" /> - <xs:element ref="tns:model-constraints" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model-elements"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:model-element" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model"> - <xs:complexType> - <xs:sequence> - <xs:element name="model-name-version-id" type="xs:string" /> - <xs:element name="model-type" type="xs:string" /> - <xs:element name="model-name" type="xs:string" /> - <xs:element name="model-id" type="xs:string" /> - <xs:element name="model-version" type="xs:string" /> - <xs:element name="model-description" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:model-elements" minOccurs="0" /> - <xs:element ref="tns:metadata" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="models"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="related-lookup"> - <xs:complexType> - <xs:sequence> - <xs:element name="related-lookup-uuid" type="xs:string" /> - <xs:element name="source-node-type" type="xs:string" /> - <xs:element name="source-node-property" type="xs:string" /> - <xs:element name="target-node-type" type="xs:string" /> - <xs:element name="target-node-property" type="xs:string" /> - <xs:element name="property-collect-list" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="related-lookups"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:related-lookup" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="property-constraint"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-constraint-uuid" type="xs:string" /> - <xs:element name="constraint-type" type="xs:string" /> - <xs:element name="property-name" type="xs:string" /> - <xs:element name="property-value" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="property-constraints"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:property-constraint" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="named-query-element"> - <xs:complexType> - <xs:sequence> - <xs:element name="named-query-element-uuid" type="xs:string" /> - <xs:element name="property-collect-list" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="property-limit-desc" type="xs:string" - minOccurs="0" /> - <xs:element name="do-not-output" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:named-query-elements" minOccurs="0" /> - <xs:element ref="tns:related-lookups" minOccurs="0" /> - <xs:element ref="tns:property-constraints" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="named-query-elements"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:named-query-element" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="named-query"> - <xs:complexType> - <xs:sequence> - <xs:element name="named-query-uuid" type="xs:string" /> - <xs:element name="named-query-name" type="xs:string" /> - <xs:element name="named-query-version" type="xs:string" /> - <xs:element name="required-input-params" minOccurs="0"> - <xs:complexType> - <xs:sequence> - <xs:element name="required-input-param" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="description" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:named-query-elements" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="named-queries"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:named-query" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="service-design-and-creation"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vnf-images" minOccurs="0" /> - <xs:element ref="tns:services" minOccurs="0" /> - <xs:element ref="tns:service-capabilities" minOccurs="0" /> - <xs:element ref="tns:models" minOccurs="0" /> - <xs:element ref="tns:named-queries" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="logical-link"> - <xs:complexType> - <xs:sequence> - <xs:element name="link-name" type="xs:string" /> - <xs:element name="link-type" type="xs:string" /> - <xs:element name="speed-value" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-units" type="xs:string" - minOccurs="0" /> - <xs:element name="ip-version" type="xs:string" minOccurs="0" /> - <xs:element name="routing-protocol" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-status" type="xs:string" - minOccurs="0" /> - <xs:element name="link-role" type="xs:string" minOccurs="0" /> - <xs:element name="link-name2" type="xs:string" minOccurs="0" /> - <xs:element name="link-id" type="xs:string" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="logical-links"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:logical-link" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="class-of-service"> - <xs:complexType> - <xs:sequence> - <xs:element name="cos" type="xs:string" /> - <xs:element name="probe-id" type="xs:string" minOccurs="0" /> - <xs:element name="probe-type" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="classes-of-service"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:class-of-service" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="site-pair"> - <xs:complexType> - <xs:sequence> - <xs:element name="site-pair-id" type="xs:string" /> - <xs:element name="source-ip" type="xs:string" minOccurs="0" /> - <xs:element name="destination-ip" type="xs:string" - minOccurs="0" /> - <xs:element name="ip-version" type="xs:string" minOccurs="0" /> - <xs:element name="destination-hostname" type="xs:string" - minOccurs="0" /> - <xs:element name="destination-equip-type" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:classes-of-service" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="site-pairs"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="routing-instance"> - <xs:complexType> - <xs:sequence> - <xs:element name="routing-instance-id" type="xs:string" /> - <xs:element name="rpm-owner" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:site-pairs" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="routing-instances"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:routing-instance" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="site-pair-set"> - <xs:complexType> - <xs:sequence> - <xs:element name="site-pair-set-id" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:routing-instances" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="site-pair-sets"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:site-pair-set" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpn-binding"> - <xs:complexType> - <xs:sequence> - <xs:element name="vpn-id" type="xs:string" /> - <xs:element name="vpn-name" type="xs:string" /> - <xs:element name="global-route-target" type="xs:string" /> - <xs:element name="vpn-platform" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpn-bindings"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vpn-binding" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpls-pe"> - <xs:complexType> - <xs:sequence> - <xs:element name="equipment-name" type="xs:string" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-role" type="xs:string" - minOccurs="0" /> - <xs:element name="vlan-id-outer" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:p-interfaces" minOccurs="0" /> - <xs:element ref="tns:lag-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpls-pes"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="multicast-configuration"> - <xs:complexType> - <xs:sequence> - <xs:element name="multicast-configuration-id" type="xs:string" /> - <xs:element name="multicast-protocol" type="xs:string" /> - <xs:element name="rp-type" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="multicast-configurations"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:multicast-configuration" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="cvlan-tag-entry"> - <xs:complexType> - <xs:sequence> - <xs:element name="cvlan-tag" type="xs:unsignedInt" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="cvlan-tags"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:cvlan-tag-entry" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="port-group"> - <xs:complexType> - <xs:sequence> - <xs:element name="interface-id" type="xs:string" /> - <xs:element name="neutron-network-id" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-network-name" type="xs:string" - minOccurs="0" /> - <xs:element name="interface-role" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="port-group-id" type="xs:string" - minOccurs="0" /> - <xs:element name="port-group-name" type="xs:string" - minOccurs="0" /> - <xs:element name="switch-name" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:cvlan-tags" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="port-groups"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vce"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnf-id" type="xs:string" /> - <xs:element name="vnf-name" type="xs:string" /> - <xs:element name="vnf-name2" type="xs:string" minOccurs="0" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="service-id" type="xs:string" minOccurs="0" /> - <xs:element name="regional-resource-zone" type="xs:string" - minOccurs="0" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-state" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-role" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element name="vpe-id" type="xs:string" minOccurs="0" /> - <xs:element name="v6-vce-wan-address" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-loopback0-address" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:port-groups" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vces"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpe"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnf-id" type="xs:string" /> - <xs:element name="vnf-name" type="xs:string" /> - <xs:element name="vnf-name2" type="xs:string" minOccurs="0" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="service-id" type="xs:string" minOccurs="0" /> - <xs:element name="regional-resource-zone" type="xs:string" - minOccurs="0" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-state" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-role" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-gateway-address-prefix-length" - type="xs:int" minOccurs="0" /> - <xs:element name="ipv4-oam-gateway-address" type="xs:string" - minOccurs="0" /> - <xs:element name="v4-loopback0-ip-address" type="xs:string" - minOccurs="0" /> - <xs:element name="vlan-id-outer" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="as-number" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="summary-status" type="xs:string" - minOccurs="0" /> - <xs:element name="encrypted-access-flag" type="xs:boolean" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - <xs:element ref="tns:lag-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vpes"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vnfc"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnfc-name" type="xs:string" /> - <xs:element name="vnfc-function-code" type="xs:string" /> - <xs:element name="vnfc-type" type="xs:string" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="ipaddress-v4-oam-vip" type="xs:string" - minOccurs="0" /> - <xs:element name="in-maint" type="xs:boolean" /> - <xs:element name="is-closed-loop-disabled" type="xs:boolean" /> - <xs:element name="group-notation" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vnfcs"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="subnet"> - <xs:complexType> - <xs:sequence> - <xs:element name="subnet-id" type="xs:string" /> - <xs:element name="subnet-name" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-subnet-id" type="xs:string" - minOccurs="0" /> - <xs:element name="gateway-address" type="xs:string" - minOccurs="0" /> - <xs:element name="network-start-address" type="xs:string" - minOccurs="0" /> - <xs:element name="cidr-mask" type="xs:string" minOccurs="0" /> - <xs:element name="ip-version" type="xs:string" minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="dhcp-enabled" type="xs:boolean" /> - <xs:element name="dhcp-start" type="xs:string" minOccurs="0" /> - <xs:element name="dhcp-end" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="subnets"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ctag-assignment"> - <xs:complexType> - <xs:sequence> - <xs:element name="vlan-id-inner" type="xs:unsignedInt" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ctag-assignments"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:ctag-assignment" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="segmentation-assignment"> - <xs:complexType> - <xs:sequence> - <xs:element name="segmentation-id" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="segmentation-assignments"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:segmentation-assignment" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l3-network"> - <xs:complexType> - <xs:sequence> - <xs:element name="network-id" type="xs:string" /> - <xs:element name="network-name" type="xs:string" /> - <xs:element name="network-type" type="xs:string" - minOccurs="0" /> - <xs:element name="network-role" type="xs:string" - minOccurs="0" /> - <xs:element name="network-technology" type="xs:string" - minOccurs="0" /> - <xs:element name="neutron-network-id" type="xs:string" - minOccurs="0" /> - <xs:element name="is-bound-to-vpn" type="xs:boolean" /> - <xs:element name="service-id" type="xs:string" minOccurs="0" /> - <xs:element name="network-role-instance" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element name="contrail-network-fqdn" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="physical-network-name" type="xs:string" - minOccurs="0" /> - <xs:element name="is-provider-network" type="xs:boolean" /> - <xs:element name="is-shared-network" type="xs:boolean" /> - <xs:element name="is-external-network" type="xs:boolean" /> - <xs:element ref="tns:subnets" minOccurs="0" /> - <xs:element ref="tns:ctag-assignments" minOccurs="0" /> - <xs:element ref="tns:segmentation-assignments" minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="l3-networks"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="network-policy"> - <xs:complexType> - <xs:sequence> - <xs:element name="network-policy-id" type="xs:string" /> - <xs:element name="network-policy-fqdn" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="network-policies"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:network-policy" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vf-module"> - <xs:complexType> - <xs:sequence> - <xs:element name="vf-module-id" type="xs:string" /> - <xs:element name="vf-module-name" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="is-base-vf-module" type="xs:boolean" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="contrail-service-instance-fqdn" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vf-modules"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="generic-vnf"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnf-id" type="xs:string" /> - <xs:element name="vnf-name" type="xs:string" /> - <xs:element name="vnf-name2" type="xs:string" minOccurs="0" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="service-id" type="xs:string" minOccurs="0" /> - <xs:element name="regional-resource-zone" type="xs:string" - minOccurs="0" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-state" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-role" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element name="management-option" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-loopback0-address" type="xs:string" - minOccurs="0" /> - <xs:element name="nm-lan-v6-address" type="xs:string" - minOccurs="0" /> - <xs:element name="management-v6-address" type="xs:string" - minOccurs="0" /> - <xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" /> - <xs:element name="vcpu-units" type="xs:string" minOccurs="0" /> - <xs:element name="vmemory" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="vmemory-units" type="xs:string" - minOccurs="0" /> - <xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" /> - <xs:element name="vdisk-units" type="xs:string" - minOccurs="0" /> - <xs:element name="in-maint" type="xs:boolean" /> - <xs:element name="is-closed-loop-disabled" type="xs:boolean" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="summary-status" type="xs:string" - minOccurs="0" /> - <xs:element name="encrypted-access-flag" type="xs:boolean" - minOccurs="0" /> - <xs:element name="entitlement-assignment-group-uuid" - type="xs:string" minOccurs="0" /> - <xs:element name="entitlement-resource-uuid" type="xs:string" - minOccurs="0" /> - <xs:element name="license-assignment-group-uuid" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key-uuid" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="persona-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-id" type="xs:string" - minOccurs="0" /> - <xs:element name="widget-model-version" type="xs:string" - minOccurs="0" /> - <xs:element name="as-number" type="xs:string" minOccurs="0" /> - <xs:element name="regional-resource-subzone" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - <xs:element ref="tns:lag-interfaces" minOccurs="0" /> - <xs:element ref="tns:vf-modules" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="generic-vnfs"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:generic-vnf" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="lag-link"> - <xs:complexType> - <xs:sequence> - <xs:element name="link-name" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="lag-links"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="newvce"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnf-id2" type="xs:string" /> - <xs:element name="vnf-name" type="xs:string" /> - <xs:element name="vnf-name2" type="xs:string" minOccurs="0" /> - <xs:element name="vnf-type" type="xs:string" /> - <xs:element name="prov-status" type="xs:string" - minOccurs="0" /> - <xs:element name="operational-state" type="xs:string" - minOccurs="0" /> - <xs:element name="license-key" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-oam-address" type="xs:string" - minOccurs="0" /> - <xs:element name="equipment-role" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element name="ipv4-loopback0-address" type="xs:string" - minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="heat-stack-id" type="xs:string" - minOccurs="0" /> - <xs:element name="mso-catalog-key" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:l-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="newvces"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="pnf"> - <xs:complexType> - <xs:sequence> - <xs:element name="pnf-name" type="xs:string" /> - <xs:element name="pnf-name2" type="xs:string" minOccurs="0" /> - <xs:element name="pnf-name2-source" type="xs:string" - minOccurs="0" /> - <xs:element name="pnf-id" type="xs:string" minOccurs="0" /> - <xs:element name="equip-type" type="xs:string" minOccurs="0" /> - <xs:element name="equip-vendor" type="xs:string" - minOccurs="0" /> - <xs:element name="equip-model" type="xs:string" - minOccurs="0" /> - <xs:element name="management-option" type="xs:string" - minOccurs="0" /> - <xs:element name="ipaddress-v4-oam" type="xs:string" - minOccurs="0" /> - <xs:element name="sw-version" type="xs:string" minOccurs="0" /> - <xs:element name="orchestration-status" type="xs:string" - minOccurs="0" /> - <xs:element name="in-maint" type="xs:boolean" /> - <xs:element name="frame-id" type="xs:string" minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:p-interfaces" minOccurs="0" /> - <xs:element ref="tns:lag-interfaces" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="pnfs"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="physical-link"> - <xs:complexType> - <xs:sequence> - <xs:element name="link-name" type="xs:string" /> - <xs:element name="speed-value" type="xs:string" - minOccurs="0" /> - <xs:element name="speed-units" type="xs:string" - minOccurs="0" /> - <xs:element name="circuit-id" type="xs:string" minOccurs="0" /> - <xs:element name="dual-mode" type="xs:string" minOccurs="0" /> - <xs:element name="management-option" type="xs:string" - minOccurs="0" /> - <xs:element name="service-provider-name" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="physical-links"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:physical-link" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vig-server"> - <xs:complexType> - <xs:sequence> - <xs:element name="vig-address-type" type="xs:string" /> - <xs:element name="ipaddress-v4-vig" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="ipaddress-v6-vig" type="xs:string" - minOccurs="0" maxOccurs="unbounded" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vig-servers"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ipsec-configuration"> - <xs:complexType> - <xs:sequence> - <xs:element name="ipsec-configuration-id" type="xs:string" /> - <xs:element name="requested-vig-address-type" type="xs:string" - minOccurs="0" /> - <xs:element name="requested-encryption-strength" type="xs:string" - minOccurs="0" /> - <xs:element name="requested-dmz-type" type="xs:string" - minOccurs="0" /> - <xs:element name="shared-dmz-network-address" type="xs:string" - minOccurs="0" /> - <xs:element name="requested-customer-name" type="xs:string" - minOccurs="0" /> - <xs:element name="ike-version" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-authentication" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-encryption" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-dh-group" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-am-group-id" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-am-password" type="xs:string" - minOccurs="0" /> - <xs:element name="ikev1-sa-lifetime" type="xs:string" - minOccurs="0" /> - <xs:element name="ipsec-authentication" type="xs:string" - minOccurs="0" /> - <xs:element name="ipsec-encryption" type="xs:string" - minOccurs="0" /> - <xs:element name="ipsec-sa-lifetime" type="xs:string" - minOccurs="0" /> - <xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" /> - <xs:element name="xauth-userid" type="xs:string" - minOccurs="0" /> - <xs:element name="xauth-user-password" type="xs:string" - minOccurs="0" /> - <xs:element name="dpd-interval" type="xs:string" - minOccurs="0" /> - <xs:element name="dpd-frequency" type="xs:string" - minOccurs="0" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - <xs:element ref="tns:vig-servers" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="ipsec-configurations"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:ipsec-configuration" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="route-table-reference"> - <xs:complexType> - <xs:sequence> - <xs:element name="route-table-reference-id" type="xs:string" /> - <xs:element name="route-table-reference-fqdn" type="xs:string" /> - <xs:element name="resource-version" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:relationship-list" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="route-table-references"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:route-table-reference" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="network"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:logical-links" minOccurs="0" /> - <xs:element ref="tns:site-pair-sets" minOccurs="0" /> - <xs:element ref="tns:vpn-bindings" minOccurs="0" /> - <xs:element ref="tns:vpls-pes" minOccurs="0" /> - <xs:element ref="tns:multicast-configurations" minOccurs="0" /> - <xs:element ref="tns:vces" minOccurs="0" /> - <xs:element ref="tns:vpes" minOccurs="0" /> - <xs:element ref="tns:vnfcs" minOccurs="0" /> - <xs:element ref="tns:l3-networks" minOccurs="0" /> - <xs:element ref="tns:network-policies" minOccurs="0" /> - <xs:element ref="tns:generic-vnfs" minOccurs="0" /> - <xs:element ref="tns:lag-links" minOccurs="0" /> - <xs:element ref="tns:newvces" minOccurs="0" /> - <xs:element ref="tns:pnfs" minOccurs="0" /> - <xs:element ref="tns:physical-links" minOccurs="0" /> - <xs:element ref="tns:ipsec-configurations" minOccurs="0" /> - <xs:element ref="tns:route-table-references" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="reserved-prop-names"> - <xs:complexType> - <xs:sequence> - <xs:element name="last-mod-source-of-truth" type="xs:string" - minOccurs="0" /> - <xs:element name="aai-node-type" type="xs:string" - minOccurs="0" /> - <xs:element name="aai-created-ts" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="aai-unique-key" type="xs:string" - minOccurs="0" /> - <xs:element name="aai-last-mod-ts" type="xs:unsignedInt" - minOccurs="0" /> - <xs:element name="source-of-truth" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="edge-prop-names"> - <xs:complexType> - <xs:sequence> - <xs:element name="edgeLabel" type="xs:string" minOccurs="0" /> - <xs:element name="direction" type="xs:string" minOccurs="0" /> - <xs:element name="multiplicityRule" type="xs:string" - minOccurs="0" /> - <xs:element name="isParent" type="xs:boolean" minOccurs="0" /> - <xs:element name="usesResource" type="xs:boolean" - minOccurs="0" /> - <xs:element name="hasDelTarget" type="xs:boolean" - minOccurs="0" /> - <xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" /> - <xs:element name="SVC-INFRA-REV" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="aai-internal"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:reserved-prop-names" minOccurs="0" - maxOccurs="unbounded" /> - <xs:element ref="tns:edge-prop-names" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="inventory"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:search" minOccurs="0" /> - <xs:element ref="tns:actions" minOccurs="0" /> - <xs:element ref="tns:cloud-infrastructure" minOccurs="0" /> - <xs:element ref="tns:license-management" minOccurs="0" /> - <xs:element ref="tns:business" minOccurs="0" /> - <xs:element ref="tns:service-design-and-creation" - minOccurs="0" /> - <xs:element ref="tns:network" minOccurs="0" /> - <xs:element ref="tns:aai-internal" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="notification-event-header"> - <xs:complexType> - <xs:sequence> - <xs:element name="id" type="xs:string" minOccurs="0" /> - <xs:element name="timestamp" type="xs:string" minOccurs="0" /> - <xs:element name="source-name" type="xs:string" - minOccurs="0" /> - <xs:element name="domain" type="xs:string" minOccurs="0" /> - <xs:element name="sequence-number" type="xs:string" - minOccurs="0" /> - <xs:element name="severity" type="xs:string" minOccurs="0" /> - <xs:element name="event-type" type="xs:string" minOccurs="0" /> - <xs:element name="version" type="xs:string" minOccurs="0" /> - <xs:element name="action" type="xs:string" minOccurs="0" /> - <xs:element name="entity-type" type="xs:string" - minOccurs="0" /> - <xs:element name="top-entity-type" type="xs:string" - minOccurs="0" /> - <xs:element name="entity-link" type="xs:string" - minOccurs="0" /> - <xs:element name="status" type="xs:string" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="notification-event"> - <xs:complexType> - <xs:sequence> - <xs:element name="cambria.partition" type="xs:string" - minOccurs="0" /> - <xs:element ref="tns:notification-event-header" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="query-parameters"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:named-query" minOccurs="0" /> - <xs:element ref="tns:model" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="instance-filter"> - <xs:complexType> - <xs:sequence /> - </xs:complexType> - </xs:element> - <xs:element name="instance-filters"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:instance-filter" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="model-and-named-query-search"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:query-parameters" minOccurs="0" /> - <xs:element ref="tns:instance-filters" minOccurs="0" /> - <xs:element name="top-node-type" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="properties"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - <xs:element name="property-value" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="extra-properties"> - <xs:complexType> - <xs:sequence /> - </xs:complexType> - </xs:element> - <xs:element name="inventory-response-item"> - <xs:complexType> - <xs:sequence> - <xs:element name="model-name" type="xs:string" minOccurs="0" /> - <xs:element ref="tns:extra-properties" minOccurs="0" /> - <xs:element ref="tns:inventory-response-items" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="inventory-response-items"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:inventory-response-item" minOccurs="0" - maxOccurs="unbounded" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="response-list"> - <xs:complexType> - <xs:sequence> - <xs:element ref="tns:inventory-response-items" minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="extra-property"> - <xs:complexType> - <xs:sequence> - <xs:element name="property-name" type="xs:string" - minOccurs="0" /> - </xs:sequence> - </xs:complexType> - </xs:element> - <xs:element name="vnf"> - <xs:complexType> - <xs:sequence> - <xs:element name="vnf-id" type="xs:string" /> - </xs:sequence> - </xs:complexType> - </xs:element> -</xs:schema> + ============LICENSE_END=========================================================
+ -->
+
+<xs:schema elementFormDefault="qualified" version="1.0"
+ targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="inventory-item-data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="inventory-item">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="inventory-item-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="inventory-item-link" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:inventory-item-data" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element ref="tns:tagged-inventory-item-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="tagged-inventory-item-list">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:inventory-item" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="edge-tag-query-result">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:tagged-inventory-item-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="start-node-filter">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="include-node-filter">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="include-node-type" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="secondary-filter">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="filter-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="edge-tag-query-request">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="edge-tag" type="xs:string" minOccurs="0" />
+ <xs:element name="result-detail" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="start-node-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:start-node-filter" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element ref="tns:include-node-filter" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element ref="tns:secondary-filter" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="result-data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="resource-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-link" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="search-results">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:result-data" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="relationship-data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="relationship-key" type="xs:string" />
+ <xs:element name="relationship-value" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="related-to-property">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="relationship">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="related-to" type="xs:string" minOccurs="0" />
+ <xs:element name="related-link" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-data" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element ref="tns:related-to-property" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="relationship-list">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:relationship" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="oam-network">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="network-uuid" type="xs:string" />
+ <xs:element name="network-name" type="xs:string" />
+ <xs:element name="cvlan-tag" type="xs:unsignedInt" />
+ <xs:element name="ipv4-oam-gateway-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-gateway-address-prefix-length"
+ type="xs:int" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="oam-networks">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:oam-network" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dvs-switch">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="switch-name" type="xs:string" />
+ <xs:element name="vcenter-url" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dvs-switches">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="availability-zone">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="availability-zone-name" type="xs:string" />
+ <xs:element name="hypervisor-type" type="xs:string" />
+ <xs:element name="operational-state" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="az-and-dvs-switches">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:dvs-switches" minOccurs="0" />
+ <xs:element ref="tns:availability-zone" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="sdn-zone-response">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:oam-networks" minOccurs="0" />
+ <xs:element ref="tns:az-and-dvs-switches" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="search">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:edge-tag-query-result" minOccurs="0" />
+ <xs:element ref="tns:edge-tag-query-request" minOccurs="0" />
+ <xs:element ref="tns:search-results" minOccurs="0" />
+ <xs:element ref="tns:sdn-zone-response" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="update-node-key">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="key-name" type="xs:string" minOccurs="0" />
+ <xs:element name="key-value" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="action-data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="action">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="action-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:action-data" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="update">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="update-node-type" type="xs:string" />
+ <xs:element ref="tns:update-node-key" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element name="update-node-uri" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="key-data">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="key-name" type="xs:string" minOccurs="0" />
+ <xs:element name="key-value" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notify">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="event-id" type="xs:string" />
+ <xs:element name="node-type" type="xs:string" minOccurs="0" />
+ <xs:element name="event-trigger" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="selflink" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="actions">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:update" minOccurs="0" />
+ <xs:element ref="tns:notify" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ctag-pool">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="target-pe" type="xs:string" />
+ <xs:element name="availability-zone-name" type="xs:string" />
+ <xs:element name="ctag-pool-purpose" type="xs:string" />
+ <xs:element name="ctag-values" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ctag-pools">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="complex">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="physical-location-id" type="xs:string" />
+ <xs:element name="data-center-code" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="complex-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="identity-url" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="physical-location-type" type="xs:string" />
+ <xs:element name="street1" type="xs:string" />
+ <xs:element name="street2" type="xs:string" minOccurs="0" />
+ <xs:element name="city" type="xs:string" />
+ <xs:element name="state" type="xs:string" minOccurs="0" />
+ <xs:element name="postal-code" type="xs:string" />
+ <xs:element name="country" type="xs:string" />
+ <xs:element name="region" type="xs:string" />
+ <xs:element name="latitude" type="xs:string" minOccurs="0" />
+ <xs:element name="longitude" type="xs:string" minOccurs="0" />
+ <xs:element name="elevation" type="xs:string" minOccurs="0" />
+ <xs:element name="lata" type="xs:string" minOccurs="0" />
+ <xs:element ref="tns:ctag-pools" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="complexes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="volume-group">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="volume-group-id" type="xs:string" />
+ <xs:element name="volume-group-name" type="xs:string" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="volume-groups">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:volume-group" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="volume">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="volume-id" type="xs:string" />
+ <xs:element name="volume-selflink" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="volumes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l3-interface-ipv4-address-list">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="l3-interface-ipv4-address" type="xs:string" />
+ <xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vlan-id-inner" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vlan-id-outer" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="is-floating" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-network-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-subnet-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l3-interface-ipv6-address-list">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="l3-interface-ipv6-address" type="xs:string" />
+ <xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vlan-id-inner" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vlan-id-outer" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="is-floating" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-network-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-subnet-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vlan">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vlan-interface" type="xs:string" />
+ <xs:element name="vlan-id-inner" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vlan-id-outer" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-value" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vlan-description" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="backdoor-connection" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vpn-id" type="xs:string" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l3-interface-ipv4-address-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element ref="tns:l3-interface-ipv6-address-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vlans">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="sriov-vf">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="pci-id" type="xs:string" />
+ <xs:element name="vf-vlan-filter" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vf-mac-filter" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vf-vlan-strip" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-mac-anti-spoof-check" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-mirrors" type="xs:string" minOccurs="0" />
+ <xs:element name="vf-broadcast-allow" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-unknown-multicast-allow" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-unknown-unicast-allow" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-insert-stag" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="vf-link-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-network-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="sriov-vfs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l-interface">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="interface-name" type="xs:string" />
+ <xs:element name="interface-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="v6-wan-link-ip" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="selflink" type="xs:string" minOccurs="0" />
+ <xs:element name="interface-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="macaddr" type="xs:string" minOccurs="0" />
+ <xs:element name="network-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="management-option" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:vlans" minOccurs="0" />
+ <xs:element ref="tns:sriov-vfs" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l3-interface-ipv4-address-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element ref="tns:l3-interface-ipv6-address-list"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l-interfaces">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:l-interface" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vserver">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vserver-id" type="xs:string" />
+ <xs:element name="vserver-name" type="xs:string" />
+ <xs:element name="vserver-name2" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vserver-selflink" type="xs:string" />
+ <xs:element name="in-maint" type="xs:boolean" />
+ <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:volumes" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vservers">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="tenant">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tenant-id" type="xs:string" />
+ <xs:element name="tenant-name" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:vservers" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="tenants">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="flavor">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="flavor-id" type="xs:string" />
+ <xs:element name="flavor-name" type="xs:string" />
+ <xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" />
+ <xs:element name="flavor-ram" type="xs:int" minOccurs="0" />
+ <xs:element name="flavor-disk" type="xs:int" minOccurs="0" />
+ <xs:element name="flavor-ephemeral" type="xs:int"
+ minOccurs="0" />
+ <xs:element name="flavor-swap" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="flavor-is-public" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="flavor-selflink" type="xs:string" />
+ <xs:element name="flavor-disabled" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="flavors">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="group-assignment">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="group-id" type="xs:string" />
+ <xs:element name="group-type" type="xs:string" />
+ <xs:element name="group-name" type="xs:string" />
+ <xs:element name="group-description" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="group-assignments">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:group-assignment" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="snapshot">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="snapshot-id" type="xs:string" />
+ <xs:element name="snapshot-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="snapshot-architecture" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="snapshot-os-distro" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="snapshot-os-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="application" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="application-vendor" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="application-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="snapshot-selflink" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="prev-snapshot-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="snapshots">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="metadatum">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="metaname" type="xs:string" />
+ <xs:element name="metaval" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="metadata">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="image">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="image-id" type="xs:string" />
+ <xs:element name="image-name" type="xs:string" />
+ <xs:element name="image-architecture" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="image-os-distro" type="xs:string" />
+ <xs:element name="image-os-version" type="xs:string" />
+ <xs:element name="application" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="application-vendor" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="application-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="image-selflink" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:metadata" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="images">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="availability-zones">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:availability-zone" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cloud-region">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="cloud-owner" type="xs:string" />
+ <xs:element name="cloud-region-id" type="xs:string" />
+ <xs:element name="cloud-type" type="xs:string" minOccurs="0" />
+ <xs:element name="owner-defined-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="cloud-region-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="identity-url" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="cloud-zone" type="xs:string" minOccurs="0" />
+ <xs:element name="complex-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:volume-groups" minOccurs="0" />
+ <xs:element ref="tns:tenants" minOccurs="0" />
+ <xs:element ref="tns:flavors" minOccurs="0" />
+ <xs:element ref="tns:group-assignments" minOccurs="0" />
+ <xs:element ref="tns:snapshots" minOccurs="0" />
+ <xs:element ref="tns:images" minOccurs="0" />
+ <xs:element ref="tns:dvs-switches" minOccurs="0" />
+ <xs:element ref="tns:oam-networks" minOccurs="0" />
+ <xs:element ref="tns:availability-zones" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cloud-regions">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:cloud-region" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="network-profile">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="nm-profile-name" type="xs:string" />
+ <xs:element name="community-string" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="network-profiles">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:network-profile" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="p-interface">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="interface-name" type="xs:string" />
+ <xs:element name="speed-value" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="port-description" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-identifier" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="interface-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="interface-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="p-interfaces">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:p-interface" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="lag-interface">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="interface-name" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-value" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="lag-interfaces">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:lag-interface" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pserver">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="hostname" type="xs:string" />
+ <xs:element name="ptnii-equip-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="number-of-cpus" type="xs:int"
+ minOccurs="0" />
+ <xs:element name="disk-in-gigabytes" type="xs:int"
+ minOccurs="0" />
+ <xs:element name="ram-in-megabytes" type="xs:int"
+ minOccurs="0" />
+ <xs:element name="equip-type" type="xs:string" minOccurs="0" />
+ <xs:element name="equip-vendor" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equip-model" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="fqdn" type="xs:string" minOccurs="0" />
+ <xs:element name="pserver-selflink" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="serial-number" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="pserver-id" type="xs:string" minOccurs="0" />
+ <xs:element name="internet-topology" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="in-maint" type="xs:boolean" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="pserver-name2" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="purpose" type="xs:string" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:p-interfaces" minOccurs="0" />
+ <xs:element ref="tns:lag-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pservers">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="virtual-data-center">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vdc-id" type="xs:string" />
+ <xs:element name="vdc-name" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="virtual-data-centers">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:virtual-data-center" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cloud-infrastructure">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:complexes" minOccurs="0" />
+ <xs:element ref="tns:cloud-regions" minOccurs="0" />
+ <xs:element ref="tns:network-profiles" minOccurs="0" />
+ <xs:element ref="tns:pservers" minOccurs="0" />
+ <xs:element ref="tns:virtual-data-centers" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="license-key-resource">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="uuid" type="xs:string" />
+ <xs:element name="assignment-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="assignment-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="assignment-group-uuid" type="xs:string" />
+ <xs:element name="assignment-date" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="name" type="xs:string" minOccurs="0" />
+ <xs:element name="model-uuid" type="xs:string" minOccurs="0" />
+ <xs:element name="model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key-file-url" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="supplier-release-list" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="license-key-resources">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:license-key-resource" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="license-management">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:license-key-resources" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="connector">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="resource-instance-id" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:metadata" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="connectors">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-instance">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="service-instance-id" type="xs:string" />
+ <xs:element name="service-instance-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="bandwidth-total" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="bandwidth-up-wan1" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="bandwidth-down-wan1" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="bandwidth-up-wan2" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="bandwidth-down-wan2" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vhn-portal-url" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="service-instance-location-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:metadata" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-instances">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:service-instance" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-subscription">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="service-type" type="xs:string" />
+ <xs:element name="temp-ub-sub-account-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:service-instances" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-subscriptions">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:service-subscription" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="customer">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="global-customer-id" type="xs:string" />
+ <xs:element name="subscriber-name" type="xs:string" />
+ <xs:element name="subscriber-type" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:service-subscriptions" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="customers">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="business">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:connectors" minOccurs="0" />
+ <xs:element ref="tns:customers" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vnf-image">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="uuid" type="xs:string" />
+ <xs:element name="application" type="xs:string" />
+ <xs:element name="application-vendor" type="xs:string" />
+ <xs:element name="application-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="selflink" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vnf-images">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="service-id" type="xs:string" />
+ <xs:element name="service-description" type="xs:string" />
+ <xs:element name="service-selflink" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="service-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="services">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-capability">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="service-type" type="xs:string" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-capabilities">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:service-capability" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="element-choice-set">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="element-choice-set-uuid" type="xs:string" />
+ <xs:element name="element-choice-set-name" type="xs:string" />
+ <xs:element name="cardinality" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:model-elements" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="element-choice-sets">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:element-choice-set" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="constrained-element-set">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="constrained-element-set-uuid" type="xs:string" />
+ <xs:element name="constraint-type" type="xs:string" />
+ <xs:element name="check-type" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:element-choice-sets" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="constrained-element-sets">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:constrained-element-set" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model-constraint">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="model-constraint-uuid" type="xs:string" />
+ <xs:element name="constrained-element-set-uuid-to-replace"
+ type="xs:string" />
+ <xs:element ref="tns:constrained-element-sets" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model-constraints">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:model-constraint" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model-element">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="model-element-uuid" type="xs:string" />
+ <xs:element name="new-data-del-flag" type="xs:string" />
+ <xs:element name="cardinality" type="xs:string" />
+ <xs:element name="linkage-points" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="linkage-point" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:model-elements" minOccurs="0" />
+ <xs:element ref="tns:model-constraints" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model-elements">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:model-element" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="model-name-version-id" type="xs:string" />
+ <xs:element name="model-type" type="xs:string" />
+ <xs:element name="model-name" type="xs:string" />
+ <xs:element name="model-id" type="xs:string" />
+ <xs:element name="model-version" type="xs:string" />
+ <xs:element name="model-description" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:model-elements" minOccurs="0" />
+ <xs:element ref="tns:metadata" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="models">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="related-lookup">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="related-lookup-uuid" type="xs:string" />
+ <xs:element name="source-node-type" type="xs:string" />
+ <xs:element name="source-node-property" type="xs:string" />
+ <xs:element name="target-node-type" type="xs:string" />
+ <xs:element name="target-node-property" type="xs:string" />
+ <xs:element name="property-collect-list" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="related-lookups">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:related-lookup" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="property-constraint">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-constraint-uuid" type="xs:string" />
+ <xs:element name="constraint-type" type="xs:string" />
+ <xs:element name="property-name" type="xs:string" />
+ <xs:element name="property-value" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="property-constraints">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:property-constraint" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="named-query-element">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="named-query-element-uuid" type="xs:string" />
+ <xs:element name="property-collect-list" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-limit-desc" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="do-not-output" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:named-query-elements" minOccurs="0" />
+ <xs:element ref="tns:related-lookups" minOccurs="0" />
+ <xs:element ref="tns:property-constraints" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="named-query-elements">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:named-query-element" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="named-query">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="named-query-uuid" type="xs:string" />
+ <xs:element name="named-query-name" type="xs:string" />
+ <xs:element name="named-query-version" type="xs:string" />
+ <xs:element name="required-input-params" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="required-input-param" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="description" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:named-query-elements" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="named-queries">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:named-query" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="service-design-and-creation">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vnf-images" minOccurs="0" />
+ <xs:element ref="tns:services" minOccurs="0" />
+ <xs:element ref="tns:service-capabilities" minOccurs="0" />
+ <xs:element ref="tns:models" minOccurs="0" />
+ <xs:element ref="tns:named-queries" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="logical-link">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="link-name" type="xs:string" />
+ <xs:element name="link-type" type="xs:string" />
+ <xs:element name="speed-value" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ip-version" type="xs:string" minOccurs="0" />
+ <xs:element name="routing-protocol" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="link-role" type="xs:string" minOccurs="0" />
+ <xs:element name="link-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="link-id" type="xs:string" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="logical-links">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:logical-link" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="class-of-service">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="cos" type="xs:string" />
+ <xs:element name="probe-id" type="xs:string" minOccurs="0" />
+ <xs:element name="probe-type" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="classes-of-service">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:class-of-service" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="site-pair">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="site-pair-id" type="xs:string" />
+ <xs:element name="source-ip" type="xs:string" minOccurs="0" />
+ <xs:element name="destination-ip" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ip-version" type="xs:string" minOccurs="0" />
+ <xs:element name="destination-hostname" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="destination-equip-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:classes-of-service" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="site-pairs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="routing-instance">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="routing-instance-id" type="xs:string" />
+ <xs:element name="rpm-owner" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:site-pairs" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="routing-instances">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:routing-instance" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="site-pair-set">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="site-pair-set-id" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:routing-instances" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="site-pair-sets">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:site-pair-set" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpn-binding">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vpn-id" type="xs:string" />
+ <xs:element name="vpn-name" type="xs:string" />
+ <xs:element name="global-route-target" type="xs:string" />
+ <xs:element name="vpn-platform" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpn-bindings">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vpn-binding" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpls-pe">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="equipment-name" type="xs:string" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vlan-id-outer" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:p-interfaces" minOccurs="0" />
+ <xs:element ref="tns:lag-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpls-pes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="multicast-configuration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="multicast-configuration-id" type="xs:string" />
+ <xs:element name="multicast-protocol" type="xs:string" />
+ <xs:element name="rp-type" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="multicast-configurations">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:multicast-configuration" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cvlan-tag-entry">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="cvlan-tag" type="xs:unsignedInt" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="cvlan-tags">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:cvlan-tag-entry" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="port-group">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="interface-id" type="xs:string" />
+ <xs:element name="neutron-network-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-network-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="interface-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="port-group-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="port-group-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="switch-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:cvlan-tags" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="port-groups">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vce">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnf-id" type="xs:string" />
+ <xs:element name="vnf-name" type="xs:string" />
+ <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="service-id" type="xs:string" minOccurs="0" />
+ <xs:element name="regional-resource-zone" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-state" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vpe-id" type="xs:string" minOccurs="0" />
+ <xs:element name="v6-vce-wan-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-loopback0-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:port-groups" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vces">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpe">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnf-id" type="xs:string" />
+ <xs:element name="vnf-name" type="xs:string" />
+ <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="service-id" type="xs:string" minOccurs="0" />
+ <xs:element name="regional-resource-zone" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-state" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-gateway-address-prefix-length"
+ type="xs:int" minOccurs="0" />
+ <xs:element name="ipv4-oam-gateway-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="v4-loopback0-ip-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vlan-id-outer" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="as-number" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="summary-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="encrypted-access-flag" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ <xs:element ref="tns:lag-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vpes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vnfc">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnfc-name" type="xs:string" />
+ <xs:element name="vnfc-function-code" type="xs:string" />
+ <xs:element name="vnfc-type" type="xs:string" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipaddress-v4-oam-vip" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="in-maint" type="xs:boolean" />
+ <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+ <xs:element name="group-notation" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vnfcs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="subnet">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="subnet-id" type="xs:string" />
+ <xs:element name="subnet-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-subnet-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="gateway-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="network-start-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="cidr-mask" type="xs:string" minOccurs="0" />
+ <xs:element name="ip-version" type="xs:string" minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="dhcp-enabled" type="xs:boolean" />
+ <xs:element name="dhcp-start" type="xs:string" minOccurs="0" />
+ <xs:element name="dhcp-end" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="subnets">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ctag-assignment">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vlan-id-inner" type="xs:unsignedInt" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ctag-assignments">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:ctag-assignment" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="segmentation-assignment">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="segmentation-id" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="segmentation-assignments">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:segmentation-assignment" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l3-network">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="network-id" type="xs:string" />
+ <xs:element name="network-name" type="xs:string" />
+ <xs:element name="network-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="network-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="network-technology" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="neutron-network-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="is-bound-to-vpn" type="xs:boolean" />
+ <xs:element name="service-id" type="xs:string" minOccurs="0" />
+ <xs:element name="network-role-instance" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="contrail-network-fqdn" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="physical-network-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="is-provider-network" type="xs:boolean" />
+ <xs:element name="is-shared-network" type="xs:boolean" />
+ <xs:element name="is-external-network" type="xs:boolean" />
+ <xs:element ref="tns:subnets" minOccurs="0" />
+ <xs:element ref="tns:ctag-assignments" minOccurs="0" />
+ <xs:element ref="tns:segmentation-assignments" minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="l3-networks">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="network-policy">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="network-policy-id" type="xs:string" />
+ <xs:element name="network-policy-fqdn" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="network-policies">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:network-policy" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vf-module">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vf-module-id" type="xs:string" />
+ <xs:element name="vf-module-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="is-base-vf-module" type="xs:boolean" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="contrail-service-instance-fqdn" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vf-modules">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="generic-vnf">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnf-id" type="xs:string" />
+ <xs:element name="vnf-name" type="xs:string" />
+ <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="service-id" type="xs:string" minOccurs="0" />
+ <xs:element name="regional-resource-zone" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-state" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="management-option" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-loopback0-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="nm-lan-v6-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="management-v6-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" />
+ <xs:element name="vcpu-units" type="xs:string" minOccurs="0" />
+ <xs:element name="vmemory" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="vmemory-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" />
+ <xs:element name="vdisk-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="in-maint" type="xs:boolean" />
+ <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="summary-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="encrypted-access-flag" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="entitlement-assignment-group-uuid"
+ type="xs:string" minOccurs="0" />
+ <xs:element name="entitlement-resource-uuid" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-assignment-group-uuid" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key-uuid" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="persona-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="widget-model-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="as-number" type="xs:string" minOccurs="0" />
+ <xs:element name="regional-resource-subzone" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ <xs:element ref="tns:lag-interfaces" minOccurs="0" />
+ <xs:element ref="tns:vf-modules" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="generic-vnfs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:generic-vnf" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="lag-link">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="link-name" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="lag-links">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="newvce">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnf-id2" type="xs:string" />
+ <xs:element name="vnf-name" type="xs:string" />
+ <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="vnf-type" type="xs:string" />
+ <xs:element name="prov-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="operational-state" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="license-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-oam-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equipment-role" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipv4-loopback0-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="heat-stack-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="mso-catalog-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:l-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="newvces">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pnf">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="pnf-name" type="xs:string" />
+ <xs:element name="pnf-name2" type="xs:string" minOccurs="0" />
+ <xs:element name="pnf-name2-source" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="pnf-id" type="xs:string" minOccurs="0" />
+ <xs:element name="equip-type" type="xs:string" minOccurs="0" />
+ <xs:element name="equip-vendor" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="equip-model" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="management-option" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipaddress-v4-oam" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="sw-version" type="xs:string" minOccurs="0" />
+ <xs:element name="orchestration-status" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="in-maint" type="xs:boolean" />
+ <xs:element name="frame-id" type="xs:string" minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:p-interfaces" minOccurs="0" />
+ <xs:element ref="tns:lag-interfaces" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="pnfs">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="physical-link">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="link-name" type="xs:string" />
+ <xs:element name="speed-value" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="speed-units" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="circuit-id" type="xs:string" minOccurs="0" />
+ <xs:element name="dual-mode" type="xs:string" minOccurs="0" />
+ <xs:element name="management-option" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="service-provider-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="physical-links">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:physical-link" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vig-server">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vig-address-type" type="xs:string" />
+ <xs:element name="ipaddress-v4-vig" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="ipaddress-v6-vig" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vig-servers">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ipsec-configuration">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="ipsec-configuration-id" type="xs:string" />
+ <xs:element name="requested-vig-address-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="requested-encryption-strength" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="requested-dmz-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="shared-dmz-network-address" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="requested-customer-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ike-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-authentication" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-encryption" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-dh-group" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-am-group-id" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-am-password" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ikev1-sa-lifetime" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipsec-authentication" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipsec-encryption" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipsec-sa-lifetime" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" />
+ <xs:element name="xauth-userid" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="xauth-user-password" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="dpd-interval" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="dpd-frequency" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ <xs:element ref="tns:vig-servers" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="ipsec-configurations">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:ipsec-configuration" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="route-table-reference">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="route-table-reference-id" type="xs:string" />
+ <xs:element name="route-table-reference-fqdn" type="xs:string" />
+ <xs:element name="resource-version" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:relationship-list" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="route-table-references">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:route-table-reference" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="network">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:logical-links" minOccurs="0" />
+ <xs:element ref="tns:site-pair-sets" minOccurs="0" />
+ <xs:element ref="tns:vpn-bindings" minOccurs="0" />
+ <xs:element ref="tns:vpls-pes" minOccurs="0" />
+ <xs:element ref="tns:multicast-configurations" minOccurs="0" />
+ <xs:element ref="tns:vces" minOccurs="0" />
+ <xs:element ref="tns:vpes" minOccurs="0" />
+ <xs:element ref="tns:vnfcs" minOccurs="0" />
+ <xs:element ref="tns:l3-networks" minOccurs="0" />
+ <xs:element ref="tns:network-policies" minOccurs="0" />
+ <xs:element ref="tns:generic-vnfs" minOccurs="0" />
+ <xs:element ref="tns:lag-links" minOccurs="0" />
+ <xs:element ref="tns:newvces" minOccurs="0" />
+ <xs:element ref="tns:pnfs" minOccurs="0" />
+ <xs:element ref="tns:physical-links" minOccurs="0" />
+ <xs:element ref="tns:ipsec-configurations" minOccurs="0" />
+ <xs:element ref="tns:route-table-references" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="reserved-prop-names">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="last-mod-source-of-truth" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="aai-node-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="aai-created-ts" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="aai-unique-key" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="aai-last-mod-ts" type="xs:unsignedInt"
+ minOccurs="0" />
+ <xs:element name="source-of-truth" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="edge-prop-names">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="edgeLabel" type="xs:string" minOccurs="0" />
+ <xs:element name="direction" type="xs:string" minOccurs="0" />
+ <xs:element name="multiplicityRule" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="isParent" type="xs:boolean" minOccurs="0" />
+ <xs:element name="usesResource" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="hasDelTarget" type="xs:boolean"
+ minOccurs="0" />
+ <xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" />
+ <xs:element name="SVC-INFRA-REV" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="aai-internal">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:reserved-prop-names" minOccurs="0"
+ maxOccurs="unbounded" />
+ <xs:element ref="tns:edge-prop-names" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="inventory">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:search" minOccurs="0" />
+ <xs:element ref="tns:actions" minOccurs="0" />
+ <xs:element ref="tns:cloud-infrastructure" minOccurs="0" />
+ <xs:element ref="tns:license-management" minOccurs="0" />
+ <xs:element ref="tns:business" minOccurs="0" />
+ <xs:element ref="tns:service-design-and-creation"
+ minOccurs="0" />
+ <xs:element ref="tns:network" minOccurs="0" />
+ <xs:element ref="tns:aai-internal" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notification-event-header">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="id" type="xs:string" minOccurs="0" />
+ <xs:element name="timestamp" type="xs:string" minOccurs="0" />
+ <xs:element name="source-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="domain" type="xs:string" minOccurs="0" />
+ <xs:element name="sequence-number" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="severity" type="xs:string" minOccurs="0" />
+ <xs:element name="event-type" type="xs:string" minOccurs="0" />
+ <xs:element name="version" type="xs:string" minOccurs="0" />
+ <xs:element name="action" type="xs:string" minOccurs="0" />
+ <xs:element name="entity-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="top-entity-type" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="entity-link" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="status" type="xs:string" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="notification-event">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="cambria.partition" type="xs:string"
+ minOccurs="0" />
+ <xs:element ref="tns:notification-event-header"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="query-parameters">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:named-query" minOccurs="0" />
+ <xs:element ref="tns:model" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="instance-filter">
+ <xs:complexType>
+ <xs:sequence />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="instance-filters">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:instance-filter" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="model-and-named-query-search">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:query-parameters" minOccurs="0" />
+ <xs:element ref="tns:instance-filters" minOccurs="0" />
+ <xs:element name="top-node-type" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="properties">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ <xs:element name="property-value" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="extra-properties">
+ <xs:complexType>
+ <xs:sequence />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="inventory-response-item">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="model-name" type="xs:string" minOccurs="0" />
+ <xs:element ref="tns:extra-properties" minOccurs="0" />
+ <xs:element ref="tns:inventory-response-items" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="inventory-response-items">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:inventory-response-item" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="response-list">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="tns:inventory-response-items" minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="extra-property">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property-name" type="xs:string"
+ minOccurs="0" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="vnf">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="vnf-id" type="xs:string" />
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/src/main/resources/schema/vnfcatalog.xsd b/src/main/resources/schema/vnfcatalog.xsd index 9789124..1b18ef1 100644 --- a/src/main/resources/schema/vnfcatalog.xsd +++ b/src/main/resources/schema/vnfcatalog.xsd @@ -1,127 +1,127 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- +<?xml version="1.0" encoding="UTF-8"?>
+<!--
============LICENSE_START======================================================= MODEL LOADER SERVICE ================================================================================ Copyright (C) 2017 AT&T Intellectual Property. 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 + 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. - ============LICENSE_END========================================================= - --> - -<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <xsd:element name="vnf-catalog"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="part-number-list" maxOccurs="unbounded"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="part-number" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="vnf-type" minOccurs="0" maxOccurs="1" - type="xsd:normalizedString" /> - <xsd:element name="vendor-info" minOccurs="0" - maxOccurs="1"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="vendor-name" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="vendor-part-number" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="vendor-model" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="vcpu" minOccurs="0" maxOccurs="1"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="vcpu-default" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vcpu-min" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vcpu-max" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="vmemory" minOccurs="0" maxOccurs="1"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="vmemory-default" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vmemory-units" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="vmemory-min" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vmemory-max" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="vdisk" minOccurs="0" maxOccurs="1"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="vdisk-default" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vdisk-units" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="vdisk-min" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - <xsd:element name="vdisk-max" minOccurs="0" - maxOccurs="1" type="xsd:int" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="software-version-list" maxOccurs="unbounded"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="software-version" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="software-version-state" - minOccurs="0" maxOccurs="1" type="xsd:int" /> - <xsd:element name="software-filetype" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="file-md5-value" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="software-filename" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="vnf-features-list" maxOccurs="unbounded"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="vnf-feature" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - <xsd:element name="license-list" minOccurs="0" - maxOccurs="1"> - <xsd:complexType> - <xsd:sequence> - <xsd:element name="license-assignment-group" - minOccurs="0" maxOccurs="1" type="xsd:normalizedString" /> - <xsd:element name="license-required" minOccurs="0" - maxOccurs="1" type="xsd:normalizedString" /> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - </xsd:element> - </xsd:sequence> - </xsd:complexType> - </xsd:element> -</xsd:schema> + ============LICENSE_END=========================================================
+ -->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <xsd:element name="vnf-catalog">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="part-number-list" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="part-number" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="vnf-type" minOccurs="0" maxOccurs="1"
+ type="xsd:normalizedString" />
+ <xsd:element name="vendor-info" minOccurs="0"
+ maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="vendor-name" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="vendor-part-number" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="vendor-model" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="vcpu" minOccurs="0" maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="vcpu-default" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vcpu-min" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vcpu-max" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="vmemory" minOccurs="0" maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="vmemory-default" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vmemory-units" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="vmemory-min" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vmemory-max" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="vdisk" minOccurs="0" maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="vdisk-default" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vdisk-units" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="vdisk-min" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ <xsd:element name="vdisk-max" minOccurs="0"
+ maxOccurs="1" type="xsd:int" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="software-version-list" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="software-version" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="software-version-state"
+ minOccurs="0" maxOccurs="1" type="xsd:int" />
+ <xsd:element name="software-filetype" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="file-md5-value" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="software-filename" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="vnf-features-list" maxOccurs="unbounded">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="vnf-feature" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="license-list" minOccurs="0"
+ maxOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="license-assignment-group"
+ minOccurs="0" maxOccurs="1" type="xsd:normalizedString" />
+ <xsd:element name="license-required" minOccurs="0"
+ maxOccurs="1" type="xsd:normalizedString" />
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+</xsd:schema>
diff --git a/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context b/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context new file mode 100644 index 0000000..8514196 --- /dev/null +++ b/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context @@ -0,0 +1 @@ +{"context":{"contextClass":"ajsc.Context","contextId":"__module_ajsc_namespace_name__:__module_ajsc_namespace_version__","contextName":"__module_ajsc_namespace_name__","contextVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ Context"}}
\ No newline at end of file diff --git a/src/main/runtime/context/default#0.context b/src/main/runtime/context/default#0.context new file mode 100644 index 0000000..d1b5ab4 --- /dev/null +++ b/src/main/runtime/context/default#0.context @@ -0,0 +1 @@ +{"context":{"contextClass":"ajsc.Context","contextId":"default:0","contextName":"default","contextVersion":"0","description":"Default Context"}}
\ No newline at end of file diff --git a/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json new file mode 100644 index 0000000..d0954cf --- /dev/null +++ b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json @@ -0,0 +1 @@ +{"deploymentPackage":{"Class":"ajsc.DeploymentPackage","Id":"__module.ajsc.namespace.name__:__module_ajsc_namespace_version__","namespace":"__module_ajsc_namespace_name__","namespaceVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ __module_ajsc_namespace_version__ - default description","userId":"ajsc"}}
\ No newline at end of file diff --git a/src/main/runtime/shiroRole/ajscadmin.json b/src/main/runtime/shiroRole/ajscadmin.json new file mode 100644 index 0000000..f5e981e --- /dev/null +++ b/src/main/runtime/shiroRole/ajscadmin.json @@ -0,0 +1 @@ +{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"ajscadmin","name":"ajscadmin","permissions":"[ajscadmin:*, ajsc:*]"}
\ No newline at end of file diff --git a/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json b/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json new file mode 100644 index 0000000..2dae9f5 --- /dev/null +++ b/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json @@ -0,0 +1 @@ +{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:__module_ajsc_namespace_name__","name":"contextadmin:__module_ajsc_namespace_name__","permissions":"[]"}
\ No newline at end of file diff --git a/src/main/runtime/shiroRole/contextadmin#default.json b/src/main/runtime/shiroRole/contextadmin#default.json new file mode 100644 index 0000000..5de814e --- /dev/null +++ b/src/main/runtime/shiroRole/contextadmin#default.json @@ -0,0 +1 @@ +{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:default","name":"contextadmin:default","permissions":"[]"}
\ No newline at end of file diff --git a/src/main/runtime/shiroUser/ajsc.json b/src/main/runtime/shiroUser/ajsc.json new file mode 100644 index 0000000..f4c7855 --- /dev/null +++ b/src/main/runtime/shiroUser/ajsc.json @@ -0,0 +1 @@ +{"shiroUserClass":"ajsc.auth.ShiroUser","shiroUserId":"ajsc","passwordHash":"9471697417008c880720ba54c6038791ad7e98f3b88136fe34f4d31a462dd27a","permissions":"[*:*]","username":"ajsc"}
\ No newline at end of file diff --git a/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json b/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json new file mode 100644 index 0000000..cb8d483 --- /dev/null +++ b/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json @@ -0,0 +1 @@ +{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:ajscadmin","roleId":"ajscadmin","userId":"ajsc"}
\ No newline at end of file diff --git a/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json b/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json new file mode 100644 index 0000000..95d2361 --- /dev/null +++ b/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json @@ -0,0 +1 @@ +{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:__module_ajsc_namespace_name__","roleId":"contextadmin:__module_ajsc_namespace_name__","userId":"ajsc"}
\ No newline at end of file diff --git a/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json b/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json new file mode 100644 index 0000000..2bd5063 --- /dev/null +++ b/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json @@ -0,0 +1 @@ +{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:default","roleId":"contextadmin:default","userId":"ajsc"}
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/webapp/WEB-INF/applicationContext.xml deleted file mode 100644 index 08a88e6..0000000 --- a/src/main/webapp/WEB-INF/applicationContext.xml +++ /dev/null @@ -1,29 +0,0 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<beans xmlns="http://www.springframework.org/schema/beans" - xmlns:context="http://www.springframework.org/schema/context" - xmlns:mvc="http://www.springframework.org/schema/mvc" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd - http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> - -</beans> diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index c256b26..0000000 --- a/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,40 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> - <display-name>model-loader</display-name> - - <listener> - <listener-class> - org.springframework.web.context.ContextLoaderListener - </listener-class> - </listener> - - <servlet> - <servlet-name>rest</servlet-name> - <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> - <load-on-startup>1</load-on-startup> - </servlet> - <servlet-mapping> - <servlet-name>rest</servlet-name> - <url-pattern>/</url-pattern> - </servlet-mapping> -</web-app> diff --git a/src/test/java/org/openecomp/modelloader/config/ModelLoaderConfigTest.java b/src/test/java/org/openecomp/modelloader/config/ModelLoaderConfigTest.java index 4018f14..2c895b8 100644 --- a/src/test/java/org/openecomp/modelloader/config/ModelLoaderConfigTest.java +++ b/src/test/java/org/openecomp/modelloader/config/ModelLoaderConfigTest.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.config; import static org.junit.Assert.assertEquals; @@ -41,7 +43,7 @@ public class ModelLoaderConfigTest { Properties props = new Properties(); props.setProperty("ml.distribution.ARTIFACT_TYPES", "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG"); - ModelLoaderConfig config = new ModelLoaderConfig(props); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); List<String> types = config.getRelevantArtifactTypes(); @@ -67,7 +69,7 @@ public class ModelLoaderConfigTest { System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass); props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_PASSWORD, encryptedTestPass); - ModelLoaderConfig config = new ModelLoaderConfig(props); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); assertEquals(testPass, config.getPassword()); } @@ -81,7 +83,7 @@ public class ModelLoaderConfigTest { System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass); props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD, encryptedTestPass); - ModelLoaderConfig config = new ModelLoaderConfig(props); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); assertEquals(testPass, config.getKeyStorePassword()); } @@ -94,7 +96,7 @@ public class ModelLoaderConfigTest { String encryptedTestPassword = Password.obfuscate(testPassword); props.put(ModelLoaderConfig.PROP_AAI_AUTHENTICATION_PASSWORD, encryptedTestPassword); - ModelLoaderConfig config = new ModelLoaderConfig(props); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); assertEquals(testPassword, config.getAaiAuthenticationPassword()); } @@ -106,17 +108,28 @@ public class ModelLoaderConfigTest { props.load( new FileInputStream("src/test/resources/model-loader-empty-auth-password.properties")); - ModelLoaderConfig config = new ModelLoaderConfig(props); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); AaiRestClient aaiClient = new AaiRestClient(config); assertFalse("Empty AAI Password should result in no basic authentication", aaiClient.useBasicAuth()); props.load(new FileInputStream("src/test/resources/model-loader-no-auth-password.properties")); - config = new ModelLoaderConfig(props); + config = new ModelLoaderConfig(props, null); aaiClient = new AaiRestClient(config); assertFalse("No AAI Password should result in no basic authentication", aaiClient.useBasicAuth()); } + + @Test + public void testGetUrls() { + Properties props = new Properties(); + props.put(ModelLoaderConfig.PROP_AAI_MODEL_RESOURCE_URL, "/aai/v*/service-design-and-creation/models/model/"); + props.put(ModelLoaderConfig.PROP_AAI_NAMED_QUERY_RESOURCE_URL, "/aai/v*/service-design-and-creation/named-queries/named-query/"); + ModelLoaderConfig config = new ModelLoaderConfig(props, null); + + assertEquals("/aai/v9/service-design-and-creation/models/model/", config.getAaiModelUrl("v9")); + assertEquals("/aai/v10/service-design-and-creation/named-queries/named-query/", config.getAaiNamedQueryUrl("v10")); + } } diff --git a/src/test/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandlerTest.java b/src/test/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandlerTest.java index 1b1d955..c81b51d 100644 --- a/src/test/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandlerTest.java +++ b/src/test/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandlerTest.java @@ -1,98 +1,100 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.entity.catalog; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mockito; -import org.openecomp.modelloader.config.ModelLoaderConfig; -import org.openecomp.modelloader.entity.Artifact; -import org.openecomp.modelloader.restclient.AaiRestClient; -import org.openecomp.modelloader.restclient.AaiRestClient.MimeType; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import com.sun.jersey.api.client.ClientResponse; - -@RunWith(PowerMockRunner.class) -@PrepareForTest({ VnfCatalogArtifactHandler.class, ClientResponse.class, AaiRestClient.class }) -public class VnfCatalogArtifactHandlerTest { - - protected static String CONFIG_FILE = "model-loader.properties"; - - @Test - public void testWithMocks() throws Exception { - - Properties configProperties = new Properties(); - try { - configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE)); - } catch (IOException e) { - fail(); - } - ModelLoaderConfig config = new ModelLoaderConfig(configProperties); - - ClientResponse mockGetResp = PowerMockito.mock(ClientResponse.class); - PowerMockito.when(mockGetResp.getStatus()).thenReturn(200).thenReturn(200).thenReturn(404) - .thenReturn(404).thenReturn(200); // only second two will be PUT - ClientResponse mockPutResp = PowerMockito.mock(ClientResponse.class); - PowerMockito.when(mockPutResp.getStatus()).thenReturn(201); - - AaiRestClient mockRestClient = PowerMockito.mock(AaiRestClient.class); - PowerMockito.whenNew(AaiRestClient.class).withAnyArguments().thenReturn(mockRestClient); - PowerMockito.when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(), - Mockito.any(MimeType.class))).thenReturn(mockGetResp); - PowerMockito.when(mockRestClient.putResource(Mockito.anyString(), Mockito.anyString(), - Mockito.anyString(), Mockito.any(MimeType.class))).thenReturn(mockPutResp); - - VnfCatalogArtifactHandler vnfCAH = new VnfCatalogArtifactHandler(config); - - String examplePath = "src/test/resources/vnfcatalogexample.xml"; - - byte[] encoded = Files.readAllBytes(Paths.get(examplePath)); - String payload = new String(encoded, "utf-8"); - - VnfCatalogArtifact artifact = new VnfCatalogArtifact(payload); - List<Artifact> artifacts = new ArrayList<Artifact>(); - artifacts.add(artifact); - - String distributionID = "test"; - - assertTrue(vnfCAH.pushArtifacts(artifacts, distributionID)); - // times(2) bc with above get returns should only get to this part twice - ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); - Mockito.verify(mockRestClient, Mockito.times(2)).putResource(Mockito.anyString(), - argument.capture(), Mockito.anyString(), Mockito.any(MimeType.class)); - assertTrue(argument.getAllValues().get(0).contains("5.2.5")); - assertTrue(argument.getAllValues().get(1).contains("5.2.4")); - } -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.catalog;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+import org.openecomp.modelloader.config.ModelLoaderConfig;
+import org.openecomp.modelloader.entity.Artifact;
+import org.openecomp.modelloader.restclient.AaiRestClient;
+import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.sun.jersey.api.client.ClientResponse;
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ VnfCatalogArtifactHandler.class, ClientResponse.class, AaiRestClient.class })
+public class VnfCatalogArtifactHandlerTest {
+
+ protected static String CONFIG_FILE = "model-loader.properties";
+
+ @Test
+ public void testWithMocks() throws Exception {
+
+ Properties configProperties = new Properties();
+ try {
+ configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE));
+ } catch (IOException e) {
+ fail();
+ }
+ ModelLoaderConfig config = new ModelLoaderConfig(configProperties, null);
+
+ ClientResponse mockGetResp = PowerMockito.mock(ClientResponse.class);
+ PowerMockito.when(mockGetResp.getStatus()).thenReturn(200).thenReturn(200).thenReturn(404)
+ .thenReturn(404).thenReturn(200); // only second two will be PUT
+ ClientResponse mockPutResp = PowerMockito.mock(ClientResponse.class);
+ PowerMockito.when(mockPutResp.getStatus()).thenReturn(201);
+
+ AaiRestClient mockRestClient = PowerMockito.mock(AaiRestClient.class);
+ PowerMockito.whenNew(AaiRestClient.class).withAnyArguments().thenReturn(mockRestClient);
+ PowerMockito.when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(),
+ Mockito.any(MimeType.class))).thenReturn(mockGetResp);
+ PowerMockito.when(mockRestClient.putResource(Mockito.anyString(), Mockito.anyString(),
+ Mockito.anyString(), Mockito.any(MimeType.class))).thenReturn(mockPutResp);
+
+ VnfCatalogArtifactHandler vnfCAH = new VnfCatalogArtifactHandler(config);
+
+ String examplePath = "src/test/resources/vnfcatalogexample.xml";
+
+ byte[] encoded = Files.readAllBytes(Paths.get(examplePath));
+ String payload = new String(encoded, "utf-8");
+
+ VnfCatalogArtifact artifact = new VnfCatalogArtifact(payload);
+ List<Artifact> artifacts = new ArrayList<Artifact>();
+ artifacts.add(artifact);
+
+ String distributionID = "test";
+
+ assertTrue(vnfCAH.pushArtifacts(artifacts, distributionID));
+ // times(2) bc with above get returns should only get to this part twice
+ ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
+ Mockito.verify(mockRestClient, Mockito.times(2)).putResource(Mockito.anyString(),
+ argument.capture(), Mockito.anyString(), Mockito.any(MimeType.class));
+ assertTrue(argument.getAllValues().get(0).contains("5.2.5"));
+ assertTrue(argument.getAllValues().get(1).contains("5.2.4"));
+ }
+}
diff --git a/src/test/java/org/openecomp/modelloader/entity/model/ModelArtifactParserTest.java b/src/test/java/org/openecomp/modelloader/entity/model/ModelArtifactParserTest.java index f7b7871..ac32f58 100644 --- a/src/test/java/org/openecomp/modelloader/entity/model/ModelArtifactParserTest.java +++ b/src/test/java/org/openecomp/modelloader/entity/model/ModelArtifactParserTest.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; import static org.junit.Assert.assertTrue; @@ -31,121 +33,93 @@ import org.openecomp.modelloader.entity.Artifact; public class ModelArtifactParserTest { - @Test - public void testParseModelFileNoDeps() throws Exception { - final String MODEL_FILE = "src/test/resources/models/vnf-model.xml"; - - try { - byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); - - ModelArtifactParser parser = new ModelArtifactParser(); - List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); - - assertTrue(modelList.size() == 1); - - ModelArtifact model = (ModelArtifact) modelList.get(0); - System.out.println(model.toString()); - - assertTrue(model.getNameVersionId().equalsIgnoreCase("model-vid")); - assertTrue(model.getType().toString().equalsIgnoreCase("MODEL")); - assertTrue(model.getDependentModelIds().size() == 0); - } catch (Exception e) { - e.printStackTrace(); - assertTrue(false); - } - } - - @Test - public void testParseModelFileDeps() throws Exception { - final String MODEL_FILE = "src/test/resources/models/wan-connector-model.xml"; - - try { - byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); - - ModelArtifactParser parser = new ModelArtifactParser(); - List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); - - assertTrue(modelList.size() == 1); - - ModelArtifact model = (ModelArtifact) modelList.get(0); - System.out.println(model.toString()); - - assertTrue(model.getNameVersionId().equalsIgnoreCase("93d9d45d-7eec-4371-9083-675e4c353de3")); - assertTrue(model.getType().toString().equalsIgnoreCase("MODEL")); - assertTrue(model.getDependentModelIds().size() == 7); - assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24")); - assertTrue(model.getDependentModelIds().contains("ae16244f-4d29-4801-a559-e25f2db2a4c3")); - assertTrue(model.getDependentModelIds().contains("a6d9de88-4046-4b78-a59e-5691243d292a")); - } catch (Exception e) { - e.printStackTrace(); - assertTrue(false); - } - } - - @Test - public void testParseCompleteModel() throws Exception { - final String MODEL_FILE = "src/test/resources/models/complete-model.xml"; - - try { - byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); - - ModelArtifactParser parser = new ModelArtifactParser(); - List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); - - for (Artifact art : modelList) { - ModelArtifact model = (ModelArtifact) art; - System.out.println(model.toString()); - } - - assertTrue(modelList.size() == 3); - - ModelArtifact modelVdc = (ModelArtifact) modelList.get(0); - assertTrue( - modelVdc.getNameVersionId().equalsIgnoreCase("997fc7-fca1-451f-b953-9a1e6197b4d6")); - assertTrue(modelVdc.getType().toString().equalsIgnoreCase("MODEL")); - assertTrue(modelVdc.getDependentModelIds().size() == 1); - assertTrue(modelVdc.getDependentModelIds().contains("93d9d45d-7eec-4371-9083-675e4c353de3")); - - ModelArtifact modelPserver = (ModelArtifact) modelList.get(2); - assertTrue( - modelPserver.getNameVersionId().equalsIgnoreCase("f2b24d95-c582-48d5-b2d6-c5b3a94ce812")); - assertTrue(modelPserver.getType().toString().equalsIgnoreCase("MODEL")); - assertTrue(modelPserver.getDependentModelIds().size() == 2); - assertTrue( - modelPserver.getDependentModelIds().contains("35be1acf-1298-48c6-a128-66850083b8bd")); - assertTrue( - modelPserver.getDependentModelIds().contains("759dbd4a-2473-46f3-a932-48d987c9b4a1")); - } catch (Exception e) { - e.printStackTrace(); - assertTrue(false); - } - } - - @Test - public void testParseNamedQuery() throws Exception { - final String MODEL_FILE = "src/test/resources/models/named-query-wan-connector.xml"; - - try { - byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); - - ModelArtifactParser parser = new ModelArtifactParser(); - List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); - - assertTrue(modelList.size() == 1); - - ModelArtifact model = (ModelArtifact) modelList.get(0); - System.out.println(model.toString()); - - assertTrue(model.getNameVersionId().equalsIgnoreCase("94cac189-8d88-4d63-a194-f44214e080ff")); - assertTrue(model.getType().toString().equalsIgnoreCase("NAMED_QUERY")); - assertTrue(model.getDependentModelIds().size() == 4); - assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24")); - assertTrue(model.getDependentModelIds().contains("997fc7-fca1-451f-b953-9a1e6197b4d6")); - assertTrue(model.getDependentModelIds().contains("897df7ea-8938-42b0-bc57-46e913a4d93b")); - assertTrue(model.getDependentModelIds().contains("f2b24d95-c582-48d5-b2d6-c5b3a94ce812")); - } catch (Exception e) { - e.printStackTrace(); - assertTrue(false); - } - } + @Test + public void testParseModelFileNoDeps() throws Exception { + final String MODEL_FILE = "src/test/resources/models/l3-network-widget.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelArtifactParser parser = new ModelArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList.size() == 1); + + ModelArtifact model = (ModelArtifact) modelList.get(0); + System.out.println(model.toString()); + + assertTrue(model.getModelInvariantId().equalsIgnoreCase("3d560d81-57d0-438b-a2a1-5334dba0651a")); + assertTrue(model.getModelNamespace().equalsIgnoreCase("http://org.openecomp.aai.inventory/v9")); + assertTrue(model.getModelNamespaceVersion().equalsIgnoreCase("v9")); + assertTrue(model.getType().toString().equalsIgnoreCase("MODEL")); + System.out.println(model.getDependentModelIds().size()); + assertTrue(model.getDependentModelIds().size() == 0); + } catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + + @Test + public void testParseModelFileDeps() throws Exception { + final String MODEL_FILE = "src/test/resources/models/AAI-stellService-service-1.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelArtifactParser parser = new ModelArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList.size() == 1); + + ModelArtifact model = (ModelArtifact) modelList.get(0); + System.out.println(model.toString()); + + assertTrue(model.getModelInvariantId().equalsIgnoreCase("fedf9da3-6a74-4813-8fa2-221a98b0e7ad")); + assertTrue(model.getModelVerId().equalsIgnoreCase("e0373537-7f66-4094-9939-e2f5de6ff5f6")); + assertTrue(model.getType().toString().equalsIgnoreCase("MODEL")); + assertTrue(model.getDependentModelIds().size() == 3); + assertTrue(model.getDependentModelIds().contains("5c12984d-db0f-4300-a0e0-9791775cc40f|88bdbadf-db8a-490f-881e-c8effcbc3f66")); + assertTrue(model.getDependentModelIds().contains("959b7c09-9f34-4e5f-8b63-505381db176e|374d0899-bbc2-4403-9320-fe9bebef75c6")); + } catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + + @Test + public void testParseModelFileInvalidArtifact() throws Exception { + final String MODEL_FILE = "src/test/resources/models/invalid-model.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelArtifactParser parser = new ModelArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList == null || modelList.isEmpty()); + } + catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + + @Test + public void testParseModelFileIncompleteArtifact() throws Exception { + final String MODEL_FILE = "src/test/resources/models/incomplete-model.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelArtifactParser parser = new ModelArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList == null || modelList.isEmpty()); + } + catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } } diff --git a/src/test/java/org/openecomp/modelloader/entity/model/ModelParserFactoryTest.java b/src/test/java/org/openecomp/modelloader/entity/model/ModelParserFactoryTest.java new file mode 100644 index 0000000..46db11a --- /dev/null +++ b/src/test/java/org/openecomp/modelloader/entity/model/ModelParserFactoryTest.java @@ -0,0 +1,58 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Paths; + +import org.junit.Test; + +public class ModelParserFactoryTest { + + @Test + public void testParserFactory() throws Exception { + final String MODEL_FILE_V8 = "src/test/resources/models/v8-wan-connector-model.xml"; + final String MODEL_FILE_V9 = "src/test/resources/models/AAI-VL-resource-1.xml"; + final String MODEL_FILE_NAMED_QUERY = "src/test/resources/models/named-query-wan-connector.xml"; + + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE_V8)); + IModelParser parser = ModelParserFactory.createModelParser(xmlBytes, "v8-wan-connector-model.xml"); + assertTrue(parser instanceof ModelV8ArtifactParser); + + xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE_V9)); + parser = ModelParserFactory.createModelParser(xmlBytes, "AAI-VL-resource-1.xml"); + assertTrue(parser instanceof ModelArtifactParser); + + xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE_NAMED_QUERY)); + parser = ModelParserFactory.createModelParser(xmlBytes, "named-query-wan-connector.xml"); + assertTrue(parser instanceof NamedQueryArtifactParser); + } catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } +} diff --git a/src/test/java/org/openecomp/modelloader/entity/model/ModelSorterTest.java b/src/test/java/org/openecomp/modelloader/entity/model/ModelSorterTest.java index dea537f..fdc81da 100644 --- a/src/test/java/org/openecomp/modelloader/entity/model/ModelSorterTest.java +++ b/src/test/java/org/openecomp/modelloader/entity/model/ModelSorterTest.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.entity.model; import static org.junit.Assert.assertEquals; @@ -52,8 +54,9 @@ public class ModelSorterTest { List<Artifact> modelList = new ArrayList<Artifact>(); ModelArtifact model = new ModelArtifact(); - model.setNameVersionId("aaaaa"); - model.addDependentModelId("xyz"); + model.setModelInvariantId("aaa"); + model.setModelVerId("111"); + model.addDependentModelId("xyz|123"); modelList.add(model); ModelSorter sorter = new ModelSorter(); @@ -79,15 +82,18 @@ public class ModelSorterTest { List<Artifact> modelList = new ArrayList<Artifact>(); ModelArtifact aaaa = new ModelArtifact(); - aaaa.setNameVersionId("aaaa"); - aaaa.addDependentModelId("cccc"); + aaaa.setModelInvariantId("aaaa"); + aaaa.setModelVerId("mvaaaa"); + aaaa.addDependentModelId("cccc|mvcccc"); ModelArtifact bbbb = new ModelArtifact(); - bbbb.setNameVersionId("bbbb"); - bbbb.addDependentModelId("aaaa"); + bbbb.setModelInvariantId("bbbb"); + bbbb.setModelVerId("mvbbbb"); + bbbb.addDependentModelId("aaaa|mvaaaa"); ModelArtifact cccc = new ModelArtifact(); - cccc.setNameVersionId("cccc"); + cccc.setModelInvariantId("cccc"); + cccc.setModelVerId("mvcccc"); modelList.add(aaaa); modelList.add(bbbb); @@ -104,19 +110,89 @@ public class ModelSorterTest { assertEquals(aaaa, sortedList.get(1)); assertEquals(bbbb, sortedList.get(2)); } + + @Test + public void multipleModelsV8() { + + List<Artifact> modelList = new ArrayList<Artifact>(); + + ModelV8Artifact aaaa = new ModelV8Artifact(); + aaaa.setModelNameVersionId("aaaa"); + aaaa.addDependentModelId("cccc"); + + ModelV8Artifact bbbb = new ModelV8Artifact(); + bbbb.setModelNameVersionId("bbbb"); + bbbb.addDependentModelId("aaaa"); + + ModelV8Artifact cccc = new ModelV8Artifact(); + cccc.setModelNameVersionId("cccc"); + + modelList.add(aaaa); + modelList.add(bbbb); + modelList.add(cccc); + + ModelSorter sorter = new ModelSorter(); + sorter = new ModelSorter(); + + List<Artifact> sortedList = sorter.sort(modelList); + assertNotNull(sortedList); + assertEquals(3, sortedList.size()); + assertEquals(cccc, sortedList.get(0)); + assertEquals(aaaa, sortedList.get(1)); + assertEquals(bbbb, sortedList.get(2)); + } + + @Test + public void multipleModelsAndNamedQueries() { + + List<Artifact> modelList = new ArrayList<Artifact>(); + + ModelArtifact aaaa = new ModelArtifact(); + aaaa.setModelInvariantId("aaaa"); + aaaa.setModelVerId("1111"); + aaaa.addDependentModelId("cccc|2222"); + + NamedQueryArtifact nq1 = new NamedQueryArtifact(); + nq1.setNamedQueryUuid("nq1"); + nq1.addDependentModelId("aaaa|1111"); + + NamedQueryArtifact nq2 = new NamedQueryArtifact(); + nq2.setNamedQueryUuid("nq2"); + nq2.addDependentModelId("existing-model"); + + + modelList.add(nq1); + modelList.add(nq2); + modelList.add(aaaa); + + ModelSorter sorter = new ModelSorter(); + sorter = new ModelSorter(); + + List<Artifact> sortedList = sorter.sort(modelList); + assertNotNull(sortedList); + assertEquals(3, sortedList.size()); + + System.out.println(sortedList.get(0) + "-" + sortedList.get(1) + "-" + sortedList.get(2)); + assertEquals(aaaa, sortedList.get(0)); + assertEquals(nq2, sortedList.get(1)); + assertEquals(nq1, sortedList.get(2)); + } + @Test(expected = RuntimeException.class) public void circularDependency() { List<Artifact> modelList = new ArrayList<Artifact>(); ModelArtifact aaaa = new ModelArtifact(); - aaaa.setNameVersionId("aaaa"); - aaaa.addDependentModelId("bbbb"); + aaaa.setModelInvariantId("aaaa"); + aaaa.setModelVerId("1111"); + aaaa.addDependentModelId("bbbb|1111"); ModelArtifact bbbb = new ModelArtifact(); - bbbb.setNameVersionId("bbbb"); - bbbb.addDependentModelId("aaaa"); + bbbb.setModelInvariantId("bbbb"); + bbbb.setModelVerId("1111"); + bbbb.addDependentModelId("aaaa|1111"); modelList.add(aaaa); modelList.add(bbbb); @@ -126,7 +202,7 @@ public class ModelSorterTest { List<Artifact> sortedList = sorter.sort(modelList); assertNotNull(sortedList); - assertEquals(3, sortedList.size()); + assertEquals(2, sortedList.size()); } diff --git a/src/test/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParserTest.java b/src/test/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParserTest.java new file mode 100644 index 0000000..098bc8c --- /dev/null +++ b/src/test/java/org/openecomp/modelloader/entity/model/ModelV8ArtifactParserTest.java @@ -0,0 +1,104 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import org.junit.Test; +import org.openecomp.modelloader.entity.Artifact; + +public class ModelV8ArtifactParserTest { + + @Test + public void testParseModelFile() throws Exception { + final String MODEL_FILE = "src/test/resources/models/v8-wan-connector-model.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelV8ArtifactParser parser = new ModelV8ArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList.size() == 1); + + ModelV8Artifact model = (ModelV8Artifact) modelList.get(0); + System.out.println(model.toString()); + + assertTrue(model.getModelNameVersionId().equalsIgnoreCase("93d9d45d-7eec-4371-9083-675e4c353de3")); + assertTrue(model.getModelNamespace().equalsIgnoreCase("http://com.att.aai.inventory/v7")); + assertTrue(model.getModelNamespaceVersion().equalsIgnoreCase("v7")); + assertTrue(model.getType().toString().equalsIgnoreCase("MODEL_V8")); + assertTrue(model.getDependentModelIds().size() == 7); + assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24")); + assertTrue(model.getDependentModelIds().contains("997fc7-fca1-451f-b953-9a1e6197b4d6")); + assertTrue(model.getDependentModelIds().contains("ae16244f-4d29-4801-a559-e25f2db2a4c3")); + assertTrue(model.getDependentModelIds().contains("759dbd4a-2473-46f3-a932-48d987c9b4a1")); + assertTrue(model.getDependentModelIds().contains("a6d9de88-4046-4b78-a59e-5691243d292a")); + assertTrue(model.getDependentModelIds().contains("35be1acf-1298-48c6-a128-66850083b8bd")); + } catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + + @Test + public void testParseModelFileInvalidArtifact() throws Exception { + final String MODEL_FILE = "src/test/resources/models/invalid-model.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelV8ArtifactParser parser = new ModelV8ArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList == null || modelList.isEmpty()); + } + catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + + @Test + public void testParseModelFileIncompleteArtifact() throws Exception { + final String MODEL_FILE = "src/test/resources/models/incomplete-model.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + ModelV8ArtifactParser parser = new ModelV8ArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList == null || modelList.isEmpty()); + } + catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + +} diff --git a/src/test/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParserTest.java b/src/test/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParserTest.java new file mode 100644 index 0000000..cc9d615 --- /dev/null +++ b/src/test/java/org/openecomp/modelloader/entity/model/NamedQueryArtifactParserTest.java @@ -0,0 +1,64 @@ +/** + * ============LICENSE_START======================================================= + * Model Loader + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.openecomp.modelloader.entity.model; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import org.junit.Test; +import org.openecomp.modelloader.entity.Artifact; + +public class NamedQueryArtifactParserTest { + + @Test + public void testParseNamedQuery() throws Exception { + final String MODEL_FILE = "src/test/resources/models/named-query-wan-connector.xml"; + + try { + byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE)); + + NamedQueryArtifactParser parser = new NamedQueryArtifactParser(); + List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact"); + + assertTrue(modelList.size() == 1); + + NamedQueryArtifact model = (NamedQueryArtifact) modelList.get(0); + System.out.println(model.toString()); + + assertTrue(model.getNamedQueryUuid().equalsIgnoreCase("94cac189-8d88-4d63-a194-f44214e080ff")); + assertTrue(model.getType().toString().equalsIgnoreCase("NAMED_QUERY")); + assertTrue(model.getDependentModelIds().size() == 4); + assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24")); + assertTrue(model.getDependentModelIds().contains("997fc7-fca1-451f-b953-9a1e6197b4d6")); + assertTrue(model.getDependentModelIds().contains("897df7ea-8938-42b0-bc57-46e913a4d93b")); + assertTrue(model.getDependentModelIds().contains("f2b24d95-c582-48d5-b2d6-c5b3a94ce812")); + } catch (Exception e) { + e.printStackTrace(); + assertTrue(false); + } + } + +} diff --git a/src/test/java/org/openecomp/modelloader/restclient/AAIRestClientTest.java b/src/test/java/org/openecomp/modelloader/restclient/AaiRestClientTest.java index 08d7afe..08a429a 100644 --- a/src/test/java/org/openecomp/modelloader/restclient/AAIRestClientTest.java +++ b/src/test/java/org/openecomp/modelloader/restclient/AaiRestClientTest.java @@ -1,23 +1,25 @@ -/*- +/** * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE + * Model Loader * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * 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 - * + * 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. * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. */ - package org.openecomp.modelloader.restclient; import java.io.IOException; @@ -28,7 +30,7 @@ import org.openecomp.modelloader.config.ModelLoaderConfig; import org.openecomp.modelloader.entity.ArtifactType; import org.openecomp.modelloader.entity.model.ModelArtifact; -public class AAIRestClientTest { +public class AaiRestClientTest { // This test requires a running A&AI system. Uncomment to test locally. /* @@ -96,9 +98,9 @@ public class AAIRestClientTest { String baseURL = config.getAaiBaseUrl().trim(); String subURL = null; if (model.getType().equals(ArtifactType.MODEL)) { - subURL = config.getAaiModelUrl().trim(); + subURL = config.getAaiModelUrl(model.getModelNamespaceVersion()).trim(); } else { - subURL = config.getAaiNamedQueryUrl().trim(); + subURL = config.getAaiNamedQueryUrl(model.getModelNamespaceVersion()).trim(); } if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) { @@ -113,7 +115,7 @@ public class AAIRestClientTest { subURL = subURL + "/"; } - String url = baseURL + subURL + model.getNameVersionId(); + String url = baseURL + subURL + model.getUniqueIdentifier(); return url; } } diff --git a/src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java b/src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java deleted file mode 100644 index c2893a9..0000000 --- a/src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java +++ /dev/null @@ -1,115 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.service; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Matchers; -import org.openecomp.modelloader.config.ModelLoaderConfig; -import org.openecomp.modelloader.notification.EventCallback; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import org.openecomp.sdc.api.IDistributionClient; -import org.openecomp.sdc.api.results.IDistributionClientResult; -import org.openecomp.sdc.impl.DistributionClientFactory; -import org.openecomp.sdc.utils.DistributionActionResultEnum; - -@PrepareForTest({ DistributionClientFactory.class }) -@RunWith(PowerMockRunner.class) -public class ModelLoaderServiceTest { - - /* - * //TODO this should be re-added once we come up with a strategy to fail - * gracefully - * - * @Test public void testNonExistentConfiguration(){ - * ModelLoaderService.CONFIG_LOCATION = "FAKELOCATION"; - * - * try{ new ModelLoaderService().start(); }catch(RuntimeException e){ - * assertTrue("Got unexpected message from error log", - * e.getMessage().contains("Failed to load configuration")); return; } - * - * fail("Expecting runtime exception"); } - */ - - @Test - public void testConfigureStartDistributionClient() { - PowerMockito.mockStatic(DistributionClientFactory.class); - - IDistributionClient mockClient = mock(IDistributionClient.class); - ModelLoaderConfig mockConfig = mock(ModelLoaderConfig.class); - - when(DistributionClientFactory.createDistributionClient()).thenReturn(mockClient); - - IDistributionClientResult result = mock(IDistributionClientResult.class); - - when(result.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); - when(mockClient.init(Matchers.<ModelLoaderConfig> any(), Matchers.<EventCallback> any())) - .thenReturn(result); - when(mockClient.start()).thenReturn(result); - - new ModelLoaderService().init(); - - // Validate that the client was initialized and started - verify(mockClient, times(1)).init(Matchers.<ModelLoaderConfig> any(), - Matchers.<EventCallback> any()); - verify(mockClient, times(1)).start(); - } - - @Test - public void testInitializeButNotStarted() { - PowerMockito.mockStatic(DistributionClientFactory.class); - - IDistributionClient mockClient = mock(IDistributionClient.class); - ModelLoaderConfig mockConfig = mock(ModelLoaderConfig.class); - - DistributionActionResultEnum failureReason = DistributionActionResultEnum.ASDC_CONNECTION_FAILED; - - when(DistributionClientFactory.createDistributionClient()).thenReturn(mockClient); - - IDistributionClientResult initResult = mock(IDistributionClientResult.class); - when(initResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS); - IDistributionClientResult startResult = mock(IDistributionClientResult.class); - when(startResult.getDistributionActionResult()).thenReturn(failureReason); - - when(mockClient.init(Matchers.<ModelLoaderConfig> any(), Matchers.<EventCallback> any())) - .thenReturn(initResult); - when(mockClient.start()).thenReturn(startResult); - - // TODO this should be re-added once we come up with a strategy to fail - // gracefully - /* - * try{ new ModelLoaderService().init(mockConfig); }catch(RuntimeException - * e){ assertTrue(e.getMessage().contains(failureReason.toString())); - * return; } - * - * fail("Expecting runtime exception with failure: " + - * failureReason.toString()); - */ - } -} diff --git a/src/test/java/org/openecomp/modelloader/util/JsonXmlConverterTest.java b/src/test/java/org/openecomp/modelloader/util/JsonXmlConverterTest.java index 4654c93..da89c78 100644 --- a/src/test/java/org/openecomp/modelloader/util/JsonXmlConverterTest.java +++ b/src/test/java/org/openecomp/modelloader/util/JsonXmlConverterTest.java @@ -1,79 +1,81 @@ -/*- - * ============LICENSE_START======================================================= - * MODEL LOADER SERVICE - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.modelloader.util; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.ByteArrayInputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.junit.Test; -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -public class JsonXmlConverterTest { - - @Test - public void testConversion() throws Exception { - final String XML_MODEL_FILE = "src/test/resources/models/vnf-model.xml"; - final String JSON_MODEL_FILE = "src/test/resources/models/vnf-model.json"; - - try { - byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE)); - String originalXML = new String(encoded); - - assertFalse(JsonXmlConverter.isValidJson(originalXML)); - - encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE)); - String originalJSON = new String(encoded); - - assertTrue(JsonXmlConverter.isValidJson(originalJSON)); - - String xmlFromJson = JsonXmlConverter.convertJsonToXml(originalJSON); - - // Spot check one of the attributes - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes())); - NodeList nodeList = doc.getDocumentElement().getChildNodes(); - - String modelVid = "notFound"; - for (int i = 0; i < nodeList.getLength(); i++) { - Node currentNode = nodeList.item(i); - if (currentNode.getNodeName().equals("model-name-version-id")) { - modelVid = currentNode.getTextContent(); - break; - } - } - - assertTrue(modelVid.equals("model-vid")); - } catch (Exception e) { - e.printStackTrace(); - assertTrue(false); - } - } -} +/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * 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.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.util;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class JsonXmlConverterTest {
+
+ @Test
+ public void testConversion() throws Exception {
+ final String XML_MODEL_FILE = "src/test/resources/models/l3-network-widget.xml";
+ final String JSON_MODEL_FILE = "src/test/resources/models/l3-network-widget.json";
+
+ try {
+ byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE));
+ String originalXML = new String(encoded);
+
+ assertFalse(JsonXmlConverter.isValidJson(originalXML));
+
+ encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE));
+ String originalJSON = new String(encoded);
+
+ assertTrue(JsonXmlConverter.isValidJson(originalJSON));
+
+ String xmlFromJson = JsonXmlConverter.convertJsonToXml(originalJSON);
+
+ // Spot check one of the attributes
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes()));
+ NodeList nodeList = doc.getDocumentElement().getChildNodes();
+
+ String modelVid = "notFound";
+ for (int i = 0; i < nodeList.getLength(); i++) {
+ Node currentNode = nodeList.item(i);
+ if (currentNode.getNodeName().equals("model-invariant-id")) {
+ modelVid = currentNode.getTextContent();
+ break;
+ }
+ }
+
+ assertTrue(modelVid.equals("3d560d81-57d0-438b-a2a1-5334dba0651a"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ assertTrue(false);
+ }
+ }
+}
diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml index 1252135..aef38e6 100644 --- a/src/test/resources/logback-test.xml +++ b/src/test/resources/logback-test.xml @@ -1,23 +1,3 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - <configuration debug="false"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> diff --git a/src/test/resources/model-loader-empty-auth-password.properties b/src/test/resources/model-loader-empty-auth-password.properties index 69f3da1..91fd527 100644 --- a/src/test/resources/model-loader-empty-auth-password.properties +++ b/src/test/resources/model-loader-empty-auth-password.properties @@ -1,23 +1,3 @@ -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - # Model Loader Distribution Client Configuration ml.distribution.ACTIVE_SERVER_TLS_AUTH=false ml.distribution.ASDC_ADDRESS= diff --git a/src/test/resources/model-loader-no-auth-password.properties b/src/test/resources/model-loader-no-auth-password.properties index 8d59db1..2f36934 100644 --- a/src/test/resources/model-loader-no-auth-password.properties +++ b/src/test/resources/model-loader-no-auth-password.properties @@ -1,23 +1,3 @@ -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - # Model Loader Distribution Client Configuration ml.distribution.ACTIVE_SERVER_TLS_AUTH=false ml.distribution.ASDC_ADDRESS= diff --git a/src/test/resources/model-loader.properties b/src/test/resources/model-loader.properties index 69f3da1..91fd527 100644 --- a/src/test/resources/model-loader.properties +++ b/src/test/resources/model-loader.properties @@ -1,23 +1,3 @@ -### -# ============LICENSE_START======================================================= -# MODEL LOADER SERVICE -# ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. 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. -# ============LICENSE_END========================================================= -### - # Model Loader Distribution Client Configuration ml.distribution.ACTIVE_SERVER_TLS_AUTH=false ml.distribution.ASDC_ADDRESS= diff --git a/src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml b/src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml new file mode 100644 index 0000000..6ec4fb3 --- /dev/null +++ b/src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml @@ -0,0 +1,32 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>5a2aac99-ffe8-415f-9242-420ed10da23e</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</model-version-id> + <model-name>Testvsp..vmme_cinder..module-1</model-name> + <model-version>1</model-version> + <model-description></model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml b/src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml new file mode 100644 index 0000000..ee436ba --- /dev/null +++ b/src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml @@ -0,0 +1,160 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>1e8fdfc0-03cf-4742-b060-dab818954d67</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>da6769f0-aa58-4e90-b2c9-664c2630d131</model-version-id> + <model-name>Testvsp..vmme_small_ecomp..module-0</model-name> + <model-version>1</model-version> + <model-description></model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>f6a038c2-820c-42ba-8c2b-375e24e8f932</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>3f4c7204-739b-4bbb-87a7-8a6856439c90</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>abcc54bc-bb74-49dc-9043-7f7171707545</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>97c26c99-6870-44c1-8a07-1d900d3f4ce6</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>36200fb5-f251-4f5d-a520-7c5ad5c2cd4b</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>bace8d1c-a261-4041-9e37-823117415d0f</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>a32613fd-18b9-459e-aab8-fffb3912966a</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>cea0a982-8d55-4093-921e-418fbccf7060</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>5761e0a7-c6df-4d8a-9ebd-b8f445054dec</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>96129eb9-f0de-4e05-8af2-73146473f766</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>8ecb2c5d-7176-4317-a255-26274edfdd53</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>ff69d4e0-a8e8-4108-bdb0-dd63217e63c7</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/AAI-VL-resource-1.xml b/src/test/resources/models/AAI-VL-resource-1.xml new file mode 100644 index 0000000..e80d4f3 --- /dev/null +++ b/src/test/resources/models/AAI-VL-resource-1.xml @@ -0,0 +1,32 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>5c12984d-db0f-4300-a0e0-9791775cc40f</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>88bdbadf-db8a-490f-881e-c8effcbc3f66</model-version-id> + <model-name>VL</model-name> + <model-version>1</model-version> + <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/AAI-stellService-service-1.xml b/src/test/resources/models/AAI-stellService-service-1.xml new file mode 100644 index 0000000..20cfd11 --- /dev/null +++ b/src/test/resources/models/AAI-stellService-service-1.xml @@ -0,0 +1,69 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>fedf9da3-6a74-4813-8fa2-221a98b0e7ad</model-invariant-id> + <model-type>service</model-type> + <model-vers> + <model-ver> + <model-version-id>e0373537-7f66-4094-9939-e2f5de6ff5f6</model-version-id> + <model-name>stellService</model-name> + <model-version>1</model-version> + <model-description>fd</model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>88bdbadf-db8a-490f-881e-c8effcbc3f66</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>5c12984d-db0f-4300-a0e0-9791775cc40f</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>374d0899-bbc2-4403-9320-fe9bebef75c6</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>959b7c09-9f34-4e5f-8b63-505381db176e</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>46b92144-923a-4d20-b85a-3cbd847668a9</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>82194af1-3c2c-485a-8f44-420e22a9eaa4</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/AAI-testvsp-resource-1.xml b/src/test/resources/models/AAI-testvsp-resource-1.xml new file mode 100644 index 0000000..bafecfb --- /dev/null +++ b/src/test/resources/models/AAI-testvsp-resource-1.xml @@ -0,0 +1,69 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>959b7c09-9f34-4e5f-8b63-505381db176e</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>374d0899-bbc2-4403-9320-fe9bebef75c6</model-version-id> + <model-name>testvsp</model-name> + <model-version>1</model-version> + <model-description>nkjlkl</model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>da6769f0-aa58-4e90-b2c9-664c2630d131</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>1e8fdfc0-03cf-4742-b060-dab818954d67</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>5a2aac99-ffe8-415f-9242-420ed10da23e</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>93a6166f-b3d5-4f06-b4ba-aed48d009ad9</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>acc6edd8-a8d4-4b93-afaa-0994068be14c</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/complete-model.xml b/src/test/resources/models/complete-model.xml deleted file mode 100644 index 45e849b..0000000 --- a/src/test/resources/models/complete-model.xml +++ /dev/null @@ -1,143 +0,0 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<models xmlns="http://org.openecomp.aai.inventory/v8"> - <model> - <model-name-version-id>997fc7-fca1-451f-b953-9a1e6197b4d6 - </model-name-version-id> - <model-type>widget</model-type> - <model-name>vdc</model-name> - <model-id>897df7ea-8938-42b0-bc57-46e913a4d93b</model-id> - <model-version>v1.0</model-version> - <resource-version>1463175188</resource-version> - <relationship-list> - <relationship> - <related-to>model-element</related-to> - <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/ccb3a5a4-1722-4213-8785-2b6b5527d453/ - </related-link> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>ccb3a5a4-1722-4213-8785-2b6b5527d453 - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>df2e4cc0-18ca-4046-9c1b-2abec86a58d6 - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model.model-name-version-id</relationship-key> - <relationship-value>93d9d45d-7eec-4371-9083-675e4c353de3 - </relationship-value> - </relationship-data> - </relationship> - </relationship-list> - </model> - <model> - <model-name-version-id>8da97b81-e0e9-4157-a4cd-af3ba52871d6 - </model-name-version-id> - <model-type>resource</model-type> - <model-name>vDbe</model-name> - <model-id>77b83c95-7707-4624-8bfe-9110b9c2dc88</model-id> - <model-version>v1.0</model-version> - <resource-version>1463175188</resource-version> - <relationship-list> - <relationship> - <related-to>model-element</related-to> - <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/fc3a2260-d0ee-4c8e-b7e9-74791d7c5721/ - </related-link> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>fc3a2260-d0ee-4c8e-b7e9-74791d7c5721 - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>element-choice-set.element-choice-set-uuid - </relationship-key> - <relationship-value>646ee687-1475-419d-bd10-f3760d5430dc - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>constrained-element-set.constrained-element-set-uuid - </relationship-key> - <relationship-value>999</relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>df2e4cc0-18ca-4046-9c1b-2abec86a58d6 - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model.model-name-version-id</relationship-key> - <relationship-value>93d9d45d-7eec-4371-9083-675e4c353de3 - </relationship-value> - </relationship-data> - </relationship> - </relationship-list> - </model> - <model> - <model-name-version-id>f2b24d95-c582-48d5-b2d6-c5b3a94ce812 - </model-name-version-id> - <model-type>widget</model-type> - <model-name>pserver</model-name> - <model-id>a033a95f-93af-4dc6-811e-f818baf13ef1</model-id> - <model-version>v1.0</model-version> - <resource-version>1463175178</resource-version> - <relationship-list> - <relationship> - <related-to>model-element</related-to> - <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/5eab2693-78ec-446a-afe4-14332e348246/ - </related-link> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>5eab2693-78ec-446a-afe4-14332e348246 - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model.model-name-version-id</relationship-key> - <relationship-value>35be1acf-1298-48c6-a128-66850083b8bd - </relationship-value> - </relationship-data> - </relationship> - <relationship> - <related-to>model-element</related-to> - <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/f7659dac-6311-45b6-b483-60b39364a85a/ - </related-link> - <relationship-data> - <relationship-key>model-element.model-element-uuid - </relationship-key> - <relationship-value>f7659dac-6311-45b6-b483-60b39364a85a - </relationship-value> - </relationship-data> - <relationship-data> - <relationship-key>model.model-name-version-id</relationship-key> - <relationship-value>759dbd4a-2473-46f3-a932-48d987c9b4a1 - </relationship-value> - </relationship-data> - </relationship> - </relationship-list> - </model> - -</models> diff --git a/src/test/resources/models/incomplete-model.xml b/src/test/resources/models/incomplete-model.xml new file mode 100644 index 0000000..5bc0581 --- /dev/null +++ b/src/test/resources/models/incomplete-model.xml @@ -0,0 +1,17 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-name>VL</model-name> + <model-version>1</model-version> + <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/invalid-model.xml b/src/test/resources/models/invalid-model.xml new file mode 100644 index 0000000..865f5d3 --- /dev/null +++ b/src/test/resources/models/invalid-model.xml @@ -0,0 +1,31 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>5c12984d-db0f-4300-a0e0-9791775cc40f</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>88bdbadf-db8a-490f-881e-c8effcbc3f66</model-version-id> + <model-name>VL</model-name> + <model-version>1</model-version> + <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> diff --git a/src/test/resources/models/l3-network-widget.json b/src/test/resources/models/l3-network-widget.json new file mode 100644 index 0000000..22304ac --- /dev/null +++ b/src/test/resources/models/l3-network-widget.json @@ -0,0 +1,14 @@ +{ + "model": + { + "model-invariant-id" : "3d560d81-57d0-438b-a2a1-5334dba0651a", + "model-type" : "widget", + "model-vers" : { + "model-ver" : [ { + "model-version-id" : "9111f20f-e680-4001-b83f-19a2fc23bfc1", + "model-version" : "1.0", + "model-name" : "l3-network" + } ] + } + } +} diff --git a/src/test/resources/models/l3-network-widget.xml b/src/test/resources/models/l3-network-widget.xml new file mode 100644 index 0000000..1d0240b --- /dev/null +++ b/src/test/resources/models/l3-network-widget.xml @@ -0,0 +1,11 @@ +<model xmlns="http://org.openecomp.aai.inventory/v9"> + <model-invariant-id>3d560d81-57d0-438b-a2a1-5334dba0651a</model-invariant-id> + <model-type>widget</model-type> + <model-vers> + <model-ver> + <model-version-id>9111f20f-e680-4001-b83f-19a2fc23bfc1</model-version-id> + <model-version>1.0</model-version> + <model-name>l3-network</model-name> + </model-ver> + </model-vers> +</model>
\ No newline at end of file diff --git a/src/test/resources/models/named-query-wan-connector.xml b/src/test/resources/models/named-query-wan-connector.xml index 5606cf8..55d8fda 100644 --- a/src/test/resources/models/named-query-wan-connector.xml +++ b/src/test/resources/models/named-query-wan-connector.xml @@ -1,24 +1,4 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<named-query xmlns="http://org.openecomp.aai.inventory/v8"> +<named-query xmlns="http://org.openecomp.aai.inventory/v7"> <named-query-uuid>94cac189-8d88-4d63-a194-f44214e080ff </named-query-uuid> <named-query-name>wan-connector</named-query-name> @@ -31,7 +11,7 @@ <related-to>model</related-to> <relationship-data> <!-- connector --> - <relationship-key>model.model-name-version-id</relationship-key> + <relationship-key>model.model-invariant-id</relationship-key> <relationship-value>d09dd9da-0148-46cd-a947-591afc844d24 </relationship-value> </relationship-data> @@ -44,7 +24,7 @@ <related-to>model</related-to> <relationship-data> <!-- vdc --> - <relationship-key>model.model-name-version-id</relationship-key> + <relationship-key>model.model-invariant-id</relationship-key> <relationship-value>997fc7-fca1-451f-b953-9a1e6197b4d6 </relationship-value> </relationship-data> @@ -57,7 +37,7 @@ <related-to>model</related-to> <relationship-data> <!-- logical-link --> - <relationship-key>model.model-name-version-id + <relationship-key>model.model-invariant-id </relationship-key> <relationship-value>897df7ea-8938-42b0-bc57-46e913a4d93b </relationship-value> @@ -71,7 +51,7 @@ <related-to>model</related-to> <relationship-data> <!-- pserver --> - <relationship-key>model.model-name-version-id + <relationship-key>model.model-invariant-id </relationship-key> <relationship-value>f2b24d95-c582-48d5-b2d6-c5b3a94ce812 </relationship-value> diff --git a/src/test/resources/models/wan-connector-model.xml b/src/test/resources/models/v8-wan-connector-model.xml index c8a434b..09f1933 100644 --- a/src/test/resources/models/wan-connector-model.xml +++ b/src/test/resources/models/v8-wan-connector-model.xml @@ -1,31 +1,12 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - -<model xmlns="http://org.openecomp.aai.inventory/v8"> +<model xmlns="http://com.att.aai.inventory/v7"> <model-id>e4a9901b-6c94-4e07-b8d8-b877d3df554c</model-id> <model-type>service</model-type> - <model-name>test-model</model-name> + <model-name>wan-connector</model-name> <model-version>v1.0</model-version> <model-name-version-id>93d9d45d-7eec-4371-9083-675e4c353de3 </model-name-version-id> - <model-description>desc</model-description> + <model-description>Connects a customer vpn to the border elements of an + AT&T product</model-description> <metadata> <metadatum> <metaname>a</metaname> @@ -182,4 +163,3 @@ </model-element> </model-elements> </model> - diff --git a/src/test/resources/models/vnf-model.json b/src/test/resources/models/vnf-model.json deleted file mode 100644 index 5bebe59..0000000 --- a/src/test/resources/models/vnf-model.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "model": - { - "model-name-version-id":"model-vid", - "model-type":"widget", - "model-version":"v1.0", - "model-id":"model-id", - "model-name":"generic-vnf" - } -} diff --git a/src/test/resources/vnfcatalogexample.xml b/src/test/resources/vnfcatalogexample.xml index c7ba530..c38b411 100644 --- a/src/test/resources/vnfcatalogexample.xml +++ b/src/test/resources/vnfcatalogexample.xml @@ -1,26 +1,6 @@ -<!-- - ============LICENSE_START======================================================= - MODEL LOADER SERVICE - ================================================================================ - Copyright (C) 2017 AT&T Intellectual Property. 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. - ============LICENSE_END========================================================= - --> - <vnf-catalog> <part-number-list> - <att-part-number>FortiGate-VM00</att-part-number> + <part-number>FortiGate-VM00</part-number> <vnf-type>FW</vnf-type> <vendor-info> <vendor-name>FORTINET</vendor-name> @@ -83,7 +63,7 @@ </license-list> </part-number-list> <part-number-list> - <att-part-number>FortiGate-VM01</att-part-number> + <part-number>FortiGate-VM01</part-number> <vnf-type>FW</vnf-type> <vendor-info> <vendor-name>FORTINET</vendor-name> |