Preparation
Install ONAP
Make sure that you've installed ONAP R2 release. For installation instructions, please refer ONAP Installation in Vanilla OpenStack.
Make sure that all components pass health check when you do the following:
- ssh to the robot vm, run '/opt/ete.sh health'
You will need to update your /etc/hosts so that you can access the ONAP Portal in your browser. You may also want to add IP addresses of so, sdnc, aai, etc so that you can easily ssh to those VMs. Below is a sample just for your reference:
10.12.5.159 aai-inst2 10.12.5.162 portal 10.12.5.162 portal.api.simpledemo.onap.org 10.12.5.173 dns-server 10.12.5.178 aai 10.12.5.178 aai.api.simpledemo.onap.org 10.12.5.178 aai1 10.12.5.183 dcaecdap00 10.12.5.184 multi-service 10.12.5.189 sdc 10.12.5.189 sdc.api.simpledemo.onap.org 10.12.5.194 robot 10.12.5.2 so 10.12.5.204 dmaap 10.12.5.207 appc 10.12.5.208 dcae-bootstrap 10.12.5.211 dcaeorcl00 10.12.5.214 sdnc 10.12.5.219 dcaecdap02 10.12.5.224 dcaecnsl02 10.12.5.225 dcaecnsl00 10.12.5.227 dcaedokp00 10.12.5.229 dcaecnsl01 10.12.5.238 dcaepgvm00 10.12.5.239 dcaedoks00 10.12.5.241 dcaecdap03 10.12.5.247 dcaecdap04 10.12.5.248 dcaecdap05 10.12.5.249 dcaecdap06 10.12.5.38 policy 10.12.5.38 policy.api.simpledemo.onap.org 10.12.5.48 vid 10.12.5.48 vid.api.simpledemo.onap.org 10.12.5.51 clamp 10.12.5.62 dcaecdap01
You can try to login to the portal at http://portal.api.simpledemo.onap.org:8989/ONAPPORTAL/login.htm using as one of the following roles. The password is demo123456! for all the users.
User | Role |
---|---|
demo | Operator |
cs0008 | DESIGNER |
jm0007 | TESTER |
op0001 | OPS |
gv0001 | GOVERNOR |
Create images for vBRG, vBNG, vGMUX, and vG
Follow the following instructions to build an image for each VNF and save them in your Openstack: ONAP vCPE VPP-based VNF Installation and Usage Information
To avoid unexpected mistakes, you may want to give each image a meaningful name and also be careful when mixing upper case and lower case characters. After this you should see images like below. The casablanca image names have 'casa' in them like "vbng-casa-base-ubuntu-16-04" .
VNF Onboarding
Create license model in SDC
Log in to SDC portal as designer. Create a license that will be used by the subsequent steps. The detailed steps are here: Creating a Licensing Model
Prepare HEAT templates
vCPE uses five VNFs: Infra, vBRG, vBNG, vGMUX, and vG, which are described using five HEAT templates. For each HEAT template, you will need to fill the env file with appropriate parameters. The HEAT templates can be obtained from gerrit: [demo.git] / heat / vCPE /
Note that for each VNF, the env file name and yaml file name are associated together by file MANIFEST.json. If for any reason you change the env anf yaml file names, please remember to change MANIFEST.json accordingly.
For each VNF, compress the three env, yaml, and json files into a zip package, which will be used for onboarding. If you want to get the zip packages I used for reference, download them here: infra-sb02.zip, vbng-sb02.zip, vbrg-sb02.zip, vgmux-sb02.zip, vgw-sb02.zip.
VNF onboarding in SDC
Onboard the VNFs in SDC one by one. The process is the same for all VNFs. The suggested names for the VNFs are given below (all lower case). The suffix can be a date plus a sequence letter, e.g., 1222a.
- vcpevsp_infra_[suffix]
- vcpevsp_vbrg_[suffix]
- vcpevsp_vbng_[suffix]
- vcpevsp_vgmux_[suffix]
- vcpevsp_vgw_[suffix]
Below is an example for onboarding infra.
Sign into SDC as cs0008, choose ONBOARD and then click 'CREATE NEW VSP'.
Now enter the name of the vsp. For naming, I'd suggest all lower case with format vcpevsp_[vnf]_[suffix], see example below.
After clicking 'Create', click 'missing' and then select to use the license model created previously.
Click 'Overview' on the left size panel, then drag and drop infra.zip to the webpage to upload the HEAT.
Now click 'Proceed To Validation' to validate the HEAT template.
You may see a lot of warnings. In most cases, you can ignore those warnings.
Click 'Check in', and then 'Submit'
Go to SDC home, and then click 'Import VSP'.
In the search box, type in suffix of the vsp you onboarded a moment ago to easily locate the vsp. Then click 'Import VSP'.
Click 'Create' without changing anything.
Now a VF based on the HEAT is created successfully. Click 'Submit for Testing'.
Sign out and sign back in as tester: jm0007, select the VF you created a moment ago, test and accept it.
Note: in Casablanca you can simply Certify the VSP and continue on with Service Design and Creation
Service Design and Creation
The entire vCPE use case is divided into five services as show below. Each service is described below with suggested names.
- vcpesvc_infra_[suffix]: includes two generic neutron networks named cpe_signal and cpe_public (all names are lower case) and a VNF infra.
- vcpesvc_vbng_[suffix]: includes two generic neutron networks named brg_bng and bng_mux and a VNF vBNG.
- vcpesvc_vgmux_[suffix]: includes a generic neutron network named mux_gw and a VNF vGMUX
- vcpesvc_vbrg_[suffix]: includes a VNF vBRG.
- vcpesvc_rescust_[suffix]: includes a VNF vGW and two allotted resources that will be explained shortly.
Service design and distribution for infra, vBNG, vGMUX, and vBRG
The process for creating these four services are the same, however make sure to use the vnfs & networks as described above. Below are the steps to create vcpesvc_infra_1222a. Follow the same process to create the other three services, changing networks and VNFs according to above. Log back in as Designer username: cs0008
In SDC, click 'Add Service' to create a new service
Enter name, category, description, product code, and click 'Create'.
Click 'Composition' from left side panel. Drag and drop VF vcpevsp_infra_1222a to the design.
Drag and drop a generic neutron network to the design, click to select the icon in the design, then click the pen in the upper right corner (next to the trash bin icon), a window will pop up as shown below. Now change the instance name to 'cpe_signal'.
Click and select the network icon in the design again. From the right side panel, click the
icon and then select 'network_role'. In the pop up window, enter 'cpe_signal' as shown below.Add another generic neutron network the sam way. This time change the instance name and network role to 'cpe_public'. Now the service design is completed. Click 'Submit for Testing'.
Sign out and sign back in as tester 'jm0007'. Test and approve this service.
Sign out and sign back in as governer 'gv0001'. Approve this service.
Sign out and sign back in as operator 'op0001'. Distribute this service. Click monitor to see the results. After some time (could take 30 seconds or more), you should see the service being distributed to AAI, SO, SDNC.
Service design and distribution for customer service
First of all, make sure that all the previous four services have been created and distributed successfully.
The customer service includes a VNF vGW and two allotted resources: tunnelxconn and brg. We will need to create the two allotted resources first and then use them together with vG (which was already onboarded and imported as a VF previously) to compose the service.
Check Sub Category Tag in SDC
You may need to add an Allotted Resource Category Tag to SDC for the BRG.
Log as the "demo" account and go to SDC.
Select "Category Management"
Select "Allotted Resource"
You should have "Tunnel XConn" and "BRG".
If you do not and are missing the "BRG" Sub Category Like the screen shot below. Click on New and add the "BRG" Subcategory.
Create allotted resource tunnelxconn
This allotted resource depends on the previous created service vcpesvc_vgmux_1222a. The dependency is described by filling the allotted resource with the UUID, invariant UUID, and service name of vcpesvc_vgmux_1222a. So for preparation, we first download the csar file of vcpesvc_vgmux_1222a from SDC.
Sign into SDC as designer cs0008, click create a new VF, select 'Tunnel XConnect' as category and enter other information as needed. See below for an example. I'm using vcpear_tunnelxconn_1222a as the name of this allotted resource.
Click create. And then click 'Composition', drag an 'AllottedResource' from the left side panel to the design.
Click on VF name link in between HOME link and Composition on the top menu. From here click on Properties Assignment on the left hand menu. Now open the csar file for vcpesvc_vgmux_1222a, under 'Definitions' open file 'service-VcpesvcVgmux1222a-template.yml'. (Note that the actual file name depends on what you name the service at the first place.) Now put the yml file and the SDC window side by side. Now copy&paste the invariantUUID, UUID, and node name to the corresponding fields in SDC. See the two screenshots below. Save and then submit for testing.
Create allotted resource brg
This allotted resource depends on the previous created service vcpesvc_vbrg_1222a. The dependency is described by filling the allotted resource with the UUID, invariant UUID, and service name of vcpesvc_vbrg_1222a. So for preparation, we first download the csar file of vcpesvc_vbrg_1222a from SDC.
We name this allotted resource vcpear_brg_1222a. The process to create it is the same as that for the above vcpear_vgmux_1222a, Use catagory: Tunnel Xconnect again. The only differences are the UUID, invariant UUID, and service name parameters being used. Therefore, I will not repeat the steps and screenshots here.
Sign out and sign back in as tester 'jm0007'. Test and approve both Allotted Resources.
Create customer service
Log back in as Designer username: cs0008
We name the service vcpesvc_rescust_1222a and follow the steps below to create it.
Sign into SDC as designer, add a new service and fill in parameters as below. Then click 'Create'.
Click 'Composition' from the left side panel. Drag and drop the following three components to the design.
- vcpevsp_vgw_1222a
- vcpear_tunnelxconn_1222a
- vcpear_brg_1222a
Point your mouse to the arrow next to 'Composition' and then click 'Properties Assignment' (see below).
First select tunnelxconn from the right side panel, then fill nf_role and nf_type with value 'TunnelXConn'.
Next select brg from the right side panel, then fill nf_role and nf_type with value 'BRG'.
Click 'Submit for Testing'.
Now sign out and sign back in as tester 'jm0007' to complete test of vcpesvc_rescust_1222a.
Sign out and sign back in as governer 'gv0001'. Approve this service.
Distribute the customer service to AAI, SO, and SDNC
Before distributing the customer service, make sure that the other four services for infra, vBNG, vGMUX, and vBRG all have been successfully distributed.
ssh to the sdnc VM and execute 'docker stop sdnc_ueblistener_container'. This is a temporary operation and should not be needed in the future after a little problem in the sdnc ueb listener is fixed.
Now distribute the customer service, sign out and sign back in as operator 'op0001'. Distribute this service and check the status to ensure the distribution succeeds. It may take a tens of seconds to complete. The results should look like below.
Initial Configuration of ONAP to Deploy vCPE
ssh to the robot VM, execute:
- /opt/demo.sh init_robot
- /opt/demo.sh init
Add an availability zone to AAI by executing the following:
curl -k -X PUT \ https://aai:8443/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/nova \ -H 'accept: application/json' \ -u 'AAI:AAI'\ -H 'X-TransactionId:9999' \ -H 'X-FromAppId:postman' \ -H 'content-type: application/json' \ -d '{ "availability-zone-name": "nova", "hypervisor-type": "KVM", "operational-status": "Active" }'
Add operation user ID to AAI. Note that you will need to replace the tenant ID 087050388b204c73a3e418dd2c1fe30b and tenant name with the values you use.
curl -k -X PUT \ 'https://aai1:8443/aai/v11/business/customers/customer/SDN-ETHERNET-INTERNET' \ -H 'accept: application/json' \ -H 'cache-control: no-cache' \ -H 'content-type: application/json' \ -H 'X-TransactionId:9999' \ -H 'X-FromAppId:postman' \ -u 'AAI:AAI'\ -d '{ "global-customer-id": "SDN-ETHERNET-INTERNET", "subscriber-name": "SDN-ETHERNET-INTERNET", "subscriber-type": "INFRA", "service-subscriptions": { "service-subscription": [ { "service-type": "vCPE", "relationship-list": { "relationship": [ { "related-to": "tenant", "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/087050388b204c73a3e418dd2c1fe30b", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", "relationship-value": "RegionOne" }, { "relationship-key": "tenant.tenant-id", "relationship-value": "087050388b204c73a3e418dd2c1fe30b" } ], "related-to-property": [ { "property-key": "tenant.tenant-name", "property-value": "Integration-SB-01" } ] } ] } } ] } }'
ssh to the SO VM and do the following (Note: this is not needed anymore in R3)
- Enter the mso docker: docker exec -it testlab_mso_1 bash
- Edit /etc/mso/config.d/mso.bpmn.urn.properties, find the following line
mso.workflow.default.aai.v11.tenant.uri=/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/DFW/tenants/tenant
and change it to the following
mso.workflow.default.aai.v11.tenant.uri=/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant - Exit from the docker
ssh to the SDNC VM in HEAT or the host node for pod sdnc-sdnc-0 in OOM, and do the following: (this step is to make sure SDNC can reach out BRG later for configuration)
- Add a route in HEAT: ip route add 10.3.0.0/24 via 10.0.101.10 dev eth0
- Add a route in OOM: ip route add 10.3.0.0/24 via 10.0.101.10 dev ens3
- Enter the sdnc controller docker
- HEAT: "docker exec -it sdnc_controller_container bash"
OOM: "kubectl -n onap exec -it dev-sdnc-sdnc-0 bash"
In the container, run the following to create IP address pool: /opt/sdnc/bin/addIpAddresses.sh VGW 10.5.0 22 250
- Can also remotely run addIpAddresses.sh: kubectl -n onap exec -it dev-sdnc-sdnc-0 -- /opt/sdnc/bin/addIpAddresses.sh VGW 10.5.0 22 250
- For healthcheck-k8s.py also install curl inside the sdnc container
Deploy Infrastructure
Download and modify automation code
A python program had been developed to automate the deployment. You can download ONAP integration repo by git clone https://gerrit.onap.org/r/integration, and the script is under integration/test/vcpe.
Now go to the vcpe directory and modify vcpecommon.py. You will need to enter your cloud and network information into the following two dictionaries.
cloud = { '--os-auth-url': 'http://10.12.25.2:5000', '--os-username': 'kxi', '--os-user-domain-id': 'default', '--os-project-domain-id': 'default', '--os-tenant-id': '087050388b204c73a3e418dd2c1fe30b', '--os-region-name': 'RegionOne', '--os-password': 'yourpassword', '--os-project-domain-name': 'Integration-SB-01', '--os-identity-api-version': '3' } common_preload_config = { 'oam_onap_net': 'oam_onap_oTA1', 'oam_onap_subnet': 'oam_onap_oTA1', 'public_net': 'external', 'public_net_id': '971040b2-7059-49dc-b220-4fab50cb2ad4' }
Preparation
Create subdirectory csar/ and __var/, and download service csar from SDC and put under csar directory
install python-pip and other python modules (see the comment section)
Run automation program to deploy services
Sign into SDC as designer and download five csar files for infra, vbng, vgmux, vbrg, and rescust. Copy all the csar files to directory csar.
Now you can simply run 'vcpe.py' to see the instructions.
To get ready for service deployment. First run 'vcpe.py init'. This will modify SO and SDNC database to add service-related information.
Once it is done. Run 'vcpe.py infra'. This will deploy the following services. It may take 7-10 minutes to complete depending on the cloud infrastructure.
- Infra
- vBNG
- vGMUX
- vBRG
If the deployment succeeds, you will see a summary of the deployment from the program.
Validate deployed VNFs
By now you will be able to see 7 VMs in Horizon. However, this does not mean all the VNFs are functioning properly. In many cases we found that a VNF may need to be restarted multiple times to make it function properly. We perform validation as follows:
- Run healthcheck.py. It checks for three things:
- vGMUX honeycomb server is running
- vBRG honeycomb server is running
- vBRG has obtained an IP address and its MAC/IP data has been captured by SDNC
If this healthcheck passes, then skip the following and start to deploy customer service. Otherwise do the following and redo healthcheck.
- If vGMUX check does not pass, restart vGMUX, make sure it can be connected using ssh.
- If vBRG check does not pass, restart vBRG, make sure it can be connected using ssh.
(Please note that the four VPP-based VNFs (vBRG, vBNG, vGMUX, and vGW) were developed by the ONAP community in a tight schedule. We are aware that vBRG may not be stable and sometimes need to be restarted multiple times to get it work. The team is investigating the problem and hope to make it better in the near future. Your patience is appreciated.)
Deploy Customer Service and Test Data Plane
After passing healthcheck, we can deploy customer service by running 'vcpe.py customer'. This will take around 3 minutes depending on the cloud infrastructure. Once finished, the program will print the next few steps to test data plane connection from the vBRG to the web server. If you check Horizon you should be able to see a stack for vgw created a moment ago.
Tips for trouble shooting:
- There could be situations that the vGW does not fully functioning and cannot be connected to using ssh. Try to restart the VM to solve this problem.
- isc-dhcp-server is supposed to be installed on vGW after it is instantiated. But it could happen that the server is not properly installed. If this happens, you can simply ssh to the vGW VM and manually install it with 'apt install isc-dhcp-server'.
Closed Loop Test
Step 1. Copy libevel.so to vGMUX VM, and follow steps given by Eric on the comment section of vCPE - Test Status.
Step 2. Push closed loop policy from pap
root@oom-rancher:~# kubectl -n onap get pod |grep pap dev-policy-pap-b74f6775-bvng5 2/2 Running 0 6d root@oom-rancher:~# kubectl exec -it dev-policy-pap-b74f6775-bvng5 -c pap -n onap -- bash -c "export PRELOAD_POLICIES=true; /tmp/policy-install/config/push-policies.sh"
Step 3. Run heatbridge.
stack_name: from Openstack Horizon→Orchestration→Stack page
service: vCPEvGMUX
oam_ip_address: vGMUX VM oam network ip, you can get from Horizon
service_instance_id: Take from __var/svc_instance_uuid file. Copy the value for gmux without letter 'V'.
#demo.sh <namespace> heatbridge <stack_name> <service_instance_id> <service> <oam-ip-address> root@oom-rancher:~/integration/test/vcpe# ~/oom/kubernetes/robot/demo-k8s.sh onap heatbridge vcpe_vfmodule_e2744f48729e4072b20b_201811262136 d8914ef3-3fdb-4401-adfe-823ee75dc604 vCPEvGMUX 10.0.101.21
Step 4. Make sure APPC VNF_DB_MAPPING table has Restart with Generic_Restart as DG_NAME and 3.0.0 as DG_VERSION
MariaDB [sdnctl]> select * from TRANSACTIONS; Empty set (0.00 sec) MariaDB [sdnctl]> SELECT * FROM VNF_DG_MAPPING; +-------------------+-------------------+-------------+----------+-------------+-----------------+------------+-----------+ | VNF_DG_MAPPING_ID | ACTION | API_VERSION | VNF_TYPE | VNF_VERSION | DG_NAME | DG_VERSION | DG_MODULE | +-------------------+-------------------+-------------+----------+-------------+-----------------+------------+-----------+ | 580 | Restart | 2.00 | | | Generic_Restart | 3.0.0 | APPC | | 583 | Configure | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 586 | ConfigModify | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 589 | Rebuild | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 592 | Restart | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 595 | HealthCheck | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 598 | StartApplication | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 601 | StopApplication | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 604 | Migrate | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 607 | Snapshot | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 610 | ConfigRestore | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 613 | ConfigBackup | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 616 | Evacuate | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 619 | Stop | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 622 | Start | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 625 | ConfigScaleOut | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | | 628 | DistributeTraffic | NULL | NULL | NULL | DGOrchestrator | 4.0.0 | APPC | +-------------------+-------------------+-------------+----------+-------------+-----------------+------------+-----------+ 17 rows in set (0.00 sec)
Step 5. Update RegionOne with identity-url. First query RegionOne from Postman and add idenity-url, then Post updated content back to AAI
Get RegionOne data
Add only identity-url with Openstack keystone endpoint, and Post back to AAI
Step 6. run vcpe.py loop. You don't need to stop/start policy (which is suggested by vcpe script and will be changed)
Typical Errors and Solutions
SDNC DG error
If you run vcpe.py customer and see an error similar to the following:
"requestId": "c772d346-ae34-4e88-b419-0af510c4526a",
"requestScope": "service",
"requestStatus": {
"finishTime": "Wed, 22 Aug 2018 18:46:09 GMT",
"percentProgress": 100,
"requestState": "FAILED",
"statusMessage": "Received error from SDN-C: Not Found"
It is most likely due to an error in vnf-topology-assign DG. This happends in R2 and should have been fixed in R3 (refer - SDNC-351Getting issue details... STATUS ). The solution:
Enter the SDNC docker
1. make a copy of GENERIC-RESOURCE-API_vnf-topology-operation-assign.xml in the sdnc_controller_container under /opt/sdnc/svclogic/graphs/generic-resource-api
2. edit GENERIC-RESOURCE-API_vnf-topology-operation-assign.xml to replace "<break> </break>" with "<break/>" or "<break></break>"
a. optionally you can change the version to something like 1.3.3-SNAPSHOT-FIX and update graph.versions to match but that is not needed if the xml failed to load .
3. run /opt/sdnc/svclogic/bin/install.sh
this will install the edited DG and make it active as long as the version in the xml and the version in graph.versions match
4. re-run /opt/sdnc/svclogic/bin/showActiveGraphs.sh and you should see the active DG
DHCP server doesn't work
- ssh to the dhcp server
- systemctl status kea-dhcp4-server.service
- If the service is not installed, do 'apt install kea-dhcp4-server.service'
- If the service is installed, most likely /usr/local/lib/kea-sdnc-notify.so is missing. Download this file from the following link and put it in /usr/local/lib. Link: kea-sdnc-notify.so
- systemctl restart kea-dhcp4-server.service
vBRG not responding to configuration from SDNC
Symptom: Run healthcheck.py and the test fails to connect to connect to vBRG. (Note you need to edit the healthcheck.py to use the correct IP address for vBRG. The default is 10.3.0.2).
This is caused by vpp not working properly inside vBRG. There is no deterministic fix for this problem until we have a stable vBRG image. Temporarily, you may try to either restart the vBRG VM or ssh to vBRG and 'systemctl restart vpp' and then retry healthcheck.py. Note that 'systemctl restart vpp' may work better that rebooting the VM but there is no guarantee.
Inside vBRG you can also check the status with 'vppctl show int'. If vpp works properly, you should be able to see that both tap-0 and tap-1 in 'up' state. An example is below.
Unable to change subnet name
When running "vcpe.py infra" command, if you see error message about subnet can't be found. It may be because your python-openstackclient is not the latest version and don't support "openstack subnet set --name" command option. Upgrade the module with "pip install --upgrade python-openstackclient".