vFW Closed Loop step-by-step
- 1 Material for running vFW closed loop
- 2 Setup the Environment
- 3 Create a Vendor Software Product
- 4 Create a Service
- 5 Instantiate a service
- 6
- 7 Preload A&AI (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial_vIMS%3A+Create+AAI+cloud+account)
- 8 Create service instance and then VNF instance in VID (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial+vIMS%3A+VID+Instantiate+the+VNF)
- 9 Preload VID
- 10 Preload SDNC (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial_vIMS+%3A+SDNC+Updates)
- 11 Instantiate VF Module via VID (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial+vIMS%3A+VID+Instantiate+the+VNF)
- 12 Run heatbridge from Robot VM
- 13 Create Mount Point in APPC (https://lf-onap.atlassian.net/wiki/display/DW/Automatically+Creating+a+Netconf+Mount+in+APPC+from+SDNC)
- 14 Update the Operational Policy
- 15 Event monitoring
Material for running vFW closed loop
ONAP.postman_collection.json: REST operations against ONAP component's endpoints;
Powder lab ONAP.postman_environment.json: Environment file for Postman collection;
vFWSNK.zip: Package that contains the Heat template and environment file for the vFirewall and vSink VNF components;
vPKG.zip: Package that contains the Heat template and environment file for the vPacketGen VNF;
vFWSNK_SDNC_preload.json: JSON file to upload to SDNC that overrides values in the environment file for the vFirewall and vSink VNF components;
vPKG_SDNC_preload.json: JSON file to upload to SDNC that overrides values in the environment file for the vPacketGen VNF;
VNF preload.xml: description of the VNF preload for SDNC
Setup the Environment
Modify /etc/hosts (UNIX) or C:\Windows\System32\Drivers\etc\hosts (Windows) by adding the following FQDNs:
155.98.37.45 portal.api.simpledemo.onap.org
155.98.37.35 policy.api.simpledemo.onap.org
155.98.37.34 sdc.api.simpledemo.onap.org
155.98.37.36 vid.api.simpledemo.onap.org
155.98.37.46 aai.api.simpledemo.onap.org
Create a Vendor Software Product
Designer - cs0008/demo123456!
Onboard -> Add License Model
License key group
Entitlement group
Feature group
License agreement
Check in - Submit
Onboard -> Add Vendor Software Product (VSP)
Compile form and save
Click overview, then upload zip file
Check in - Submit
Home
Import VSP
Create
Submit for testing
Tester - jm0007/demo123456!
Home
Click on the VSP ready for testing
Start testing
Accept
Create a Service
Designer - cs0008/demo123456!
Home
Add service
Fill the form and click Create to create the service
Click on Composition
Select Application L4+
Drag the VSP and drop it into the canvas
Tester - jm0007/demo123456!
Home
Click on the service ready for testing
Start testing
Accept
Governor - gv0001/demo123456!
Home
Click on the service
Approve for distribution
Operator - op0001/demo123456!
Home
Click on the service
Distribute
Instantiate a service
Admin - demo/demo123456!
VID
Browse SDC model
Deploy service
Preload A&AI (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial_vIMS%3A+Create+AAI+cloud+account)
AAI Postman headers
Basic Authentication: AAI/AAI
Accept: application/json
Content-Type: application/json
X-FromAppId: AAI
X-TransactionId: get_aai_subscr
Add a new service to A&AI
Generate UUID https://www.uuidgenerator.net/ (use version 4), e.g.: e8cb8968-5411-478b-906a-f28747de72cd
PUT the new service in A&AI: {{aai_ip}}:8443/aai/v11/service-design-and-creation/services/service/e8cb8968-5411-478b-906a-f28747de72cd
vFW Service
{
"service-id": "e8cb8968-5411-478b-906a-f28747de72cd",
"service-description": "vFW"
}
Check: GET (https) {{aai_ip}}:8443/aai/v11/service-design-and-creation/services
Create a new cloud region
PUT (https) {{aai_ip}}:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/OpenStack/RegionOne
{
"cloud-owner": "OpenStack",
"cloud-region-id": "RegionOne",
"cloud-type": "openstack",
"owner-defined-type": "owner type",
"cloud-region-version": "v2.5",
"cloud-zone": "cloud zone",
"tenants": {
"tenant": [{
"tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
"tenant-name": "Integration"
}]
}
}
Check: GET (https) {{aai_ip}}:8443/aai/v11/cloud-infrastructure/cloud-regions
Create a new customer
PUT (https) {{aai_ip}}:8443/aai/v11/business/customers/customer/Demonstration
{
"global-customer-id": "Demonstration",
"subscriber-name": "Demonstration",
"subscriber-type": "INFRA",
"service-subscriptions": {
"service-subscription": [
{
"service-type": "vFW",
"relationship-list": {
"relationship": [{
"related-to": "tenant",
"relationship-data": [
{"relationship-key": "cloud-region.cloud-owner", "relationship-value": "OpenStack"},
{"relationship-key": "cloud-region.cloud-region-id", "relationship-value": "RegionOne"},
{"relationship-key": "tenant.tenant-id", "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"}
]
}]
}
}
]
}
}
Check: GET (https) {{aai_ip}}:8443/aai/v11/business/customers
Create service instance and then VNF instance in VID (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial+vIMS%3A+VID+Instantiate+the+VNF)
Preload VID
VID Postman headers
Basic Authentication: demo/Kp8bJ4SXszM0WX
Accept: application/json
Content-Type: application/json
USER_ID: demo
X-TransactionId: robot-ete-bd65600d-8669-4903-8a14-af88203add38
X-FromAppId: robot-ete
POST (http) {{vid_ip}}:{{vid_port}}/vid/maintenance/category_parameter/platform
{
"options": ["Test-Platform"]
}
POST (http) {{vid_ip}}:{{vid_port}}/vid/maintenance/category_parameter/project
{
"options": ["Test-Project"]
}
POST (http) {{vid_ip}}:{{vid_port}}/vid/maintenance/category_parameter/owningEntity
{
"options": ["Test-Entity"]
}
POST (http) {{vid_ip}}:{{vid_port}}/vid/maintenance/category_parameter/lineOfBusiness
{
"options": ["Test-Business"]
}
Preload SDNC (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial_vIMS+%3A+SDNC+Updates)
Create username and password: {{sdnc_ip}}:8843/signup
Login: {{sdnc_ip}}:8843/login
Preload topology information: {{sdnc_ip}}:8282/apidoc/explorer/index.html
Username/password: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
POST /VNF-API/operations/VNF-API/preload-vnf-topology-operation
Instantiate VF Module via VID (https://lf-onap.atlassian.net/wiki/display/DW/Tutorial+vIMS%3A+VID+Instantiate+the+VNF)
Run heatbridge from Robot VM
bash /opt/demo heatbridge <OPENSTACK_vFW_STACK_NAME> <Service_Instance_ID> <Service Type>
<OPENSTACK_vFW_STACK_NAME>: it's the base VF module name (and also the vFW VM name)
<Service_Instance_ID>: it's the service instance ID in the VID GUI
<Service Type>: vFW
Create Mount Point in APPC (https://lf-onap.atlassian.net/wiki/display/DW/Automatically+Creating+a+Netconf+Mount+in+APPC+from+SDNC)
PUT {{appc_ip}}:8282/restconf/config/network-topology:network-topology/topology/topology-netconf/node/${vpg_id}
Username/password: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
Header: Content-type: application/xml
${prop.vpg_hostname} in the XML body is the VNF ID in the VID GUI (vPacketGen VNF Instance information button). Example of XML body:
<node xmlns="urn:TBD:params:xml:ns:yang:network-topology">
<node-id>${prop.vpg_hostname}</node-id>
<host xmlns="urn:opendaylight:netconf-node-topology">${prop.vpg_ipaddress}</host>
<port xmlns="urn:opendaylight:netconf-node-topology">2831</port>
<username xmlns="urn:opendaylight:netconf-node-topology">admin</username>
<password xmlns="urn:opendaylight:netconf-node-topology">admin</password>
<tcp-only xmlns="urn:opendaylight:netconf-node-topology">false</tcp-only>
<!-- non-mandatory fields with default values, you can safely remove these if you do not wish to override any of these values-->
<reconnect-on-changed-schema xmlns="urn:opendaylight:netconf-node-topology">false</reconnect-on-changed-schema>
<connection-timeout-millis xmlns="urn:opendaylight:netconf-node-topology">20000</connection-timeout-millis>
<max-connection-attempts xmlns="urn:opendaylight:netconf-node-topology">0</max-connection-attempts>
<between-attempts-timeout-millis xmlns="urn:opendaylight:netconf-node-topology">2000</between-attempts-timeout-millis>
<sleep-factor xmlns="urn:opendaylight:netconf-node-topology">1.5</sleep-factor>
<!-- keepalive-delay set to 0 turns off keepalives-->
<keepalive-delay xmlns="urn:opendaylight:netconf-node-topology">120</keepalive-delay>
</node>
Check from APPC if the vPacketGen is mounted correctly
Connect to: {{appc_ip}}:8282/apidoc/explorer/index.html
Username/password: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
Mounted Resources/PacketGen-vnf-id/sample-plugin(date)
The get operation should return the running streams: GET yang-ext:mount/sample-plugin:sample-plugin/pg-streams
Logs in APPC VM:
/var/log/onap/appc/karaf.log
Logs in Policy VM:
/var/log/onap/policy/pdpd/network.log
/var/log/onap/policy/pdpd/error.log
kubectl exec -it dev-drools-0 -n onap -- bash -c "tail -f /var/log/onap/policy/pdpd/network.log"
Update the Operational Policy
The Operational Policy needs to know the invariant UUID of the vPacketGen.
Download the CSAR file of the vFW service from SDC
Get the vPacketGen invariant UUID from {CSAR_HOME}/Definitions/service-VfirewallTest1106-template.yml or as model-invariant-id in the Generic VNF in AAI
VfirewallTest1106 is the name of the service in the SDC catalog
Run the update-vfw-op-policy.sh script by providing:
IP of the Policy VM
vPacketGen invariant UUID
Path to the private key of the Policy VM
For OOM Beijing, policies must be loaded first (https://lf-onap.atlassian.net/wiki/display/DW/Policy+on+OOM):
Login to PAP
Copy push-policy.sh to a non read-only directory
cp /tmp/policy-install/config/push-policies.sh /tmp/policy-install
Change vFW policy resourceID in /tmp/policy-install/push-policies.sh to reflect the real vPacketGen model-invariant-id, e.g.:
sed -i "s/Eace933104d443b496b8.nodes.heat.vpg/02c953b7-e626-4e16-9874-6191572949a0/g" push-policies.sh
From Rancher VM, run: kubectl exec -it dev-pap-7ff989696d-s86wj -c pap -n onap -- bash -c "export PRELOAD_POLICIES=true; /tmp/policy-install/push-policies.sh"
Event monitoring
VES reporting: {{mr_ip}}:3904/events/unauthenticated.VES_MEASUREMENT_OUTPUT/mygroup/myid?timeout=5000
ONSET events to Policy: {{mr_ip}}:3904/events/unauthenticated.DCAE_CL_OUTPUT/mygroup/myid?timeout=5000
In OOM, the port number is 30227