aboutsummaryrefslogtreecommitdiffstats
path: root/docs/docs_vipsec.rst
blob: 4ec8c6f7f7280636c9241c7031632c8a0973799f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
5
# Copyright © 2021 Orange
# Modifications Copyright © 2021 Nordix Foundation
#
# 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.

apiVersion: v2
description: Chart for Postgres init job
name: postgres-init
version: 13.0.1


dependencies:
  - name: common
    version: ~13.x-0
    repository: 'file://../common'
  - name: repositoryGenerator
    version: ~13.x-0
    repository: 'file://../repositoryGenerator'
  - name: readinessCheck
    version: ~13.x-0
    repository: '@local'
  - name: serviceAccount
    version: ~13.x-0
    repository: '@local'
3 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2018 ONAP

.. _docs_vipsec_hpa:

vIPsec with HPA Tutorial: Setting Up and Configuration
--------------------------------------------------------

Description
~~~~~~~~~~~
This is a new use case in ONAP for IPsec which also provides VMs certain hardware features (such as SRIOV NIC, CPU pinning, pci passthrough.. etc.) in order to enhance their performance. Multiple cloud regions with flavors that have HPA features are registered with ONAP. We then create policies that specify the HPA requirements of each VM in the use case. When a service instance is created with OOF specified as the homing solution, OOF responds with the homing solution (cloud region) and flavor directives that meet the requirements specified in the policy.
The deploy steps look just alike the one for vFW with HPA use case. It is also using the same test plan `Here <https://wiki.onap.org/pages/viewpage.action?pageId=41421112>`_. In Dublin release, we just focus on test plan 1 and 2.

**Useful Links**

`HPA Enhancements Page <https://wiki.onap.org/pages/viewpage.action?pageId=34376310>`_

`Hardware Platform Enablement in ONAP <https://wiki.onap.org/display/DW/Hardware+Platform+Enablement+In+ONAP>`_



Setting Up and Installation
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Instructions for updating the manifest of ONAP docker images can be found here:  https://onap.readthedocs.io/en/casablanca/submodules/integration.git/docs/#deploying-an-updated-docker-manifest

Install OOM ONAP using the deploy script in the integration repo. Instructions for this can be found in this link https://wiki.onap.org/display/DW/OOM+Component. When the installation is complete (all the pods are either in running or completed state) Do the following;


1. Check that all the required components were deployed;

 ``oom-rancher# helm list``

2. Check the state of the pods;

   ``oom-rancher# kubectl get pods -n onap``

3. Run robot health check

   ``oom-rancher# cd oom/kubernetes/robot``

   ``oom-rancher# ./ete-k8s.sh onap health``

   Ensure all the required components pass the health tests
4. Modify the SO bpmn configmap to change the SO vnf adapter endpoint to v2

   ``oom-rancher#    kubectl -n onap edit configmap dev-so-so-bpmn-infra-app-configmap``

			``- vnf:``

			          ``endpoint: http://so-openstack-adapter.onap:8087/services/VnfAdapter``

			          ``rest:``

			            ``endpoint: http://so-openstack-adapter.onap:8087/services/rest/v1/vnfs``
			 
			``+ vnf:``

			          ``endpoint: http://so-openstack-adapter.onap:8087/services/VnfAdapter``

			          ``rest:``

			            ``endpoint: http://so-openstack-adapter.onap:8087/services/rest/v2/vnfs`` 

   Then delete the bpmn pod

   ``oom-rancher#  kubectl delete <pod-name> -n onap``

5. Run robot healthdist

   ``oom-rancher# ./ete-k8s.sh onap healthdist``
6. Run robot demo init, this initializes the default Demonstration customer and distributes the default models

  ``oom-rancher# ./demo-k8s.sh onap init``

7. Create HPA flavors in cloud regions to be registered with ONAP. All HPA flavor names must start with onap. During our tests, 3 cloud regions were registered and we created flavors in each cloud. The flavors match the flavors described in the test plan `here <https://wiki.onap.org/pages/viewpage.action?pageId=41421112>`_.

- **Cloud Region One**

    **Flavor11**
     ``#nova flavor-create onap.hpa.flavor11 111 8 20 2``

     ``#nova flavor-key onap.hpa.flavor11 set hw:mem_page_size=2048``

    **Flavor12**
     ``#nova flavor-create onap.hpa.flavor12 112 12 20 2``

     ``#nova flavor-key onap.hpa.flavor12 set hw:mem_page_size=2048``

     ``#openstack aggregate create --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:3 aggr121``

     ``#openstack flavor set onap.hpa.flavor12 --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:3``

    **Flavor13**
     ``#nova flavor-create onap.hpa.flavor13 113 12 20 2``

     ``#nova flavor-key onap.hpa.flavor13 set hw:mem_page_size=2048``

     ``#openstack aggregate create --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-private-1:1 aggr131``

     ``#openstack flavor set onap.hpa.flavor13 --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-private-1:1``

- **Cloud Region Two**

    **Flavor21**
     ``#nova flavor-create onap.hpa.flavor21 221 8 20 2``

     ``#nova flavor-key onap.hpa.flavor21 set hw:mem_page_size=2048``

     ``#nova flavor-key onap.hpa.flavor21 set hw:cpu_policy=dedicated``

     ``#nova flavor-key onap.hpa.flavor21 set hw:cpu_thread_policy=isolate``

    **Flavor22**
     ``#nova flavor-create onap.hpa.flavor22 222 12 20 2``

     ``#nova flavor-key onap.hpa.flavor22 set hw:mem_page_size=2048``

     ``#openstack aggregate create --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:2 aggr221``

     ``#openstack flavor set onap.hpa.flavor22 --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:2``

    **Flavor23**
     ``#nova flavor-create onap.hpa.flavor23 223 12 20 2``

     ``#nova flavor-key onap.hpa.flavor23 set hw:mem_page_size=2048``

     ``#openstack aggregate create --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-private-1:2 aggr231``

     ``#openstack flavor set onap.hpa.flavor23 --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-private-1:2``

- **Cloud Region Three**

    **Flavor31**
     ``#nova flavor-create onap.hpa.flavor31 331 8 20 2``

     ``#nova flavor-key onap.hpa.flavor31 set hw:mem_page_size=2048``

     ``#nova flavor-key onap.hpa.flavor31 set hw:cpu_policy=dedicated``

     ``#nova flavor-key onap.hpa.flavor31 set hw:cpu_thread_policy=isolate``

    **Flavor32**
     ``#nova flavor-create onap.hpa.flavor32 332 8192 20 2``

     ``#nova flavor-key onap.hpa.flavor32 set hw:mem_page_size=1048576``

    **Flavor33**
     ``#nova flavor-create onap.hpa.flavor33 333 12 20 2``

     ``#nova flavor-key onap.hpa.flavor33 set hw:mem_page_size=2048``

     ``#openstack aggregate create --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:1 aggr331``

     ``#openstack flavor set onap.hpa.flavor33 --property aggregate_instance_extra_specs:sriov_nic=sriov-nic-intel-8086-154C-shared-1:1``


8. Check that the cloud complex has the right values and update if it does not. Required values are;

    "elevation": "example-elevation-val-28399",

    "lata": "example-lata-val-28399",

    "country": "USA",

    "latitude": "32.89948",

    "longitude": "97.045443",

    "postal-code": "00000


If an update is needed, the update can be done via rest using curl or postman

::

    curl -X PUT \
    https://$ONAP_AAI_IP:$ONAP_AAI_PORT/aai/v14/cloud-infrastructure/complexes/complex/clli1 \
    -H 'Accept: application/json' \
    -H 'Authorization: Basic QUFJOkFBSQ==' \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json' \
    -H 'Postman-Token: 2b272126-aa65-41e6-aa5d-46bc70b9eb4f' \
    -H 'Real-Time: true' \
    -H 'X-FromAppId: jimmy-postman' \
    -H 'X-TransactionId: 9999' \
    -d '{
         "physical-location-id": "clli1",
         "data-center-code": "example-data-center-code-val-5556",
         "complex-name": "clli1",
         "identity-url": "example-identity-url-val-56898",
         "resource-version": "1543284556407",
         "physical-location-type": "example-physical-location-type-val-7608",
         "street1": "example-street1-val-34205",
         "street2": "example-street2-val-99210",
         "city": "example-city-val-27150",
         "state": "example-state-val-59487",
         "postal-code": "00000",
         "country": "USA",
         "region": "example-region-val-13893",
         "latitude": "32.89948",
         "longitude": "97.045443",
         "elevation": "example-elevation-val-28399",
         "lata": "example-lata-val-28399"

        }'

9. Register new cloud regions. This can be done using instructions (Step 1 to Step 3) on this `page <https://docs.onap.org/projects/onap-multicloud-framework/en/latest/multicloud-plugin-windriver/UserGuide-MultiCloud-WindRiver-TitaniumCloud.html?highlight=multicloud>`_. The already existing CloudOwner and cloud complex can be used. If step 3 does not work using the k8s ip and external port. It can be done using the internal ip address and port. Exec into any pod and run the command from the pod.

- Get msb-iag internal ip address and port

 ``oom-rancher#  kubectl get services -n onap |grep msb-iag``

- Exec into any pod (oof in this case) and run curl command, you may need to install curl

  ``oom-rancher#  kubectl exec dev-oof-oof-6c848594c5-5khps -it -- bash``

10. Put required subscription list into tenant for all the newly added cloud regions. An easy way to do this is to do a get on the default cloud region, copy the tenant information with the subscription. Then paste it in your put command and modify the region id, tenant-id, tenant-name and resource-version.

**GET COMMAND**

::

    curl -X GET \
    https://$ONAP_AAI_IP:$ONAP_AAI_PORT/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/${CLOUD_OWNER}/${CLOUD_REGION_ID}?depth=all \
    -H 'Accept: application/json' \
    -H 'Authorization: Basic QUFJOkFBSQ==' \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json' \
    -H 'Postman-Token: 2899359f-871b-4e61-a307-ecf8b3144e3f' \
    -H 'Real-Time: true' \
    -H 'X-FromAppId: jimmy-postman' \
    -H 'X-TransactionId: 9999'

**PUT COMMAND**
::

 curl -X PUT \
    https://{{AAI1_PUB_IP}}:{{AAI1_PUB_PORT}}/aai/v14/cloud-infrastructure/cloud-regions/cloud-region/{{cloud-owner}}/{{cloud-region-id}}/tenants/tenant/{{tenant-id}} \
    -H 'Accept: application/json' \
    -H 'Authorization: Basic QUFJOkFBSQ==' \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json' \
    -H 'Postman-Token: 2b272126-aa65-41e6-aa5d-46bc70b9eb4f' \
    -H 'Real-Time: true' \
    -H 'X-FromAppId: jimmy-postman' \
    -H 'X-TransactionId: 9999' \
    -d '{
                "tenant-id": "709ba629fe194f8699b12f9d6ffd86a0",
                "tenant-name": "Integration-HPA",
                "resource-version": "1542650451856",
                "relationship-list": {
                    "relationship": [
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vFWCL"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/gNB",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "gNB"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vFW"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vCPE",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vCPE"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW_HPA",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vFW_HPA"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vLB",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vLB"
                                }
                            ]
                        },
                        {
                            "related-to": "service-subscription",
                            "relationship-label": "org.onap.relationships.inventory.Uses",
                            "related-link": "/aai/v14/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vIMS",
                            "relationship-data": [
                                {
                                    "relationship-key": "customer.global-customer-id",
                                    "relationship-value": "Demonstration"
                                },
                                {
                                    "relationship-key": "service-subscription.service-type",
                                    "relationship-value": "vIMS"
                                }
                            ]
                        }
                    ]
                }
            }'


11.  Onboard the vFW HPA template. The templates can be gotten from the `demo <https://github.com/onap/demo>`_ repo. The heat and env files used are located in demo/heat/vFW_HPA/vFW/. Create a zip file using the files. For onboarding instructions see steps 4 to 9 of `vFWCL instantiation, testing and debugging <https://wiki.onap.org/display/DW/vFWCL+instantiation%2C+testing%2C+and+debuging>`_. Note that in step 5, only one VSP is created. For the VSP the option to submit for testing in step 5cii was not shown. So you can check in and certify the VSP and proceed to step 6.

12. Get the parameters (model info, model invarant id...etc) required to create a service instance via rest. This can be done by creating a service instance via VID as in step 10 of `vFWCL instantiation, testing and debugging <https://wiki.onap.org/display/DW/vFWCL+instantiation%2C+testing%2C+and+debuging>`_.  After creating the service instance, exec into the SO bpmn pod and look into the /app/logs/bpmn/debug.log file. Search for the service instance and look for its request details. Then populate the parameters required to create a service instance via rest in step 13 below.

13. Create a service instance rest request but do not create service instance yet. Specify OOF as the homing solution and multicloud as the orchestrator. Be sure to use a service instance name that does not exist and populate the parameters with values gotten from step 12.

::

    curl -k -X POST \
    http://{{k8s}}:30277/onap/so/infra/serviceInstances/v6 \
    -H 'authorization: Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA== \
    -H 'content-type: application/json' \
    -d '{
          "requestDetails":{
              "modelInfo":{
                  "modelInvariantId":"de7c3733-93c8-4740-ada5-c37b8bcc0aa8",
                  "modelType":"service",
                  "modelName":"ipsec",
                  "modelVersion":"1.0",
                  "modelVersionId":"48deb45c-ced1-4526-a070-4b162fe0a472",
                  "modelUuid":"48deb45c-ced1-4526-a070-4b162fe0a472",
                  "modelInvariantUuid":"de7c3733-93c8-4740-ada5-c37b8bcc0aa8"
              },
              "requestInfo":{
                  "source":"VID",
                  "instanceName":"ipsec-testing",
                  "suppressRollback":false,
                  "requestorId":"demo"
              },
              "subscriberInfo":{
                  "globalSubscriberId":"Demonstration"
              },
              "requestParameters":{
                  "subscriptionServiceType":"vFW",
                  "aLaCarte":true,
                  "testApi":"VNF_API",
                  "userParams":[
                      {
                       "name":"Customer_Location",
                       "value":{
                           "customerLatitude":"32.897480",
                           "customerLongitude":"97.040443",
                           "customerName":"some_company"
                        }
                      },
                      {
                       "name":"Homing_Solution",
                       "value":"oof"
                      },
                      {
                       "name":"orchestrator",
                       "value":"multicloud"
                      }
                  ]
              },
              "project":{
                  "projectName":"Project-Demonstration"
              },
              "owningEntity":{
                  "owningEntityId":"fed3fd5c-5c82-46d7-b040-5f4837cc9e52",
                  "owningEntityName":"OE-Demonstration"
              }
          }
    }'


14. Get the resourceModuleName to be used for creating policies. This can be gotten from the CSAR file of the service model created. However, an easy way to get the resourceModuleName is to send the service instance create request in step 13 above. This will fail as there are no policies but you can then go into the bpmn debug.log file and get its value by searching for resourcemodulename.

15. Create policies. For instructions to do this, look in **method 2 (Manual upload)** of `OOF - HPA guide for integration testing <https://wiki.onap.org/display/DW/OOF+-+HPA+guide+for+integration+testing>`_. Put in the correct resouceModuleName. This is located in the resources section of the rest request. For example the resourceModuleName in the distance policy is 7400fd06C75f4a44A68f.

16. Do a get to verify all the polcies have been put in correctly. This can be done by doing an exec into the policy-pdp pod and running the following curl command.

::

    curl -k -v -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'ClientAuth: cHl0aG9uOnRlc3Q=' -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' -H 'Environment: TEST' -X POST -d '{"policyName": "OSDF_DUBLIN.*", "configAttributes": {"policyScope": "us"}}' 'https://pdp:8081/pdp/api/getConfig' | python -m json.tool

To Update a policy, use the following curl command. Modify the policy as required

::

    curl -k -v  -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{
        "configBody": "{\"service\":\"hpaPolicy\",\"guard\":\"False\",\"content\":{\"flavorFeatures\":[{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"firewall_flavor_name\"}],\"type\":\"flavor_directives\"}],\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"2\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"numVirtualCpu\"},{\"hpa-attribute-value\":\"8\",\"unit\":\"MB\",\"operator\":\"=\",\"hpa-attribute-key\":\"virtualMemSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"},{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"2\",\"unit\":\"MB\",\"operator\":\"=\",\"hpa-attribute-key\":\"memoryPageSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"hugePages\"},{\"hpa-feature\":\"localStorage\",\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"mandatory\":\"True\",\"directives\":[],\"hpa-feature-attributes\":[{\"hpa-attribute-key\":\"diskSize\",\"hpa-attribute-value\":\"10\",\"operator\":\">=\",\"unit\":\"GB\"}]},{\"mandatory\":\"False\",\"score\":\"100\",\"directives\":[],\"hpa-version\":\"v1\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"1\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"pciCount\"},{\"hpa-attribute-value\":\"8086\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"pciVendorId\"},{\"hpa-attribute-value\":\"37c9\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"pciDeviceId\"}],\"architecture\":\"vf\",\"hpa-feature\":\"pciePassthrough\"}],\"id\":\"vfw\"},{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"packetgen_flavor_name\"}],\"type\":\"flavor_directives\"}],\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"1\",\"operator\":\">=\",\"hpa-attribute-key\":\"numVirtualCpu\"},{\"hpa-attribute-value\":\"7\",\"unit\":\"GB\",\"operator\":\">=\",\"hpa-attribute-key\":\"virtualMemSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"},{\"hpa-feature\":\"localStorage\",\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"mandatory\":\"True\",\"directives\":[],\"hpa-feature-attributes\":[{\"hpa-attribute-key\":\"diskSize\",\"hpa-attribute-value\":\"10\",\"operator\":\">=\",\"unit\":\"GB\"}]}],\"id\":\"vgenerator\"},{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"sink_flavor_name\"}],\"type\":\"flavor_directives\"}],\"id\":\"vsink\",\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"directives\":[],\"hpa-version\":\"v1\",\"hpa-feature-attributes\":[],\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"}]}],\"policyType\":\"hpa\",\"policyScope\":[\"vfw\",\"us\",\"international\",\"ip\"],\"identity\":\"hpa-vFW\",\"resources\":[\"vFW\",\"A5ece5a02e86450391d6\"]},\"priority\":\"3\",\"templateVersion\":\"OpenSource.version.1\",\"riskLevel\":\"2\",\"description\":\"HPApolicyforvFW\",\"policyName\":\"OSDF_CASABLANCA.hpa_policy_vFW_1\",\"version\":\"test1\",\"riskType\":\"test\"}",
        "policyName": "OSDF_DUBLIN.hpa_policy_vIPsec_1",
        "policyConfigType": "MicroService",
        "onapName": "SampleDemo",
        "policyScope": "OSDF_DUBLIN"
    }' 'https://pdp:8081/pdp/api/updatePolicy'


To delete a policy, use two commands below to delete from PDP and PAP

**DELETE POLICY INSIDE PDP**

::

    curl -k -v -H 'Content-Type: application/json' \
     -H 'Accept: application/json' \
     -H 'ClientAuth: cHl0aG9uOnRlc3Q=' \
     -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' \
     -H 'Environment: TEST' \
     -X DELETE \
     -d '{"policyName": "OSDF_DUBLIN.Config_MS_vnfPolicy_vIPsec.1.xml","policyComponent":"PDP","policyType":"MicroService","pdpGroup":"default"}' https://pdp:8081/pdp/api/deletePolicy


**DELETE POLICY INSIDE PAP**

::

    curl -k -v -H 'Content-Type: application/json' \
    -H 'Accept: application/json' \
    -H 'ClientAuth: cHl0aG9uOnRlc3Q=' \
    -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' \
    -H 'Environment: TEST' \
    -X DELETE \
    -d '{"policyName": "OSDF_DUBLIN.Config_MS_vnfPolicy_vIPsec.1.xml","policyComponent":"PAP","policyType":"Optimization","deleteCondition":"ALL"}' https://pdp:8081/pdp/api/deletePolicy

Below provides one HPA policy example for test cases one

**Test 1 (Basic)**

Create Policy

::

    curl -k -v  -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{
    "configBody": "{\"service\":\"hpaPolicy\",\"guard\":\"False\",\"content\":{\"flavorFeatures\":[{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"firewall_flavor_name\"}],\"type\":\"flavor_directives\"}],\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"2\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"numVirtualCpu\"},{\"hpa-attribute-value\":\"512\",\"unit\":\"MB\",\"operator\":\">=\",\"hpa-attribute-key\":\"virtualMemSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"},{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"2\",\"unit\":\"MB\",\"operator\":\"=\",\"hpa-attribute-key\":\"memoryPageSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"hugePages\"},{\"hpa-feature\":\"localStorage\",\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"mandatory\":\"True\",\"directives\":[],\"hpa-feature-attributes\":[{\"hpa-attribute-key\":\"diskSize\",\"hpa-attribute-value\":\"10\",\"operator\":\">=\",\"unit\":\"GB\"}]},{\"mandatory\":\"False\",\"score\":\"100\",\"directives\":[],\"hpa-version\":\"v1\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"isolate\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"logicalCpuThreadPinningPolicy\"},{\"hpa-attribute-value\":\"dedicated\",\"unit\":\"\",\"operator\":\"=\",\"hpa-attribute-key\":\"logicalCpuPinningPolicy\"}],\"architecture\":\"generic\",\"hpa-feature\":\"cpuPinning\"}],\"id\":\"vfw\"},{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"packetgen_flavor_name\"}],\"type\":\"flavor_directives\"}],\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"hpa-feature-attributes\":[{\"hpa-attribute-value\":\"1\",\"operator\":\">=\",\"hpa-attribute-key\":\"numVirtualCpu\"},{\"hpa-attribute-value\":\"7\",\"unit\":\"GB\",\"operator\":\">=\",\"hpa-attribute-key\":\"virtualMemSize\"}],\"directives\":[],\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"},{\"hpa-feature\":\"localStorage\",\"hpa-version\":\"v1\",\"architecture\":\"generic\",\"mandatory\":\"True\",\"directives\":[],\"hpa-feature-attributes\":[{\"hpa-attribute-key\":\"diskSize\",\"hpa-attribute-value\":\"10\",\"operator\":\">=\",\"unit\":\"GB\"}]}],\"id\":\"vgenerator\"},{\"directives\":[{\"attributes\":[{\"attribute_value\":\"\",\"attribute_name\":\"sink_flavor_name\"}],\"type\":\"flavor_directives\"}],\"id\":\"vsink\",\"type\":\"vnfc\",\"flavorProperties\":[{\"mandatory\":\"True\",\"directives\":[],\"hpa-version\":\"v1\",\"hpa-feature-attributes\":[],\"architecture\":\"generic\",\"hpa-feature\":\"basicCapabilities\"}]}],\"policyType\":\"hpa\",\"policyScope\":[\"vfw\",\"us\",\"international\",\"ip\"],\"identity\":\"hpa-vFW\",\"resources\":[\"vFW\",\"Ipsec\"]},\"priority\":\"3\",\"templateVersion\":\"OpenSource.version.1\",\"riskLevel\":\"2\",\"description\":\"HPApolicyforvFW\",\"policyName\":\"OSDF_DUBLIN.hpa_policy_vFWHPA_1\",\"version\":\"1.0\",\"riskType\":\"test\"}",
    "policyName": "OSDF_DUBLIN.hpa_policy_IPsec_1",
    "policyConfigType": "Optimization",
    "onapName": "SampleDemo",
    "policyScope": "OSDF_DUBLIN"
    }' 'https://pdp:8081/pdp/api/createPolicy'



Push Policy

::

        curl -k -v  -X PUT --header 'Content-Type: application/json' --header 'Accept: text/plain' --header 'ClientAuth: cHl0aG9uOnRlc3Q=' --header 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' --header 'Environment: TEST' -d '{
        "pdpGroup": "default",
        "policyName": "OSDF_DUBLIN.hpa_policy_IPsec_1",
        "policyType": "MicroService"
        }' 'https://pdp:8081/pdp/api/pushPolicy'



17. Create Service Instance using step 13 above

18. Check bpmn logs to ensure that OOF sent homing response and flavor directives.

19. Create vnf using VID as in 10f and 10g in `vFWCL instantiation, testing and debugging <https://wiki.onap.org/display/DW/vFWCL+instantiation%2C+testing%2C+and+debuging>`_.

20. Do SDNC Preload. Instructions for this can be found in this `video <https://wiki.onap.org/display/DW/Running+the+ONAP+Demos?preview=/1015891/16010290/vFW_closed_loop.mp4>`_ (Fast forward to 3:55 in the video). The contents of my preload file are shown below;

::

    {
        "input": {
            "request-information": {
                "notification-url": "openecomp.org",
                "order-number": "1",
                "order-version": "1",
                "request-action": "PreloadVNFRequest",
                "request-id": "test"
            },
            "sdnc-request-header": {
                "svc-action": "reserve",
                "svc-notification-url": "http://openecomp.org:8080/adapters/rest/SDNCNotify",
                "svc-request-id": "test"
            },
            "vnf-topology-information": {
                "vnf-assignments": {
                    "availability-zones": [],
                    "vnf-networks": [],
                    "vnf-vms": []
                },


                "vnf-parameters": [
                    {
                     "vnf-parameter-name":"vf_module_id",
                     "vnf-parameter-value":"Ipsec..base_vipsec..module-0"
                    },
                    {
                     "vnf-parameter-name":"vipsec_name_0",
                     "vnf-parameter-value":"ipsec01"
                    },
                    {
                     "vnf-parameter-name":"ipsec_provider_net_id",
                     "vnf-parameter-value":"private-1"
                    },
                    {
                     "vnf-parameter-name":"output_interface_B",
                     "vnf-parameter-value":"0000:00:06.0"
                    },
                    {
                     "vnf-parameter-name":"ipsec_private_net_id",
                     "vnf-parameter-value":"ipsec_net"
                    },
                    {
                     "vnf-parameter-name":"onap_private_net_id",
                     "vnf-parameter-value":"oam_onap_test"
                    },
                    {
                     "vnf-parameter-name":"vipsec_B_private_ip_1",
                     "vnf-parameter-value":"20.0.100.8"
                    },
                    {
                     "vnf-parameter-name":"vipsec_B_private_ip_0",
                     "vnf-parameter-value":"192.168.80.100"
                    },
                    {
                     "vnf-parameter-name":"vipsec_B_private_ip_2",
                     "vnf-parameter-value":"192.168.100.4"
                    },
                    {
                     "vnf-parameter-name":"router_name",
                     "vnf-parameter-value":"external"
                    },
                    {
                     "vnf-parameter-name":"vipsec_private_2_port_vnic_type",
                     "vnf-parameter-value":"direct"
                    },
                    {
                     "vnf-parameter-name":"vipsec_A_private_ip_0",
                     "vnf-parameter-value":"192.168.70.100"
                    },
                    {
                     "vnf-parameter-name":"vipsec_A_private_ip_1",
                     "vnf-parameter-value":"20.0.100.7"
                    },
                    {
                     "vnf-parameter-name":"onap_private_subnet_id",
                     "vnf-parameter-value":"oam_onap_test"
                    },
                    {
                     "vnf-parameter-name":"vipsec_name_1",
                     "vnf-parameter-value":"ipsec02"
                    },
                    {
                     "vnf-parameter-name":"onap_private_net_cidr",
                     "vnf-parameter-value":"20.0.0.0/16"
                    },
                    {
                     "vnf-parameter-name":"install_script_version",
                     "vnf-parameter-value":"1.4.0-SNAPSHOT"
                    },
                    {
                     "vnf-parameter-name":"protected_clientA_private_net_id",
                     "vnf-parameter-value":"private_net_clientA"
                    },
                    {
                     "vnf-parameter-name":"protected_clientB_private_net_id",
                     "vnf-parameter-value":"private_net_clientB"
                    },
                    {
                     "vnf-parameter-name":"packetgen_flavor_name",
                     "vnf-parameter-value":"m1.medium"
                    },
                    {
                     "vnf-parameter-name":"protected_clientB_private_net_cidr",
                      "vnf-parameter-value":"192.168.80.0/24"
                    },
                    {
                     "vnf-parameter-name":"ipsec_private_net_cidr",
                     "vnf-parameter-value":"192.168.100.0/24"
                    },
                    {
                      "vnf-parameter-name":"cloud_env",
                      "vnf-parameter-value":"openstack"
                     },
                    {
                      "vnf-parameter-name":"key_name",
                      "vnf-parameter-value":"vipsec_key"
                    },
                    {
                      "vnf-parameter-name":"ipsec_B_MAC_address",
                      "vnf-parameter-value":"11:11:11:11:00:11"
                    },
                    {
                      "vnf-parameter-name":"vpg_name_0",
                      "vnf-parameter-value":"vpg01"
                    },
                    {
                      "vnf-parameter-name":"input_device_interface_A",
                      "vnf-parameter-value":"VirtualFunctionEthernet0/5/0"
                      },
                    {
                      "vnf-parameter-name":"input_device_interface_B",
                      "vnf-parameter-value":"VirtualFunctionEthernet0/6/0"
                    },
                    {
                      "vnf-parameter-name":"input_interface_B",
                      "vnf-parameter-value":"0000:00:05.0"
                    },
                    {
                      "vnf-parameter-name":"vsn_private_1_port_vnic_type",
                      "vnf-parameter-value":"normal"
                    },
                    {
                      "vnf-parameter-name":"vnf_id",
                      "vnf-parameter-value":"vIPsec_demo_app"
                    },
                    {
                      "vnf-parameter-name":"vipsec_B_private_0_port_vnic_type",
                      "vnf-parameter-value":"direct"
                    },
                    {
                      "vnf-parameter-name":"ipsec_A_MAC_address",
                      "vnf-parameter-value":"1:00:00:00:00:01"
                    },
                    {
                       "vnf-parameter-name":"input_interface_A",
                       "vnf-parameter-value":"0000:00:05.0"
                    },
                    {
                      "vnf-parameter-name":"vpg_private_ip_0",
                      "vnf-parameter-value":"192.168.70.200"
                    },
                    {
                      "vnf-parameter-name":"vpg_private_ip_1",
                      "vnf-parameter-value":"20.0.100.10"
                    },
                    {
                      "vnf-parameter-name":"vsn_private_ip_0",
                      "vnf-parameter-value":"192.168.80.250"
                    },
                    {
                      "vnf-parameter-name":"vsn_private_ip_1",
                      "vnf-parameter-value":"20.0.100.9"
                     },
                    {
                      "vnf-parameter-name":"sink_flavor_name",
                      "vnf-parameter-value":"m1.medium"
                    },
                    {
                      "vnf-parameter-name":"protected_clientA_private_net_cidr",
                      "vnf-parameter-value":"192.168.70.0/24"
                    },
                    {
                      "vnf-parameter-name":"output_device_interface_A",
                      "vnf-parameter-value":"VirtualFunctionEthernet0/6/0"
                    },
                    {
                      "vnf-parameter-name":"output_device_interface_B",
                      "vnf-parameter-value":"VirtualFunctionEthernet0/5/0"
                    },
                    {
                      "vnf-parameter-name":"vpg_private_1_port_vnic_type",
                      "vnf-parameter-value":"normal"
                    },
                    {
                      "vnf-parameter-name":"basic_image_name",
                      "vnf-parameter-value":"ubuntu-16.04"
                    },
                    {
                      "vnf-parameter-name":"vipsec_private_1_port_vnic_type",
                      "vnf-parameter-value":"normal"
                    },
                    {
                      "vnf-parameter-name":"vpg_private_0_port_vnic_type",
                      "vnf-parameter-value":"direct"
                    },
                    {
                      "vnf-parameter-name":"vipsec_A_private_0_port_vnic_type",
                      "vnf-parameter-value":"direct"
                    },
                    {
                      "vnf-parameter-name":"vipsec_image_name",
                      "vnf-parameter-value":"ubuntu-16.04"
                     },
                    {
                      "vnf-parameter-name":"protected_clientA_provider_net_id",
                      "vnf-parameter-value":"private-1"
                    },
                    {
                       "vnf-parameter-name":"ipsec_flavor_name",
                       "vnf-parameter-value":"onap.hpa.flavor33"
                    },
                    {
                      "vnf-parameter-name":"ipsec_config",
                      "vnf-parameter-value":"/opt/config/ipsec.config"
                    },
                    {
                      "vnf-parameter-name":"vipsec_A_private_ip_2",
                      "vnf-parameter-value":"192.168.100.3"
                    },
                    {
                      "vnf-parameter-name":"vsn_private_0_port_vnic_type",
                      "vnf-parameter-value":"direct"
                    },
                    {
                      "vnf-parameter-name":"public_net_id",
                      "vnf-parameter-value":"external"
                    },
                    {
                      "vnf-parameter-name":"vsn_name_0",
                      "vnf-parameter-value":"vsn01"
                    },
                    {
                      "vnf-parameter-name":"protected_clientB_provider_net_id",
                      "vnf-parameter-value":"private-1"
                    },
                    {
                      "vnf-parameter-name":"demo_artifacts_version",
                      "vnf-parameter-value":"1.4.0-SNAPSHOT"
                    },
                    {
                      "vnf-parameter-name":"vpp_config",
                      "vnf-parameter-value":"/opt/config/vpp.config"
                    },
                    {
                      "vnf-parameter-name":"output_interface_A",
                      "vnf-parameter-value":"0000:00:06.0"
                    },
                    {
                      "vnf-parameter-name": "template_type",
                      "vnf-parameter-value": "heat"
                    }
                ],
                "vnf-topology-identifier": {
                    "generic-vnf-name": "Ipsec",
                    "generic-vnf-type": "ipsec 0",
                    "service-type": "8c071bd1-c361-4157-8282-3fef7689d32e",
                    "vnf-name": "ipsec-test",
                    "vnf-type": "Ipsec..base_vipsec..module-0"

                }
            }
        }}


Change parameters based on your environment.

**Note**

::

    "generic-vnf-name": "Ipsec",     <-- NAME GIVEN TO VNF
    "generic-vnf-type": "ipsec 0",   <-- can be found on VNF dialog screen get the part of the VNF-TYPE after the '/'
    "service-type": "8c071bd1-c361-4157-8282-3fef7689d32e",  <-- same as Service Instance ID
    "vnf-name": "ipsec-test",  <-- name to be given to the vf module
    "vnf-type": "Ipsec..base_vipsec..module-0" <-- can be found on the VID - VF Module dialog screen - Model Name

21. Create vf module (11g of `vFWCL instantiation, testing and debugging <https://wiki.onap.org/display/DW/vFWCL+instantiation%2C+testing%2C+and+debuging>`_). If everything worked properly, you should see the stack created in your VIM(WR titanium cloud openstack in this case).