From 46adbecef03c30463357ccc77cd0ea03a1424178 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 4 Aug 2017 17:49:01 -0500 Subject: [PATCH] Changing scripts & properties for A&AI connection Modifying and adding new folders, properties files, and scripts to set up APP-C to be able to connect to A&AI. Also, providing general certificates to connect to a standard A&AI instance. Change-Id: I511dabf7638b947abe800147545e3032919d5144 Signed-off-by: root Issue: [APPC-122] --- installation/appc/pom.xml | 66 ++++-- .../src/main/properties/aaiclient.properties | 254 +++++++++++++++++++++ .../appc.properties | 0 installation/src/main/stores/keystore.client.p12 | Bin 0 -> 5652 bytes .../installer/src/assembly/assemble_zip.xml | 1 + 5 files changed, 304 insertions(+), 17 deletions(-) create mode 100644 installation/src/main/properties/aaiclient.properties rename installation/src/main/{appc-properties => properties}/appc.properties (100%) create mode 100644 installation/src/main/stores/keystore.client.p12 diff --git a/installation/appc/pom.xml b/installation/appc/pom.xml index 3982e23..8addab1 100644 --- a/installation/appc/pom.xml +++ b/installation/appc/pom.xml @@ -75,7 +75,7 @@ - + + copy-keystores @@ -102,18 +103,19 @@ validate - ${basedir}/target/docker-stage/opt/openecomp/sdnc/data/stores + ${basedir}/target/docker-stage/opt/openecomp/appc/data/stores ../src/main/stores *.jks + *.p12 false - --> + copy-properties @@ -125,7 +127,7 @@ ${basedir}/target/docker-stage/opt/openecomp/appc/data/properties - ../src/main/appc-properties + ../src/main/properties *.properties @@ -314,16 +316,46 @@ - + + + + copy-keystores + + copy-resources + + validate + + ${basedir}/target/docker-stage/opt/openecomp/appc/data/stores + + + ../src/main/stores + + *.jks + *.p12 + + false + + + + copy-properties @@ -335,7 +367,7 @@ ${basedir}/target/docker-stage/opt/openecomp/appc/data/properties - ../src/main/appc-properties + ../src/main/properties *.properties @@ -378,7 +410,7 @@ exec - /usr/bin/find + find ${basedir}/target/docker-stage/opt/openecomp/appc -name diff --git a/installation/src/main/properties/aaiclient.properties b/installation/src/main/properties/aaiclient.properties new file mode 100644 index 0000000..d3059f8 --- /dev/null +++ b/installation/src/main/properties/aaiclient.properties @@ -0,0 +1,254 @@ +### +# ============LICENSE_START======================================================= +# APPC +# ================================================================================ +# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +### + +# +# Configuration file for A&AI Client +# + +# +# Certificate keystore and truststore +# +org.openecomp.sdnc.sli.aai.ssl.trust=/opt/openecomp/appc/data/stores/truststore.openecomp.client.jks +org.openecomp.sdnc.sli.aai.ssl.trust.psswd=adminadmin +org.openecomp.sdnc.sli.aai.host.certificate.ignore=true + +org.openecomp.sdnc.sli.aai.client.name=APPC +org.openecomp.sdnc.sli.aai.client.psswd=APPC + +org.openecomp.sdnc.sli.aai.application=openECOMP +#connection.timeout=1000 +#read.timeout=2000 + +## TODO - Check if the values below are needed ## +#When the p12 key expires, the new one will probably work with the old jks so no need to generate a new jks. +#org.openecomp.sdnc.sli.aai.ssl.key=/opt/openecomp/appc/data/stores/keystore.client.p12 +#org.openecomp.sdnc.sli.aai.ssl.key.psswd=aaiDomain2 + + +# +# Configuration file for A&AI Client +# +org.openecomp.sdnc.sli.aai.uri=https://aai.api.simpledemo.openecomp.org:8443 + + +# query +org.openecomp.sdnc.sli.aai.path.query=/aai/v8/search/sdn-zone-query +org.openecomp.sdnc.sli.aai.query.nodes=/aai/v8/search/nodes-query?search-node-type={node-type}&filter={entity-identifier}:EQUALS:{entity-name} +org.openecomp.sdnc.sli.aai.query.generic=/aai/v8/search/generic-query?key={identifier}:{value}&start-node-type={start-node-type}&include=complex&depth=3 + +# named query +org.openecomp.sdnc.sli.aai.query.named=/aai/search/named-query + +#update +org.openecomp.sdnc.sli.aai.update=/aai/v8/actions/update + +# vce +org.openecomp.sdnc.sli.aai.path.vce =/aai/v8/network/vces/vce/ +org.openecomp.sdnc.sli.aai.path.vces=/aai/v8/network/vces/ + +# vpe +org.openecomp.sdnc.sli.aai.path.vpe =/aai/v8/network/vpes/vpe/ +org.openecomp.sdnc.sli.aai.path.vpes=/aai/v8/network/vpes/ + +# customer +org.openecomp.sdnc.sli.aai.path.customer=/aai/v8/business/customers/customer/{customer-id} + +# service subscription +org.openecomp.sdnc.sli.aai.path.service.subscription=/aai/v8/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type} + +# service instance +org.openecomp.sdnc.sli.aai.path.svcinst=/aai/v8/business/customers/customer/{customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances +org.openecomp.sdnc.sli.aai.path.svcinst.query=/aai/v8/search/generic-query?key=service-instance.service-instance-id:{svc-instance-id}&start-node-type=service-instance&include=service-instance +org.openecomp.sdnc.sli.aai.path.service.instance=/aai/v8/business/customers/customer/{global-customer-id}/service-subscriptions/service-subscription/{service-type}/service-instances/service-instance/{service-instance-id} + +# complex +org.openecomp.sdnc.sli.aai.path.complexes=/aai/v8/cloud-infrastructure/complexes +org.openecomp.sdnc.sli.aai.path.complex=/aai/v8/cloud-infrastructure/complexes/complex/{physical-location-id} + +# tenant +org.openecomp.sdnc.sli.aai.path.tenant=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id} +org.openecomp.sdnc.sli.aai.path.tenant.query=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/tenants/tenant?tenant-name={tenant-name} + +# vservers +org.openecomp.sdnc.sli.aai.path.vservers=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id}/vservers/ +org.openecomp.sdnc.sli.aai.path.vserver=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id}/vservers/vserver/{vserver-id} + +# vpls-pe +org.openecomp.sdnc.sli.aai.path.vpls.pes=/aai/v8/network/vpls-pes/ +org.openecomp.sdnc.sli.aai.path.vpls.pe =/aai/v8/network/vpls-pes/vpls-pe/ + +# ctag-pool +org.openecomp.sdnc.sli.aai.path.ctag.pools=/aai/v8/cloud-infrastructure/complexes/complex/{physical-location-id}/ctag-pools +org.openecomp.sdnc.sli.aai.path.ctag.pool=/aai/v8/cloud-infrastructure/complexes/complex/{physical-location-id}/ctag-pools/ctag-pool/{target-pe}/{availability-zone-name} + +# +#-------------- 1510 ---------------------- +# + +# pservers +org.openecomp.sdnc.sli.aai.path.pservers=/aai/v8/cloud-infrastructure/pservers +org.openecomp.sdnc.sli.aai.path.pserver=/aai/v8/cloud-infrastructure/pservers/pserver/{hostname} + +# generic-vnf +org.openecomp.sdnc.sli.aai.path.generic.vnfs=/aai/v8/network/generic-vnfs +org.openecomp.sdnc.sli.aai.path.generic.vnf=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id} + +# dvs-switch +org.openecomp.sdnc.sli.aai.path.dvsswitches=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/dvs-switches +org.openecomp.sdnc.sli.aai.path.dvsswitch=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/dvs-switches/dvs-switch/{switch-name} + +# L3 Networks +org.openecomp.sdnc.sli.aai.path.l3networks=/aai/v8/network/l3-networks +org.openecomp.sdnc.sli.aai.path.l3network=/aai/v8/network/l3-networks/l3-network/{network-id} +org.openecomp.sdnc.sli.aai.path.l3network.query.name=/aai/v8/network/l3-networks/l3-network?network-name={network-name} + +# P-Interfaces +org.openecomp.sdnc.sli.aai.path.pserver.pinterfaces=/aai/v8/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces +org.openecomp.sdnc.sli.aai.path.pserver.pinterface=/aai/v8/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces/p-interface/{interface-name} + +# Physical Link +org.openecomp.sdnc.sli.aai.path.physical.links=/aai/v8/network/physical-links +org.openecomp.sdnc.sli.aai.path.physical.link=/aai/v8/network/physical-links/physical-link/{link-name} + +# VPN Bindings +org.openecomp.sdnc.sli.aai.path.vpn.bindings=/aai/v8/network/vpn-bindings/ +org.openecomp.sdnc.sli.aai.path.vpn.binding=/aai/v8/network/vpn-bindings/vpn-binding/{vpn-id} + +# VNF IMAGES +org.openecomp.sdnc.sli.aai.path.vnf.images=/aai/v8/service-design-and-creation/vnf-images +org.openecomp.sdnc.sli.aai.path.vnf.image=/aai/v8/service-design-and-creation/vnf-images/vnf-image/{att-uuid} +org.openecomp.sdnc.sli.aai.path.vnf.image.query=/aai/v8/service-design-and-creation/vnf-images/vnf-image?application={application_model}&application-vendor={application_vendor} + +# UBB Notify +org.openecomp.sdnc.sli.aai.path.notify=/aai/v8/actions/notify +org.openecomp.sdnc.sli.aai.notify.selflink.fqdn=https://aai.api.simpledemo.openecomp.org:8443/restconf/config/L3SDN-API:services/layer3-service-list/{service-instance-id} +org.openecomp.sdnc.sli.aai.notify.selflink.avpn=https://aai.api.simpledemo.openecomp.org:8543/restconf/config/L3AVPN-EVC-API:services/service-list/{service-instance-id}/service-data/avpn-logicalchannel-information + +# Service +org.openecomp.sdnc.sli.aai.path.service=/aai/v8/service-design-and-creation/services/service/{service-id} +org.openecomp.sdnc.sli.aai.path.services=/aai/v8/service-design-and-creation/services + + +# +#-------------- 1604 ---------------------- +# + +# VNFC +org.openecomp.sdnc.sli.aai.path.vnfc=/aai/v8/network/vnfcs/vnfc/{vnfc-name} + +# class-of-service +org.openecomp.sdnc.sli.aai.path.class.of.service=/aai/v8/network/site-pair-sets/site-pair-set/{site-pair-set-id}/routing-instances/routing-instance/{routing-instance-id}/site-pairs/site-pair/{site-pair-id}/classes-of-service/class-of-service/{cos-id} + +# site-pair +org.openecomp.sdnc.sli.aai.path.site.pair=/aai/v8/network/site-pair-sets/site-pair-set/{site-pair-set-id}/routing-instances/routing-instance/{routing-instance-id}/site-pairs/site-pair/{site-pair-id} + +# routing-instance +org.openecomp.sdnc.sli.aai.path.routing.instance=/aai/v8/network/site-pair-sets/site-pair-set/{site-pair-set-id}/routing-instances/routing-instance/{routing-instance-id} + +# site-pair-set +org.openecomp.sdnc.sli.aai.path.site.pair.set=/aai/v8/network/site-pair-sets/site-pair-set/{site-pair-set-id} + +# license key resource +org.openecomp.sdnc.sli.aai.path.license.acquire=/aai/v8/actions/assignment/license-management/assignment-group-uuid/{assignment-group-uuid} +org.openecomp.sdnc.sli.aai.path.license=/aai/v8/license-management/license-key-resources/license-key-resource/{att-uuid} + +# logical-link +org.openecomp.sdnc.sli.aai.path.logical.link =/aai/v8/network/logical-links/logical-link/{link-name} + +# virtual-data-center +org.openecomp.sdnc.sli.aai.path.virtual.data.center=/aai/v8/cloud-infrastructure/virtual-data-centers/virtual-data-center/{vdc-id} + +# wan-connector +org.openecomp.sdnc.sli.aai.path.wan.connector=/aai/v8/business/connectors/connector/{resource-instance-id} + +# l-interface +org.openecomp.sdnc.sli.aai.path.lag.interface.l.interface=/aai/v8/cloud-infrastructure/pservers/pserver/{hostname}/lag-interfaces/lag-interface/{lag-interface.interface-name}/l-interfaces/l-interface/{interface-name} +org.openecomp.sdnc.sli.aai.path.p.interface.l.interface=/aai/v8/cloud-infrastructure/pservers/pserver/{hostname}/p-interfaces/p-interface/{p-interface.interface-name}/l-interfaces/l-interface/{interface-name} + +# l-interface pnf +org.openecomp.sdnc.sli.aai.path.lag.interface.l.interface.pnf=/aai/v8/network/pnfs/pnf/{pnf-name}/lag-interfaces/lag-interface/{lag-interface.interface-name}/l-interfaces/l-interface/{interface-name} +org.openecomp.sdnc.sli.aai.path.p.interface.l.interface.pnf=/aai/v8/network/pnfs/pnf/{pnf-name}/p-interfaces/p-interface/{p-interface.interface-name}/l-interfaces/l-interface/{interface-name} + +# subinterface +org.openecomp.sdnc.sli.aai.path.pnf.lag.interface.subinterface=/aai/v8/network/pnfs/pnf/{pnf-name}/lag-interfaces/lag-interface/{lag-interface.interface-name}/l-interfaces/l-interface/{interface-name} +org.openecomp.sdnc.sli.aai.path.pnf.p.interface.l.interface=/aai/v8/network/pnfs/pnf/{pnf-name}/p-interfaces/p-interface/{p-interface.interface-name}/l-interfaces/l-interface/{interface-name} + +# vlans +org.openecomp.sdnc.sli.aai.path.vlan=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id}/vservers/vserver/{vserver-id}/l-interfaces/l-interface/{interface-name}/vlans/vlan/{vlan-interface} +org.openecomp.sdnc.sli.aai.path.generic.vnf.vlan=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/vlans/vlan/{vlan-interface} + +# l3-interface-ipv4-address-list +org.openecomp.sdnc.sli.aai.path.l3.interface.ipv4.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/l3-interface-ipv4-address-list/{l3-interface-ipv4-address} +org.openecomp.sdnc.sli.aai.path.vlan.l3.interface.ipv4.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/vlans/vlan/{vlan-interface}/l3-interface-ipv4-address-list/{l3-interface-ipv4-address} + +# l3-interface-ipv6-address-list +org.openecomp.sdnc.sli.aai.path.l3.interface.ipv6.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/l3-interface-ipv6-address-list/{l3-interface-ipv6-address} +org.openecomp.sdnc.sli.aai.path.vlan.l3.interface.ipv6.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/vlans/vlan/{vlan-interface}/l3-interface-ipv6-address-list/{l3-interface-ipv6-address} + +# ipsec-configuration +org.openecomp.sdnc.sli.aai.path.ipsec.configuration=/aai/v8/network/ipsec-configurations/ipsec-configuration/{ipsec-configuration-id} + +# vig server +org.openecomp.sdnc.sli.aai.path.vig.server=/aai/v8/network/ipsec-configurations/ipsec-configuration/{ipsec-configuration-id}/vig-servers/vig-server/{vig-address-type} + +# l3-network +org.openecomp.sdnc.sli.aai.path.l3.network=/aai/v8/network/l3-networks/l3-network/{network-id} + +# subnet +org.openecomp.sdnc.sli.aai.path.subnet=/aai/v8/network/l3-networks/l3-network/{network-id}/subnets/subnet/{subnet-id} + +# multicast-configuration +org.openecomp.sdnc.sli.aai.path.multicast.configuration=/aai/v8/network/multicast-configurations/multicast-configuration/{multicast-configuration-id} + +# org.openecomp.sdnc.sli.aai.path.l.interface.ipv4.address.list +org.openecomp.sdnc.sli.aai.path.l3-interface.ipv4.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/l3-interface-ipv4-address-list/{l3-interface-ipv4-address} + +# org.openecomp.sdnc.sli.aai.path.l.interface.vlan.ipv4.address.list +org.openecomp.sdnc.sli.aai.path.l3-interface.vlan.ipv4.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/vlans/vlan/{vlan-interface}/l3-interface-ipv4-address-list/{l3-interface-ipv4-address} + +# org.openecomp.sdnc.sli.aai.path.l.interface.ipv6.address.list +org.openecomp.sdnc.sli.aai.path.l3-interface.ipv6.address.list=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name}/l3-interface-ipv6-address-list/{l3-interface-ipv6-address} + +# volume.group +org.openecomp.sdnc.sli.aai.path.volume.group=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id}/volume-groups/volume-group/{volume-group-id} + +#cloud region +org.openecomp.sdnc.sli.aai.path.cloud.region=/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/{cloud-owner}/{cloud-region-id} + +# vf-module +org.openecomp.sdnc.sli.aai.path.vf.module=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/vf-modules/vf-module/{vf-module-id} + +# l-interface through generic-vnf +org.openecomp.sdnc.sli.aai.path.generic.vnf.linterface=/aai/v8/network/generic-vnfs/generic-vnf/{vnf-id}/l-interfaces/l-interface/{interface-name} + +# network-policy +org.openecomp.sdnc.sli.aai.path.network.policy=/aai/v8/network/network-policies/network-policy/{network-policy-id} + +# pnf +org.openecomp.sdnc.sli.aai.path.pnf=/aai/v8/network/pnfs/pnf/{pnf-name} + +# +# Formatting +# +org.openecomp.sdnc.sli.aai.param.format=filter=%s:%s +org.openecomp.sdnc.sli.aai.param.vnf_type=vnf-type +org.openecomp.sdnc.sli.aai.param.physical.location.id=physical-location-id +org.openecomp.sdnc.sli.aai.param.service.type=service-type + diff --git a/installation/src/main/appc-properties/appc.properties b/installation/src/main/properties/appc.properties similarity index 100% rename from installation/src/main/appc-properties/appc.properties rename to installation/src/main/properties/appc.properties diff --git a/installation/src/main/stores/keystore.client.p12 b/installation/src/main/stores/keystore.client.p12 new file mode 100644 index 0000000000000000000000000000000000000000..5efffb3bc5b035f1b2aafe4d70dc25f4293c70f0 GIT binary patch literal 5652 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 iW_LTgETEF9cbK}4S**/*.xml **/graph.versions + unix -- 2.16.6