summaryrefslogtreecommitdiffstats
path: root/ms/gra/gra-docker/src
diff options
context:
space:
mode:
Diffstat (limited to 'ms/gra/gra-docker/src')
-rw-r--r--ms/gra/gra-docker/src/main/dc/docker-compose.yaml37
-rw-r--r--ms/gra/gra-docker/src/main/docker/Dockerfile32
-rw-r--r--ms/gra/gra-docker/src/main/resources/application.properties3
-rw-r--r--ms/gra/gra-docker/src/main/resources/contrail-adaptor.properties40
-rw-r--r--ms/gra/gra-docker/src/main/resources/contrail-api-path.properties59
-rw-r--r--ms/gra/gra-docker/src/main/resources/eipam.properties63
-rw-r--r--ms/gra/gra-docker/src/main/resources/generic-resource-api-dg.properties123
-rw-r--r--ms/gra/gra-docker/src/main/resources/log4j2.properties12
-rw-r--r--ms/gra/gra-docker/src/main/resources/msoadaptor.properties5
-rw-r--r--ms/gra/gra-docker/src/main/resources/startGra.sh84
-rw-r--r--ms/gra/gra-docker/src/main/resources/truststore.jksbin0 -> 3843 bytes
-rw-r--r--ms/gra/gra-docker/src/main/scripts/chmodScripts.sh3
-rwxr-xr-xms/gra/gra-docker/src/main/scripts/compareContrail.sh55
-rwxr-xr-xms/gra/gra-docker/src/main/scripts/comparePortmirror.sh55
-rwxr-xr-xms/gra/gra-docker/src/main/scripts/comparePreload.sh55
-rwxr-xr-xms/gra/gra-docker/src/main/scripts/compareSvc.sh55
-rw-r--r--ms/gra/gra-docker/src/main/scripts/exportGraDaexim.sh40
-rw-r--r--ms/gra/gra-docker/src/main/scripts/graToMdsal.sh104
-rwxr-xr-xms/gra/gra-docker/src/main/scripts/importGraDaexim.sh207
-rw-r--r--ms/gra/gra-docker/src/main/templates/contrail-route-allotted-resource.json102
-rw-r--r--ms/gra/gra-docker/src/main/templates/csm-service-instance.json15
-rw-r--r--ms/gra/gra-docker/src/main/templates/network-instance-group-network.json27
-rw-r--r--ms/gra/gra-docker/src/main/templates/network-level-oper-status.json11
-rw-r--r--ms/gra/gra-docker/src/main/templates/network.json145
-rw-r--r--ms/gra/gra-docker/src/main/templates/port-mirror-configuration.json152
-rw-r--r--ms/gra/gra-docker/src/main/templates/security-zone-allotted-resource.json78
-rw-r--r--ms/gra/gra-docker/src/main/templates/vf-module-assign.json279
-rw-r--r--ms/gra/gra-docker/src/main/templates/vnf-data-assign.json249
-rw-r--r--ms/gra/gra-docker/src/main/templates/vnf-level-oper-status.json12
-rw-r--r--ms/gra/gra-docker/src/main/templates/vnf-network.json45
30 files changed, 2077 insertions, 70 deletions
diff --git a/ms/gra/gra-docker/src/main/dc/docker-compose.yaml b/ms/gra/gra-docker/src/main/dc/docker-compose.yaml
index 4b0bd46..682655e 100644
--- a/ms/gra/gra-docker/src/main/dc/docker-compose.yaml
+++ b/ms/gra/gra-docker/src/main/dc/docker-compose.yaml
@@ -12,15 +12,15 @@ services:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- logging:
+ logging:
driver: "json-file"
- options:
+ options:
max-size: "30m"
max-file: "5"
-
-
+
+
gra:
- image: onap/sdnc-gra-image:latest
+ image: onap/sdnc-gra:latest
depends_on:
- db
container_name: gra_controller
@@ -28,10 +28,10 @@ services:
- "8181:8080"
- "8443:8443"
volumes:
- - ../resources/application.properties:/opt/onap/sdnc/config/application.properties
- - ../resources/cadi-example.properties:/opt/onap/sdnc/config/cadi.properties
- - ../resources/cadi-log.properties:/opt/onap/sdnc/config/cadi-log.properties
- - ../resources/cadi.keyfile:/opt/onap/sdnc/config/cadi.keyfile
+ - ../resources/application.properties:/opt/sdnc/gra/config/application.properties
+ # Uncomment line below to authenticate with AAF
+ # - ../resources/cadi-example.properties:/opt/sdnc/gra/config/cadi.properties
+ - ../resources/cadi-log.properties:/opt/sdnc/gra/config/cadi-log.properties
links:
- db:dbhost
environment:
@@ -40,16 +40,21 @@ services:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- - SDNC_CONFIG_DIR=/opt/onap/sdnc/config
+ - ODL_USER=${ODL_USER}
+ - AAF_MECHID_CRED=${ODL_PASSWORD}
+ - ODL_URI=http://localhost:8080
+ - SDNC_CONFIG_DIR=/opt/sdnc/gra/config
- LOG_LEVEL=DEBUG
- TRUSTSTORE_PASSWORD=changeit
- CACERT_PASSWORD=changeit
- - SDNC_CERT_DIR=/opt/onap/sdnc/config
+ - SDNC_CERT_DIR=/opt/sdnc/gra/config
- JAVA_SECURITY_DIR=/usr/lib/jvm/default-jvm/jre/lib/security
- TRUSTSTORE=truststoreONAPall.jks
- logging:
+ - SDNNFT_HOST=${SDNNFT_HOST:-localhost}
+ - LOG_PATH=/opt/sdnc/gra/logs
+ logging:
driver: "json-file"
- options:
+ options:
max-size: "30m"
max-file: "5"
extra_hosts:
@@ -67,7 +72,7 @@ services:
ports:
- "3200:3100"
volumes:
- - ${HOME}/gerrit/sdnc/oam/platform-logic:/opt/onap/ccsdk/platform-logic
+ - ${HOME}/st_sdncp/platform-logic:/opt/onap/ccsdk/platform-logic
links:
- db:dbhost
- db:sdnctldb01
@@ -78,8 +83,8 @@ services:
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- logging:
+ logging:
driver: "json-file"
- options:
+ options:
max-size: "30m"
max-file: "5"
diff --git a/ms/gra/gra-docker/src/main/docker/Dockerfile b/ms/gra/gra-docker/src/main/docker/Dockerfile
index 37c2ee6..54e8c1a 100644
--- a/ms/gra/gra-docker/src/main/docker/Dockerfile
+++ b/ms/gra/gra-docker/src/main/docker/Dockerfile
@@ -1,44 +1,49 @@
# Prepare stage for multistage image build
## START OF STAGE0 ##
-FROM @base.image.name@:@ccsdk.docker.version@ AS stage0
+FROM @base.image.name@:@base.image.version@ AS stage0
ENV LOG_PATH /var/log/onap/sdnc
-ENV SDNC_CONFIG_DIR /opt/onap/sdnc/config
-ENV TRUSTSTORE @onap.truststore@
+ENV SDNC_CONFIG_DIR /opt/sdnc/gra/config
+ENV TRUSTSTORE @truststore.file@
ENV JAVA_SECURITY_DIR /opt/java/openjdk/lib/security
USER root
# copy deliverables to opt
COPY opt /opt
-# Install ONAP certificates
+# Install certificates
RUN keytool -importkeystore -srckeystore ${SDNC_CONFIG_DIR}/${TRUSTSTORE} -srcstorepass changeit -destkeystore ${JAVA_SECURITY_DIR}/cacerts -deststorepass changeit -noprompt
## END OF STAGE0 ##
-FROM @base.image.name@:@ccsdk.docker.version@
+FROM @base.image.name@:@base.image.version@
MAINTAINER SDNC Team (onap-sdnc@lists.onap.org)
ENV PROJECT_VERSION @project.version@
-ENV SDNC_HOME /opt/onap/sdnc
-ENV SDNC_CONFIG_DIR /opt/onap/sdnc/config
+ENV SDNC_HOME /opt/sdnc/gra
+ENV SDNC_CONFIG_DIR /opt/sdnc/gra/config
ENV GRA_JAR @sdnc.gra.jar@
-ENV SVCLOGIC_PROPERTIES /opt/onap/sdnc/config/svclogic.properties
-ENV SVCLOGIC_DIR /opt/onap/sdnc/svclogic/graphs
+ENV SDNC_UID @sdnc.uid@
+ENV SVCLOGIC_PROPERTIES /opt/sdnc/gra/config/svclogic.properties
+ENV SVCLOGIC_DIR /opt/sdnc/gra/service-logic/graphs
ENV LOG_PATH /var/log/onap/sdnc
USER root
-# Install sudo and IP utilities
-RUN apk update && apk --no-cache add sudo iputils openssl
+# Install sudo, IP utilities and openjdk 11
+RUN export http_proxy=http://sub.proxy.att.com:8080 \
+ && export https_proxy=http://sub.proxy.att.com:8080 \
+ && apk update && apk --no-cache add bash curl mysql-client sudo iputils openssl \
+ && unset http_proxy \
+ && unset https_proxy
# Enable wheel group
RUN sed -e 's/# %wheel ALL=(ALL) NOPASSWD: ALL/%wheel ALL=(ALL) NOPASSWD: ALL/g' -i /etc/sudoers
# Create sdnc user
-RUN addgroup -S sdnc && adduser -S sdnc -G sdnc
+RUN addgroup -g ${SDNC_UID} -S sdnc && adduser -u ${SDNC_UID} -G sdnc -S sdnc
RUN addgroup sdnc wheel
COPY --from=stage0 --chown=sdnc:sdnc /opt /opt
@@ -48,5 +53,6 @@ RUN chmod +x ${SDNC_HOME}/bin/*.sh
USER sdnc
WORKDIR ${SDNC_HOME}
-ENTRYPOINT /opt/onap/sdnc/bin/startGra.sh
+ENTRYPOINT /opt/sdnc/gra/bin/startGra.sh
EXPOSE 8443 8080
+
diff --git a/ms/gra/gra-docker/src/main/resources/application.properties b/ms/gra/gra-docker/src/main/resources/application.properties
index 3feb604..30f5077 100644
--- a/ms/gra/gra-docker/src/main/resources/application.properties
+++ b/ms/gra/gra-docker/src/main/resources/application.properties
@@ -23,3 +23,6 @@ spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.Ph
spring.jpa.database=mysql
cadi.properties.path=${SDNC_CONFIG_DIR}/cadi.properties
+swagger-ui.host=${SDNNFT_HOST:localhost}
+swagger-ui.title=SDN-NFT: GRA microservice
+swagger-ui.description=SDN-NFT GRA microservice API documentation
diff --git a/ms/gra/gra-docker/src/main/resources/contrail-adaptor.properties b/ms/gra/gra-docker/src/main/resources/contrail-adaptor.properties
new file mode 100644
index 0000000..c6d98f4
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/resources/contrail-adaptor.properties
@@ -0,0 +1,40 @@
+keystone.username=admin
+keystone.password=admin
+tenant.password=admin
+contrail.template.dir=/opt/lsc/restapi/templates
+max.retry.count=3
+retry.wait=5000
+request.timeout=10000
+
+simulateResponse=false
+keystone.dummy.cache=true
+orm.dummy.cache=true
+use.orm=true
+
+cloud.config.use=false
+cloud.config.filename=cloud_config.json
+cloud.config.refresh.timer=1000
+
+#orm.default_keystone_url_version=/v3
+orm.default_keystone_url_version=/v2.0
+orm.default_keystone_version_regex=/[vV][0-9]
+orm.default_orm_url_replace_this=8080
+orm.default_orm_url_replace_with_this=7080
+orm.aic.client=ECOMP-SDNCP
+contrail.url.regex=sdn-l-config
+
+#properties need to create json for policymanager configBody
+configBody.service:NetworkPolicy
+configBody.version:1.3.0.1
+configBody.configName:Search
+configBody.policyScope:SDNC
+configBody.templateVersion:1607
+configBody.location:Search
+configBody.uuid:Search
+configBody.priority:2
+configBody.riskType:low
+configBody.riskLevel:2
+configBody.guard:True
+
+aic.contrail.proxy=none
+aic.keystone.proxy=none
diff --git a/ms/gra/gra-docker/src/main/resources/contrail-api-path.properties b/ms/gra/gra-docker/src/main/resources/contrail-api-path.properties
new file mode 100644
index 0000000..4c04d0e
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/resources/contrail-api-path.properties
@@ -0,0 +1,59 @@
+network-policy.create.path=/network-policys
+network-policy.create.method=NetworkPolicy.createNetworkPolicy
+network-policy.create.hasTemplateFile=Y
+
+network-policy.get.path=/network-policy/{contrail-network-policy-id}
+network-policy.get.method=NetworkPolicy.getNetworkPolicy
+network-policy.get.hasTemplateFile=N
+
+network-policy.delete.path=/network-policy/{contrail-network-policy-id}
+network-policy.delete.method=NetworkPolicy.deleteNetworkPolicy
+network-policy.delete.hasTemplateFile=N
+
+network-policy.update.path=/network-policy/{contrail-network-policy-id}
+network-policy.update.method=NetworkPolicy.updateNetworkPolicy
+network-policy.update.hasTemplateFile=Y
+
+network-policy.apply.path=/virtual-network/{contrail-virtual-network-id}
+network-policy.apply.method=NetworkPolicy.applyNetworkPolicy
+network-policy.apply.hasTemplateFile=N
+
+network-policy.remove.path=/virtual-network/{contrail-virtual-network-id}
+network-policy.remove.method=NetworkPolicy.removeNetworkPolicy
+network-policy.remove.hasTemplateFile=N
+
+virtual-networks.get.path=/virtual-networks
+virtual-networks.get.method=NetworkPolicy.getVirtualNetworks
+virtual-networks.get.hasTemplateFile=N
+
+virtual-network.get.path=/virtual-network/{contrail-virtual-network-id}
+virtual-network.get.method=NetworkPolicy.getVirtualNetwork
+virtual-network.get.hasTemplateFile=N
+
+fqname-to-uuid.get.path=/fqname-to-id
+fqname-to-uuid.get.method=NetworkPolicy.getFqNameToUuid
+fqname-to-uuid.get.hasTemplateFile=Y
+
+id-to-fqname.get.path=/id-to-fqname
+id-to-fqname.get.method=NetworkPolicy.getIdToFqName
+id-to-fqname.get.hasTemplateFile=N
+
+virtual-machine-interface.get.path=/virtual-machine-interface/{contrail-virtual-machine-interface-id}
+virtual-machine-interface.get.method=PortMirroring.getVirtualMachineInterface
+virtual-machine-interface.get.hasTemplateFile=N
+
+port-mirroring.enable.path=/virtual-machine-interface/{contrail-virtual-machine-interface-id}
+port-mirroring.enable.method=PortMirroring.enablePortMirroring
+port-mirroring.enable.hasTemplateFile=Y
+
+port-mirroring.disable.path=/virtual-machine-interface/{contrail-virtual-machine-interface-id}
+port-mirroring.disable.method=PortMirroring.disablePortMirroring
+port-mirroring.disable.hasTemplateFile=Y
+
+subnet.add.path=/virtual-network/{contrail-virtual-network-id}
+subnet.add.method=NetworkPolicy.addSubnet
+subnet.add.hasTemplateFile=N
+
+subnet.delete.path=/virtual-network/{contrail-virtual-network-id}
+subnet.delete.method=NetworkPolicy.deleteSubnet
+subnet.delete.hasTemplateFile=N
diff --git a/ms/gra/gra-docker/src/main/resources/eipam.properties b/ms/gra/gra-docker/src/main/resources/eipam.properties
new file mode 100644
index 0000000..22052fe
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/resources/eipam.properties
@@ -0,0 +1,63 @@
+eipam.templateDir=/opt/sdnc/gra/restapi/templates/
+
+#mS is new in 1810, URL is driven by DME2
+eipam.service=microservice-router.lpp.att.com/services/microservice_router/v1/routes
+
+#DME proxy does not work in containers(1908), workaround is to call alternate.url
+# 1906/1908 Can be Direct call or LGW to replace DME2
+#1906 Direct call
+#eipam.alternate.url=https://st3-lppajsc.oss.att.com:8666/services/microservice_router/v1/routes
+#1908 LGW to replace DME2
+#eipam.alternate.url=https://eipam1-ipaddress.dev.att.com
+#eipam.rest.urlEndPoint=/eipam/rest/ipassignment/
+eipam.alternate.url=https://eipam-ipaddress1.stage.att.com
+
+# subContext for Direct Call, if used the LGW subContext below need to be commented out
+#eipam.subContext.assign=/eipamIP/assign
+#eipam.subContext.unassign=/eipamIP/unassign
+#eipam.subContext.createPool=/eipamIP/createPool
+#eipam.subContext.deletePool=/eipamIP/deletePool
+#eipam.subContext.getPlanTopology=/eipamIP/topology
+#eipam.subContext.getIPAddress=/eipamIP/getIP
+#eipam.subContext.allocateSubnet=/eipamIP/allocate
+#eipam.subContext.deallocateSubnet=/eipamIP/deallocate
+#eipam.subContext.activateSubnet=/eipamIP/activateSubnet
+#eipam.subContext.ping=/eipamIP/ping
+#eipam.subContext.getPool=/eipamIP/getPool
+#eipam.subContext.examineIP=/eipamIP/examineIP
+
+eipam.httpMethod.assign=PUT
+eipam.httpMethod.unassign=POST
+eipam.httpMethod.createPool=PUT
+eipam.httpMethod.deletePool=POST
+eipam.httpMethod.getPlanTopology=GET
+eipam.httpMethod.getIPAddress=GET
+eipam.httpMethod.allocateSubnet=PUT
+eipam.httpMethod.deallocateSubnet=PUT
+eipam.httpMethod.activateSubnet=PUT
+eipam.httpMethod.ping=GET
+eipam.httpMethod.getPool=POST
+eipam.httpMethod.examineIP=POST
+
+# subContext for LGW, if used the above Direct Call subContext need to be commented out
+eipam.subContext.assign=/eipam/restservices/v1/ipaddress/assign
+eipam.subContext.unassign=/eipam/restservices/v1/ipaddress/unassign
+eipam.subContext.createPool=/eipam/restservices/v1/ipaddress/pool
+eipam.subContext.deletePool=/eipam/restservices/v1/ipaddress/pool/remove
+eipam.subContext.getPlanTopology=/eipam/restservices/v1/ipaddress/plantopology
+eipam.subContext.getIPAddress=/eipam/restservices/v1/ipaddress
+eipam.subContext.allocateSubnet=/eipam/restservices/v1/ipaddress/subnet/allocate
+eipam.subContext.deallocateSubnet=/eipam/restservices/v1/ipaddress/subnet/deallocate
+eipam.subContext.activateSubnet=/eipam/restservices/v1/ipaddress/subnet/activate
+eipam.subContext.ping=/eipam/restservices/v1/ipaddress/ping
+eipam.subContext.getPool=/eipam/restservices/v1/ipaddress/pool
+eipam.subContext.examineIP=/eipam/restservices/v1/ipaddress/examineIPAddressInfo
+
+eipam.connectionTimeout=30000
+eipam.receiveTimeout=60000
+#eipam.version=0.1
+#eipam.envContext=TEST
+#eipam.routeOffer=ST3
+eipam.client=sdn_cp_ws
+eipam.msgid=sdn
+eipam.wss.user=sdn_cp_ws
diff --git a/ms/gra/gra-docker/src/main/resources/generic-resource-api-dg.properties b/ms/gra/gra-docker/src/main/resources/generic-resource-api-dg.properties
index 3751142..908c32b 100644
--- a/ms/gra/gra-docker/src/main/resources/generic-resource-api-dg.properties
+++ b/ms/gra/gra-docker/src/main/resources/generic-resource-api-dg.properties
@@ -1,7 +1,44 @@
-restapi.templateDir=/opt/onap/sdnc/restapi/templates
+restapi.templateDir=/opt/sdnc/gra/restapi/templates
controller.url=http://localhost:8080
controller.user=${ODL_USER}
controller.pwd=${ODL_PASSWORD}
+bondingservice.server=${ADMIN_PORTAL_URL}
+bondingservice.user=${ODL_USER}
+bondingservice.password=${ODL_PASSWORD}
+bondingservice.authorization=${BONDING_SERVICE_CRED}
+bondingservice.uri=/provisioningms/v1/bondingservice/{action}
+cloud-region.cloud-owner=att-aic
+policy-manager.url=${POLICY_MANAGER_URL}
+policy-manager.authorization=${POLICY_AUTHORIZATION_CRED}
+policy-manager.clientauth=${POLICY_CLIENTAUTH_CRED}
+policy-manager.environment=TEST
+# MICROSERVICE
+rt.mS.user=${ODL_USER}
+rt.mS.pwd=${ODL_PASSWORD}
+rt.mS.routeTarget.type=dme2proxy
+rt.mS.routeTarget.service=microservice-router.lpp.att.com/services/microservice_router/v1/routes
+rt.ms.allocateRouteTarget.subContext=/nwrouting/allocateroutetarget/
+rt.ms.releaseRouteTarget.subContext=/nwrouting/releaseroutetarget/
+rt.ms.routeTarget.version=0.1
+rt.ms.routeTarget.envContext=TEST
+rt.ms.routeTarget.routeOffer=ST3
+rt.ms.routeTarget.appId=SDNCP
+# VLAN-TAG MICROSERVICE
+vt.mS.url=${ADMIN_PORTAL_URL}
+vt.mS.user=${ODL_USER}
+vt.mS.pwd=${ODL_PASSWORD}
+# MAC Address MICROSERVICE
+ma.mS.url=${ADMIN_PORTAL_URL}
+ma.mS.user=${ODL_USER}
+ma.mS.pwd=${ODL_PASSWORD}
+# CDS ipassign mS
+ipassign.ms.url=${IPASSIGN_URL}
+ipassign.ms.user=${ODL_USER}
+ipassign.ms.pwd=${ODL_PASSWORD}
+# CDS Naming mS
+naming.ms.url=${NAMING_MS_URL}
+naming.ms.user=${ODL_USER}
+naming.ms.pwd=${ODL_PASSWORD}
honeycomb.url=http://{honeycomb-instance-ip}:8183
honeycomb.user=${HONEYCOMB_USER}
honeycomb.pwd=${HONEYCOMB_PASSWORD}
@@ -29,6 +66,35 @@ restapi.vpp.xconnect.templatefile=vcpe-l2-interface.json
restapi.tx.templatefile=tunnelxconn-allotted-resource.json
restapi.parentsvc.templatefile=parent-provided-allotted-resource.json
restapi.network-ar.templatefile=network-provided-allotted-resources.json
+restapi.pm.getpolicy.templatefile=pm-get-policy.json
+restapi.pm.createpolicy.templatefile=pm-create-policy.json
+restapi.pm.pushpolicy.templatefile=pm-push-policy.json
+restapi.pm.deletepolicypdp.templatefile=pm-delete-policy-pdp.json
+restapi.pm.deletepolicypap.templatefile=pm-delete-policy-pap.json
+restapi.portmirrorconfig.templatefile=port-mirror-configuration.json
+restapi.genconfig.templatefile=gc-configuration.json
+restapi.vnfsubinterfacegroup.templatefile=vnf-sub-interface-group.json
+restapi.bondingservice.templatefile=bonding-service.json
+restapi.bondingservicerebuild.templatefile=bonding-service-rebuild.json
+restapi.forwardingpath.templatefile=forwarding-path.json
+restapi.network.templatefile=network.json
+restapi.network-instance-group.templatefile=network-instance-group.json
+restapi.network-instance-group-network.templatefile=network-instance-group-network.json
+restapi.network-instance-group-vpn-binding.templatefile=network-instance-group-vpn-binding.json
+restapi.csm.serviceinstance.templatefile=csm-service-instance.json
+restapi.mS.allocateRT.templatefile=allocate-route-target.json
+restapi.mS.releaseRT.templatefile=release-route-target.json
+restapi.ss.vnf.templatefile=self-serve-vnf-assignments.json
+restapi.ss.vfmodule.templatefile=self-serve-vfmodule-assignments.json
+restapi.ss.caprelease.templatefile=self-serve-capacity-release.json
+restapi.ss.capreserve.templatefile=self-serve-capacity-reserve.json
+restapi.ss.capreserve.targettype=Site
+restapi.ss.mS.vlan.tag.assign.templatefile=self-serve-mS-vlan-tag-assignments.json
+restapi.ss.mS.vlan.tag.unassign.templatefile=self-serve-mS-vlan-tag-unassignments.json
+restapi.ss.mS.mac.address.assign.templatefile=self-serve-mS-mac-address-assign.json
+restapi.ss.mS.mac.address.unassign.templatefile=self-serve-mS-mac-address-unassign.json
+restapi.ss.cds.ipassign.templatefile=self-serve-ipassign-unassign.json
+restapi.ss.cds.naming.templatefile=self-serve-naming-unassign.json
restapi.vnf-ar.templatefile=vnf-provided-allotted-resources.json
restapi.services.templatefile=vcpe-services-service.json
restapi.services.vnf.vfmodule.templatefile=vfmodule-vim-parameters.vgw.json
@@ -48,30 +114,49 @@ restapi.ss.mS.mac.address.unassign.templatefile=self-serve-mS-mac-address-unassi
cloud-region.cloud-owner=CloudOwner
# URLs
-restapi.cr-allottedresource=/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/contrail-route-allotted-resource/{allotted-resource-id}/
-restapi.sz-allottedresource=/restconf/config/GENERIC-RESOURCE-API:security-zone-allotted-resources/security-zone-allotted-resource/{allotted-resource-id}/
restapi.brg-allottedresource=/restconf/config/GENERIC-RESOURCE-API:brg-allotted-resources/brg-allotted-resource/{allotted-resource-id}/
-restapi.vpp-honeycomb=/restconf/config/ietf-interfaces:interfaces/interface/{tunnel-name}/
-restapi.tx-allottedresource=/restconf/config/GENERIC-RESOURCE-API:tunnelxconn-allotted-resources/tunnelxconn-allotted-resource/{allotted-resource-id}/
-restapi.vnf-provided-allottedresource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-provided-allotted-resources/
+restapi.cds.ipassign.service=/ippm/restservices/v2/ipaddresses/unassign/
+restapi.cds.naming.service=/web/service/v1/genNetworkElementName/cds/
+restapi.connection-attachment-allottedresource=/restconf/config/GENERIC-RESOURCE-API:connection-attachment-allotted-resources/connection-attachment-allotted-resource/{allotted-resource-id}/
+restapi.cr-allottedresource=/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/contrail-route-allotted-resource/{allotted-resource-id}/
+restapi.forwarding-path=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/forwarding-paths/forwarding-path/
+restapi.gc-configuration=/restconf/config/GENERIC-RESOURCE-API:generic-configurations/gc-configuration/{configuration-id}/
+restapi.mS.allocateRT=/vpnmicroservice/v1/vpn/allocateroutetarget/
+restapi.mS.releaseRT=/vpnmicroservice/v1/vpn/releaseroutetarget/
+restapi.naming.gen-name.service=/web/service/v1/genNetworkElementName/
+restapi.network-by-id=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/network/{network-id}/
+restapi.network-instance-group-network=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/network-instance-groups/network-instance-group/{network-instance-group-id}/networks/network/{network-id}/
+restapi.network-instance-group-network=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/network-instance-groups/network-instance-group/{network-instance-group-id}/networks/network/{network-id}/
+restapi.network-instance-group-vpn-binding=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/network-instance-groups/network-instance-group/{network-instance-group-id}/networks/network/{network-id}/vpn-bindings/{vpn-binding-id}/
+restapi.network-instance-group=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/network-instance-groups/network-instance-group/{network-instance-group-id}/
+restapi.network-level-oper-status=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/network/{network-id}/network-data/network-level-oper-status/
restapi.network-provided-allottedresource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-provided-allotted-resources/
-restapi.pm-configuration=/restconf/config/GENERIC-RESOURCE-API:port-mirror-configurations/port-mirror-configuration/{configuration-id}/
+restapi.network-provided-resource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/network/{network-id}/network-data/network-provided-allotted-resources/
+restapi.network-topology-identifier-structure=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/network/{network-id}/network-data/network-topology/network-topology-identifier-structure/
restapi.network=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/
-restapi.vnf=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/
-restapi.vnf-api.service-information=/restconf/config/VNF-API:vnfs/vnf-list/{vnf-id}/service-data/
restapi.parent-provided-resource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/provided-allotted-resources/provided-allotted-resource/{allotted-resource-id}/
-restapi.network-provided-resource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/networks/network/{network-id}/network-data/network-provided-allotted-resources/
-restapi.services=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/
+restapi.pm-configuration=/restconf/config/GENERIC-RESOURCE-API:port-mirror-configurations/port-mirror-configuration/{configuration-id}/
+restapi.preload-network=/restconf/config/GENERIC-RESOURCE-API:preload-information/preload-list/{network-name}/network/preload-data/preload-network-topology-information/
+restapi.preloadinformation=/restconf/config/GENERIC-RESOURCE-API:preload-information/preload-list/
restapi.service.vnf.vfmodule-resource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vf-modules/vf-module/{vf-module-id}/
-restapi.connection-attachment-allottedresource=/restconf/config/GENERIC-RESOURCE-API:connection-attachment-allotted-resources/connection-attachment-allotted-resource/{allotted-resource-id}/
-restapi.naming.gen-name.service=/web/service/v1/genNetworkElementName
-restapi.ss-pnf-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/pnfs/pnf/{pnf-id}/
-restapi.ss-vnf-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/
-restapi.ss-vfmodule-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vf-modules/vf-module/{vf-module-id}/
-restapi.ss-mS-vlan-tag-assign=/vlantagapi/v1/{action}
+restapi.services=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/
restapi.ss-mS-mac-address-assign=/api/macaddress/v1/service/assign/
restapi.ss-mS-mac-address-unassign=/api/macaddress/v1/service/unassign/
-restapi.preload-network=/restconf/config/GENERIC-RESOURCE-API:preload-information/preload-list/{network-name}/network/preload-data/preload-network-topology-information/
-restapi.preloadinformation=/restconf/config/GENERIC-RESOURCE-API:preload-information/preload-list/
+restapi.ss-mS-vlan-tag-assign=/vlantagapi/v1/{action}
+restapi.ss-pnf-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/pnfs/pnf/{pnf-id}/
+restapi.ss-vfmodule-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vf-modules/vf-module/{vf-module-id}/
+restapi.ss-vnf-assignments=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/
+restapi.sz-allottedresource=/restconf/config/GENERIC-RESOURCE-API:security-zone-allotted-resources/security-zone-allotted-resource/{allotted-resource-id}/
+restapi.tx-allottedresource=/restconf/config/GENERIC-RESOURCE-API:tunnelxconn-allotted-resources/tunnelxconn-allotted-resource/{allotted-resource-id}/
restapi.vf-module=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vf-modules/vf-module/{vf-module-id}/
+restapi.vnf-api.service-information=/restconf/config/VNF-API:vnfs/vnf-list/{vnf-id}/service-data/
restapi.vnf-assign=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/
+restapi.vnf-level-oper-status=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-level-oper-status/
+restapi.vnf-network=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-topology/vnf-resource-assignments/vnf-networks/vnf-network/{network-role}/
+restapi.vnf-networks=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-topology/vnf-resource-assignments/vnf-networks/
+restapi.vnf-onap-model-information=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-topology/onap-model-information/
+restapi.vnf-provided-allottedresource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-provided-allotted-resources/
+restapi.vnf-sub-interface-group=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-sub-interface-groups/vnf-sub-interface-group/{vnfc-instance-group-function}/{network-instance-group-function}/{parent-port-role}/
+restapi.vnf-topology.onap-model-information=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vnf-topology/onap-model-information/
+restapi.vnf=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/
+restapi.vpp-honeycomb=/restconf/config/ietf-interfaces:interfaces/interface/{tunnel-name}/
diff --git a/ms/gra/gra-docker/src/main/resources/log4j2.properties b/ms/gra/gra-docker/src/main/resources/log4j2.properties
index 9bc78a3..c4f4b88 100644
--- a/ms/gra/gra-docker/src/main/resources/log4j2.properties
+++ b/ms/gra/gra-docker/src/main/resources/log4j2.properties
@@ -21,7 +21,7 @@
property.logDir = ${env:LOG_PATH:-./target}
property.logLevel = ${env:LOG_LEVEL:-INFO}
-property.pattern = %d{ISO8601} | %-5p | %-16t | %-32c{1} | %X{currentGraph} - %X{nodeId} | %m%n
+property.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|%-5.5p|%-32.32c{1}|%X{currentGraph} - %X{nodeId}|%replace{%m}{\\R}{ }%n
#default mdc values
property.ServiceName = INTERNAL
@@ -63,7 +63,7 @@ appender.debug.filePattern = ${logDir}/debug.log.%i
appender.debug.immediateFlush = true
appender.debug.append = true
appender.debug.layout.type = PatternLayout
-appender.debug.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|%-5.5p|%-32.32c{1}|%X{currentGraph} - %X{nodeId}|%m%n
+appender.debug.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|%-5.5p|%-32.32c{1}|%X{currentGraph} - %X{nodeId}|%replace{%m}{\\R}{ }%n
appender.debug.policies.type = Policies
appender.debug.policies.size.type = SizeBasedTriggeringPolicy
appender.debug.policies.size.size = 10MB
@@ -80,7 +80,7 @@ appender.error.filePattern = ${logDir}/error.log.%i
appender.error.immediateFlush = true
appender.error.append = true
appender.error.layout.type = PatternLayout
-appender.error.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|$${ctx:ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%p|$${ctx:ErrorCode}|$${ctx:ErrorDesc}|%m%n
+appender.error.layout.pattern = %d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestID}|%-16.16t|$${ctx:ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%p|$${ctx:ErrorCode}|$${ctx:ErrorDesc}|%replace{%m}{\\R}{ }%ex{full}{separator(\\n)}%n
appender.error.policies.type = Policies
appender.error.policies.size.type = SizeBasedTriggeringPolicy
@@ -98,7 +98,7 @@ appender.metric.filePattern = ${logDir}/metric.log.%i
appender.metric.immediateFlush = true
appender.metric.append = true
appender.metric.layout.type = PatternLayout
-appender.metric.layout.pattern=%X{InvokeTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|%p|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|||%X{TargetElement}|%markerSimpleName|%X|%X{currentGraph} - %X{nodeId}||%m%n
+appender.metric.layout.pattern=%X{InvokeTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|%p|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|||%X{TargetElement}|%markerSimpleName|%replace{%X}{\\u007B|\\u007D}{}|%X{currentGraph} - %X{nodeId}||%m%n
appender.metric.policies.type = Policies
appender.metric.policies.size.type = SizeBasedTriggeringPolicy
appender.metric.policies.size.size = 10MB
@@ -113,7 +113,7 @@ appender.audit.filePattern = ${logDir}/audit.log.%i
appender.audit.immediateFlush = true
appender.audit.append = true
appender.audit.layout.type = PatternLayout
-appender.audit.layout.pattern=%X{EntryTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|INFO|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|%X{AUDIT-Unused}|%X{AUDIT-ProcessKey}|%markerSimpleName|%X|||%m%n
+appender.audit.layout.pattern=%X{EntryTimestamp}|%X{LogTimestamp}|%X{RequestID}|%X{ServiceInstanceID}|%-16.16t|%X{ServerFQDN}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDesc}|%X{InstanceID}|INFO|%X{Severity}|192.168.23.111|%X{ElapsedTime}|${hostName}|%X{ClientIPAddress}|%C{1}|%X{AUDIT-Unused}|%X{AUDIT-ProcessKey}|%markerSimpleName|%replace{%X}{\\u007B|\\u007D}{}|||%m%n
appender.audit.policies.type = Policies
appender.audit.policies.size.type = SizeBasedTriggeringPolicy
appender.audit.policies.size.size = 10MB
@@ -160,4 +160,4 @@ logger.ccsdk.name = org.onap.ccsdk
logger.ccsdk.level = DEBUG
logger.onaplogging.name = org.onap.logging
-logger.onaplogging.level = DEBUG \ No newline at end of file
+logger.onaplogging.level = DEBUG
diff --git a/ms/gra/gra-docker/src/main/resources/msoadaptor.properties b/ms/gra/gra-docker/src/main/resources/msoadaptor.properties
new file mode 100644
index 0000000..fb7fac9
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/resources/msoadaptor.properties
@@ -0,0 +1,5 @@
+adaptorName=com.att.sdnctl.sli.adaptor.mso.MSOAdaptor
+mso.user=dummy
+mso.passwd=dummy
+mso.restriction.uri=https://msoapih-s3.ecomp.cci.att.com:30275/restriction
+mso.sleep.timer=2000
diff --git a/ms/gra/gra-docker/src/main/resources/startGra.sh b/ms/gra/gra-docker/src/main/resources/startGra.sh
index 6bca0e0..66dd721 100644
--- a/ms/gra/gra-docker/src/main/resources/startGra.sh
+++ b/ms/gra/gra-docker/src/main/resources/startGra.sh
@@ -21,22 +21,74 @@
# ============LICENSE_END=========================================================
###
-export SDNC_HOME=${SDNC_HOME:-/opt/onap/sdnc}
-export GRA_JAR=${GRA_JAR:-@sdnc.gra.jar@}
-export SVCLOGIC_DIR=${SVCLOGIC_DIR:-opt/onap/sdnc/svclogic/graphs}
-export LOG_PATH=${LOG_PATH:-/var/log/onap/sdnc}
-export SDNC_CONFIG_DIR=${SDNC_CONFIG_DIR:-/opt/onap/sdnc/config}
-export MYSQL_DB_HOST=${MYSQL_DB_HOST:-dbhost}
+export SDNC_HOME=${SDNC_HOME:-/opt/sdnc/gra}
+export SVCLOGIC_DIR=${SVCLOGIC_DIR:-/opt/sdnc/gra/service-logic/graphs}
+export LOG_PATH=${LOG_PATH:-/var/log/sdnc}
+export SDNC_CONFIG_DIR=${SDNC_CONFIG_DIR:-/opt/sdnc/gra/config}
export SVCLOGIC_PROPERTIES=${SVCLOGIC_PROPERTIES:-${SDNC_CONFIG_DIR}/svclogic.properties}
+export SSL_DIR=${SSL_DIR:-/opt/sdnc/data/ssl}
+export SECRETS_DIR=${SECRETS_DIR:-/opt/app/secrets}
+export K8_NAMESPACE=${K8_NAMESPACE:-default}
-cd $SDNC_HOME
+if [ -f ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-cred ]
+then
+ export AAF_KEYSTORE_CRED=$(cat ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-cred)
+else
+ ls -l ${SECRETS_DIR}
+ echo "Not found: ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-cred"
+fi
+
+if [ -f ${SECRETS_DIR}/${K8_NAMESPACE}-trustore-cred ]
+then
+ export AAF_TRUSTORE_CRED=$(cat ${SECRETS_DIR}/${K8_NAMESPACE}-trustore-cred | grep cadi_truststore_password | cut -d '=' -f 2 )
+else
+ ls -l ${SECRETS_DIR}
+ echo "Not found: ${SECRETS_DIR}/${K8_NAMESPACE}-trusture-cred"
+fi
+
+if [ -f ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-jks ]
+then
+ cat ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-jks | base64 -d > ${SSL_DIR}/keystore.jks
+ echo "base64 dec ${SSL_DIR}/keystore.jks"
+else
+ ls -l ${SECRETS_DIR}
+ echo "Not found: ${SECRETS_DIR}/${K8_NAMESPACE}-keystore-jks"
+fi
+
+env | sort
+
+#
+# Wait for database
+#
+echo "Waiting for database"
+until mysqladmin ping -h ${MYSQL_DB_HOST} --silent; do
+ printf "."
+ sleep 1
+done
+echo -e "\nDatabase ready"
+
+# Create tablespace and user account
+
+#mysql -h ${MYSQL_DB_HOST} -u root -p${MYSQL_ROOT_PASSWORD} mysql <<-END
+#CREATE DATABASE ${MYSQL_DB_DATABASE};
+#CREATE USER '${MYSQL_DB_USER}'@'localhost' IDENTIFIED BY '${MYSQL_DB_PASSWD}';
+#CREATE USER '${MYSQL_DB_USER}'@'%' IDENTIFIED BY '${MYSQL_DB_PASSWD}';
+#GRANT ALL PRIVILEGES ON ${MYSQL_DB_DATABASE}.* TO '${MYSQL_DB_USER}'@'localhost' WITH GRANT OPTION;
+#GRANT ALL PRIVILEGES ON ${MYSQL_DB_DATABASE}.* TO '${MYSQL_DB_USER}'@'%' WITH GRANT OPTION;
+#commit;
+#END
- echo "Waiting for mysql"
- until mysql -h ${MYSQL_DB_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} &> /dev/null
- do
- printf "."
- sleep 1
- done
- echo -e "\nmysql ready"
-
-java -DserviceLogicDirectory=${SVCLOGIC_DIR} -DLOG_PATH=${LOG_PATH} -jar ${SDNC_HOME}/lib/${GRA_JAR}
+# Initialize schema
+if [ -f ${SDNC_CONFIG_DIR}/schema-mysql.sql ]
+then
+ mysql -h ${MYSQL_DB_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < ${SDNC_CONFIG_DIR}/schema-mysql.sql
+fi
+
+# Load data
+if [ -f ${SDNC_CONFIG_DIR}/data-mysql.sql ]
+then
+ mysql -h ${MYSQL_DB_HOST} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE} < ${SDNC_CONFIG_DIR}/data-mysql.sql
+fi
+
+cd $SDNC_HOME
+java ${JAVA_OPTS} -DserviceLogicDirectory=${SVCLOGIC_DIR} -DLOG_PATH=${LOG_PATH} -Dlog4j2.configurationFile=file:${SDNC_CONFIG_DIR}/log4j2.properties -jar ${SDNC_HOME}/lib/gra-app-*.jar
diff --git a/ms/gra/gra-docker/src/main/resources/truststore.jks b/ms/gra/gra-docker/src/main/resources/truststore.jks
new file mode 100644
index 0000000..6798c60
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/resources/truststore.jks
Binary files differ
diff --git a/ms/gra/gra-docker/src/main/scripts/chmodScripts.sh b/ms/gra/gra-docker/src/main/scripts/chmodScripts.sh
new file mode 100644
index 0000000..50d959f
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/chmodScripts.sh
@@ -0,0 +1,3 @@
+#/bin/bash
+echo $(pwd)
+chmod 755 target/docker-stage/opt/sdnc/gra/bin/startGra.sh
diff --git a/ms/gra/gra-docker/src/main/scripts/compareContrail.sh b/ms/gra/gra-docker/src/main/scripts/compareContrail.sh
new file mode 100755
index 0000000..5c613e7
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/compareContrail.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+if [ $# -eq 2 ]
+then
+ verbose=false
+ file1=$1
+ file2=$2
+elif [ $# -eq 3 -a $1 = "-v" ]
+then
+ verbose=true
+ file1=$2
+ file2=$3
+else
+ echo "Usage: $0 [-v] file1 file2"
+ exit 1
+fi
+
+tmppfx=contrail$$
+
+formattedfile1=/tmp/$tmppfx-formatted1
+formattedfile2=/tmp/$tmppfx-formatted2
+idlist1=/tmp/$tmppfx-contrail-ids-1
+idlist2=/tmp/$tmppfx-contrail-ids-2
+
+
+echo "Comparing $file1 to $file2 ...."
+
+cat $file1 | python3 -mjson.tool > $formattedfile1
+cat $file2 | python3 -mjson.tool > $formattedfile2
+
+cat $formattedfile1 | grep '"allotted-resource-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist1
+cat $formattedfile2 | grep '"allotted-resource-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist2
+
+echo
+echo "Diff of allotted resource ids:"
+echo "------------------------------"
+diff $idlist1 $idlist2
+
+if [ "$verbose" = "true" ]
+then
+ echo
+ echo "Full diff:"
+ echo "----------"
+ diff $formattedfile1 $formattedfile2
+fi
+
+echo
+echo "Allotted resource counts:"
+echo "-------------------------"
+echo " $file1 : $(cat $idlist1 | wc -l)"
+echo " $file2 : $(cat $idlist2 | wc -l)"
+
+
+
+
diff --git a/ms/gra/gra-docker/src/main/scripts/comparePortmirror.sh b/ms/gra/gra-docker/src/main/scripts/comparePortmirror.sh
new file mode 100755
index 0000000..5a39660
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/comparePortmirror.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+if [ $# -eq 2 ]
+then
+ verbose=false
+ file1=$1
+ file2=$2
+elif [ $# -eq 3 -a $1 = "-v" ]
+then
+ verbose=true
+ file1=$2
+ file2=$3
+else
+ echo "Usage: $0 [-v] file1 file2"
+ exit 1
+fi
+
+tmppfx=portmirror$$
+
+formattedfile1=/tmp/$tmppfx-formatted1
+formattedfile2=/tmp/$tmppfx-formatted2
+idlist1=/tmp/$tmppfx-configuration-ids-1
+idlist2=/tmp/$tmppfx-configuration-ids-2
+
+
+echo "Comparing $file1 to $file2 ...."
+
+cat $file1 | python3 -mjson.tool > $formattedfile1
+cat $file2 | python3 -mjson.tool > $formattedfile2
+
+cat $formattedfile1 | grep '"configuration-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist1
+cat $formattedfile2 | grep '"configuration-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist2
+
+echo
+echo "Diff of configuration ids:"
+echo "--------------------------"
+diff $idlist1 $idlist2
+
+if [ "$verbose" = "true" ]
+then
+ echo
+ echo "Full diff:"
+ echo "----------"
+ diff $formattedfile1 $formattedfile2
+fi
+
+echo
+echo "Configuration counts:"
+echo "---------------------"
+echo " $file1 : $(cat $idlist1 | wc -l)"
+echo " $file2 : $(cat $idlist2 | wc -l)"
+
+
+
+
diff --git a/ms/gra/gra-docker/src/main/scripts/comparePreload.sh b/ms/gra/gra-docker/src/main/scripts/comparePreload.sh
new file mode 100755
index 0000000..4e8ab79
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/comparePreload.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+if [ $# -eq 2 ]
+then
+ verbose=false
+ file1=$1
+ file2=$2
+elif [ $# -eq 3 -a $1 = "-v" ]
+then
+ verbose=true
+ file1=$2
+ file2=$3
+else
+ echo "Usage: $0 [-v] file1 file2"
+ exit 1
+fi
+
+tmppfx=preload$$
+
+formattedfile1=/tmp/$tmppfx-formatted1
+formattedfile2=/tmp/$tmppfx-formatted2
+idlist1=/tmp/$tmppfx-preload-ids-1
+idlist2=/tmp/$tmppfx-preload-ids-2
+
+
+echo "Comparing $file1 to $file2 ...."
+
+cat $file1 | python3 -mjson.tool > $formattedfile1
+cat $file2 | python3 -mjson.tool > $formattedfile2
+
+cat $formattedfile1 | grep '"preload-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist1
+cat $formattedfile2 | grep '"preload-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $idlist2
+
+echo
+echo "Diff of preload ids:"
+echo "--------------------"
+diff $idlist1 $idlist2
+
+if [ "$verbose" = "true" ]
+then
+ echo
+ echo "Full diff:"
+ echo "----------"
+ diff $formattedfile1 $formattedfile2
+fi
+
+echo
+echo "Preload id counts:"
+echo "------------------"
+echo " $file1 : $(cat $idlist1 | wc -l)"
+echo " $file2 : $(cat $idlist2 | wc -l)"
+
+
+
+
diff --git a/ms/gra/gra-docker/src/main/scripts/compareSvc.sh b/ms/gra/gra-docker/src/main/scripts/compareSvc.sh
new file mode 100755
index 0000000..0c977b5
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/compareSvc.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+if [ $# -eq 2 ]
+then
+ verbose=false
+ file1=$1
+ file2=$2
+elif [ $# -eq 3 -a $1 = "-v" ]
+then
+ verbose=true
+ file1=$2
+ file2=$3
+else
+ echo "Usage: $0 [-v] file1 file2"
+ exit 1
+fi
+
+tmppfx=svc$$
+
+formattedfile1=/tmp/$tmppfx-formatted1
+formattedfile2=/tmp/$tmppfx-formatted2
+svcinstancelist1=/tmp/$tmppfx-svc-instance-ids-1
+svcinstancelist2=/tmp/$tmppfx-svc-instance-ids-2
+
+
+echo "Comparing $file1 to $file2 ...."
+
+cat $file1 | python3 -mjson.tool > $formattedfile1
+cat $file2 | python3 -mjson.tool > $formattedfile2
+
+cat $formattedfile1 | grep '"service-instance-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $svcinstancelist1
+cat $formattedfile2 | grep '"service-instance-id":' | cut -d: -f2 | sed -e "s/,$//" -e 's/\"//g' -e '/^[[:space:]]*$/d' | sort -u > $svcinstancelist2
+
+echo
+echo "Diff of service instance ids:"
+echo "-----------------------------"
+diff $svcinstancelist1 $svcinstancelist2
+
+if [ "$verbose" = "true" ]
+then
+ echo
+ echo "Full diff:"
+ echo "----------"
+ diff $formattedfile1 $formattedfile2
+fi
+
+echo
+echo "Service instance counts:"
+echo "------------------------"
+echo " $file1 : $(cat $svcinstancelist1 | wc -l)"
+echo " $file2 : $(cat $svcinstancelist2 | wc -l)"
+
+
+
+
diff --git a/ms/gra/gra-docker/src/main/scripts/exportGraDaexim.sh b/ms/gra/gra-docker/src/main/scripts/exportGraDaexim.sh
new file mode 100644
index 0000000..08da8b0
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/exportGraDaexim.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+ODL_USER=${ODL_USER:-m27434@dev.sdncp.att.com}
+ODL_PASSWORD=${AAF_MECHID_CRED:-admin}
+ODL_URI=${ODL_URI:-https://localhost:8443}
+
+export TMPDIR=/tmp/daexim-$$
+
+if [ $# -ne 1 ]
+then
+ echo "Usage: $0 filename"
+ exit 1
+fi
+
+
+set -e
+
+mkdir $TMPDIR
+
+if [[ $1 == /* ]]
+then
+ tarfile=$1
+else
+ tarfile=$TMPDIR/$1
+fi
+
+echo "Exporting services ..."
+curl -k -u${ODL_USER}:${ODL_PASSWORD} ${ODL_URI}/restconf/config/GENERIC-RESOURCE-API:services/ > ${TMPDIR}/services_config.json
+echo "Exporting contrail data ..."
+curl -k -u${ODL_USER}:${ODL_PASSWORD} ${ODL_URI}/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/ > ${TMPDIR}/contrail_config.json
+echo "Exporting port mirror data ..."
+curl -k -u${ODL_USER}:${ODL_PASSWORD} ${ODL_URI}/restconf/config/GENERIC-RESOURCE-API:port-mirror-configurations/ > ${TMPDIR}/portmirror_config.json
+echo "Exporting preload data ..."
+curl -k -u${ODL_USER}:${ODL_PASSWORD} ${ODL_URI}/restconf/config/GENERIC-RESOURCE-API:preload-information/ > ${TMPDIR}/preload_config.json
+
+cd $TMPDIR
+tar czf $tarfile ./*.json
+
+echo Exported data is in $tarfile
+
diff --git a/ms/gra/gra-docker/src/main/scripts/graToMdsal.sh b/ms/gra/gra-docker/src/main/scripts/graToMdsal.sh
new file mode 100644
index 0000000..9fb62f8
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/graToMdsal.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+
+# Copies data from NFT Azure GRA node and stores in MDSAL in NFT EOM
+
+TMPNAME=gra-mdsal-$$
+
+if [ $# -eq 2 ]
+then
+ fetchFile=false
+ NFT_AZURE_EXPORT_FILE=$1
+ NFT_EOM_URL=$2
+elif [ $# -eq 3 ]
+then
+ fetchFile=true
+ NFT_AZURE_EXPORT_FILE=$TMPNAME.tar.gz
+ NFT_AZURE_NAMESPACE=$1
+ NFT_AZURE_GRA_POD=$2
+ NFT_EOM_URL=$3
+else
+ echo "Usage: $0 {export-file-name | nft-namespace gra-pod-name} eom-url"
+ exit 1
+fi
+
+
+# Credentials configuration
+NFT_AZURE_USER=${NFT_AZURE_USER:-m27434@dev.sdncp.att.com}
+NFT_AZURE_PASSWORD=${NFT_AZURE_PASSWORD:-sdncp20190501}
+NFT_EOM_USER=${NFT_EOM_USER:-admin}
+NFT_EOM_PASSWORD=${NFT_EOM_PASSWORD:-admin}
+
+set -e
+
+TMPNAME=gra-mdsal-$$
+mkdir /tmp/$TMPNAME
+
+if [ "$fetchFile" = "true" ]
+then
+ # Export data on Azure
+ kubectl -n $NFT_AZURE_NAMESPACE exec -ti $NFT_AZURE_GRA_POD -c gra -- env ODL_USER=$NFT_AZURE_USER AAF_MECHID_CRED=$NFT_AZURE_PASSWORD /opt/sdnc/gra/bin/exportGraDaexim.sh /tmp/$NFT_AZURE_EXPORT_FILE
+
+
+ # Put exported data to NFT EOM
+ kubectl -n $NFT_AZURE_NAMESPACE cp $NFT_AZURE_GRA_POD:/tmp/$NFT_AZURE_EXPORT_FILE /tmp/$TMPNAME/$NFT_AZURE_EXPORT_FILE
+else
+ cp $NFT_AZURE_EXPORT_FILE /tmp/$TMPNAME
+fi
+
+cd /tmp/$TMPNAME
+tar xzf $NFT_AZURE_EXPORT_FILE
+
+# Massage files and create daexim input
+echo "{" > lsc_backup_config_$TMPNAME.json
+addComma=false
+if [ -f services_config.json ]
+then
+ echo "Converting service data ..."
+ cat services_config.json | python3 -mjson.tool | sed -e "s/services/GENERIC-RESOURCE-API:services/" -e "/\"gateway-address\": \"\"/d" > services_config_upd.json
+ cat services_config_upd.json | sed -e "1s/{//" -e "$ s/}//" >> lsc_backup_config_$TMPNAME.json
+ addComma=true
+fi
+
+if [ -f contrail_config.json ]
+then
+ if [ "$addComma" = "true" ]
+ then
+ echo "," >> lsc_backup_config_$TMPNAME.json
+ fi
+ cat contrail_config.json | sed -e "s/{//" -e "s/contrail-route-allotted-resources/GENERIC-RESOURCE-API:contrail-route-allotted-resources/" -e "s/}$//" >> lsc_backup_config_$TMPNAME.json
+ addComma=true
+fi
+
+if [ -f portmirror_config.json ]
+then
+ if [ "$addComma" = "true" ]
+ then
+ echo "," >> lsc_backup_config_$TMPNAME.json
+ fi
+ cat portmirror_config.json | sed -e "s/{//" -e "s/port-mirror-configurations/GENERIC-RESOURCE-API:port-mirror-configurations/" -e "s/}$//" >> lsc_backup_config_$TMPNAME.json
+ addComma=true
+fi
+
+echo "}" >> lsc_backup_config_$TMPNAME.json
+
+echo "Exported data files are in /tmp/$TMPNAME"
+
+if [ -f services_config_upd.json ]
+then
+ echo "Importing service data ..."
+ curl -k -v -u${NFT_EOM_USER}:${NFT_EOM_PASSWORD} -H "Content-Type: application/json" -X PUT -d@services_config_upd.json ${NFT_EOM_URL}/restconf/config/GENERIC-RESOURCE-API:services/
+fi
+
+if [ -f contrail_config.json ]
+then
+ echo "Importing contrail data ..."
+ curl -k -v -u${NFT_EOM_USER}:${NFT_EOM_PASSWORD} -H "Content-Type: application/json" -X PUT -d@contrail_config.json ${NFT_EOM_URL}/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/
+fi
+
+if [ -f portmirror_config.json ]
+then
+ echo "Importing port mirror data ..."
+ curl -k -v -u${NFT_EOM_USER}:${NFT_EOM_PASSWORD} -H "Content-Type: application/json" -X PUT -d@portmirror_config.json ${NFT_EOM_URL}/restconf/config/GENERIC-RESOURCE-API:port-mirror-configurations/
+fi
+
+
diff --git a/ms/gra/gra-docker/src/main/scripts/importGraDaexim.sh b/ms/gra/gra-docker/src/main/scripts/importGraDaexim.sh
new file mode 100755
index 0000000..2c90421
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/scripts/importGraDaexim.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+export CHUNK_SIZE=${CHUNK_SIZE:-75}
+set -e
+CURLFLAGS="--silent --show-error"
+if [ $# -eq 3 ]
+then
+ if [ "$1" != "-v" ]
+ then
+ echo "Usage: $0 [-v] filename controller-url"
+ exit 1
+ fi
+ CURLFLAGS="-v"
+ filename=$2
+ url=$3
+elif [ $# -eq 2 ]
+then
+ filename=$1
+ url=$2
+else
+ echo "Usage: $0 [-v] filename controller-url"
+ exit 1
+fi
+
+ODL_USER=${ODL_USER:-admin}
+ODL_PASSWORD=${ODL_PASSWORD:-admin}
+
+
+export TMPDIR=/tmp/daexim-$$
+# Unzip file
+if [[ "$filename" == *.zip ]]
+then
+ unzip -qd $TMPDIR $filename
+ DAEXIM_CONFIG=$(find $TMPDIR -name *config.json)
+elif [[ "$filename" == *config.json ]]
+then
+ mkdir $TMPDIR
+ DAEXIM_CONFIG=$filename
+else
+ echo "$filename is not a recognized format"
+ exit 1
+fi
+
+
+
+cat ${DAEXIM_CONFIG} | python3 -c '
+import sys,json,os
+
+data = json.load(sys.stdin)
+
+chunk_size = int(os.environ["CHUNK_SIZE"])
+if chunk_size == "":
+ chunk_size = 75
+
+if "GENERIC-RESOURCE-API:services" in data:
+ chunk = 0
+ lineno = chunk_size
+ f = None
+ for service in data["GENERIC-RESOURCE-API:services"]["service"]:
+ if lineno >= chunk_size:
+ chunk = chunk+1
+ lineno = 1
+ if f != None:
+ print ("]}}", file=f)
+ f.flush()
+ f.close()
+ outfile = os.environ["TMPDIR"] + "/config_gra_services_"+str(chunk).zfill(3)+".json"
+ f = open(outfile, "w")
+ print("{\"services\":", file=f, end="")
+ print("{\"service\":[", file=f, end="")
+ json.dump(service, f)
+ else:
+ lineno = lineno+1
+ print(",",file=f, end="")
+ json.dump(service, f)
+ if f != None:
+ print("]}}", file=f)
+ f.flush()
+ f.close()
+ print("Split "+str(len(data["GENERIC-RESOURCE-API:services"]["service"]))+ " services into "+str(chunk)+" chunks")
+
+if "GENERIC-RESOURCE-API:contrail-route-allotted-resources" in data:
+ chunk = 0
+ lineno = chunk_size
+ f = None
+ for contrail_route in data["GENERIC-RESOURCE-API:contrail-route-allotted-resources"]["contrail-route-allotted-resource"]:
+ if lineno >= chunk_size:
+ chunk = chunk+1
+ lineno = 1
+ if f != None:
+ print ("]}}", file=f)
+ f.flush()
+ f.close()
+ outfile = os.environ["TMPDIR"] + "/config_gra_contrail_"+str(chunk).zfill(3)+".json"
+ f = open(outfile, "w")
+ print("{\"contrail-route-allotted-resources\":", file=f, end="")
+ print("{\"contrail-route-allotted-resource\":[", file=f, end="")
+ json.dump(contrail_route, f)
+ else:
+ lineno = lineno+1
+ print(",",file=f, end="")
+ json.dump(contrail_route, f)
+ if f != None:
+ print("]}}", file=f)
+ f.flush()
+ f.close()
+ print("Split "+ str(len(data["GENERIC-RESOURCE-API:contrail-route-allotted-resources"]["contrail-route-allotted-resource"]))+ " contrail-route-allotted-services into "+str(chunk)+" chunks")
+
+if "GENERIC-RESOURCE-API:port-mirror-configurations" in data:
+ chunk = 0
+ lineno = chunk_size
+ f = None
+ for port_mirror in data["GENERIC-RESOURCE-API:port-mirror-configurations"]["port-mirror-configuration"]:
+ if lineno >= chunk_size:
+ chunk = chunk+1
+ lineno = 1
+ if f != None:
+ print ("]}}", file=f)
+ f.flush()
+ f.close()
+ outfile = os.environ["TMPDIR"] + "/config_gra_port_mirror_"+str(chunk).zfill(3)+".json"
+ f = open(outfile, "w")
+ print("{\"port-mirror-configurations\":", file=f, end="")
+ print("{\"port-mirror-configuration\":[", file=f, end="")
+ json.dump(port_mirror, f)
+ else:
+ lineno = lineno+1
+ print(",",file=f, end="")
+ json.dump(port_mirror, f)
+ if f != None:
+ print("]}}", file=f)
+ f.flush()
+ f.close()
+ print("Split "+str(len(data["GENERIC-RESOURCE-API:port-mirror-configurations"]["port-mirror-configuration"]))+" port-mirror-configuration into "+str(chunk)+" chunks")
+
+if "GENERIC-RESOURCE-API:preload-information" in data:
+ chunk = 0
+ lineno = chunk_size
+ f = None
+ for preload in data["GENERIC-RESOURCE-API:preload-information"]["preload-list"]:
+ if lineno >= chunk_size:
+ chunk = chunk+1
+ lineno = 0
+ if f != None:
+ print ("]}}", file=f)
+ f.flush()
+ f.close()
+ outfile = os.environ["TMPDIR"] + "/config_gra_preloads_"+str(chunk).zfill(3)+".json"
+ f = open(outfile, "w")
+ print("{\"preload-information\":", file=f, end="")
+ print("{\"preload-list\":[", file=f, end="")
+ json.dump(preload, f)
+ else:
+ lineno = lineno+1
+ print(",",file=f, end="")
+ json.dump(preload, f)
+ if f != None:
+ print("]}}", file=f)
+ f.flush()
+ f.close()
+ print ("Split "+str(len(data["GENERIC-RESOURCE-API:preload-information"]["preload-list"]))+" preloads into "+str(chunk)+" chunks")'
+
+first=true
+
+if [ $(ls -1 $TMPDIR/config_gra_services_*.json 2>/dev/null | wc -l) -gt 0 ]
+then
+ echo "Transferring services data ..."
+ for file in $(ls $TMPDIR/config_gra_services_*.json)
+ do
+ echo "Transferring file $file ..."
+ curl ${CURLFLAGS} --fail -k -u${ODL_USER}:${ODL_PASSWORD} -H "Content-Type: application/json" -X PUT -d@$file ${url}/restconf/config/GENERIC-RESOURCE-API:services/
+ done
+fi
+
+if [ $(ls -1 $TMPDIR/config_gra_contrail_*.json 2>/dev/null | wc -l) -gt 0 ]
+then
+ echo "Transferring contrail data ..."
+ for file in $(ls $TMPDIR/config_gra_contrail_*.json)
+ do
+ echo "Transferring file $file ..."
+ curl ${CURLFLAGS} --fail -k -u${ODL_USER}:${ODL_PASSWORD} -H "Content-Type: application/json" -X PUT -d@$file ${url}/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/
+ done
+fi
+
+if [ $(ls -1 $TMPDIR/config_gra_port_mirror_*.json 2>/dev/null | wc -l) -gt 0 ]
+then
+ echo "Transferring port mirror data ..."
+ for file in $(ls $TMPDIR/config_gra_port_mirror_*.json)
+ do
+ echo "Transferring file $file ..."
+ curl ${CURLFLAGS} --fail -k -u${ODL_USER}:${ODL_PASSWORD} -H "Content-Type: application/json" -X PUT -d@$file ${url}/restconf/config/GENERIC-RESOURCE-API:port-mirror-configurations/
+ done
+fi
+
+if [ $(ls -1 $TMPDIR/config_gra_preloads_*.json 2>/dev/null | wc -l) -gt 0 ]
+then
+ echo "Transferring preload data ..."
+ first=true
+ for file in $(ls $TMPDIR/config_gra_preloads_*.json)
+ do
+ echo "Transferring file $file ..."
+ curl ${CURLFLAGS} --fail -k -u${ODL_USER}:${ODL_PASSWORD} -H "Content-Type: application/json" -X PUT -d@$file ${url}/restconf/config/GENERIC-RESOURCE-API:preload-information/
+ done
+fi
+
+rm -rf $TMPDIR
+echo "Done!" \ No newline at end of file
diff --git a/ms/gra/gra-docker/src/main/templates/contrail-route-allotted-resource.json b/ms/gra/gra-docker/src/main/templates/contrail-route-allotted-resource.json
new file mode 100644
index 0000000..f5d862d
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/contrail-route-allotted-resource.json
@@ -0,0 +1,102 @@
+{
+ "contrail-route-allotted-resource": {
+ "allotted-resource-id": ${ar.allotted-resource-id},
+ "allotted-resource-data": {
+ "contrail-route-topology": {
+ "allotted-resource-identifiers": {
+ "consuming-service-instance-id": ${ar.allotted-resource-data.contrail-route-topology.allotted-resource-identifiers.consuming-service-instance-id},
+ "allotted-resource-name": ${ar.allotted-resource-data.contrail-route-topology.allotted-resource-identifiers.allotted-resource-name},
+ "allotted-resource-id": ${ar.allotted-resource-data.contrail-route-topology.allotted-resource-identifiers.allotted-resource-id},
+ "parent-service-instance-id": ${ar.allotted-resource-data.contrail-route-topology.allotted-resource-identifiers.parent-service-instance-id},
+ "allotted-resource-type": ${ar.allotted-resource-data.contrail-route-topology.allotted-resource-identifiers.allotted-resource-type}
+ },
+ "onap-model-information": {
+ "model-invariant-uuid": ${ar.allotted-resource-data.contrail-route-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${ar.allotted-resource-data.contrail-route-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${ar.allotted-resource-data.contrail-route-topology.onap-model-information.model-uuid},
+ "model-version": ${ar.allotted-resource-data.contrail-route-topology.onap-model-information.model-version}
+ },
+ "contrail-route-assignments": {
+ "fq-name": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.fq-name},
+ "contrail-id": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.contrail-id},
+ "vlan-tag": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.vlan-tag},
+ "source-network": {
+ "network-id": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.source-network.network-id},
+ "network-role": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.source-network.network-role}
+ },
+ "dest-network": {
+ "network-id": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.dest-network.network-id},
+ "network-role": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.dest-network.network-role}
+ },
+ "contrail-applied-service": {
+ "service-instance-id": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.contrail-applied-service.service-instance-id},
+ "vnf-id": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.contrail-applied-service.vnf-id},
+ "contrail-fqdn": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-assignments.contrail-applied-service.contrail-fqdn}
+ }
+ },
+ "contrail-route-parameters": {
+ "param" : [
+ ${repeat:ar.allotted-resource-data.contrail-route-topology.contrail-route-parameters_length:
+ {
+ "name": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-parameters[${1}].name},
+ "value": ${ar.allotted-resource-data.contrail-route-topology.contrail-route-parameters[${1}].value}
+ }
+ }
+ ]
+ }
+ },
+ "allotted-resource-operation-information": {
+ "allotted-resource-information": {
+ "allotted-resource-id": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.allotted-resource-id},
+ "allotted-resource-type": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.allotted-resource-type},
+ "parent-service-instance-id": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.parent-service-instance-id},
+ "onap-model-information": {
+ "model-invariant-uuid": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-uuid},
+ "model-version": ${ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-version}
+ }
+ },
+ "sdnc-request-header": {
+ "svc-request-id": ${ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.svc-request-id},
+ "svc-action": ${ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.svc-action}
+ },
+ "request-information": {
+ "request-id": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.request-id},
+ "source": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.source},
+ "order-version": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.order-version},
+ "order-number": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.order-number},
+ "notification-url": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.notification-url},
+ "request-action": ${ar.allotted-resource-data.allotted-resource-operation-information.request-information.request-action}
+ },
+ "contrail-route-request-input": {
+ "source-network": {
+ "network-id": ${ar.allotted-resource-data.allotted-resource-operation-information.contrail-route-request-input.source-network.network-id},
+ "network-role": ${ar.allotted-resource-data.allotted-resource-operation-information.contrail-route-request-input.source-network.network-role}
+ },
+ "dest-network": {
+ "network-id": ${ar.allotted-resource-data.allotted-resource-operation-information.contrail-route-request-input.dest-network.network-id},
+ "network-role": ${ar.allotted-resource-data.allotted-resource-operation-information.contrail-route-request-input.dest-network.network-role}
+ },
+ "contrail-applied-service-info": {
+ "service-instance-id" : ${ar.allotted-resource-data.allotted-resource-operation-information.contrail-route-request-input.contrail-applied-service-info.service-instance-id}
+ }
+ }
+ },
+ "allotted-resource-oper-status": {
+ "last-action": ${ar.allotted-resource-data.allotted-resource-oper-status.last-action},
+ "modify-timestamp": ${ar.allotted-resource-data.allotted-resource-oper-status.modify-timestamp},
+ "last-order-status": ${ar.allotted-resource-data.allotted-resource-oper-status.last-order-status},
+ "create-timestamp": ${ar.allotted-resource-data.allotted-resource-oper-status.create-timestamp},
+ "order-status": ${ar.allotted-resource-data.allotted-resource-oper-status.order-status},
+ "last-rpc-action": ${ar.allotted-resource-data.allotted-resource-oper-status.last-rpc-action},
+ "last-svc-request-id": ${ar.allotted-resource-data.allotted-resource-oper-status.last-svc-request-id}
+ }
+ },
+ "allotted-resource-status" : {
+ "action": ${ar.allotted-resource-status.action},
+ "rpc-name": ${ar.allotted-resource-status.rpc-name},
+ "rpc-action": ${ar.allotted-resource-status.rpc-action}
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/csm-service-instance.json b/ms/gra/gra-docker/src/main/templates/csm-service-instance.json
new file mode 100644
index 0000000..0df0df4
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/csm-service-instance.json
@@ -0,0 +1,15 @@
+{
+ "service": {
+ "service-instance-id": ${tmp.service-instance-id},
+ "service-data": {
+ "service-information": {
+ "global-customer-id": ${output-global-customer-id}
+ },
+ "service-topology": {
+ "service-topology-identifier": {
+ "service-type": ${output-service-type}
+ }
+ }
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/network-instance-group-network.json b/ms/gra/gra-docker/src/main/templates/network-instance-group-network.json
new file mode 100644
index 0000000..ed44a04
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/network-instance-group-network.json
@@ -0,0 +1,27 @@
+{
+ "network": {
+ "network-id": ${mdsal-nign.network[0].network-id},
+ "vpn-bindings": [
+ ${repeat:mdsal-nign.network[0].vpn-bindings_length:
+ {
+ "vpn-binding-id": ${mdsal-nign.network[0].vpn-bindings[${1}].vpn-binding-id},
+ "vpn-name": ${mdsal-nign.network[0].vpn-bindings[${1}].vpn-name},
+ "global-route-target": ${mdsal-nign.network[0].vpn-bindings[${1}].global-route-target},
+ "route-target-role": ${mdsal-nign.network[0].vpn-bindings[${1}].route-target-role},
+ "aic-zone": ${mdsal-nign.network[0].vpn-bindings[${1}].aic-zone}
+ }
+ }
+ ],
+ "vlan-tag-id": ${mdsal-nign.network[0].vlan-tag-id},
+ "network-status": ${mdsal-nign.network[0].network-status},
+ "customer-bonding-requests": {
+ "customer-bonding-request": [
+ ${repeat:mdsal-nign.network[0].customer-bonding-requests.customer-bonding-request_length:
+ {
+ "configuration-id": ${mdsal-nign.network[0].customer-bonding-requests.customer-bonding-request[${1}].configuration-id}
+ },
+ }
+ ]
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/network-level-oper-status.json b/ms/gra/gra-docker/src/main/templates/network-level-oper-status.json
new file mode 100644
index 0000000..b38a17b
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/network-level-oper-status.json
@@ -0,0 +1,11 @@
+{
+ "oper-status": {
+ "order-status": ${network-level-oper-status.order-status},
+ "last-rpc-action": ${network-level-oper-status.last-rpc-action},
+ "last-action": ${network-level-oper-status.last-action},
+ "last-svc-request-id": ${network-level-oper-status.last-svc-request-id},
+ "last-order-status": ${network-level-oper-status.last-order-status},
+ "create-timestamp": ${network-level-oper-status.create-timestamp},
+ "modify-timestamp": ${network-level-oper-status.modify-timestamp}
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/network.json b/ms/gra/gra-docker/src/main/templates/network.json
new file mode 100644
index 0000000..88d79e5
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/network.json
@@ -0,0 +1,145 @@
+{
+ "network": {
+ "network-id": ${network-data.network-information.network-id},
+ "network-data": {
+ "network-provided-allotted-resources": {
+ "network-provided-ar-id": [
+${repeat:network-data.network-provided-allotted-resources.network-provided-ar-id_length:
+ ${network-data.network-provided-allotted-resources.network-provided-ar-id[${1}]},
+}
+ ]
+ },
+ "network-level-oper-status": {
+ "order-status": ${network-data.network-level-oper-status.order-status},
+ "last-rpc-action": ${network-data.network-level-oper-status.last-rpc-action},
+ "last-action": ${network-data.network-level-oper-status.last-action},
+ "last-svc-request-id": ${network-data.network-level-oper-status.last-svc-request-id},
+ "last-order-status": ${network-data.network-level-oper-status.last-order-status},
+ "create-timestamp": ${network-data.network-level-oper-status.create-timestamp},
+ "modify-timestamp": ${network-data.network-level-oper-status.modify-timestamp}
+ },
+ "sdnc-request-header": {
+ "svc-request-id": ${network-data.sdnc-request-header.svc-request-id},
+ "svc-action": ${network-data.sdnc-request-header.svc-action},
+ "svc-notification-url": ${network-data.sdnc-request-header.svc-notification-url}
+ },
+ "request-information": {
+ "request-id": ${network-data.request-information.request-id},
+ "request-action": ${network-data.request-information.request-action},
+ "source": ${network-data.request-information.source},
+ "notification-url": ${network-data.request-information.notification-url},
+ "order-number": ${network-data.request-information.order-number},
+ "order-version": ${network-data.request-information.order-version}
+ },
+ "network-request-input": {
+ "network-name": ${network-data.network-request-input.network-name},
+ "network-input-parameters": {
+ "param": [
+${repeat:network-data.network-request.network-input-parameters.param_length:
+ {
+ "name": ${network-data.network-request-inputnetwork-input-parameters.param[${1}].name},
+ "value": ${network-data.network-request-inputnetwork-input-parameters.param[${1}].value},
+ "resource-resolution-data": {
+ "resource-key": [
+${repeat:network-data.network-request.network-input-parameters.param[${1}].resource-resolution-data.resource_key_length:
+ {
+ "name": ${network-data.network-request.network-input-parameters.param[${1}].resource-resolution-data.resource_key[${2}].name},
+ "value": ${network-data.network-request.network-input-parameters.param[${1}].resource-resolution-data.resource_key[${2}].value}
+ }
+}
+ ],
+ "status": ${network-data.network-request-inputnetwork-input-parameters.param[${1}].status},
+ "capability-name": ${network-data.network-request-inputnetwork-input-parameters.param[${1}].capability-name}
+ }
+ },
+}
+ ]
+ },
+ "network-instance-group-id": ${network-data.network-request-input.network-instance-group-id},
+ "tenant": ${network-data.network-request-input.tenant},
+ "aic-cloud-region": ${network-data.network-request-input.aic-cloud-region},
+ "cloud-owner": ${network-data.network-request-input.cloud-owner},
+ "aic-clli": ${network-data.network-request-input.aic-clli}
+ },
+ "network-information": {
+ "network-id": ${network-data.network-information.network-id},
+ "network-type": ${network-data.network-information.network-type},
+ "network-technology": ${network-data.network-information.network-technology},
+ "from-preload": ${network-data.network-information.from-preload},
+ "onap-model-information": {
+ "model-invariant-uuid": ${network-data.network-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${network-data.network-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${network-data.network-topology.onap-model-information.model-uuid},
+ "model-version": ${network-data.network-topology.onap-model-information.model-version},
+ "model-name": ${network-data.network-topology.onap-model-information.model-name}
+ }
+ },
+ "service-information": {
+ "service-id": ${network-data.service-information.service-id},
+ "subscription-service-type": ${network-data.service-information.subscription-service-type},
+ "service-instance-id": ${network-data.service-information.service-instance-id},
+ "global-customer-id": ${network-data.service-information.global-customer-id},
+ "subscriber-name": ${network-data.service-information.subscriber-name},
+ "onap-model-information": {
+ "model-invariant-uuid": ${network-data.service-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${network-data.onap-model-information.model-customization-uuid},
+ "model-uuid": ${network-data.onap-model-information.model-uuid},
+ "model-version": ${network-data.onap-model-information.model-version},
+ "model-name": ${network-data.onap-model-information.model-name}
+ }
+ },
+ "network-topology": {
+ "tenant": ${network-data.network-topology.tenant},
+ "aic-cloud-region": ${network-data.network-topology.aic-cloud-region},
+ "cloud-owner": ${network-data.network-topology.cloud-owner},
+ "aic-clli": ${network-data.network-topology.aic-clli},
+ "network-parameters": {
+ "network-parameter": [
+${repeat:network-data.network-topology.network-parameters.network-parameter_length:
+ {
+ "network-parameter-name": ${network-data.network-topology.network-parameters.network-parameter[${1}].network-parameter-name},
+ "network-parameter-value": ${network-data.network-topology.network-parameters.network-parameter[${1}].network-parameter-value}
+ },
+}
+ ]
+ },
+ "onap-model-information": {
+ "model-invariant-uuid": ${network-data.network-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${network-data.network-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${network-data.network-topology.onap-model-information.model-uuid},
+ "model-version": ${network-data.network-topology.onap-model-information.model-version},
+ "model-name": ${network-data.network-topology.onap-model-information.model-name}
+ },
+ "network-assignments": {},
+ "network-topology-identifier-structure": {
+ "network-id": ${network-data.network-topology.network-topology-identifier-structure.network-id},
+ "network-name": ${network-data.network-topology.network-topology-identifier-structure.network-name},
+ "network-role": ${network-data.network-topology.network-topology-identifier-structure.network-role},
+ "network-type": ${network-data.network-topology.network-topology-identifier-structure.network-type},
+ "network-instance-group-id": ${network-data.network-topology.network-topology-identifier-structure.network-instance-group-id},
+ "network-technology": ${network-data.network-topology.network-topology-identifier-structure.network-technology},
+ "eipam-v4-address-plan": ${network-data.network-topology.network-topology-identifier-structure.eipam-v4-address-plan},
+ "eipam-v6-address-plan": ${network-data.network-topology.network-topology-identifier-structure.eipam-v6-address-plan},
+ "is-trunked": ${network-data.network-topology.network-topology-identifier-structure.is-trunked},
+ "segmentation-id": ${network-data.network-topology.network-topology-identifier-structure.segmentation-id},
+ "related-networks": {
+ "related-network": [
+${repeat:network-data.network-topology.network-topology-identifier-structure.related-networks.related-network_length:
+ {
+ "network-id": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].network-id},
+ "network-role": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].network-role},
+ "vlan-tags": {
+ "vlan-interface": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].vlan-tags.vlan-interface},
+ "upper-tag-id": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].vlan-tags.upper-tag-id},
+ "lower-tag-id": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].vlan-tags.lower-tag-id},
+ "is-private": ${network-data.network-topology.network-topology-identifier-structure.related-networks.related-network[${1}].vlan-tags.is-private}
+ }
+ },
+}
+ ]
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/port-mirror-configuration.json b/ms/gra/gra-docker/src/main/templates/port-mirror-configuration.json
new file mode 100644
index 0000000..f18d191
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/port-mirror-configuration.json
@@ -0,0 +1,152 @@
+{
+ "port-mirror-configuration": {
+ "configuration-id": ${pm.configuration-id},
+ "configuration-data": {
+ "configuration-operation-information": {
+ "sdnc-request-header": {
+ "svc-request-id": ${pm.configuration-data.configuration-operation-information.sdnc-request-header.svc-request-id},
+ "svc-action": ${pm.configuration-data.configuration-operation-information.sdnc-request-header.svc-action},
+ "svc-notification-url": ${pm.configuration-data.configuration-operation-information.sdnc-request-header.svc-notification-url}
+ },
+ "request-information": {
+ "request-id": ${pm.configuration-data.configuration-operation-information.request-information.request-id},
+ "request-action": ${pm.configuration-data.configuration-operation-information.request-information.request-action},
+ "source": ${pm.configuration-data.configuration-operation-information.request-information.source},
+ "notification-url": ${pm.configuration-data.configuration-operation-information.request-information.notification-url},
+ "order-number": ${pm.configuration-data.configuration-operation-information.request-information.order-number},
+ "order-version": ${pm.configuration-data.configuration-operation-information.request-information.order-version}
+ },
+ "service-information": {
+ "service-id": ${pm.configuration-data.configuration-operation-information.service-information.service-id},
+ "subscription-service-type": ${pm.configuration-data.configuration-operation-information.service-information.subscription-service-type},
+ "onap-model-information": {
+ "model-invariant-uuid": ${pm.configuration-data.configuration-operation-information.service-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${pm.configuration-data.configuration-operation-information.service-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${pm.configuration-data.configuration-operation-information.service-information.onap-model-information.model-uuid},
+ "model-version": ${pm.configuration-data.configuration-operation-information.service-information.onap-model-information.model-version},
+ "model-name": ${pm.configuration-data.configuration-operation-information.service-information.onap-model-information.model-name}
+ },
+ "service-instance-id": ${pm.configuration-data.configuration-operation-information.service-information.service-instance-id},
+ "global-customer-id": ${pm.configuration-data.configuration-operation-information.service-information.global-customer-id},
+ "subscriber-name": ${pm.configuration-data.configuration-operation-information.service-information.subscriber-name}
+ },
+ "configuration-information": {
+ "configuration-id": ${pm.configuration-data.configuration-operation-information.configuration-information.configuration-id},
+ "configuration-type": ${pm.configuration-data.configuration-operation-information.configuration-information.configuration-type},
+ "configuration-sub-type": ${pm.configuration-data.configuration-operation-information.configuration-information.configuration-sub-type},
+ "onap-model-information": {
+ "model-invariant-uuid": ${pm.configuration-data.configuration-operation-information.configuration-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${pm.configuration-data.configuration-operation-information.configuration-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${pm.configuration-data.configuration-operation-information.configuration-information.onap-model-information.model-uuid},
+ "model-version": ${pm.configuration-data.configuration-operation-information.configuration-information.onap-model-information.model-version},
+ "model-name": ${pm.configuration-data.configuration-operation-information.configuration-information.onap-model-information.model-name}
+ }
+ },
+ "port-mirror-configuration-request-input": {
+ "source-port": {
+ "sevice-instance-id": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.source-port.service-instance-id},
+ "vnf-information": {
+ "vnf-id": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.source-port.vnf-information.vnf-id},
+ "vnf-type": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.source-port.vnf-information.vnf-type}
+ }
+ },
+ "dest-port": {
+ "sevice-instance-id": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.dest-port.service-instance-id},
+ "vnf-information": {
+ "vnf-id": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.dest-port.vnf-information.vnf-id},
+ "vnf-type": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.dest-port.vnf-information.vnf-type}
+ },
+ "pnf-information": {
+ "pnf-name": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.dest-port.pnf-information.pnf-name},
+ "pnf-type": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.dest-port.pnf-information.pnf-type}
+ }
+ },
+ "tenant": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.tenant},
+ "aic-cloud-region": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.aic-cloud-region},
+ "aic-clli": ${pm.configuration-data.configuration-operation-information.port-mirror-configuration-request-input.aic-clli}
+ }
+ },
+ "port-mirror-configuration-topology": {
+ "configuration-identifiers": {
+ "configuration-id": ${pm.configuration-data.port-mirror-configuration-topology.configuration-identifiers.configuration-id},
+ "configuration-name": ${pm.configuration-data.port-mirror-configuration-topology.configuration-identifiers.configuration-name},
+ "configuration-type": ${pm.configuration-data.port-mirror-configuration-topology.configuration-identifiers.configuration-type},
+ "configuration-sub-type": ${pm.configuration-data.port-mirror-configuration-topology.configuration-identifiers.configuration-sub-type},
+ "parent-service-instance-id": ${pm.configuration-data.port-mirror-configuration-topology.configuration-identifiers.parent-service-instance-id}
+ },
+ "onap-model-information": {
+ "model-invariant-uuid": ${pm.configuration-data.port-mirror-configuration-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${pm.configuration-data.port-mirror-configuration-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${pm.configuration-data.port-mirror-configuration-topology.onap-model-information.model-uuid},
+ "model-version" ${pm.configuration-data.port-mirror-configuration-topology.onap-model-information.model-version},
+ "model-name": ${pm.configuration-data.port-mirror-configuration-topology.onap-model-information.model-name}
+ },
+ "port-mirror-configuration-assignments": {
+ "vnics-group-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.vnics-group-id},
+ "owning-entity": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.owning-entity},
+ "tenant-context": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.tenant-context},
+ "tenant": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.tenant},
+ "tenant-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.tenant-id},
+ "cloud-region-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.cloud-region-id},
+ "cloud-owner": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.cloud-owner},
+ "dest-network-fqdn": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-network-fqdn},
+ "source-network-fqdn": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-network-fqdn},
+ "source-capacity": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-capacity},
+ "source-vnf-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnf-id},
+ "dest-vnf-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-vnf-id},
+ "dest-pnf-name": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-pnf-name},
+ "dest-p-interface": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-p-interface},
+ "dest-pnf-port-policy-name": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-pnf-port-policy-name},
+ "probe-type": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.probe-type},
+ "route-allotted-resource-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.route-allotted-resource-id},
+ "source-vnfc-instance-group-id": {
+ "service-instance-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnfc-instance-group-id.service-instance-id},
+ "nfc-function": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnfc-instance-group-id.nfc-function},
+ "instance-group-role": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnfc-instance-group-id.instance-group-role},
+ "configuration-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnfc-instance-group-id.configuration-id}
+ },
+ "dest-vnfc-instance-group-id": {
+ "service-instance-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-vnfc-instance-group-id.service-instance-id},
+ "nfc-function": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-vnfc-instance-group-id.nfc-function},
+ "instance-group-role": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.dest-vnfc-instance-group-id.instance-group-role},
+ "configuration-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-vnfc-instance-group-id.configuration-id}
+ },
+ "source-to-dest-maps": {
+ "source-to-dest-map": [
+ ${repeat:pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map_length:
+ {
+ "source-port-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].source-port-id},
+ "source-port-name": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].source-port-name},
+ "dest-port-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-port-id},
+ "dest-port-name": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-port-name},
+ "link-name": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].link-name},
+ "source-vserver-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].source-vserver-id},
+ "dest-vserver-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-vserver-id},
+ "dest-ip-addresses": {
+ "ip-addresses": {
+ "ipv4-address": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-ip-addresses.ip-addresses.ipv4-address},
+ "ipv6-address": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-ip-addresses.ip-addresses.ipv6-address},
+ "vipv4-address": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-ip-addresses.ip-addresses.vipv4-address},
+ "vipv6-address": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.source-to-dest-maps.source-to-dest-map[${1}].dest-ip-addresses.ip-addresses.vipv6-address}
+ }
+ }
+ },
+ }
+ ]
+ },
+ "port-mirror-configuration-instance-id": ${pm.configuration-data.port-mirror-configuration-topology.port-mirror-configuration-assignments.port-mirror-configuration-instance-id}
+ }
+ },
+ "configuration-oper-status": {
+ "order-status": ${pm.configuration-data.configuration-oper-status.order-status},
+ "last-rpc-action": ${pm.configuration-data.configuration-oper-status.last-rpc-action},
+ "last-action": ${pm.configuration-data.configuration-oper-status.last-action},
+ "last-svc-request-id": ${pm.configuration-data.configuration-oper-status.last-svc-request-id},
+ "last-order-status": ${pm.configuration-data.configuration-oper-status.last-order-status},
+ "create-timestamp": ${pm.configuration-data.configuration-oper-status.create-timestamp},
+ "modify-timestamp": ${pm.configuration-data.configuration-oper-status.modify-timestamp}
+ }
+ }
+ }
+}
+
diff --git a/ms/gra/gra-docker/src/main/templates/security-zone-allotted-resource.json b/ms/gra/gra-docker/src/main/templates/security-zone-allotted-resource.json
new file mode 100644
index 0000000..afbd0bb
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/security-zone-allotted-resource.json
@@ -0,0 +1,78 @@
+{
+ "security-zone-allotted-resource": {
+ "allotted-resource-id": ${sz-ar.allotted-resource-id},
+ "allotted-resource-data": {
+ "security-zone-topology": {
+ "allotted-resource-identifiers": {
+ "consuming-service-instance-id": ${sz-ar.allotted-resource-data.security-zone-topology.allotted-resource-identifiers.consuming-service-instance-id},
+ "allotted-resource-name": ${sz-ar.allotted-resource-data.security-zone-topology.allotted-resource-identifiers.allotted-resource-name},
+ "allotted-resource-id": ${sz-ar.allotted-resource-data.security-zone-topology.allotted-resource-identifiers.allotted-resource-id},
+ "parent-service-instance-id": ${sz-ar.allotted-resource-data.security-zone-topology.allotted-resource-identifiers.parent-service-instance-id},
+ "allotted-resource-type": ${sz-ar.allotted-resource-data.security-zone-topology.allotted-resource-identifiers.allotted-resource-type}
+ },
+ "onap-model-information": {
+ "model-invariant-uuid": ${sz-ar.allotted-resource-data.security-zone-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${sz-ar.allotted-resource-data.security-zone-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${sz-ar.allotted-resource-data.security-zone-topology.onap-model-information.model-uuid},
+ "model-version": ${sz-ar.allotted-resource-data.security-zone-topology.onap-model-information.model-version}
+ },
+ "security-zone-assignments": {
+ "trusted-network-role": ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.trusted-network-role},
+ "security-zone-name-trusted": ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.security-zone-name-trusted},
+ "security-zone-name-untrusted": ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.security-zone-name-untrusted},
+ "untrusted-network-role": ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.untrusted-network-role},
+ "security-zone-service-instance-id" : ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.security-zone-service-instance-id},
+ "security-zone-vnf-id" : ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.security-zone-vnf-id},
+ "vlan-tag": ${sz-ar.allotted-resource-data.security-zone-topology.security-zone-assignments.vlan-tag}
+ },
+ "security-zone-parameters": {
+ }
+
+ },
+ "allotted-resource-operation-information": {
+ "allotted-resource-information": {
+ "allotted-resource-id": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.allotted-resource-id},
+ "allotted-resource-type": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.allotted-resource-type},
+ "parent-service-instance-id": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.parent-service-instance-id},
+ "onap-model-information": {
+ "model-invariant-uuid": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-uuid},
+ "model-version": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.onap-model-information.model-version}
+ }
+ },
+ "sdnc-request-header": {
+ "svc-request-id": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.svc-request-id},
+ "svc-action": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.svc-action}
+ },
+ "request-information": {
+ "request-id": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.request-id},
+ "source": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.source},
+ "order-version": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.order-version},
+ "order-number": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.order-number},
+ "notification-url": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.notification-url},
+ "request-action": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.request-information.request-action}
+ },
+ "security-zone-request-input": {
+ "vlan-tag": ${sz-ar.allotted-resource-data.allotted-resource-operation-information.security-zone-request-input.vlan-tag},
+ "trusted-network-role" : ${sz-ar.allotted-resource-data.allotted-resource-operation-information.security-zone-request-input.trusted-network-role},
+ "untrusted-network-role" : ${sz-ar.allotted-resource-data.allotted-resource-operation-information.security-zone-request-input.untrusted-network-role}
+ }
+ },
+ "allotted-resource-oper-status": {
+ "last-action": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.last-action},
+ "modify-timestamp": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.modify-timestamp},
+ "last-order-status": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.last-order-status},
+ "create-timestamp": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.create-timestamp},
+ "order-status": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.order-status},
+ "last-rpc-action": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.last-rpc-action},
+ "last-svc-request-id": ${sz-ar.allotted-resource-data.allotted-resource-oper-status.last-svc-request-id}
+ }
+ },
+ "allotted-resource-status" : {
+ "action": ${sz-ar.allotted-resource-status.action},
+ "rpc-name": ${sz-ar.allotted-resource-status.rpc-name},
+ "rpc-action": ${sz-ar.allotted-resource-status.rpc-action}
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/vf-module-assign.json b/ms/gra/gra-docker/src/main/templates/vf-module-assign.json
new file mode 100644
index 0000000..ed2e4f0
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/vf-module-assign.json
@@ -0,0 +1,279 @@
+{
+ "vf-module": {
+ "vf-module-id": ${vf-module-topology-operation-input.vf-module-information.vf-module-id},
+ "vf-module-data": {
+ "sdnc-request-header": {
+ "svc-request-id": ${vf-module-data.sdnc-request-header.svc-request-id},
+ "svc-action": ${vf-module-data.sdnc-request-header.svc-action},
+ "svc-notification-url": ${vf-module-data.sdnc-request-header.svc-notification-url}
+ },
+ "request-information": {
+ "request-id": ${vf-module-data.request-information.request-id},
+ "request-action": ${vf-module-data.request-information.request-action},
+ "source": ${vf-module-data.request-information.source},
+ "notification-url": ${vf-module-data.request-information.notification-url},
+ "order-number": ${vf-module-data.request-information.order-number},
+ "order-version": ${vf-module-data.request-information.order-version}
+ },
+ "service-information": {
+ "service-id": ${vf-module-data.service-information.service-id},
+ "subscription-service-type": ${vf-module-data.service-information.subscription-service-type},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vf-module-data.service-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vf-module-data.service-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vf-module-data.service-information.onap-model-information.model-uuid},
+ "model-version": ${vf-module-data.service-information.onap-model-information.model-version},
+ "model-name": ${vf-module-data.service-information.onap-model-information.model-name}
+ },
+ "service-instance-id": ${vf-module-data.service-information.service-instance-id},
+ "global-customer-id": ${vf-module-data.service-information.global-customer-id},
+ "subscriber-name": ${vf-module-data.service-information.subscriber-name}
+ },
+ "vnf-information": {
+ "vnf-id": ${vf-module-data.vnf-information.vnf-id},
+ "vnf-type": ${vf-module-data.vnf-information.vnf-type},
+ "vnf-name": ${vf-module-data.vnf-information.vnf-name},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vf-module-data.vnf-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vf-module-data.vnf-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vf-module-data.vnf-information.onap-model-information.model-uuid},
+ "model-version": ${vf-module-data.vnf-information.onap-model-information.model-version},
+ "model-name": ${vf-module-data.vnf-information.onap-model-information.model-name}
+ }
+ },
+ "vf-module-information": {
+ "vf-module-id": ${vf-module-data.vf-module-information.vf-module-id},
+ "vf-module-type": ${vf-module-data.vf-module-information.vf-module-type},
+ "from-preload": ${vf-module-data.vf-module-information.from-preload},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vf-module-data.vf-module-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vf-module-data.vf-module-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vf-module-data.vf-module-information.onap-model-information.model-uuid},
+ "model-version": ${vf-module-data.vf-module-information.onap-model-information.model-version},
+ "model-name": ${vf-module-data.vf-module-information.onap-model-information.model-name}
+ }
+ },
+ "vf-module-request-input": {
+ "request-version": ${vf-module-data.vf-module-request-input.request-version},
+ "vf-module-name": ${vf-module-data.vf-module-request-input.vf-module-name},
+ "tenant": ${vf-module-data.vf-module-request-input.tenant},
+ "aic-cloud-region": ${vf-module-data.vf-module-request-input.aic-cloud-region},
+ "aic-clli": ${vf-module-data.vf-module-request-input.aic-clli},
+ "vf-module-input-parameters": {
+ "param": [
+${repeat:vf-module-data.vf-module-request-input.vf-module-input-parameters.param_length:
+ {
+ "name": ${vf-module-data.vf-module-request-input.vf-module-input-parameters.param[${1}].name},
+ "value": ${vf-module-data.vf-module-request-input.vf-module-input-parameters.param[${1}].value}
+ },
+}
+ ]
+ }
+ },
+ "vf-module-topology": {
+ "vf-module-topology-identifier": {
+ "vf-module-id": ${vf-module-data.vf-module-topology.vf-module-topology-identifier.vf-module-id},
+ "vf-module-name": ${vf-module-data.vf-module-topology.vf-module-topology-identifier.vf-module-name},
+ "vf-module-type": ${vf-module-data.vf-module-topology.vf-module-topology-identifier.vf-module-type}
+ },
+ "tenant": ${vf-module-data.vf-module-topology.tenant},
+ "aic-cloud-region": ${vf-module-data.vf-module-topology.aic-cloud-region},
+ "cloud-owner": ${vf-module-data.vf-module-topology.cloud-owner},
+ "aic-clli": ${vf-module-data.vf-module-topology.aic-clli},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vf-module-data.vf-module-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vf-module-data.vf-module-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vf-module-data.vf-module-topology.onap-model-information.model-uuid},
+ "model-version": ${vf-module-data.vf-module-topology.onap-model-information.model-version},
+ "model-name": ${vf-module-data.vf-module-topology.onap-model-information.model-name}
+ },
+ "vf-module-assignments": {
+ "vf-module-status": ${vf-module-data.vf-module-topology.vf-module-assignments.vf-module-status},
+ "vms": {
+ "vm": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm_length:
+ {
+ "vm-type": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-type},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].onap-model-information.model-customization-uuid},
+ "model-uuid": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].onap-model-information.model-uuid},
+ "model-version": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].onap-model-information.model-version},
+ "model-name": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].onap-model-information.model-name}
+ },
+ "nfc-naming-code": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].nfc-naming-code},
+ "vm-type-tag": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-type-tag},
+ "vm-count": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-count},
+ "vm-names": {
+ "vm-name": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vm-name_length:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vm-name[${2}]},
+}
+ ],
+ "vnfc-names": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names_length:
+ {
+ "vnfc-name": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-name},
+ "vnfc-networks": {
+ "vnfc-network-data": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data_length:
+ {
+ "vnfc-network-role": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-network-role},
+ "vnfc-type": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-type},
+ "connection-point": {
+ "connection-point-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.connection-point-id},
+ "port-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.port-id},
+ "vlan-data": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.vlan-data_length:
+ {
+ "vlan-uuid": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.vlan-data[${4}].vlan-uuid},
+ "vlan-tag-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.vlan-data[${4}].vlan-tag-id},
+ "vlan-tag-description": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.vlan-data[${4}].vlan-tag-description},
+ "vlan-role": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].connection-point.vlan-data[${4}].vlan-role}
+ },
+}
+ ]
+ },
+ "vnfc-subnet": {
+ "vnfc-subnet-role": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-subnet-role},
+ "vnfc-ip-assignments": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments_length:
+ {
+ "vnfc-address-family": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-ip-assignments},
+ "vnfc-subnet-dhcp": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-dhcp},
+ "vnfc-subnet-ip-count": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-ip-count},
+ "vnfc-subnet-ip": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-ip_length:
+ {
+ "vnfc-ip-address": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-ip[${5}].vnfc-ip-address},
+ "vnfc-client-key": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-ip[${5}].vnfc-client-key},
+ "ip-type": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-names.vnfc-names[${2}].vnfc-networks.vnfc-network-data[${3}].vnfc-subnet.vnfc-ip-assignments[${4}].vnfc-subnet-ip[${5}].ip-type}
+ }
+}
+ ]
+ }
+}
+ ]
+ }
+ },
+}
+ ]
+ }
+ },
+}
+ ]
+ },
+ "vm-networks": {
+ "vm-network": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network_length:
+ {
+ "network-role": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-role},
+ "network-role-tag": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-role-tag},
+ "network-information-items": {
+ "network-information-item": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item_length:
+ {
+ "ip-version": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item[${3}].ip-version},
+ "use-dhcp": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item[${3}].use-dhcp},
+ "ip-count": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item[${3}].ip-count},
+ "network-ips": {
+ "network-ip": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item[${3}].network-ips.network-ip_length:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].network-information-items.network-information-item[${3}].network-ips.network-ip[${4}]},
+}
+ ]
+ }
+ },
+}
+ ]
+ },
+ "mac-addresses": {
+ "mac-address": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].mac-addresses.mac-address_length:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].mac-addresses.mac-address[${3}]},
+}
+ ]
+ },
+ "floating-ips": {
+ "floating-ip-v4": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].floating-ips.floating-ip-v4_length:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].floating-ips.floating-ip-v4[${3}]},
+}
+ ],
+ "floating-ip-v6": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].floating-ips.floating-ip-v6_length:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].floating-ips.floating-ip-v6[${3}]},
+}
+ ]
+ },
+ "interface-route-prefixes": {
+ "interface-route-prefix": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].interface-route-prefixes.interface-route-prefix:
+ ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].interface-route-prefixes.interface-route-prefix[${3}]},
+}
+ ]
+ },
+ "is-trunked": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].is-trunked},
+ "segmentation-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].segmentation-id},
+ "related-networks": {
+ "related-network": [
+${repeat:vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network_length:
+ {
+ "network-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].network-id},
+ "network-role": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].network-role},
+ "vlan-tags": {
+ "vlan-interface": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].vlan-tags.vlan-interface},
+ "upper-tag-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].vlan-tags.upper-tag-id},
+ "lower-tag-id": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].vlan-tags.lower-tag-id},
+ "is-private": ${vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[${1}].vm-networks.vm-network[${2}].related-networks.related-network[${3}].vlan-tags.is-private}
+ }
+ },
+}
+ ]
+ }
+ },
+}
+ ]
+ }
+ },
+}
+ ]
+ }
+ },
+ "vf-module-parameters": {
+ "param": [
+${repeat:vf-module-data.vf-module-topology.vf-module-parameters.param_length:
+ {
+ "name": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].name},
+ "value": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].value},
+ "resource-resolution-data": {
+ "resource-key": [
+${repeat:vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].resource-resolution-data.resource-key_length:
+ {
+ "name": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].resource-resolution-data.resource-key[${2}].name},
+ "value": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].resource-resolution-data.resource-key[${2}].value}
+ },
+}
+ ],
+ "status": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].resource-resolution-data.status},
+ "capability-name": ${vf-module-data.vf-module-topology.vf-module-parameters.param[${1}].resource-resolution-data.capability-name}
+ },
+ },
+}
+ ]
+ },
+ "sdnc-generated-cloud-resources": ${vf-module-data.vf-module-topology.sdnc-generated-cloud-resources}
+ },
+ "vf-module-level-oper-status": {
+ "order-status": ${vf-module-data.vf-module-level-oper-status.order-status},
+ "last-rpc-action": ${vf-module-data.vf-module-level-oper-status.last-rpc-action},
+ "last-action": ${vf-module-data.vf-module-level-oper-status.last-action},
+ "last-svc-request-id": ${vf-module-data.vf-module-level-oper-status.last-svc-request-id},
+ "last-order-status": ${vf-module-data.vf-module-level-oper-status.last-order-status},
+ "create-timestamp": ${vf-module-data.vf-module-level-oper-status.create-timestamp},
+ "modify-timestamp": ${vf-module-data.vf-module-level-oper-status.modify-timestamp}
+ }
+ }
+ }
+}
+
diff --git a/ms/gra/gra-docker/src/main/templates/vnf-data-assign.json b/ms/gra/gra-docker/src/main/templates/vnf-data-assign.json
new file mode 100644
index 0000000..a58c811
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/vnf-data-assign.json
@@ -0,0 +1,249 @@
+{
+ "vnf": {
+ "vnf-id": ${vnf-topology-operation-input.vnf-information.vnf-id},
+ "vnf-data": {
+ "sdnc-request-header": {
+ "svc-request-id": ${vnf-data.sdnc-request-header.svc-request-id},
+ "svc-action": ${vnf-data.sdnc-request-header.svc-action},
+ "svc-notification-url": ${vnf-data.sdnc-request-header.svc-notification-url}
+ },
+ "request-information": {
+ "request-id": ${vnf-data.request-information.request-id},
+ "request-action": ${vnf-data.request-information.request-action},
+ "source": ${vnf-data.request-information.source},
+ "notification-url": ${vnf-data.request-information.notification-url},
+ "order-number": ${vnf-data.request-information.order-number},
+ "order-version": ${vnf-data.request-information.order-version}
+ },
+ "service-information": {
+ "service-id": ${vnf-data.service-information.service-id},
+ "subscription-service-type": ${vnf-data.service-information.subscription-service-type},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vnf-data.service-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vnf-data.service-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vnf-data.service-information.onap-model-information.model-uuid},
+ "model-version": ${vnf-data.service-information.onap-model-information.model-version},
+ "model-name": ${vnf-data.service-information.onap-model-information.model-name}
+ },
+ "service-instance-id": ${vnf-data.service-information.service-instance-id},
+ "global-customer-id": ${vnf-data.service-information.global-customer-id},
+ "subscriber-name": ${vnf-data.service-information.subscriber-name}
+ },
+ "vnf-information": {
+ "vnf-id": ${vnf-data.vnf-information.vnf-id},
+ "vnf-type": ${vnf-data.vnf-information.vnf-type},
+ "vnf-name": ${vnf-data.vnf-information.vnf-name},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vnf-data.vnf-information.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vnf-data.vnf-information.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vnf-data.vnf-information.onap-model-information.model-uuid},
+ "model-version": ${vnf-data.vnf-information.onap-model-information.model-version},
+ "model-name": ${vnf-data.vnf-information.onap-model-information.model-name}
+ }
+ },
+ "vnf-request-input": {
+ "request-version": ${vnf-data.vnf-request-input.request-version},
+ "vnf-name": ${vnf-data.vnf-request-input.vnf-name},
+ "tenant": ${vnf-data.vnf-request-input.tenant},
+ "aic-cloud-region": ${vnf-data.vnf-request-input.aic-cloud-region},
+ "cloud-owner": ${vnf-data.vnf-request-input.cloud-owner},
+ "aic-clli": ${vnf-data.vnf-request-input.aic-clli},
+ "vnf-networks": {
+ "vnf-network": [
+${repeat:vnf-data.vnf-request-input.vnf-networks.vnf-network_length:
+ {
+ "network-role": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].network-role},
+ "network-name": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].network-name},
+ "neutron-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].neutron-id},
+ "network-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].network-id},
+ "contrail-network-fqdn": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].contrail-network-fqdn},
+ "subnets-data": {
+ "subnet-data": [
+${repeat:vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data_length:
+ {
+ "sdnc-subnet-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].sdnc-subnet-id},
+ "subnet-role": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-role},
+ "subnet-name": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-name},
+ "ip-version": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].ip-version},
+ "subnet-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-id},
+ "dhcp-enabled": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].dhcp-enabled},
+ "network-start-address": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].network-start-address},
+ "gateway-address": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].gateway-address},
+ "cidr-mask": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].cidr-mask}
+ },
+}
+ ]
+ },
+ "is-trunked": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].is-trunked},
+ "segmentation-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].segmentation-id},
+ "related-networks": {
+ "related-network": [
+${repeat:vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network_length:
+ {
+ "network-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].network-id},
+ "network-role": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].network-role},
+ "vlan-tags": {
+ "vlan-interface": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.vlan-interface},
+ "upper-tag-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.upper-tag-id},
+ "lower-tag-id": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.lower-tag-id},
+ "is-private": ${vnf-data.vnf-request-input.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.is-private}
+ }
+ },
+}
+ ]
+ },
+ },
+}
+ ]
+ },
+ "vnf-network-instance-group-ids": [
+${repeat:vnf-data.vnf-request-input.vnf-network-instance-group-ids_length:
+ {
+ "vnf-network-instance-group-id": ${vnf-data.vnf-request-input.vnf-network-instance-group-ids[${1}].vnf-network-instance-group-id}
+ },
+}
+ ],
+ "vnf-input-parameters": {
+ "param": [
+${repeat:vnf-data.vnf-request-input.vnf-input-parameters.param_length:
+ {
+ "name": ${vnf-data.vnf-request-input.vnf-input-parameters.param[${1}].name},
+ "value": ${vnf-data.vnf-request-input.vnf-input-parameters.param[${1}].value}
+ },
+}
+ ]
+ }
+ },
+ "vnf-topology": {
+ "vnf-topology-identifier-structure": {
+ "vnf-id": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-id},
+ "vnf-type": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-type},
+ "nf-type": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-type},
+ "nf-role": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-role},
+ "nf-function": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-function},
+ "nf-code": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.nf-code},
+ "vnf-name": ${vnf-data.vnf-topology.vnf-topology-identifier-structure.vnf-name},
+ },
+ "tenant": ${vnf-data.vnf-topology.tenant},
+ "aic-cloud-region": ${vnf-data.vnf-topology.aic-cloud-region},
+ "cloud-owner": ${vnf-data.vnf-topology.cloud-owner},
+ "aic-clli": ${vnf-data.vnf-topology.aic-clli},
+ "onap-model-information": {
+ "model-invariant-uuid": ${vnf-data.vnf-topology.onap-model-information.model-invariant-uuid},
+ "model-customization-uuid": ${vnf-data.vnf-topology.onap-model-information.model-customization-uuid},
+ "model-uuid": ${vnf-data.vnf-topology.onap-model-information.model-uuid},
+ "model-version": ${vnf-data.vnf-topology.onap-model-information.model-version},
+ "model-name": ${vnf-data.vnf-topology.onap-model-information.model-name},
+ },
+ "vnf-resource-assignments": {
+ "vnf-status": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-status},
+ "availability-zones": {
+ "availability-zone": [
+${repeat:vnf-data.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone_length:
+ ${vnf-data.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[${1}]},
+}
+ ]
+ },
+ "vnf-networks": {
+ "vnf-network": [
+${repeat:vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network_length:
+ {
+ "network-role": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].network-role},
+ "network-name": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].network-name},
+ "neutron-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].neutron-id},
+ "network-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].network-id},
+ "contrail-network-fqdn": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].contrail-network-fqdn},
+ "subnets-data": {
+ "subnet-data": [
+${repeat:vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data_length:
+ {
+ "sdnc-subnet-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].sdnc-subnet-id},
+ "subnet-role": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-role},
+ "subnet-name": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-name},
+ "ip-version": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].ip-version},
+ "subnet-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].subnet-id},
+ "dhcp-enabled": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].dhcp-enabled},
+ "network-start-address": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].network-start-address},
+ "gateway-address": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].gateway-address},
+ "cidr-mask": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].subnets-data.subnet-data[${2}].cidr-mask}
+ },
+}
+ ]
+ },
+ "is-trunked": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].is-trunked},
+ "segmentation-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].segmentation-id},
+ "related-networks": {
+ "related-network": [
+${repeat:vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network_length:
+ {
+ "network-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].network-id},
+ "network-role": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].network-role},
+ "vlan-tags": {
+ "vlan-interface": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.vlan-interface},
+ "upper-tag-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.upper-tag-id},
+ "lower-tag-id": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.lower-tag-id},
+ "is-private": ${vnf-data.vnf-topology.vnf-resource-assignments.vnf-networks.vnf-network[${1}].related-networks.related-network[${2}].vlan-tags.is-private}
+ }
+ },
+}
+ ]
+ }
+ },
+}
+ ]
+ }
+ },
+ "vnf-parameters-data": {
+ "param": [
+${repeat:vnf-data.vnf-topology.vnf-parameters-data.param_length:
+ {
+ "name": ${vnf-data.vnf-topology.vnf-parameters-data.param[${1}].name},
+ "value": ${vnf-data.vnf-topology.vnf-parameters-data.param[${1}].value}
+ },
+}
+ ]
+ },
+ "sdnc-generated-cloud-resources": ${vnf-data.vnf-topology.sdnc-generated-cloud-resources},
+ },
+ "vnf-network-collections": {
+ "vnf-network-collection": [
+${repeat:vnf-data.vnf-network-collections.vnf-network-collection_length:
+ {
+ "network-instance-group-function": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].network-instance-group-function},
+ "network-instance-group-id": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].network-instance-group-id},
+ "network-collection-service-instance-id": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].network-collection-service-instance-id},
+ "network-collection-customization-uuid": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].network-collection-customization-uuid},
+ "networks": {
+ "network": [
+${repeat:vnf-data.vnf-network-collections.vnf-network-collection[${1}].networks.network_length:
+ {
+ "network-id": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].networks.network[${2}].network-id},
+ "neutron-network-id": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].networks.network[${2}].neutron-network-id}
+ },
+}
+ ]
+ },
+ "vnf-floating-ip": {
+ "ip-addresses": {
+ "ipv4-address": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].vnf-floating-ip.ip-addresses.ipv4-address},
+ "ipv6-address": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].vnf-floating-ip.ip-addresses.ipv6-address},
+ "vipv4-address": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].vnf-floating-ip.ip-addresses.vipv4-address},
+ "vipv6-address": ${vnf-data.vnf-network-collections.vnf-network-collection[${1}].vnf-floating-ip.ip-addresses.vipv6-address}
+ }
+ }
+ },
+}
+ ]
+ },
+ "vnf-level-oper-status": {
+ "order-status": ${vnf-data.vnf-level-oper-status.order-status},
+ "last-rpc-action": ${vnf-data.vnf-level-oper-status.last-rpc-action},
+ "last-action": ${vnf-data.vnf-level-oper-status.last-action},
+ "last-svc-request-id": ${vnf-data.vnf-level-oper-status.last-svc-request-id},
+ "last-order-status": ${vnf-data.vnf-level-oper-status.last-order-status},
+ "create-timestamp": ${vnf-data.vnf-level-oper-status.create-timestamp},
+ "modify-timestamp": ${vnf-data.vnf-level-oper-status.modify-timestamp}
+ }
+ }
+ }
+}
diff --git a/ms/gra/gra-docker/src/main/templates/vnf-level-oper-status.json b/ms/gra/gra-docker/src/main/templates/vnf-level-oper-status.json
new file mode 100644
index 0000000..6f80b46
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/vnf-level-oper-status.json
@@ -0,0 +1,12 @@
+{
+ "oper-status": {
+ "order-status": ${vnf-level-oper-status.order-status},
+ "last-rpc-action": ${vnf-level-oper-status.last-rpc-action},
+ "last-action": ${vnf-level-oper-status.last-action},
+ "last-svc-request-id": ${vnf-level-oper-status.last-svc-request-id},
+ "last-order-status": ${vnf-level-oper-status.last-order-status},
+ "create-timestamp": ${vnf-level-oper-status.create-timestamp},
+ "modify-timestamp": ${vnf-level-oper-status.modify-timestamp}
+ }
+}
+
diff --git a/ms/gra/gra-docker/src/main/templates/vnf-network.json b/ms/gra/gra-docker/src/main/templates/vnf-network.json
new file mode 100644
index 0000000..8fbf755
--- /dev/null
+++ b/ms/gra/gra-docker/src/main/templates/vnf-network.json
@@ -0,0 +1,45 @@
+{
+ "vnf-network": {
+ "network-role": ${vnf-network-data.network-role},
+ "network-name": ${vnf-network-data.network-name},
+ "neutron-id": ${vnf-network-data.neutron-id},
+ "network-id": ${vnf-network-data.network-id},
+ "contrail-network-fqdn": ${vnf-network-data.contrail-network-fqdn},
+ "subnets-data": {
+ "subnet-data": [
+${repeat:vnf-network-data.subnets-data.subnet-data_length:
+ {
+ "sdnc-subnet-id": ${vnf-network-data.subnets-data.subnet-data[${1}].sdnc-subnet-id},
+ "subnet-role": ${vnf-network-data.subnets-data.subnet-data[${1}].subnet-role},
+ "subnet-name": ${vnf-network-data.subnets-data.subnet-data[${1}].subnet-name},
+ "ip-version": ${vnf-network-data.subnets-data.subnet-data[${1}].ip-version},
+ "subnet-id": ${vnf-network-data.subnets-data.subnet-data[${1}].subnet-id},
+ "dhcp-enabled": ${vnf-network-data.subnets-data.subnet-data[${1}].dhcp-enabled},
+ "network-start-address": ${vnf-network-data.subnets-data.subnet-data[${1}].network-start-address},
+ "gateway-address": ${vnf-network-data.subnets-data.subnet-data[${1}].gateway-address},
+ "cidr-mask": ${vnf-network-data.subnets-data.subnet-data[${1}].cidr-mask}
+ },
+}
+ ]
+ },
+ "is-trunked": ${vnf-network-data.is-trunked},
+ "segmentation-id": ${vnf-network-data.segmentation-id},
+ "related-networks": {
+ "related-network": [
+${repeat:vnf-network-data.related-networks.related-network_length:
+ {
+ "network-id": ${vnf-network-data.related-networks.related-network[${1}].network-id},
+ "network-role": ${vnf-network-data.related-networks.related-network[${1}].network-role},
+ "vlan-tags": {
+ "vlan-interface": ${vnf-network-data.related-networks.related-network[${1}].vlan-tags.vlan-interface},
+ "upper-tag-id": ${vnf-network-data.related-networks.related-network[${1}].vlan-tags.upper-tag-id},
+ "lower-tag-id": ${vnf-network-data.related-networks.related-network[${1}].vlan-tags.lower-tag-id},
+ "is-private": ${vnf-network-data.related-networks.related-network[${1}].vlan-tags.is-private}
+ }
+ },
+}
+ ]
+ }
+ }
+}
+