From c12629c0f6dc68f4c5af7be11207f7d0f4e6d8e1 Mon Sep 17 00:00:00 2001 From: Ayumu Ueha Date: Fri, 14 Apr 2023 06:19:14 +0000 Subject: [PATCH] Improve API-based documentation Improve user guides to deploy VNF/CNF by API-based procedure. Issue-ID: SMO-129 Signed-off-by: Ayumu Ueha Change-Id: I7e85ebda1295700059e84235009a819d96990831 --- docs/tacker-user-guide-cnf-v2.rst | 576 ++++++++++++++++++++------------- docs/tacker-user-guide-cnf.rst | 458 +++++++++++++++++--------- docs/tacker-user-guide-vnf-v2.rst | 624 ++++++++++++++++++++++------------- docs/tacker-user-guide-vnf.rst | 662 ++++++++++++++++++++++++-------------- 4 files changed, 1485 insertions(+), 835 deletions(-) diff --git a/docs/tacker-user-guide-cnf-v2.rst b/docs/tacker-user-guide-cnf-v2.rst index 049c57c..43f5063 100644 --- a/docs/tacker-user-guide-cnf-v2.rst +++ b/docs/tacker-user-guide-cnf-v2.rst @@ -6,9 +6,13 @@ How to deploy CNF Deployment (V2 API) ===================================== This user guide shows how to deploy CNF (Container Network Function) using Helm via Tacker. -See the `ETSI NFV-SOL CNF Deployment using Helm (v2 VNF LCM API)` for the original procedure. +See the `ETSI NFV-SOL CNF Deployment using Helm (v2 VNF LCM API)`_ for the original procedure. This procedure can be used after OpenStack Tacker Zed release (version 8.0.0). +.. note:: + + This document focuses on some operations. See the Tacker `Use Case Guide`_ or `API Reference`_ for other operations. + .. contents:: :depth: 3 :local: @@ -16,6 +20,64 @@ This procedure can be used after OpenStack Tacker Zed release (version 8.0.0). Prerequisites ------------- +Credentials Setting +~~~~~~~~~~~~~~~~~~~ + +To use Tacker CLI, you need to configure the credentials, please change the ``username`` and ``projectname`` to be executed according to your environment. + +.. code:: bash + + $ source ${devstack_dir}/openrc admin admin + +If you want to access Tacker via API, you need to get auth token by following procedure below. + +.. code:: bash + + # Create request body for issuing access token. + $ vi get_token.json + $ cat get_token.json + { + "auth": { + "identity": { + "methods": ["password"], + "password": { + "user": { + "domain": { + "name": "Default" + }, + "name": "admin", + "password": "devstack" + } + } + }, + "scope": { + "project": { + "domain": { + "name":"Default" + }, + "name":"admin" + } + } + } + } + + # Issue auth token for accessing via API. + $ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json http://192.168.121.170/identity/v3/auth/tokens + HTTP/1.1 201 CREATED + Date: Wed, 12 Apr 2023 07:22:44 GMT + Server: Apache/2.4.41 (Ubuntu) + Content-Type: application/json + Content-Length: 7469 + X-Subject-Token: gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + Vary: X-Auth-Token + x-openstack-request-id: req-e94aa763-9578-424b-affb-7ccab80db72c + Connection: close + + {"token": {"methods": ["password"], "user": {"domain": {"id": "default", "name": "Default"}, "id": "3e2f3db203e347bfa2197f8fdd038f39", "name": "admin", "password_expires_at": null}, "audit_ids": ["1pgGosVvR4azhw29woKvDw"], "expires_at": "2023-04-12T08:22:44.000000Z", "issued_at": "2023-04-12T07:22:44.000000Z", "project": {"domain": {"id": "default", "name": "Default"}, "id": "5af8bd4dd4ed4285ab1d45a95833cc67", "name": "admin"}, "is_domain": false, "roles": [{"id": "a039c220711049e0b77eac89a1504a81", "name": "reader"}, {"id": "57051bcc1fc24eb4875852a8ab32eae7", "name": "member"}, {"id": "029ea703a2534199a412b18cc5bfa31d", "name": "admin"}], "catalog": [{"endpoints": [{"id": "29307c3ec2f94553acbd7682e32602ba", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "45e5c5f2d4ce4841a980e29e6d3713f7", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "8d79900575e3490cb71ad6fe5ff0697c", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}], "id": "00c00313624d4c74aeaa55285e2c553d", "type": "workflowv2", "name": "mistral"}, {"endpoints": [{"id": "aafc7809d8a943d39d20490442ed87fa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "131f57b38d7e4874a18446ab50f3f37b", "type": "compute_legacy", "name": "nova_legacy"}, {"endpoints": [{"id": "e1cd2199468a4486a4df2ffe884b9026", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:12347/v1", "region": "RegionOne"}], "id": "4dc58229363a4e5fa3d863357554678b", "type": "maintenance", "name": "fenix"}, {"endpoints": [], "id": "53b114aa4c2b4cf7b642ef99e767e58c", "type": "kuryr-kubernetes", "name": "kuryr-kubernetes"}, {"endpoints": [{"id": "1156b12e11a04ac2ab4a674976e8bb3e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "191a35e87d824e72819c28790d6dac8d", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "99016e127b7d4f8483636f5531d994c9", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}], "id": "5d483e864b484f76a46266dc5640386b", "type": "metric", "name": "gnocchi"}, {"endpoints": [{"id": "d5ce793eee434288901795720538f811", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "5e5f3dc6efa545569f67f453a05ac234", "type": "block-storage", "name": "cinder"}, {"endpoints": [{"id": "6ed501fde45047fe9a3684cc791df953", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/load-balancer", "region": "RegionOne"}], "id": "8b06952a46f3448f9e88daccee3212a9", "type": "load-balancer", "name": "octavia"}, {"endpoints": [{"id": "548133af931b4c0ea8d015dbb67d4388", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "58f0b35802f442f4997318017a37cae9", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "c062a6ce0ab54ee699b863b38e15c50a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}], "id": "8ee29bc9aa6d4ddda69f7810b0c52ff5", "type": "identity", "name": "keystone"}, {"endpoints": [{"id": "7fdd1dac28874280928e6c9313b4a415", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api-cfn/v1", "region": "RegionOne"}], "id": "9605cce5cdad422f8934c891ac840fa7", "type": "cloudformation", "name": "heat-cfn"}, {"endpoints": [{"id": "53ed393173944da3bfac9d482907b65e", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "d6891cda1327453aa28155fd18e8596e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "fef7c489ad544e708d9c85e4a801e344", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}], "id": "a2c67888fc7a4f55a4001cd807293daf", "type": "nfv-orchestration", "name": "tacker"}, {"endpoints": [{"id": "413321647af94f2fb948e59c76bc2b87", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/placement", "region": "RegionOne"}], "id": "aa649b2a9f8644a184fd6857400328ab", "type": "placement", "name": "placement"}, {"endpoints": [{"id": "671a41088c4841d18c58db9ac8a97314", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9696/networking", "region": "RegionOne"}], "id": "b1abe9867d07457dbc7c84f37906300a", "type": "network", "name": "neutron"}, {"endpoints": [{"id": "ba3d670defb748a1b23a4697a7998fb7", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "b481211f6e5742f1913148ab157259ee", "type": "volumev3", "name": "cinderv3"}, {"endpoints": [{"id": "7eca8bcad7df40cda721a960a838f908", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api/v1/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "c7c437d0564f428db112516273ca2c0b", "type": "orchestration", "name": "heat"}, {"endpoints": [{"id": "2be3a59b29c04cf7a359ec8b973d334a", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "4258ac8e29084b5a82a48e55b2189284", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "d463ed0ea12a4b44974b9239d2c14a49", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}], "id": "d411db3bd28a44f7b7c0ae53d3f5bb7b", "type": "key-manager", "name": "barbican"}, {"endpoints": [{"id": "05dea080ccc8493b9aa6a22bfe9d7b2b", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2.1", "region": "RegionOne"}], "id": "d69f1f3988ee4809a9bb496f4f312bbd", "type": "compute", "name": "nova"}, {"endpoints": [{"id": "86e8d9e1998b4b9caf503dc58fc1297a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/reservation/v1", "region": "RegionOne"}], "id": "d81b4911762a4c419f3816c36adcdac1", "type": "reservation", "name": "blazar"}, {"endpoints": [{"id": "0b0195a6580d48bf94eed97a35603756", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "67d676a732bb4c67abcdc5f433e5b3aa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "f753f73beed8463fa3f594c29911c332", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}], "id": "ddd00c0c78b448438bb925776fdbb350", "type": "alarming", "name": "aodh"}, {"endpoints": [{"id": "a39c85e31b3446239f958cc96c634216", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/image", "region": "RegionOne"}], "id": "fe0a0e3590fa4fa69f395bcdc47f1241", "type": "image", "name": "glance"}]}} + + # Set ``X-Subject-Token`` to environment variables as ``TOKEN``. + $ TOKEN=gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + Get VIM Connection Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Get VIM connection information by following procedure below. @@ -109,68 +171,92 @@ Create and upload the VNF Package that you want to deploy by following procedure 2. Create and Upload VNF Package. - .. code:: bash + * via CLI command: - $ openstack vnf package create - +-------------------+-------------------------------------------------------------------------------------------------+ - | Field | Value | - +-------------------+-------------------------------------------------------------------------------------------------+ - | ID | 9c9e71b2-2710-43f2-913c-3c53f056fad1 | - | Links | { | - | | "self": { | - | | "href": "/vnfpkgm/v1/vnf_packages/9c9e71b2-2710-43f2-913c-3c53f056fad1" | - | | }, | - | | "packageContent": { | - | | "href": "/vnfpkgm/v1/vnf_packages/9c9e71b2-2710-43f2-913c-3c53f056fad1/package_content" | - | | } | - | | } | - | Onboarding State | CREATED | - | Operational State | DISABLED | - | Usage State | NOT_IN_USE | - | User Defined Data | {} | - +-------------------+-------------------------------------------------------------------------------------------------+ - - $ openstack vnf package upload --path sample_cnf_package_v2.zip 9c9e71b2-2710-43f2-913c-3c53f056fad1 - Upload request for VNF package 9c9e71b2-2710-43f2-913c-3c53f056fad1 has been accepted. + .. code:: bash + $ openstack vnf package create + +-------------------+-------------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------------+-------------------------------------------------------------------------------------------------+ + | ID | 9c9e71b2-2710-43f2-913c-3c53f056fad1 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/9c9e71b2-2710-43f2-913c-3c53f056fad1" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/9c9e71b2-2710-43f2-913c-3c53f056fad1/package_content" | + | | } | + | | } | + | Onboarding State | CREATED | + | Operational State | DISABLED | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + +-------------------+-------------------------------------------------------------------------------------------------+ -Deployment Procedure --------------------- + $ openstack vnf package upload --path sample_cnf_package_v2.zip 9c9e71b2-2710-43f2-913c-3c53f056fad1 + Upload request for VNF package 9c9e71b2-2710-43f2-913c-3c53f056fad1 has been accepted. -.. note:: + * via API: + + .. code:: bash + + $ TACKER_ENDPOINT=http://192.168.121.170:9890 + $ VNFP_ID=$(curl -s -X POST ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -d '{}' | jq -r '.id') + + $ VNFP_CONTENTS=./sample_cnf_package_v2.zip - This procedure uses the CLI available by installing python-tackerclient. - If you want to process with RESTfull API, see the :doc:`api-docs` for more information. + $ curl -i -X PUT ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID/package_content \ + -H "Content-type: application/zip" -H "X-Auth-Token:$TOKEN" -H "Accept:application/zip" \ + -F vnf_package_content=@${VNFP_CONTENTS} + + +Deployment Procedure +-------------------- Create ~~~~~~ Create a VNF Instance by specifying the VNFD ID. The VNFD ID is the value defined in the VNFD file and can be found in the :command:`openstack vnf package show` command. -.. code:: bash - - $ openstack vnflcm create 37391b92-a1d9-44e5-855a-83644cdc3265 --os-tacker-api-version 2 - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | ID | 8ed20808-4d28-47c2-a83d-80e35c62d050 | - | Instantiation State | NOT_INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050" | - | | }, | - | | "instantiate": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/instantiate" | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | | - | VNF Instance Name | | - | VNF Product Name | Sample CNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | - | VNFD Version | 1.0 | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ +* via CLI command: + + .. code:: bash + + $ openstack vnflcm create 37391b92-a1d9-44e5-855a-83644cdc3265 --os-tacker-api-version 2 + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | ID | 8ed20808-4d28-47c2-a83d-80e35c62d050 | + | Instantiation State | NOT_INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050" | + | | }, | + | | "instantiate": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/instantiate" | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | | + | VNF Instance Name | | + | VNF Product Name | Sample CNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | + | VNFD Version | 1.0 | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + +* via API: + + .. code:: bash + + $ VNFD_ID=$(curl -s -X GET ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID \ + -H "X-Auth-Token:$TOKEN" | jq -r '.vnfdId') + + $ VNF_INST_ID=$(curl -sS -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d '{ "vnfdId": "'$VNFD_ID'"}' | jq -r '.id') Instantiate ~~~~~~~~~~~ @@ -205,8 +291,20 @@ V2 API allows you to insert VIM connection information directly into the instant } } - $ openstack vnflcm instantiate 8ed20808-4d28-47c2-a83d-80e35c62d050 input_param.json --os-tacker-api-version 2 - Instantiate request for VNF Instance 8ed20808-4d28-47c2-a83d-80e35c62d050 has been accepted. +* via CLI command: + + .. code:: bash + + $ openstack vnflcm instantiate 8ed20808-4d28-47c2-a83d-80e35c62d050 input_param.json --os-tacker-api-version 2 + Instantiate request for VNF Instance 8ed20808-4d28-47c2-a83d-80e35c62d050 has been accepted. + +* via API: + + .. code:: bash + + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID/instantiate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d @./input_param.json You can verify that the deployment was successful in the following ways: @@ -215,169 +313,194 @@ You can verify that the deployment was successful in the following ways: * ``Instantiation State`` became ``INSTANTIATED``. * Deployed resource information is stored in ``vnfcResourceInfo`` of ``Instantiated Vnf Info``. - .. code:: bash - - $ openstack vnflcm show 8ed20808-4d28-47c2-a83d-80e35c62d050 --os-tacker-api-version 2 - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | ID | 8ed20808-4d28-47c2-a83d-80e35c62d050 | - | Instantiated Vnf Info | { | - | | "flavourId": "helmchart", | - | | "vnfState": "STARTED", | - | | "scaleStatus": [ | - | | { | - | | "aspectId": "vdu1_aspect", | - | | "scaleLevel": 0 | - | | } | - | | ], | - | | "maxScaleLevels": [ | - | | { | - | | "aspectId": "vdu1_aspect", | - | | "scaleLevel": 2 | - | | } | - | | ], | - | | "vnfcResourceInfo": [ | - | | { | - | | "id": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | - | | "vduId": "VDU1", | - | | "computeResource": { | - | | "resourceId": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | - | | "vimLevelResourceType": "Deployment" | - | | }, | - | | "metadata": {} | - | | } | - | | ], | - | | "vnfcInfo": [ | - | | { | - | | "id": "VDU1-vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | - | | "vduId": "VDU1", | - | | "vnfcResourceInfoId": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | - | | "vnfcState": "STARTED" | - | | } | - | | ], | - | | "metadata": { | - | | "namespace": "default", | - | | "vdu_reses": { | - | | "VDU1": { | - | | "apiVersion": "apps/v1", | - | | "kind": "Deployment", | - | | "metadata": { | - | | "name": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050", | - | | "labels": { | - | | "helm.sh/chart": "test-chart-0.1.0", | - | | "app.kubernetes.io/name": "test-chart", | - | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050", | - | | "app.kubernetes.io/version": "1.16.0", | - | | "app.kubernetes.io/managed-by": "Helm" | - | | }, | - | | "namespace": "default" | - | | }, | - | | "spec": { | - | | "replicas": 1, | - | | "selector": { | - | | "matchLabels": { | - | | "app.kubernetes.io/name": "test-chart", | - | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050" | - | | } | - | | }, | - | | "template": { | - | | "metadata": { | - | | "labels": { | - | | "app.kubernetes.io/name": "test-chart", | - | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050" | - | | } | - | | }, | - | | "spec": { | - | | "serviceAccountName": "vnf8ed208084d2847c2a83d80e35c62d050-test-chart", | - | | "securityContext": {}, | - | | "containers": [ | - | | { | - | | "name": "test-chart", | - | | "securityContext": {}, | - | | "image": "nginx:1.16.0", | - | | "imagePullPolicy": "IfNotPresent", | - | | "ports": [ | - | | { | - | | "name": "http", | - | | "containerPort": 80, | - | | "protocol": "TCP" | - | | } | - | | ], | - | | "resources": {} | - | | } | - | | ] | - | | } | - | | } | - | | } | - | | } | - | | }, | - | | "helm_chart_path": "Files/kubernetes/test-chart-0.1.0.tgz", | - | | "helm_value_names": { | - | | "VDU1": { | - | | "replica": "replicaCount" | - | | } | - | | }, | - | | "release_name": "vnf8ed208084d2847c2a83d80e35c62d050", | - | | "revision": "1" | - | | } | - | | } | - | Instantiation State | INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050" | - | | }, | - | | "terminate": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/terminate" | - | | }, | - | | "scale": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/scale" | - | | }, | - | | "heal": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/heal" | - | | }, | - | | "changeExtConn": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/change_ext_conn" | - | | } | - | | } | - | VIM Connection Info | { | - | | "vim1": { | - | | "vimType": "ETSINFV.HELM.V_3", | - | | "interfaceInfo": { | - | | "endpoint": "https://192.168.121.170:6443", | - | | "ssl_ca_cert": "-----BEGIN CERTIFICATE-----\nMIIC/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwp | - | | rdWJl\ncm5ldGVzMB4XDTIzMDMyMjE0MjQ0NVoXDTMzMDMxOTE0MjQ0NVowFTETMBEGA1UE\nAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQA | - | | DggEPADCCAQoCggEBAMRS\nHyraC+APG08cvJqM3NR76PkFnypekpz1XQrtpEk5Jeo11H+ppHIzVBJt6aPrXC0q\ntmK2L6j3MxknSNVxkjWhRwyD24P | - | | cyP1b1qXsZK1up0ek6ip0j0YuyUgszSdF204e\nQBp82v1zqAYbuxjy7e6wMv3pDu8yvBkrhqVHvLs6xJ0puUjX7XejrlgnjRwFuc8Q\nX+3VRuHaN9s | - | | +OMeiwm4nFDjGwAB7FpA8QPiwCZlA2QD5c6BzdrJA25xlOht6JvBB\nBk90HS9yHg4kQvnikmudaeohRWv3+xzTK9FjGkFfyV/OBV9F66MsDCE5dGjWy | - | | SLN\nwwmWlQ7Ad1/6wFfiYCsCAwEAAaNZMFcwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB\n/wQFMAMBAf8wHQYDVR0OBBYEFGwlLS7Sye6uTLz3DYfPU | - | | lYKxZj+MBUGA1UdEQQO\nMAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBAIyCGBpiLsYgTE2WMjYf\nVYjBVZIboDiBfjnAbhn2SdXDjjSGd | - | | 33gLX/hPOUhE6AkNYeeGD7NcKZfp9Yxg9a5\n0zjEUs19gYjfRx7wP8iSw+Tdml+jibhdvg1oEABfDCy2tZq9R6UwFncRm4dzA3Gc\nt8V94pg6Hd8Lg | - | | jJBRw9PZ8ui9n5sKtxu1wyXQ1uxyDXoNk8yxnIKnQYadey9LYlp\nFS1jJcArlKfYvXJllNg408I9XJB8gMfJX1gjIBaGOloOCNx69rZ3/LlleKcpTg6 | - | | V\n6YW/trOaSrZcxIOycBJvemHi8qHxJd1uC9joAT486hT8Bj5jhrFsC3oq3iTgxMNO\nbOc=\n-----END CERTIFICATE-----" | - | | }, | - | | "accessInfo": { | - | | "bearer_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkdWN3VydWFwUW1OYUUxcDc5dlU0V1gxQUZZRmVhTkRuWXJQbElKZmFwaE0 | - | | ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0 | - | | Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tY2Z4NW0iLCJrdWJlcm5ldGVzLmlvL3NlcnZp | - | | Y2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50 | - | | LnVpZCI6IjVkYzQxODUxLTdkNzYtNGZmYS04MmVmLWEwYjVhODJjMTMzMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1 | - | | bHQifQ.JFnE29iPCCOXeVroogNWYMe_r1qBoJNust0paR0yuZ7ctmR5EDeal79-HzFctiIYcoL5fPK0nHc4ZsyAIAyfs5eK-NvBMru3TwY4PduXAZ5U1 | - | | cu_e1e3SPF31taMwgXXC2NpbtnVocUCC5xJ9V9EXLUV7-AFj14raHvjtnVWFIBkJpTshPbWmbdgMdMMkuAe57OR1kY_KoKlC0fBdHoCRlw-MDwkCN5gT | - | | f9eYQstVRmBCtJHDJ638o-2I-wu4bsun7uaZWsA_RCCJrxqdvo9G7EIvoq_LrHhqy7MSA41UhqGCKPwdpl58DoG98PBHNCiyVH47SvFTXyxS6BdYe8Zs | - | | Q" | - | | } | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | | - | VNF Instance Name | | - | VNF Product Name | Sample CNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | - | VNFD Version | 1.0 | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + * via CLI command: + + .. code:: bash + + $ openstack vnflcm show 8ed20808-4d28-47c2-a83d-80e35c62d050 --os-tacker-api-version 2 + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | ID | 8ed20808-4d28-47c2-a83d-80e35c62d050 | + | Instantiated Vnf Info | { | + | | "flavourId": "helmchart", | + | | "vnfState": "STARTED", | + | | "scaleStatus": [ | + | | { | + | | "aspectId": "vdu1_aspect", | + | | "scaleLevel": 0 | + | | } | + | | ], | + | | "maxScaleLevels": [ | + | | { | + | | "aspectId": "vdu1_aspect", | + | | "scaleLevel": 2 | + | | } | + | | ], | + | | "vnfcResourceInfo": [ | + | | { | + | | "id": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | + | | "vduId": "VDU1", | + | | "computeResource": { | + | | "resourceId": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | + | | "vimLevelResourceType": "Deployment" | + | | }, | + | | "metadata": {} | + | | } | + | | ], | + | | "vnfcInfo": [ | + | | { | + | | "id": "VDU1-vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | + | | "vduId": "VDU1", | + | | "vnfcResourceInfoId": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", | + | | "vnfcState": "STARTED" | + | | } | + | | ], | + | | "metadata": { | + | | "namespace": "default", | + | | "vdu_reses": { | + | | "VDU1": { | + | | "apiVersion": "apps/v1", | + | | "kind": "Deployment", | + | | "metadata": { | + | | "name": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050", | + | | "labels": { | + | | "helm.sh/chart": "test-chart-0.1.0", | + | | "app.kubernetes.io/name": "test-chart", | + | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050", | + | | "app.kubernetes.io/version": "1.16.0", | + | | "app.kubernetes.io/managed-by": "Helm" | + | | }, | + | | "namespace": "default" | + | | }, | + | | "spec": { | + | | "replicas": 1, | + | | "selector": { | + | | "matchLabels": { | + | | "app.kubernetes.io/name": "test-chart", | + | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050" | + | | } | + | | }, | + | | "template": { | + | | "metadata": { | + | | "labels": { | + | | "app.kubernetes.io/name": "test-chart", | + | | "app.kubernetes.io/instance": "vnf8ed208084d2847c2a83d80e35c62d050" | + | | } | + | | }, | + | | "spec": { | + | | "serviceAccountName": "vnf8ed208084d2847c2a83d80e35c62d050-test-chart", | + | | "securityContext": {}, | + | | "containers": [ | + | | { | + | | "name": "test-chart", | + | | "securityContext": {}, | + | | "image": "nginx:1.16.0", | + | | "imagePullPolicy": "IfNotPresent", | + | | "ports": [ | + | | { | + | | "name": "http", | + | | "containerPort": 80, | + | | "protocol": "TCP" | + | | } | + | | ], | + | | "resources": {} | + | | } | + | | ] | + | | } | + | | } | + | | } | + | | } | + | | }, | + | | "helm_chart_path": "Files/kubernetes/test-chart-0.1.0.tgz", | + | | "helm_value_names": { | + | | "VDU1": { | + | | "replica": "replicaCount" | + | | } | + | | }, | + | | "release_name": "vnf8ed208084d2847c2a83d80e35c62d050", | + | | "revision": "1" | + | | } | + | | } | + | Instantiation State | INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050" | + | | }, | + | | "terminate": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/terminate" | + | | }, | + | | "scale": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/scale" | + | | }, | + | | "heal": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/heal" | + | | }, | + | | "changeExtConn": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/8ed20808-4d28-47c2-a83d-80e35c62d050/change_ext_conn" | + | | } | + | | } | + | VIM Connection Info | { | + | | "vim1": { | + | | "vimType": "ETSINFV.HELM.V_3", | + | | "interfaceInfo": { | + | | "endpoint": "https://192.168.121.170:6443", | + | | "ssl_ca_cert": "-----BEGIN CERTIFICATE-----\nMIIC/jCCAeagAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwp | + | | rdWJl\ncm5ldGVzMB4XDTIzMDMyMjE0MjQ0NVoXDTMzMDMxOTE0MjQ0NVowFTETMBEGA1UE\nAxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQA | + | | DggEPADCCAQoCggEBAMRS\nHyraC+APG08cvJqM3NR76PkFnypekpz1XQrtpEk5Jeo11H+ppHIzVBJt6aPrXC0q\ntmK2L6j3MxknSNVxkjWhRwyD24P | + | | cyP1b1qXsZK1up0ek6ip0j0YuyUgszSdF204e\nQBp82v1zqAYbuxjy7e6wMv3pDu8yvBkrhqVHvLs6xJ0puUjX7XejrlgnjRwFuc8Q\nX+3VRuHaN9s | + | | +OMeiwm4nFDjGwAB7FpA8QPiwCZlA2QD5c6BzdrJA25xlOht6JvBB\nBk90HS9yHg4kQvnikmudaeohRWv3+xzTK9FjGkFfyV/OBV9F66MsDCE5dGjWy | + | | SLN\nwwmWlQ7Ad1/6wFfiYCsCAwEAAaNZMFcwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB\n/wQFMAMBAf8wHQYDVR0OBBYEFGwlLS7Sye6uTLz3DYfPU | + | | lYKxZj+MBUGA1UdEQQO\nMAyCCmt1YmVybmV0ZXMwDQYJKoZIhvcNAQELBQADggEBAIyCGBpiLsYgTE2WMjYf\nVYjBVZIboDiBfjnAbhn2SdXDjjSGd | + | | 33gLX/hPOUhE6AkNYeeGD7NcKZfp9Yxg9a5\n0zjEUs19gYjfRx7wP8iSw+Tdml+jibhdvg1oEABfDCy2tZq9R6UwFncRm4dzA3Gc\nt8V94pg6Hd8Lg | + | | jJBRw9PZ8ui9n5sKtxu1wyXQ1uxyDXoNk8yxnIKnQYadey9LYlp\nFS1jJcArlKfYvXJllNg408I9XJB8gMfJX1gjIBaGOloOCNx69rZ3/LlleKcpTg6 | + | | V\n6YW/trOaSrZcxIOycBJvemHi8qHxJd1uC9joAT486hT8Bj5jhrFsC3oq3iTgxMNO\nbOc=\n-----END CERTIFICATE-----" | + | | }, | + | | "accessInfo": { | + | | "bearer_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IkdWN3VydWFwUW1OYUUxcDc5dlU0V1gxQUZZRmVhTkRuWXJQbElKZmFwaE0 | + | | ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0 | + | | Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tY2Z4NW0iLCJrdWJlcm5ldGVzLmlvL3NlcnZp | + | | Y2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50 | + | | LnVpZCI6IjVkYzQxODUxLTdkNzYtNGZmYS04MmVmLWEwYjVhODJjMTMzMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1 | + | | bHQifQ.JFnE29iPCCOXeVroogNWYMe_r1qBoJNust0paR0yuZ7ctmR5EDeal79-HzFctiIYcoL5fPK0nHc4ZsyAIAyfs5eK-NvBMru3TwY4PduXAZ5U1 | + | | cu_e1e3SPF31taMwgXXC2NpbtnVocUCC5xJ9V9EXLUV7-AFj14raHvjtnVWFIBkJpTshPbWmbdgMdMMkuAe57OR1kY_KoKlC0fBdHoCRlw-MDwkCN5gT | + | | f9eYQstVRmBCtJHDJ638o-2I-wu4bsun7uaZWsA_RCCJrxqdvo9G7EIvoq_LrHhqy7MSA41UhqGCKPwdpl58DoG98PBHNCiyVH47SvFTXyxS6BdYe8Zs | + | | Q" | + | | } | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | | + | VNF Instance Name | | + | VNF Product Name | Sample CNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | + | VNFD Version | 1.0 | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + + * via API: + + .. code:: bash + + $ curl -X GET ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + | jq -r '{ instantiationState: .instantiationState, + vnfcResourceInfo: .instantiatedVnfInfo.vnfcResourceInfo }' + { + "instantiationState": "INSTANTIATED", + "vnfcResourceInfo": [ + { + "id": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", + "vduId": "VDU1", + "computeResource": { + "resourceId": "vdu1-vnf8ed208084d2847c2a83d80e35c62d050-5b6b57ddbc-lznmz", + "vimLevelResourceType": "Deployment" + }, + "metadata": {} + } + ] + } 2. Verify the CNF resources that were actually created as follows: @@ -399,12 +522,23 @@ Terminate ~~~~~~~~~ Terminate a VNF by specifying the VNF Instance ID. -.. code:: bash +* via CLI command: + + .. code:: bash + + $ openstack vnflcm terminate 8ed20808-4d28-47c2-a83d-80e35c62d050 --os-tacker-api-version 2 + Terminate request for VNF Instance '8ed20808-4d28-47c2-a83d-80e35c62d050' has been accepted. + +* via API: - $ openstack vnflcm terminate 8ed20808-4d28-47c2-a83d-80e35c62d050 --os-tacker-api-version 2 - Terminate request for VNF Instance '8ed20808-4d28-47c2-a83d-80e35c62d050' has been accepted. + .. code:: bash + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID/terminate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d '{"terminationType": "FORCEFUL"}' .. _ETSI NFV-SOL CNF Deployment using Helm (v2 VNF LCM API): https://docs.openstack.org/tacker/latest/user/etsi_cnf_helm_v2.html +.. _Use Case Guide: https://docs.openstack.org/tacker/latest/user/etsi_use_case_guide.html +.. _API Reference: https://docs.openstack.org/api-ref/nfv-orchestration .. _INF O2 Service Userguide: https://docs.o-ran-sc.org/projects/o-ran-sc-pti-o2/en/latest/user-guide.html .. _Prepare VNF Package: https://docs.openstack.org/tacker/latest/user/etsi_cnf_helm_v2.html#prepare-vnf-package diff --git a/docs/tacker-user-guide-cnf.rst b/docs/tacker-user-guide-cnf.rst index 2d138d1..864837f 100644 --- a/docs/tacker-user-guide-cnf.rst +++ b/docs/tacker-user-guide-cnf.rst @@ -6,7 +6,11 @@ How to deploy CNF Deployment ============================ This user guide shows how to deploy CNF (Container Network Function) using Helm via Tacker. -See the `ETSI NFV-SOL CNF Deployment by Helm chart` for the original procedure. +See the `ETSI NFV-SOL CNF Deployment by Helm chart`_ for the original procedure. + +.. note:: + + This document focuses on some operations. See the Tacker `Use Case Guide`_ or `API Reference`_ for other operations. .. contents:: :depth: 3 @@ -15,6 +19,64 @@ See the `ETSI NFV-SOL CNF Deployment by Helm chart` for the original procedure. Prerequisites ------------- +Credentials Setting +~~~~~~~~~~~~~~~~~~~ + +To use Tacker CLI, you need to configure the credentials, please change the ``username`` and ``projectname`` to be executed according to your environment. + +.. code:: bash + + $ source ${devstack_dir}/openrc admin admin + +If you want to access Tacker via API, you need to get auth token by following procedure below. + +.. code:: bash + + # Create request body for issuing access token. + $ vi get_token.json + $ cat get_token.json + { + "auth": { + "identity": { + "methods": ["password"], + "password": { + "user": { + "domain": { + "name": "Default" + }, + "name": "admin", + "password": "devstack" + } + } + }, + "scope": { + "project": { + "domain": { + "name":"Default" + }, + "name":"admin" + } + } + } + } + + # Issue auth token for accessing via API. + $ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json http://192.168.121.170/identity/v3/auth/tokens + HTTP/1.1 201 CREATED + Date: Wed, 12 Apr 2023 07:22:44 GMT + Server: Apache/2.4.41 (Ubuntu) + Content-Type: application/json + Content-Length: 7469 + X-Subject-Token: gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + Vary: X-Auth-Token + x-openstack-request-id: req-e94aa763-9578-424b-affb-7ccab80db72c + Connection: close + + {"token": {"methods": ["password"], "user": {"domain": {"id": "default", "name": "Default"}, "id": "3e2f3db203e347bfa2197f8fdd038f39", "name": "admin", "password_expires_at": null}, "audit_ids": ["1pgGosVvR4azhw29woKvDw"], "expires_at": "2023-04-12T08:22:44.000000Z", "issued_at": "2023-04-12T07:22:44.000000Z", "project": {"domain": {"id": "default", "name": "Default"}, "id": "5af8bd4dd4ed4285ab1d45a95833cc67", "name": "admin"}, "is_domain": false, "roles": [{"id": "a039c220711049e0b77eac89a1504a81", "name": "reader"}, {"id": "57051bcc1fc24eb4875852a8ab32eae7", "name": "member"}, {"id": "029ea703a2534199a412b18cc5bfa31d", "name": "admin"}], "catalog": [{"endpoints": [{"id": "29307c3ec2f94553acbd7682e32602ba", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "45e5c5f2d4ce4841a980e29e6d3713f7", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "8d79900575e3490cb71ad6fe5ff0697c", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}], "id": "00c00313624d4c74aeaa55285e2c553d", "type": "workflowv2", "name": "mistral"}, {"endpoints": [{"id": "aafc7809d8a943d39d20490442ed87fa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "131f57b38d7e4874a18446ab50f3f37b", "type": "compute_legacy", "name": "nova_legacy"}, {"endpoints": [{"id": "e1cd2199468a4486a4df2ffe884b9026", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:12347/v1", "region": "RegionOne"}], "id": "4dc58229363a4e5fa3d863357554678b", "type": "maintenance", "name": "fenix"}, {"endpoints": [], "id": "53b114aa4c2b4cf7b642ef99e767e58c", "type": "kuryr-kubernetes", "name": "kuryr-kubernetes"}, {"endpoints": [{"id": "1156b12e11a04ac2ab4a674976e8bb3e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "191a35e87d824e72819c28790d6dac8d", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "99016e127b7d4f8483636f5531d994c9", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}], "id": "5d483e864b484f76a46266dc5640386b", "type": "metric", "name": "gnocchi"}, {"endpoints": [{"id": "d5ce793eee434288901795720538f811", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "5e5f3dc6efa545569f67f453a05ac234", "type": "block-storage", "name": "cinder"}, {"endpoints": [{"id": "6ed501fde45047fe9a3684cc791df953", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/load-balancer", "region": "RegionOne"}], "id": "8b06952a46f3448f9e88daccee3212a9", "type": "load-balancer", "name": "octavia"}, {"endpoints": [{"id": "548133af931b4c0ea8d015dbb67d4388", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "58f0b35802f442f4997318017a37cae9", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "c062a6ce0ab54ee699b863b38e15c50a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}], "id": "8ee29bc9aa6d4ddda69f7810b0c52ff5", "type": "identity", "name": "keystone"}, {"endpoints": [{"id": "7fdd1dac28874280928e6c9313b4a415", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api-cfn/v1", "region": "RegionOne"}], "id": "9605cce5cdad422f8934c891ac840fa7", "type": "cloudformation", "name": "heat-cfn"}, {"endpoints": [{"id": "53ed393173944da3bfac9d482907b65e", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "d6891cda1327453aa28155fd18e8596e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "fef7c489ad544e708d9c85e4a801e344", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}], "id": "a2c67888fc7a4f55a4001cd807293daf", "type": "nfv-orchestration", "name": "tacker"}, {"endpoints": [{"id": "413321647af94f2fb948e59c76bc2b87", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/placement", "region": "RegionOne"}], "id": "aa649b2a9f8644a184fd6857400328ab", "type": "placement", "name": "placement"}, {"endpoints": [{"id": "671a41088c4841d18c58db9ac8a97314", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9696/networking", "region": "RegionOne"}], "id": "b1abe9867d07457dbc7c84f37906300a", "type": "network", "name": "neutron"}, {"endpoints": [{"id": "ba3d670defb748a1b23a4697a7998fb7", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "b481211f6e5742f1913148ab157259ee", "type": "volumev3", "name": "cinderv3"}, {"endpoints": [{"id": "7eca8bcad7df40cda721a960a838f908", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api/v1/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "c7c437d0564f428db112516273ca2c0b", "type": "orchestration", "name": "heat"}, {"endpoints": [{"id": "2be3a59b29c04cf7a359ec8b973d334a", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "4258ac8e29084b5a82a48e55b2189284", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "d463ed0ea12a4b44974b9239d2c14a49", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}], "id": "d411db3bd28a44f7b7c0ae53d3f5bb7b", "type": "key-manager", "name": "barbican"}, {"endpoints": [{"id": "05dea080ccc8493b9aa6a22bfe9d7b2b", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2.1", "region": "RegionOne"}], "id": "d69f1f3988ee4809a9bb496f4f312bbd", "type": "compute", "name": "nova"}, {"endpoints": [{"id": "86e8d9e1998b4b9caf503dc58fc1297a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/reservation/v1", "region": "RegionOne"}], "id": "d81b4911762a4c419f3816c36adcdac1", "type": "reservation", "name": "blazar"}, {"endpoints": [{"id": "0b0195a6580d48bf94eed97a35603756", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "67d676a732bb4c67abcdc5f433e5b3aa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "f753f73beed8463fa3f594c29911c332", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}], "id": "ddd00c0c78b448438bb925776fdbb350", "type": "alarming", "name": "aodh"}, {"endpoints": [{"id": "a39c85e31b3446239f958cc96c634216", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/image", "region": "RegionOne"}], "id": "fe0a0e3590fa4fa69f395bcdc47f1241", "type": "image", "name": "glance"}]}} + + # Set ``X-Subject-Token`` to environment variables as ``TOKEN``. + $ TOKEN=gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + VIM ~~~ Register Kubernetes VIM (Virtualized Infrastructure Manager) by following procedure below. @@ -34,21 +96,46 @@ Register Kubernetes VIM (Virtualized Infrastructure Manager) by following proced 2. Register VIM to Tacker by running following command. - .. code:: bash + * via CLI command: + + .. code:: bash - $ source ${devstack_dir}/openrc admin admin - $ openstack vim register --config-file vim_config_k8s.yaml vim-kubernetes + $ openstack vim register --config-file vim_config_k8s.yaml vim-kubernetes + + * via API: + + .. code:: bash + + $ TACKER_ENDPOINT=http://192.168.121.170:9890 + $ K8S_ENDPOINT=https://192.168.121.170:6443 + $ K8S_TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6InZQOGs5bjhKdExWVkZiRU5reVZRdEtBS0pnYXJFemROcElKNFpIdEFtMXMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTk4am1qIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzZWJkZmEzZi0wMTA1LTRhN2YtODFjZS1kYjg5ODcxYTBiMDYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.df_mV4RbsRN6oOS2KnkaKid0cJBAvdpautWnK67R0y8PRSm79Vc02NbUCmai0M4QiIF9gKhqtM0OYB5vZYJJng9vkcSNVWFUv6hA4Tvjw8FnEcGWe7TnWE2q-ZywJYiZNHvToRIgP5EH5UuLACEXu8KeeG56LxL3T2qNsUenUYLYaT6EciwKiy5SaEk3H1BB0zvSff0d_6sPvGCtY4xL_Q1pqqdgeL2lwC7tcivwEyRy3rMp1FBRrWOVdyeybww0XiNfEnYOjFyVSI4ED2n2msIdz_2JoHAnphGO7nslpn3MmkO-K1Mnhk7EKiR0kgHboGXwQlcnjW4Cje77PjumPg + + $ curl -g -i -X POST ${TACKER_ENDPOINT}/v1.0/vims \ + -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" \ + -d '{"vim": {"auth_url": "'${K8S_ENDPOINT}'", "type": "kubernetes", "vim_project": {"name": "default"}, + "auth_cred": {"bearer_token": "'$K8S_TOKEN'"}, "name": "vim-kubernetes", "is_default": true}}' 3. Check the registered VIM status is ``REACHABLE``. - .. code:: bash + * via CLI command: + + .. code:: bash - $ openstack vim list - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ - | ID | Name | Tenant_id | Type | Is Default | Status | - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ - | 5a5815fa-bf1d-41f4-a824-3e39bbdcebd0 | vim-kubernetes | a51290751e094e608ad1e5e251b8cd39 | kubernetes | True | REACHABLE | - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + $ openstack vim list + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | ID | Name | Tenant_id | Type | Is Default | Status | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | 5a5815fa-bf1d-41f4-a824-3e39bbdcebd0 | vim-kubernetes | a51290751e094e608ad1e5e251b8cd39 | kubernetes | True | REACHABLE | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + + * via API: + + .. code:: bash + + $ curl -g -X GET ${TACKER_ENDPOINT}/v1.0/vims \ + -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" \ + | jq -r '.vims[] | .id + ": " + .status' + 5a5815fa-bf1d-41f4-a824-3e39bbdcebd0: REACHABLE Helm Environment ~~~~~~~~~~~~~~~~ @@ -58,7 +145,7 @@ Create an executable environment for Helm CLI by following procedure below. .. code:: bash - $ HELM_VERSION="3.10.0" # Change to version that is compatible with your cluster + $ HELM_VERSION="3.10.3" # Change to version that is compatible with your cluster $ wget -P /tmp https://get.helm.sh/helm-v$HELM_VERSION-linux-amd64.tar.gz $ tar zxf /tmp/helm-v$HELM_VERSION-linux-amd64.tar.gz -C /tmp $ sudo mv /tmp/linux-amd64/helm /usr/local/bin/helm @@ -108,69 +195,91 @@ Create and upload the VNF Package that you want to deploy by following procedure 2. Create and Upload VNF Package. - .. code:: bash + * via CLI command: - $ openstack vnf package create - +-------------------+-------------------------------------------------------------------------------------------------+ - | Field | Value | - +-------------------+-------------------------------------------------------------------------------------------------+ - | ID | 1efcf585-3fea-4813-88dd-bbc93692b51a | - | Links | { | - | | "self": { | - | | "href": "/vnfpkgm/v1/vnf_packages/1efcf585-3fea-4813-88dd-bbc93692b51a" | - | | }, | - | | "packageContent": { | - | | "href": "/vnfpkgm/v1/vnf_packages/1efcf585-3fea-4813-88dd-bbc93692b51a/package_content" | - | | } | - | | } | - | Onboarding State | CREATED | - | Operational State | DISABLED | - | Usage State | NOT_IN_USE | - | User Defined Data | {} | - +-------------------+-------------------------------------------------------------------------------------------------+ - - $ openstack vnf package upload --path sample_cnf_package.zip 1efcf585-3fea-4813-88dd-bbc93692b51a - Upload request for VNF package 1efcf585-3fea-4813-88dd-bbc93692b51a has been accepted. + .. code:: bash + $ openstack vnf package create + +-------------------+-------------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------------+-------------------------------------------------------------------------------------------------+ + | ID | 1efcf585-3fea-4813-88dd-bbc93692b51a | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/1efcf585-3fea-4813-88dd-bbc93692b51a" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/1efcf585-3fea-4813-88dd-bbc93692b51a/package_content" | + | | } | + | | } | + | Onboarding State | CREATED | + | Operational State | DISABLED | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + +-------------------+-------------------------------------------------------------------------------------------------+ -Deployment Procedure --------------------- + $ openstack vnf package upload --path sample_cnf_package.zip 1efcf585-3fea-4813-88dd-bbc93692b51a + Upload request for VNF package 1efcf585-3fea-4813-88dd-bbc93692b51a has been accepted. -.. note:: + * via API: - This procedure uses the CLI available by installing python-tackerclient. - If you want to process with RESTfull API, see the :doc:`api-docs` for more information. + .. code:: bash + + $ VNFP_ID=$(curl -s -X POST ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -d '{}' | jq -r '.id') + + $ VNFP_CONTENTS=./sample_cnf_package.zip + + $ curl -i -X PUT ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID/package_content \ + -H "Content-type: application/zip" -H "X-Auth-Token:$TOKEN" -H "Accept:application/zip" \ + -F vnf_package_content=@${VNFP_CONTENTS} + +Deployment Procedure +-------------------- Create ~~~~~~ Create a VNF Instance by specifying the VNFD ID. The VNFD ID is the value defined in the VNFD file and can be found in the :command:`openstack vnf package show` command. -.. code:: bash - - $ openstack vnflcm create 37391b92-a1d9-44e5-855a-83644cdc3265 - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | ID | b0915924-7e04-4c16-b229-d3dfcc366eee | - | Instantiation State | NOT_INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee" | - | | }, | - | | "instantiate": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/instantiate" | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | None | - | VNF Instance Name | vnf-b0915924-7e04-4c16-b229-d3dfcc366eee | - | VNF Product Name | Sample CNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | - | VNFD Version | 1.0 | - | vnfPkgId | | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ +* via CLI command: + + .. code:: bash + + $ openstack vnflcm create 37391b92-a1d9-44e5-855a-83644cdc3265 + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | ID | b0915924-7e04-4c16-b229-d3dfcc366eee | + | Instantiation State | NOT_INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee" | + | | }, | + | | "instantiate": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/instantiate" | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | None | + | VNF Instance Name | vnf-b0915924-7e04-4c16-b229-d3dfcc366eee | + | VNF Product Name | Sample CNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | + | VNFD Version | 1.0 | + | vnfPkgId | | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + +* via API: + + .. code:: bash + + $ VNFD_ID=$(curl -s -X GET ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID \ + -H "X-Auth-Token:$TOKEN" | jq -r '.vnfdId') + + $ VNF_INST_ID=$(curl -sS -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d '{ "vnfdId": "'$VNFD_ID'"}' | jq -r '.id') Instantiate ~~~~~~~~~~~ @@ -204,8 +313,20 @@ Instantiate a VNF by specifying the ID of the created VNF Instance and a file pa ] } - $ openstack vnflcm instantiate b0915924-7e04-4c16-b229-d3dfcc366eee input_param.json - Instantiate request for VNF Instance b0915924-7e04-4c16-b229-d3dfcc366eee has been accepted. +* via CLI command: + + .. code:: bash + + $ openstack vnflcm instantiate b0915924-7e04-4c16-b229-d3dfcc366eee input_param.json + Instantiate request for VNF Instance b0915924-7e04-4c16-b229-d3dfcc366eee has been accepted. + +* via API: + + .. code:: bash + + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID/instantiate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d @./input_param.json You can verify that the deployment was successful in the following ways: @@ -214,86 +335,112 @@ You can verify that the deployment was successful in the following ways: * ``Instantiation State`` became ``INSTANTIATED``. * Deployed resource information is stored in ``vnfcResourceInfo`` of ``Instantiated Vnf Info``. - .. code:: bash - - $ openstack vnflcm show b0915924-7e04-4c16-b229-d3dfcc366eee - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | ID | b0915924-7e04-4c16-b229-d3dfcc366eee | - | Instantiated Vnf Info | { | - | | "flavourId": "helmchart", | - | | "vnfState": "STARTED", | - | | "scaleStatus": [ | - | | { | - | | "aspectId": "vdu1_aspect", | - | | "scaleLevel": 0 | - | | } | - | | ], | - | | "extCpInfo": [], | - | | "vnfcResourceInfo": [ | - | | { | - | | "id": "df202937-2bb8-40a9-8be0-a8aa5e2ec0ae", | - | | "vduId": "VDU1", | - | | "computeResource": { | - | | "vimConnectionId": null, | - | | "resourceId": "tacker-test-vdu-localhelm-7b5489f949-fzmc5", | - | | "vimLevelResourceType": "Deployment" | - | | }, | - | | "storageResourceIds": [] | - | | } | - | | ], | - | | "additionalParams": { | - | | "useHelm": "true", | - | | "namespace": "default", | - | | "helmReplicaValues": { | - | | "vdu1Aspect": "replicaCount" | - | | }, | - | | "usingHelmInstallParam": [ | - | | { | - | | "exthelmchart": "false", | - | | "helmreleasename": "tacker-test-vdu", | - | | "helmchartfilePath": "Files/kubernetes/localhelm-0.1.0.tgz" | - | | } | - | | ] | - | | } | - | | } | - | Instantiation State | INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee" | - | | }, | - | | "terminate": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/terminate" | - | | }, | - | | "heal": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/heal" | - | | }, | - | | "changeExtConn": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/change_ext_conn" | - | | } | - | | } | - | VIM Connection Info | [ | - | | { | - | | "id": "742f1fc7-7f00-417d-85a6-d4e788353181", | - | | "vimId": "5a5815fa-bf1d-41f4-a824-3e39bbdcebd0", | - | | "vimType": "kubernetes", | - | | "interfaceInfo": {}, | - | | "accessInfo": {}, | - | | "extra": {} | - | | } | - | | ] | - | VNF Configurable Properties | | - | VNF Instance Description | None | - | VNF Instance Name | vnf-b0915924-7e04-4c16-b229-d3dfcc366eee | - | VNF Product Name | Sample CNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | - | VNFD Version | 1.0 | - | metadata | namespace=default | - | vnfPkgId | | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + * via CLI command: + + .. code:: bash + + $ openstack vnflcm show b0915924-7e04-4c16-b229-d3dfcc366eee + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | ID | b0915924-7e04-4c16-b229-d3dfcc366eee | + | Instantiated Vnf Info | { | + | | "flavourId": "helmchart", | + | | "vnfState": "STARTED", | + | | "scaleStatus": [ | + | | { | + | | "aspectId": "vdu1_aspect", | + | | "scaleLevel": 0 | + | | } | + | | ], | + | | "extCpInfo": [], | + | | "vnfcResourceInfo": [ | + | | { | + | | "id": "df202937-2bb8-40a9-8be0-a8aa5e2ec0ae", | + | | "vduId": "VDU1", | + | | "computeResource": { | + | | "vimConnectionId": null, | + | | "resourceId": "tacker-test-vdu-localhelm-7b5489f949-fzmc5", | + | | "vimLevelResourceType": "Deployment" | + | | }, | + | | "storageResourceIds": [] | + | | } | + | | ], | + | | "additionalParams": { | + | | "useHelm": "true", | + | | "namespace": "default", | + | | "helmReplicaValues": { | + | | "vdu1Aspect": "replicaCount" | + | | }, | + | | "usingHelmInstallParam": [ | + | | { | + | | "exthelmchart": "false", | + | | "helmreleasename": "tacker-test-vdu", | + | | "helmchartfilePath": "Files/kubernetes/localhelm-0.1.0.tgz" | + | | } | + | | ] | + | | } | + | | } | + | Instantiation State | INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee" | + | | }, | + | | "terminate": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/terminate" | + | | }, | + | | "heal": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/heal" | + | | }, | + | | "changeExtConn": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/b0915924-7e04-4c16-b229-d3dfcc366eee/change_ext_conn" | + | | } | + | | } | + | VIM Connection Info | [ | + | | { | + | | "id": "742f1fc7-7f00-417d-85a6-d4e788353181", | + | | "vimId": "5a5815fa-bf1d-41f4-a824-3e39bbdcebd0", | + | | "vimType": "kubernetes", | + | | "interfaceInfo": {}, | + | | "accessInfo": {}, | + | | "extra": {} | + | | } | + | | ] | + | VNF Configurable Properties | | + | VNF Instance Description | None | + | VNF Instance Name | vnf-b0915924-7e04-4c16-b229-d3dfcc366eee | + | VNF Product Name | Sample CNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | 37391b92-a1d9-44e5-855a-83644cdc3265 | + | VNFD Version | 1.0 | + | metadata | namespace=default | + | vnfPkgId | | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + + * via API: + + .. code:: bash + + $ curl -X GET ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + | jq -r '{ instantiationState: .instantiationState, + vnfcResourceInfo: .instantiatedVnfInfo.vnfcResourceInfo }' + { + "instantiationState": "INSTANTIATED", + "vnfcResourceInfo": [ + { + "id": "df202937-2bb8-40a9-8be0-a8aa5e2ec0ae", + "vduId": "VDU1", + "computeResource": { + "vimConnectionId": null, + "resourceId": "tacker-test-vdu-localhelm-7b5489f949-fzmc5", + "vimLevelResourceType": "Deployment" + }, + "storageResourceIds": [] + } + ] + } 2. Verify the CNF resources that were actually created as follows: @@ -315,12 +462,23 @@ Terminate ~~~~~~~~~ Terminate a VNF by specifying the VNF Instance ID. -.. code:: bash +* via CLI command: + + .. code:: bash + + $ openstack vnflcm terminate b0915924-7e04-4c16-b229-d3dfcc366eee + Terminate request for VNF Instance 'b0915924-7e04-4c16-b229-d3dfcc366eee' has been accepted. + +* via API: - $ openstack vnflcm terminate b0915924-7e04-4c16-b229-d3dfcc366eee - Terminate request for VNF Instance 'b0915924-7e04-4c16-b229-d3dfcc366eee' has been accepted. + .. code:: bash + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID/terminate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d '{"terminationType": "FORCEFUL"}' .. _ETSI NFV-SOL CNF Deployment by Helm chart: https://docs.openstack.org/tacker/latest/user/mgmt_driver_deploy_k8s_and_cnf_with_helm.html#etsi-nfv-sol-cnf-deployment-by-helm-chart +.. _Use Case Guide: https://docs.openstack.org/tacker/latest/user/etsi_use_case_guide.html +.. _API Reference: https://docs.openstack.org/api-ref/nfv-orchestration .. _INF O2 Service Userguide: https://docs.o-ran-sc.org/projects/o-ran-sc-pti-o2/en/latest/user-guide.html .. _Prepare VNF Package: https://docs.openstack.org/tacker/latest/user/mgmt_driver_deploy_k8s_and_cnf_with_helm.html#prepare-vnf-package diff --git a/docs/tacker-user-guide-vnf-v2.rst b/docs/tacker-user-guide-vnf-v2.rst index 401657e..a40df27 100644 --- a/docs/tacker-user-guide-vnf-v2.rst +++ b/docs/tacker-user-guide-vnf-v2.rst @@ -6,7 +6,11 @@ How to deploy VNF Deployment (V2 API) ===================================== This user guide shows how to deploy VNF (Virtualized Network Function) via Tacker. -See the `ETSI NFV-SOL VNF Deployment` for the original procedure. +See the `ETSI NFV-SOL VNF Deployment`_ for the original procedure. + +.. note:: + + This document focuses on some operations. See the Tacker `Use Case Guide`_ or `API Reference`_ for other operations. .. contents:: :depth: 3 @@ -15,6 +19,65 @@ See the `ETSI NFV-SOL VNF Deployment` for the original procedure. Prerequisites ------------- +Credentials Setting +~~~~~~~~~~~~~~~~~~~ + +To use Tacker CLI, you need to configure the credentials, please change the ``username`` and ``projectname`` to be executed according to your environment. + +.. code:: bash + + $ source ${devstack_dir}/openrc admin admin + +If you want to access Tacker via API, you need to get auth token by following procedure below. + +.. code:: bash + + # Create request body for issuing access token. + $ vi get_token.json + $ cat get_token.json + { + "auth": { + "identity": { + "methods": ["password"], + "password": { + "user": { + "domain": { + "name": "Default" + }, + "name": "admin", + "password": "devstack" + } + } + }, + "scope": { + "project": { + "domain": { + "name":"Default" + }, + "name":"admin" + } + } + } + } + + # Issue auth token for accessing via API. + $ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json http://192.168.121.170/identity/v3/auth/tokens + HTTP/1.1 201 CREATED + Date: Wed, 12 Apr 2023 07:22:44 GMT + Server: Apache/2.4.41 (Ubuntu) + Content-Type: application/json + Content-Length: 7469 + X-Subject-Token: gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + Vary: X-Auth-Token + x-openstack-request-id: req-e94aa763-9578-424b-affb-7ccab80db72c + Connection: close + + {"token": {"methods": ["password"], "user": {"domain": {"id": "default", "name": "Default"}, "id": "3e2f3db203e347bfa2197f8fdd038f39", "name": "admin", "password_expires_at": null}, "audit_ids": ["1pgGosVvR4azhw29woKvDw"], "expires_at": "2023-04-12T08:22:44.000000Z", "issued_at": "2023-04-12T07:22:44.000000Z", "project": {"domain": {"id": "default", "name": "Default"}, "id": "5af8bd4dd4ed4285ab1d45a95833cc67", "name": "admin"}, "is_domain": false, "roles": [{"id": "a039c220711049e0b77eac89a1504a81", "name": "reader"}, {"id": "57051bcc1fc24eb4875852a8ab32eae7", "name": "member"}, {"id": "029ea703a2534199a412b18cc5bfa31d", "name": "admin"}], "catalog": [{"endpoints": [{"id": "29307c3ec2f94553acbd7682e32602ba", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "45e5c5f2d4ce4841a980e29e6d3713f7", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "8d79900575e3490cb71ad6fe5ff0697c", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}], "id": "00c00313624d4c74aeaa55285e2c553d", "type": "workflowv2", "name": "mistral"}, {"endpoints": [{"id": "aafc7809d8a943d39d20490442ed87fa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "131f57b38d7e4874a18446ab50f3f37b", "type": "compute_legacy", "name": "nova_legacy"}, {"endpoints": [{"id": "e1cd2199468a4486a4df2ffe884b9026", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:12347/v1", "region": "RegionOne"}], "id": "4dc58229363a4e5fa3d863357554678b", "type": "maintenance", "name": "fenix"}, {"endpoints": [], "id": "53b114aa4c2b4cf7b642ef99e767e58c", "type": "kuryr-kubernetes", "name": "kuryr-kubernetes"}, {"endpoints": [{"id": "1156b12e11a04ac2ab4a674976e8bb3e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "191a35e87d824e72819c28790d6dac8d", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "99016e127b7d4f8483636f5531d994c9", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}], "id": "5d483e864b484f76a46266dc5640386b", "type": "metric", "name": "gnocchi"}, {"endpoints": [{"id": "d5ce793eee434288901795720538f811", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "5e5f3dc6efa545569f67f453a05ac234", "type": "block-storage", "name": "cinder"}, {"endpoints": [{"id": "6ed501fde45047fe9a3684cc791df953", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/load-balancer", "region": "RegionOne"}], "id": "8b06952a46f3448f9e88daccee3212a9", "type": "load-balancer", "name": "octavia"}, {"endpoints": [{"id": "548133af931b4c0ea8d015dbb67d4388", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "58f0b35802f442f4997318017a37cae9", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "c062a6ce0ab54ee699b863b38e15c50a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}], "id": "8ee29bc9aa6d4ddda69f7810b0c52ff5", "type": "identity", "name": "keystone"}, {"endpoints": [{"id": "7fdd1dac28874280928e6c9313b4a415", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api-cfn/v1", "region": "RegionOne"}], "id": "9605cce5cdad422f8934c891ac840fa7", "type": "cloudformation", "name": "heat-cfn"}, {"endpoints": [{"id": "53ed393173944da3bfac9d482907b65e", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "d6891cda1327453aa28155fd18e8596e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "fef7c489ad544e708d9c85e4a801e344", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}], "id": "a2c67888fc7a4f55a4001cd807293daf", "type": "nfv-orchestration", "name": "tacker"}, {"endpoints": [{"id": "413321647af94f2fb948e59c76bc2b87", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/placement", "region": "RegionOne"}], "id": "aa649b2a9f8644a184fd6857400328ab", "type": "placement", "name": "placement"}, {"endpoints": [{"id": "671a41088c4841d18c58db9ac8a97314", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9696/networking", "region": "RegionOne"}], "id": "b1abe9867d07457dbc7c84f37906300a", "type": "network", "name": "neutron"}, {"endpoints": [{"id": "ba3d670defb748a1b23a4697a7998fb7", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "b481211f6e5742f1913148ab157259ee", "type": "volumev3", "name": "cinderv3"}, {"endpoints": [{"id": "7eca8bcad7df40cda721a960a838f908", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api/v1/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "c7c437d0564f428db112516273ca2c0b", "type": "orchestration", "name": "heat"}, {"endpoints": [{"id": "2be3a59b29c04cf7a359ec8b973d334a", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "4258ac8e29084b5a82a48e55b2189284", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "d463ed0ea12a4b44974b9239d2c14a49", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}], "id": "d411db3bd28a44f7b7c0ae53d3f5bb7b", "type": "key-manager", "name": "barbican"}, {"endpoints": [{"id": "05dea080ccc8493b9aa6a22bfe9d7b2b", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2.1", "region": "RegionOne"}], "id": "d69f1f3988ee4809a9bb496f4f312bbd", "type": "compute", "name": "nova"}, {"endpoints": [{"id": "86e8d9e1998b4b9caf503dc58fc1297a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/reservation/v1", "region": "RegionOne"}], "id": "d81b4911762a4c419f3816c36adcdac1", "type": "reservation", "name": "blazar"}, {"endpoints": [{"id": "0b0195a6580d48bf94eed97a35603756", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "67d676a732bb4c67abcdc5f433e5b3aa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "f753f73beed8463fa3f594c29911c332", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}], "id": "ddd00c0c78b448438bb925776fdbb350", "type": "alarming", "name": "aodh"}, {"endpoints": [{"id": "a39c85e31b3446239f958cc96c634216", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/image", "region": "RegionOne"}], "id": "fe0a0e3590fa4fa69f395bcdc47f1241", "type": "image", "name": "glance"}]}} + + # Set ``X-Subject-Token`` to environment variables as ``TOKEN``. + $ TOKEN=gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + + VNF Package ~~~~~~~~~~~ Create and upload the VNF Package that you want to deploy by following procedure below. @@ -36,68 +99,93 @@ Create and upload the VNF Package that you want to deploy by following procedure 2. Create and Upload VNF Package. - .. code:: bash + * via CLI command: - $ openstack vnf package create - +-------------------+-------------------------------------------------------------------------------------------------+ - | Field | Value | - +-------------------+-------------------------------------------------------------------------------------------------+ - | ID | 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 | - | Links | { | - | | "self": { | - | | "href": "/vnfpkgm/v1/vnf_packages/18e7b0ec-d006-4b84-8bc5-84f85cfbfff9" | - | | }, | - | | "packageContent": { | - | | "href": "/vnfpkgm/v1/vnf_packages/18e7b0ec-d006-4b84-8bc5-84f85cfbfff9/package_content" | - | | } | - | | } | - | Onboarding State | CREATED | - | Operational State | DISABLED | - | Usage State | NOT_IN_USE | - | User Defined Data | {} | - +-------------------+-------------------------------------------------------------------------------------------------+ - - - $ openstack vnf package upload --path sample_vnf_package_v2.zip 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 - Upload request for VNF package 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 has been accepted. + .. code:: bash -Deployment Procedure --------------------- + $ openstack vnf package create + +-------------------+-------------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------------+-------------------------------------------------------------------------------------------------+ + | ID | 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/18e7b0ec-d006-4b84-8bc5-84f85cfbfff9" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/18e7b0ec-d006-4b84-8bc5-84f85cfbfff9/package_content" | + | | } | + | | } | + | Onboarding State | CREATED | + | Operational State | DISABLED | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + +-------------------+-------------------------------------------------------------------------------------------------+ -.. note:: - This procedure uses the CLI available by installing python-tackerclient. - If you want to process with RESTfull API, see the :doc:`api-docs` for more information. + $ openstack vnf package upload --path sample_vnf_package_v2.zip 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 + Upload request for VNF package 18e7b0ec-d006-4b84-8bc5-84f85cfbfff9 has been accepted. + + * via API: + + .. code:: bash + + $ TACKER_ENDPOINT=http://192.168.121.170:9890 + $ VNFP_ID=$(curl -s -X POST ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -d '{}' | jq -r '.id') + + $ VNFP_CONTENTS=./sample_vnf_package_v2.zip + + $ curl -i -X PUT ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID/package_content \ + -H "Content-type: application/zip" -H "X-Auth-Token:$TOKEN" -H "Accept:application/zip" \ + -F vnf_package_content=@${VNFP_CONTENTS} + + +Deployment Procedure +-------------------- Create ~~~~~~ Create a VNF Instance by specifying the VNFD ID. The VNFD ID is the value defined in the VNFD file and can be found in the :command:`openstack vnf package show` command. -.. code:: bash - - $ openstack vnflcm create e9214953-47d5-45bd-91d1-502accfbe967 --os-tacker-api-version 2 - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | ID | ae844932-730a-4063-ad1d-7e3f7f9d82d1 | - | Instantiation State | NOT_INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1" | - | | }, | - | | "instantiate": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/instantiate" | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | | - | VNF Instance Name | | - | VNF Product Name | Sample VNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | e9214953-47d5-45bd-91d1-502accfbe967 | - | VNFD Version | 1.0 | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ +* via CLI command: + + .. code:: bash + + $ openstack vnflcm create e9214953-47d5-45bd-91d1-502accfbe967 --os-tacker-api-version 2 + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | ID | ae844932-730a-4063-ad1d-7e3f7f9d82d1 | + | Instantiation State | NOT_INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1" | + | | }, | + | | "instantiate": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/instantiate" | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | | + | VNF Instance Name | | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | e9214953-47d5-45bd-91d1-502accfbe967 | + | VNFD Version | 1.0 | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + +* via API: + + .. code:: bash + + $ VNFD_ID=$(curl -s -X GET ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID \ + -H "X-Auth-Token:$TOKEN" | jq -r '.vnfdId') + + $ VNF_INST_ID=$(curl -sS -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d '{ "vnfdId": "'$VNFD_ID'"}' | jq -r '.id') Instantiate ~~~~~~~~~~~ @@ -131,8 +219,21 @@ V2 API allows you to insert VIM connection information directly into the instant } } - $ openstack vnflcm instantiate ae844932-730a-4063-ad1d-7e3f7f9d82d1 input_param.json --os-tacker-api-version 2 - Instantiate request for VNF Instance ae844932-730a-4063-ad1d-7e3f7f9d82d1 has been accepted. + +* via CLI command: + + .. code:: bash + + $ openstack vnflcm instantiate ae844932-730a-4063-ad1d-7e3f7f9d82d1 input_param.json --os-tacker-api-version 2 + Instantiate request for VNF Instance ae844932-730a-4063-ad1d-7e3f7f9d82d1 has been accepted. + +* via API: + + .. code:: bash + + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID/instantiate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d @./input_param.json You can verify that the deployment was successful in the following ways: @@ -141,172 +242,234 @@ You can verify that the deployment was successful in the following ways: * ``Instantiation State`` became ``INSTANTIATED``. * Deployed resource information is stored in ``vnfcResourceInfo`` of ``Instantiated Vnf Info``. - .. code:: bash - - $ openstack vnflcm show ae844932-730a-4063-ad1d-7e3f7f9d82d1 --os-tacker-api-version 2 - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | ID | ae844932-730a-4063-ad1d-7e3f7f9d82d1 | - | Instantiated Vnf Info | { | - | | "flavourId": "simple", | - | | "vnfState": "STARTED", | - | | "scaleStatus": [ | - | | { | - | | "aspectId": "VDU1_scale", | - | | "scaleLevel": 0 | - | | } | - | | ], | - | | "maxScaleLevels": [ | - | | { | - | | "aspectId": "VDU1_scale", | - | | "scaleLevel": 2 | - | | } | - | | ], | - | | "vnfcResourceInfo": [ | - | | { | - | | "id": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "vduId": "VDU1", | - | | "computeResource": { | - | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "resourceId": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "vimLevelResourceType": "OS::Nova::Server" | - | | }, | - | | "vnfcCpInfo": [ | - | | { | - | | "id": "VDU1_CP1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "cpdId": "VDU1_CP1", | - | | "vnfLinkPortId": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17" | - | | } | - | | ], | - | | "metadata": { | - | | "creation_time": "2023-04-07T09:49:22Z", | - | | "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj-mc4dbvvk73vc- | - | | edjhilnlkdww/de2707cf-f222-4c97-9c29-33404a50df94", | - | | "parent_stack_id": "vnf- | - | | ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj/3eecd59f-5476-47f5-8135-62debac7499b", | - | | "parent_resource_name": "mc4dbvvk73vc", | - | | "flavor": "m1.tiny", | - | | "image-VDU1": "cirros-0.5.2-x86_64-disk" | - | | } | - | | }, | - | | { | - | | "id": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "vduId": "VDU2", | - | | "computeResource": { | - | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "resourceId": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "vimLevelResourceType": "OS::Nova::Server" | - | | }, | - | | "vnfcCpInfo": [ | - | | { | - | | "id": "VDU2_CP1-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "cpdId": "VDU2_CP1", | - | | "vnfLinkPortId": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b" | - | | } | - | | ], | - | | "metadata": { | - | | "creation_time": "2023-04-07T09:49:14Z", | - | | "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1/87e00a91-17d7-496e-b30e-a99af1a6726e", | - | | "flavor": "m1.tiny", | - | | "image-VDU2": "cirros-0.5.2-x86_64-disk" | - | | } | - | | } | - | | ], | - | | "vnfVirtualLinkResourceInfo": [ | - | | { | - | | "id": "c2688b4d-f444-4a9c-b5d1-e25766082a14", | - | | "vnfVirtualLinkDescId": "internalVL3", | - | | "networkResource": { | - | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "resourceId": "c2688b4d-f444-4a9c-b5d1-e25766082a14", | - | | "vimLevelResourceType": "OS::Neutron::Net" | - | | }, | - | | "vnfLinkPorts": [ | - | | { | - | | "id": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b", | - | | "resourceHandle": { | - | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "resourceId": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b", | - | | "vimLevelResourceType": "OS::Neutron::Port" | - | | }, | - | | "cpInstanceId": "VDU2_CP1-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "cpInstanceType": "VNFC_CP" | - | | }, | - | | { | - | | "id": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17", | - | | "resourceHandle": { | - | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "resourceId": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17", | - | | "vimLevelResourceType": "OS::Neutron::Port" | - | | }, | - | | "cpInstanceId": "VDU1_CP1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "cpInstanceType": "VNFC_CP" | - | | } | - | | ] | - | | } | - | | ], | - | | "vnfcInfo": [ | - | | { | - | | "id": "VDU1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "vduId": "VDU1", | - | | "vnfcResourceInfoId": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | - | | "vnfcState": "STARTED" | - | | }, | - | | { | - | | "id": "VDU2-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "vduId": "VDU2", | - | | "vnfcResourceInfoId": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | - | | "vnfcState": "STARTED" | - | | } | - | | ], | - | | "metadata": { | - | | "stack_id": "87e00a91-17d7-496e-b30e-a99af1a6726e" | - | | } | - | | } | - | Instantiation State | INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1" | - | | }, | - | | "terminate": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/terminate" | - | | }, | - | | "scale": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/scale" | - | | }, | - | | "heal": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/heal" | - | | }, | - | | "changeExtConn": { | - | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/change_ext_conn" | - | | } | - | | } | - | VIM Connection Info | { | - | | "vim1": { | - | | "vimId": "defb2f96-5670-4bef-8036-27bf61267fc1", | - | | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3", | - | | "interfaceInfo": { | - | | "endpoint": "http://192.168.121.170/identity" | - | | }, | - | | "accessInfo": { | - | | "region": "RegionOne", | - | | "project": "admin", | - | | "username": "admin", | - | | "userDomain": "Default", | - | | "projectDomain": "Default" | - | | } | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | | - | VNF Instance Name | | - | VNF Product Name | Sample VNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | e9214953-47d5-45bd-91d1-502accfbe967 | - | VNFD Version | 1.0 | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + * via CLI command: + + .. code:: bash + + $ openstack vnflcm show ae844932-730a-4063-ad1d-7e3f7f9d82d1 --os-tacker-api-version 2 + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | ID | ae844932-730a-4063-ad1d-7e3f7f9d82d1 | + | Instantiated Vnf Info | { | + | | "flavourId": "simple", | + | | "vnfState": "STARTED", | + | | "scaleStatus": [ | + | | { | + | | "aspectId": "VDU1_scale", | + | | "scaleLevel": 0 | + | | } | + | | ], | + | | "maxScaleLevels": [ | + | | { | + | | "aspectId": "VDU1_scale", | + | | "scaleLevel": 2 | + | | } | + | | ], | + | | "vnfcResourceInfo": [ | + | | { | + | | "id": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "vduId": "VDU1", | + | | "computeResource": { | + | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "resourceId": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "vimLevelResourceType": "OS::Nova::Server" | + | | }, | + | | "vnfcCpInfo": [ | + | | { | + | | "id": "VDU1_CP1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "cpdId": "VDU1_CP1", | + | | "vnfLinkPortId": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17" | + | | } | + | | ], | + | | "metadata": { | + | | "creation_time": "2023-04-07T09:49:22Z", | + | | "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj-mc4dbvvk73vc- | + | | edjhilnlkdww/de2707cf-f222-4c97-9c29-33404a50df94", | + | | "parent_stack_id": "vnf- | + | | ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj/3eecd59f-5476-47f5-8135-62debac7499b", | + | | "parent_resource_name": "mc4dbvvk73vc", | + | | "flavor": "m1.tiny", | + | | "image-VDU1": "cirros-0.5.2-x86_64-disk" | + | | } | + | | }, | + | | { | + | | "id": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "vduId": "VDU2", | + | | "computeResource": { | + | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "resourceId": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "vimLevelResourceType": "OS::Nova::Server" | + | | }, | + | | "vnfcCpInfo": [ | + | | { | + | | "id": "VDU2_CP1-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "cpdId": "VDU2_CP1", | + | | "vnfLinkPortId": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b" | + | | } | + | | ], | + | | "metadata": { | + | | "creation_time": "2023-04-07T09:49:14Z", | + | | "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1/87e00a91-17d7-496e-b30e-a99af1a6726e", | + | | "flavor": "m1.tiny", | + | | "image-VDU2": "cirros-0.5.2-x86_64-disk" | + | | } | + | | } | + | | ], | + | | "vnfVirtualLinkResourceInfo": [ | + | | { | + | | "id": "c2688b4d-f444-4a9c-b5d1-e25766082a14", | + | | "vnfVirtualLinkDescId": "internalVL3", | + | | "networkResource": { | + | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "resourceId": "c2688b4d-f444-4a9c-b5d1-e25766082a14", | + | | "vimLevelResourceType": "OS::Neutron::Net" | + | | }, | + | | "vnfLinkPorts": [ | + | | { | + | | "id": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b", | + | | "resourceHandle": { | + | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "resourceId": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b", | + | | "vimLevelResourceType": "OS::Neutron::Port" | + | | }, | + | | "cpInstanceId": "VDU2_CP1-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "cpInstanceType": "VNFC_CP" | + | | }, | + | | { | + | | "id": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17", | + | | "resourceHandle": { | + | | "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "resourceId": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17", | + | | "vimLevelResourceType": "OS::Neutron::Port" | + | | }, | + | | "cpInstanceId": "VDU1_CP1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "cpInstanceType": "VNFC_CP" | + | | } | + | | ] | + | | } | + | | ], | + | | "vnfcInfo": [ | + | | { | + | | "id": "VDU1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "vduId": "VDU1", | + | | "vnfcResourceInfoId": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", | + | | "vnfcState": "STARTED" | + | | }, | + | | { | + | | "id": "VDU2-9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "vduId": "VDU2", | + | | "vnfcResourceInfoId": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", | + | | "vnfcState": "STARTED" | + | | } | + | | ], | + | | "metadata": { | + | | "stack_id": "87e00a91-17d7-496e-b30e-a99af1a6726e" | + | | } | + | | } | + | Instantiation State | INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1" | + | | }, | + | | "terminate": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/terminate" | + | | }, | + | | "scale": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/scale" | + | | }, | + | | "heal": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/heal" | + | | }, | + | | "changeExtConn": { | + | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/ae844932-730a-4063-ad1d-7e3f7f9d82d1/change_ext_conn" | + | | } | + | | } | + | VIM Connection Info | { | + | | "vim1": { | + | | "vimId": "defb2f96-5670-4bef-8036-27bf61267fc1", | + | | "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3", | + | | "interfaceInfo": { | + | | "endpoint": "http://192.168.121.170/identity" | + | | }, | + | | "accessInfo": { | + | | "region": "RegionOne", | + | | "project": "admin", | + | | "username": "admin", | + | | "userDomain": "Default", | + | | "projectDomain": "Default" | + | | } | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | | + | VNF Instance Name | | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | e9214953-47d5-45bd-91d1-502accfbe967 | + | VNFD Version | 1.0 | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + + * via API: + + .. code:: bash + + $ curl -X GET ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + | jq -r '{ instantiationState: .instantiationState, + vnfcResourceInfo: .instantiatedVnfInfo.vnfcResourceInfo }' + { + "instantiationState": "INSTANTIATED", + "vnfcResourceInfo": [ + { + "id": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", + "vduId": "VDU1", + "computeResource": { + "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", + "resourceId": "5f201bdf-671b-4ba8-9c19-35eb9717ea9d", + "vimLevelResourceType": "OS::Nova::Server" + }, + "vnfcCpInfo": [ + { + "id": "VDU1_CP1-5f201bdf-671b-4ba8-9c19-35eb9717ea9d", + "cpdId": "VDU1_CP1", + "vnfLinkPortId": "09a8a6ab-9a43-4d3a-9cf8-92b18dd74d17" + } + ], + "metadata": { + "creation_time": "2023-04-07T09:49:22Z", + "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj-mc4dbvvk73vc-edjhilnlkdww/de2707cf-f222-4c97-9c29-33404a50df94", + "parent_stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1-VDU1_scale_group-4qhp7z3cangj/3eecd59f-5476-47f5-8135-62debac7499b", + "parent_resource_name": "mc4dbvvk73vc", + "flavor": "m1.tiny", + "image-VDU1": "cirros-0.5.2-x86_64-disk" + } + }, + { + "id": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", + "vduId": "VDU2", + "computeResource": { + "vimConnectionId": "defb2f96-5670-4bef-8036-27bf61267fc1", + "resourceId": "9fcd21b5-301b-44e2-bb25-6bbffee99c26", + "vimLevelResourceType": "OS::Nova::Server" + }, + "vnfcCpInfo": [ + { + "id": "VDU2_CP1-9fcd21b5-301b-44e2-bb25-6bbffee99c26", + "cpdId": "VDU2_CP1", + "vnfLinkPortId": "b0e4a59e-5831-4deb-aaba-fd4d0d02248b" + } + ], + "metadata": { + "creation_time": "2023-04-07T09:49:14Z", + "stack_id": "vnf-ae844932-730a-4063-ad1d-7e3f7f9d82d1/87e00a91-17d7-496e-b30e-a99af1a6726e", + "flavor": "m1.tiny", + "image-VDU2": "cirros-0.5.2-x86_64-disk" + } + } + ], + } 2. Verify the VM created successfully by :command:`openstack stack list/show` command or OpenStack Dashboard. @@ -314,11 +477,22 @@ Terminate ~~~~~~~~~ Terminate a VNF by specifying the VNF Instance ID. -.. code:: bash +* via CLI command: + + .. code:: bash + + $ openstack vnflcm terminate fba5bda0-0b52-4d80-bffb-709200baf1e3 --os-tacker-api-version 2 + Terminate request for VNF Instance 'fba5bda0-0b52-4d80-bffb-709200baf1e3' has been accepted. + +* via API: - $ openstack vnflcm terminate ae844932-730a-4063-ad1d-7e3f7f9d82d1 --os-tacker-api-version 2 - Terminate request for VNF Instance 'ae844932-730a-4063-ad1d-7e3f7f9d82d1' has been accepted. + .. code:: bash + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v2/vnf_instances/$VNF_INST_ID/terminate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -H "Version: 2.0.0" \ + -d '{"terminationType": "FORCEFUL"}' .. _ETSI NFV-SOL VNF Deployment: https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_user_data.html +.. _Use Case Guide: https://docs.openstack.org/tacker/latest/user/etsi_use_case_guide.html +.. _API Reference: https://docs.openstack.org/api-ref/nfv-orchestration .. _Prepare VNF Package: https://docs.openstack.org/tacker/latest/user/vnf-package.html diff --git a/docs/tacker-user-guide-vnf.rst b/docs/tacker-user-guide-vnf.rst index 8f03c34..5c6c9bd 100644 --- a/docs/tacker-user-guide-vnf.rst +++ b/docs/tacker-user-guide-vnf.rst @@ -6,7 +6,11 @@ How to deploy VNF Deployment ============================ This user guide shows how to deploy VNF (Virtualized Network Function) via Tacker. -See the `ETSI NFV-SOL VNF Deployment` for the original procedure. +See the `ETSI NFV-SOL VNF Deployment`_ for the original procedure. + +.. note:: + + This document focuses on some operations. See the Tacker `Use Case Guide`_ or `API Reference`_ for other operations. .. contents:: :depth: 3 @@ -15,6 +19,64 @@ See the `ETSI NFV-SOL VNF Deployment` for the original procedure. Prerequisites ------------- +Credentials Setting +~~~~~~~~~~~~~~~~~~~ + +To use Tacker CLI, you need to configure the credentials, please change the ``username`` and ``projectname`` to be executed according to your environment. + +.. code:: bash + + $ source ${devstack_dir}/openrc admin admin + +If you want to access Tacker via API, you need to get auth token by following procedure below. + +.. code:: bash + + # Create request body for issuing access token. + $ vi get_token.json + $ cat get_token.json + { + "auth": { + "identity": { + "methods": ["password"], + "password": { + "user": { + "domain": { + "name": "Default" + }, + "name": "admin", + "password": "devstack" + } + } + }, + "scope": { + "project": { + "domain": { + "name":"Default" + }, + "name":"admin" + } + } + } + } + + # Issue auth token for accessing via API. + $ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json http://192.168.121.170/identity/v3/auth/tokens + HTTP/1.1 201 CREATED + Date: Wed, 12 Apr 2023 07:22:44 GMT + Server: Apache/2.4.41 (Ubuntu) + Content-Type: application/json + Content-Length: 7469 + X-Subject-Token: gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + Vary: X-Auth-Token + x-openstack-request-id: req-e94aa763-9578-424b-affb-7ccab80db72c + Connection: close + + {"token": {"methods": ["password"], "user": {"domain": {"id": "default", "name": "Default"}, "id": "3e2f3db203e347bfa2197f8fdd038f39", "name": "admin", "password_expires_at": null}, "audit_ids": ["1pgGosVvR4azhw29woKvDw"], "expires_at": "2023-04-12T08:22:44.000000Z", "issued_at": "2023-04-12T07:22:44.000000Z", "project": {"domain": {"id": "default", "name": "Default"}, "id": "5af8bd4dd4ed4285ab1d45a95833cc67", "name": "admin"}, "is_domain": false, "roles": [{"id": "a039c220711049e0b77eac89a1504a81", "name": "reader"}, {"id": "57051bcc1fc24eb4875852a8ab32eae7", "name": "member"}, {"id": "029ea703a2534199a412b18cc5bfa31d", "name": "admin"}], "catalog": [{"endpoints": [{"id": "29307c3ec2f94553acbd7682e32602ba", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "45e5c5f2d4ce4841a980e29e6d3713f7", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}, {"id": "8d79900575e3490cb71ad6fe5ff0697c", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8989/v2", "region": "RegionOne"}], "id": "00c00313624d4c74aeaa55285e2c553d", "type": "workflowv2", "name": "mistral"}, {"endpoints": [{"id": "aafc7809d8a943d39d20490442ed87fa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "131f57b38d7e4874a18446ab50f3f37b", "type": "compute_legacy", "name": "nova_legacy"}, {"endpoints": [{"id": "e1cd2199468a4486a4df2ffe884b9026", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:12347/v1", "region": "RegionOne"}], "id": "4dc58229363a4e5fa3d863357554678b", "type": "maintenance", "name": "fenix"}, {"endpoints": [], "id": "53b114aa4c2b4cf7b642ef99e767e58c", "type": "kuryr-kubernetes", "name": "kuryr-kubernetes"}, {"endpoints": [{"id": "1156b12e11a04ac2ab4a674976e8bb3e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "191a35e87d824e72819c28790d6dac8d", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}, {"id": "99016e127b7d4f8483636f5531d994c9", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/metric", "region": "RegionOne"}], "id": "5d483e864b484f76a46266dc5640386b", "type": "metric", "name": "gnocchi"}, {"endpoints": [{"id": "d5ce793eee434288901795720538f811", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "5e5f3dc6efa545569f67f453a05ac234", "type": "block-storage", "name": "cinder"}, {"endpoints": [{"id": "6ed501fde45047fe9a3684cc791df953", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/load-balancer", "region": "RegionOne"}], "id": "8b06952a46f3448f9e88daccee3212a9", "type": "load-balancer", "name": "octavia"}, {"endpoints": [{"id": "548133af931b4c0ea8d015dbb67d4388", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "58f0b35802f442f4997318017a37cae9", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}, {"id": "c062a6ce0ab54ee699b863b38e15c50a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/identity", "region": "RegionOne"}], "id": "8ee29bc9aa6d4ddda69f7810b0c52ff5", "type": "identity", "name": "keystone"}, {"endpoints": [{"id": "7fdd1dac28874280928e6c9313b4a415", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api-cfn/v1", "region": "RegionOne"}], "id": "9605cce5cdad422f8934c891ac840fa7", "type": "cloudformation", "name": "heat-cfn"}, {"endpoints": [{"id": "53ed393173944da3bfac9d482907b65e", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "d6891cda1327453aa28155fd18e8596e", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}, {"id": "fef7c489ad544e708d9c85e4a801e344", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9890/", "region": "RegionOne"}], "id": "a2c67888fc7a4f55a4001cd807293daf", "type": "nfv-orchestration", "name": "tacker"}, {"endpoints": [{"id": "413321647af94f2fb948e59c76bc2b87", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/placement", "region": "RegionOne"}], "id": "aa649b2a9f8644a184fd6857400328ab", "type": "placement", "name": "placement"}, {"endpoints": [{"id": "671a41088c4841d18c58db9ac8a97314", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:9696/networking", "region": "RegionOne"}], "id": "b1abe9867d07457dbc7c84f37906300a", "type": "network", "name": "neutron"}, {"endpoints": [{"id": "ba3d670defb748a1b23a4697a7998fb7", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/volume/v3/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "b481211f6e5742f1913148ab157259ee", "type": "volumev3", "name": "cinderv3"}, {"endpoints": [{"id": "7eca8bcad7df40cda721a960a838f908", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/heat-api/v1/5af8bd4dd4ed4285ab1d45a95833cc67", "region": "RegionOne"}], "id": "c7c437d0564f428db112516273ca2c0b", "type": "orchestration", "name": "heat"}, {"endpoints": [{"id": "2be3a59b29c04cf7a359ec8b973d334a", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "4258ac8e29084b5a82a48e55b2189284", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}, {"id": "d463ed0ea12a4b44974b9239d2c14a49", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/key-manager", "region": "RegionOne"}], "id": "d411db3bd28a44f7b7c0ae53d3f5bb7b", "type": "key-manager", "name": "barbican"}, {"endpoints": [{"id": "05dea080ccc8493b9aa6a22bfe9d7b2b", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/compute/v2.1", "region": "RegionOne"}], "id": "d69f1f3988ee4809a9bb496f4f312bbd", "type": "compute", "name": "nova"}, {"endpoints": [{"id": "86e8d9e1998b4b9caf503dc58fc1297a", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/reservation/v1", "region": "RegionOne"}], "id": "d81b4911762a4c419f3816c36adcdac1", "type": "reservation", "name": "blazar"}, {"endpoints": [{"id": "0b0195a6580d48bf94eed97a35603756", "interface": "admin", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "67d676a732bb4c67abcdc5f433e5b3aa", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}, {"id": "f753f73beed8463fa3f594c29911c332", "interface": "internal", "region_id": "RegionOne", "url": "http://192.168.121.170:8042", "region": "RegionOne"}], "id": "ddd00c0c78b448438bb925776fdbb350", "type": "alarming", "name": "aodh"}, {"endpoints": [{"id": "a39c85e31b3446239f958cc96c634216", "interface": "public", "region_id": "RegionOne", "url": "http://192.168.121.170/image", "region": "RegionOne"}], "id": "fe0a0e3590fa4fa69f395bcdc47f1241", "type": "image", "name": "glance"}]}} + + # Set ``X-Subject-Token`` to environment variables as ``TOKEN``. + $ TOKEN=gAAAAABkNlxENR1WGpfgAe8g2Z4z5lCtwCsfUs5GTsg9mvYTMbG7S8HPIZep0vAGUnoPTj0_IYgMP-W1Y0vCDmWFQH7CSq1XWv3qNMd4aFnclk5sHuP1s0JtHSls7IQMM6zbn-FBYUSWTc9d783OSxYKXWqf3qo-CfFjPwrkmNzfkzgtlogkeA4 + VIM ~~~ Register OpenStack VIM (Virtualized Infrastructure Manager) by following procedure below. @@ -26,7 +88,7 @@ Register OpenStack VIM (Virtualized Infrastructure Manager) by following procedu .. code:: bash $ cat vim_config.yaml - auth_url: 'http://192.168.121.170/v3' + auth_url: 'http://192.168.121.170/identity' username: 'admin' password: 'devstack' project_name: 'admin' @@ -36,21 +98,46 @@ Register OpenStack VIM (Virtualized Infrastructure Manager) by following procedu 2. Register VIM to Tacker by running following command. - .. code:: bash + * via CLI command: + + .. code:: bash + + $ openstack vim register --config-file vim_config.yaml vim-openstack - $ source ${devstack_dir}/openrc admin admin - $ openstack vim register --config-file vim_config.yaml vim-openstack + * via API: + + .. code:: bash + + $ TACKER_ENDPOINT=http://192.168.121.170:9890 + $ OS_ENDPOINT=https://192.168.121.170/identity + + $ curl -g -i -X POST ${TACKER_ENDPOINT}/v1.0/vims \ + -H "Accept: application/json" -H "Content-Type: application/json" -H "X-Auth-Token: $TOKEN" \ + -d '{"vim": {"auth_url": "'${OS_ENDPOINT}'", "type": "openstack", "vim_project": {"name": "admin", "project_domain_name": "Default"}, + "auth_cred": {"username": "admin", "password": "devstack", "user_domain_name": "Default", "cert_verify": "False"}, + "name": "vim-openstack", "is_default": false}}' 3. Check the registered VIM status is ``REACHABLE``. - .. code:: bash + * via CLI command: + + .. code:: bash + + $ openstack vim list + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | ID | Name | Tenant_id | Type | Is Default | Status | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | d8d886e4-fd98-4493-81e2-0e2b9991d629 | vim-openstack | a51290751e094e608ad1e5e251b8cd39 | openstack | True | REACHABLE | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ - $ openstack vim list - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ - | ID | Name | Tenant_id | Type | Is Default | Status | - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ - | d8d886e4-fd98-4493-81e2-0e2b9991d629 | vim-openstack | a51290751e094e608ad1e5e251b8cd39 | openstack | True | REACHABLE | - +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + * via API: + + .. code:: bash + + $ curl -g -X GET ${TACKER_ENDPOINT}/v1.0/vims \ + -H "Accept: application/json" -H "X-Auth-Token: $TOKEN" \ + | jq -r '.vims[] | .id + ": " + .status' + d8d886e4-fd98-4493-81e2-0e2b9991d629: REACHABLE VNF Package ~~~~~~~~~~~ @@ -75,68 +162,92 @@ Create and upload the VNF Package that you want to deploy by following procedure 2. Create and Upload VNF Package. - .. code:: bash + * via CLI command: - $ openstack vnf package create - +-------------------+-------------------------------------------------------------------------------------------------+ - | Field | Value | - +-------------------+-------------------------------------------------------------------------------------------------+ - | ID | 9f10134f-90ae-4e71-bfdc-de6593552de8 | - | Links | { | - | | "self": { | - | | "href": "/vnfpkgm/v1/vnf_packages/9f10134f-90ae-4e71-bfdc-de6593552de8" | - | | }, | - | | "packageContent": { | - | | "href": "/vnfpkgm/v1/vnf_packages/9f10134f-90ae-4e71-bfdc-de6593552de8/package_content" | - | | } | - | | } | - | Onboarding State | CREATED | - | Operational State | DISABLED | - | Usage State | NOT_IN_USE | - | User Defined Data | {} | - +-------------------+-------------------------------------------------------------------------------------------------+ - - $ openstack vnf package upload --path sample_vnf_package.zip 9f10134f-90ae-4e71-bfdc-de6593552de8 - Upload request for VNF package 9f10134f-90ae-4e71-bfdc-de6593552de8 has been accepted. + .. code:: bash -Deployment Procedure --------------------- + $ openstack vnf package create + +-------------------+-------------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------------+-------------------------------------------------------------------------------------------------+ + | ID | 9f10134f-90ae-4e71-bfdc-de6593552de8 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/9f10134f-90ae-4e71-bfdc-de6593552de8" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/9f10134f-90ae-4e71-bfdc-de6593552de8/package_content" | + | | } | + | | } | + | Onboarding State | CREATED | + | Operational State | DISABLED | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + +-------------------+-------------------------------------------------------------------------------------------------+ + + $ openstack vnf package upload --path sample_vnf_package.zip 9f10134f-90ae-4e71-bfdc-de6593552de8 + Upload request for VNF package 9f10134f-90ae-4e71-bfdc-de6593552de8 has been accepted. -.. note:: - This procedure uses the CLI available by installing python-tackerclient. - If you want to process with RESTfull API, see the :doc:`api-docs` for more information. + * via API: + + .. code:: bash + + $ VNFP_ID=$(curl -s -X POST ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" -d '{}' | jq -r '.id') + + $ VNFP_CONTENTS=./sample_vnf_package.zip + + $ curl -i -X PUT ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID/package_content \ + -H "Content-type: application/zip" -H "X-Auth-Token:$TOKEN" -H "Accept:application/zip" \ + -F vnf_package_content=@${VNFP_CONTENTS} + +Deployment Procedure +-------------------- Create ~~~~~~ Create a VNF Instance by specifying the VNFD ID. The VNFD ID is the value defined in the VNFD file and can be found in the :command:`openstack vnf package show` command. -.. code:: bash - - $ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ - | ID | fba5bda0-0b52-4d80-bffb-709200baf1e3 | - | Instantiation State | NOT_INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3" | - | | }, | - | | "instantiate": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/instantiate" | - | | } | - | | } | - | VNF Configurable Properties | | - | VNF Instance Description | None | - | VNF Instance Name | vnf-fba5bda0-0b52-4d80-bffb-709200baf1e3 | - | VNF Product Name | Sample VNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 | - | VNFD Version | 1.0 | - | vnfPkgId | | - +-----------------------------+------------------------------------------------------------------------------------------------------------------+ +* via CLI command: + + .. code:: bash + + $ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + | ID | fba5bda0-0b52-4d80-bffb-709200baf1e3 | + | Instantiation State | NOT_INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3" | + | | }, | + | | "instantiate": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/instantiate" | + | | } | + | | } | + | VNF Configurable Properties | | + | VNF Instance Description | None | + | VNF Instance Name | vnf-fba5bda0-0b52-4d80-bffb-709200baf1e3 | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 | + | VNFD Version | 1.0 | + | vnfPkgId | | + +-----------------------------+------------------------------------------------------------------------------------------------------------------+ + +* via API: + + .. code:: bash + + $ VNFD_ID=$(curl -s -X GET ${TACKER_ENDPOINT}/vnfpkgm/v1/vnf_packages/$VNFP_ID \ + -H "X-Auth-Token:$TOKEN" | jq -r '.vnfdId') + + $ VNF_INST_ID=$(curl -sS -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d '{ "vnfdId": "'$VNFD_ID'"}' | jq -r '.id') Instantiate ~~~~~~~~~~~ @@ -192,8 +303,20 @@ Instantiate a VNF by specifying the ID of the created VNF Instance and a file pa } } - $ openstack vnflcm instantiate b0915924-7e04-4c16-b229-d3dfcc366eee input_param.json - Instantiate request for VNF Instance b0915924-7e04-4c16-b229-d3dfcc366eee has been accepted. +* via CLI command: + + .. code:: bash + + $ openstack vnflcm instantiate b0915924-7e04-4c16-b229-d3dfcc366eee input_param.json + Instantiate request for VNF Instance b0915924-7e04-4c16-b229-d3dfcc366eee has been accepted. + +* via API: + + .. code:: bash + + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID/instantiate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d @./input_param.json You can verify that the deployment was successful in the following ways: @@ -202,175 +325,225 @@ You can verify that the deployment was successful in the following ways: * ``Instantiation State`` became ``INSTANTIATED``. * Deployed resource information is stored in ``vnfcResourceInfo`` of ``Instantiated Vnf Info``. - .. code:: bash - - $ openstack vnflcm show fba5bda0-0b52-4d80-bffb-709200baf1e3 - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ - | ID | fba5bda0-0b52-4d80-bffb-709200baf1e3 | - | Instantiated Vnf Info | { | - | | "flavourId": "simple", | - | | "vnfState": "STARTED", | - | | "extCpInfo": [ | - | | { | - | | "id": "4e9cda91-f625-4790-8efb-273b3fbd03a1", | - | | "cpdId": "CP1", | - | | "extLinkPortId": null, | - | | "associatedVnfcCpId": "65676b39-1e80-435f-997d-217963d25298", | - | | "cpProtocolInfo": [ | - | | { | - | | "layerProtocol": "IP_OVER_ETHERNET", | - | | "ipOverEthernet": { | - | | "macAddress": null, | - | | "ipAddresses": [ | - | | { | - | | "type": "IPV4", | - | | "subnetId": "309614e6-4aab-4424-977f-fd9c8dfe493e", | - | | "isDynamic": true, | - | | "addresses": [] | - | | } | - | | ] | - | | } | - | | } | - | | ] | - | | } | - | | ], | - | | "extVirtualLinkInfo": [ | - | | { | - | | "id": "test1", | - | | "resourceHandle": { | - | | "vimConnectionId": null, | - | | "resourceId": "0e1cc46a-6808-4738-8b84-9e99a775c9eb", | - | | "vimLevelResourceType": null | - | | } | - | | } | - | | ], | - | | "vnfcResourceInfo": [ | - | | { | - | | "id": "65676b39-1e80-435f-997d-217963d25298", | - | | "vduId": "VDU1", | - | | "computeResource": { | - | | "vimConnectionId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | - | | "resourceId": "0f0ee6b9-cf6c-41c7-a36c-78d41fcba99c", | - | | "vimLevelResourceType": "OS::Nova::Server" | - | | }, | - | | "storageResourceIds": [], | - | | "vnfcCpInfo": [ | - | | { | - | | "id": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb", | - | | "cpdId": "CP1", | - | | "vnfExtCpId": null, | - | | "vnfLinkPortId": "d61dcdf1-d5c6-4add-8b0f-0095b00908cd", | - | | "cpProtocolInfo": [ | - | | { | - | | "layerProtocol": "IP_OVER_ETHERNET", | - | | "ipOverEthernet": { | - | | "macAddress": null, | - | | "ipAddresses": [ | - | | { | - | | "type": "IPV4", | - | | "subnetId": "309614e6-4aab-4424-977f-fd9c8dfe493e", | - | | "isDynamic": true, | - | | "addresses": [] | - | | } | - | | ] | - | | } | - | | } | - | | ] | - | | } | - | | ] | - | | } | - | | ], | - | | "vnfVirtualLinkResourceInfo": [ | - | | { | - | | "id": "006531d5-7bb9-472d-9243-7dd415ca9839", | - | | "vnfVirtualLinkDescId": "internalVL1", | - | | "networkResource": { | - | | "vimConnectionId": null, | - | | "resourceId": "", | - | | "vimLevelResourceType": null | - | | }, | - | | "vnfLinkPorts": [ | - | | { | - | | "id": "11d2a97d-884d-4943-9539-bc6c8e4e9e2b", | - | | "resourceHandle": { | - | | "vimConnectionId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | - | | "resourceId": "601c9ce5-91df-4636-9fc3-0ae979781d9a", | - | | "vimLevelResourceType": "OS::Neutron::Port" | - | | }, | - | | "cpInstanceId": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb" | - | | } | - | | ] | - | | }, | - | | { | - | | "id": "3a9607a4-0d5a-42da-aca3-2c471544ee86", | - | | "vnfVirtualLinkDescId": "test1", | - | | "networkResource": { | - | | "vimConnectionId": null, | - | | "resourceId": "0e1cc46a-6808-4738-8b84-9e99a775c9eb", | - | | "vimLevelResourceType": "OS::Neutron::Net" | - | | }, | - | | "vnfLinkPorts": [ | - | | { | - | | "id": "d61dcdf1-d5c6-4add-8b0f-0095b00908cd", | - | | "resourceHandle": { | - | | "vimConnectionId": null, | - | | "resourceId": "", | - | | "vimLevelResourceType": null | - | | }, | - | | "cpInstanceId": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb" | - | | } | - | | ] | - | | } | - | | ], | - | | "vnfcInfo": [ | - | | { | - | | "id": "341f2d8c-b53f-4d4b-b7f2-2f1726355803", | - | | "vduId": "VDU1", | - | | "vnfcState": "STARTED" | - | | } | - | | ], | - | | "additionalParams": { | - | | "lcm-operation-user-data": "./UserData/lcm_user_data.py", | - | | "lcm-operation-user-data-class": "SampleUserData" | - | | } | - | | } | - | Instantiation State | INSTANTIATED | - | Links | { | - | | "self": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3" | - | | }, | - | | "terminate": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/terminate" | - | | }, | - | | "heal": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/heal" | - | | }, | - | | "changeExtConn": { | - | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/change_ext_conn" | - | | } | - | | } | - | VIM Connection Info | [ | - | | { | - | | "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1", | - | | "vimId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | - | | "vimType": "openstack", | - | | "interfaceInfo": {}, | - | | "accessInfo": {}, | - | | "extra": {} | - | | } | - | | ] | - | VNF Configurable Properties | | - | VNF Instance Description | None | - | VNF Instance Name | vnf-fba5bda0-0b52-4d80-bffb-709200baf1e3 | - | VNF Product Name | Sample VNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 | - | VNFD Version | 1.0 | - | vnfPkgId | | - +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + * via CLI command: + + .. code:: bash + + $ openstack vnflcm show fba5bda0-0b52-4d80-bffb-709200baf1e3 + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + | ID | fba5bda0-0b52-4d80-bffb-709200baf1e3 | + | Instantiated Vnf Info | { | + | | "flavourId": "simple", | + | | "vnfState": "STARTED", | + | | "extCpInfo": [ | + | | { | + | | "id": "4e9cda91-f625-4790-8efb-273b3fbd03a1", | + | | "cpdId": "CP1", | + | | "extLinkPortId": null, | + | | "associatedVnfcCpId": "65676b39-1e80-435f-997d-217963d25298", | + | | "cpProtocolInfo": [ | + | | { | + | | "layerProtocol": "IP_OVER_ETHERNET", | + | | "ipOverEthernet": { | + | | "macAddress": null, | + | | "ipAddresses": [ | + | | { | + | | "type": "IPV4", | + | | "subnetId": "309614e6-4aab-4424-977f-fd9c8dfe493e", | + | | "isDynamic": true, | + | | "addresses": [] | + | | } | + | | ] | + | | } | + | | } | + | | ] | + | | } | + | | ], | + | | "extVirtualLinkInfo": [ | + | | { | + | | "id": "test1", | + | | "resourceHandle": { | + | | "vimConnectionId": null, | + | | "resourceId": "0e1cc46a-6808-4738-8b84-9e99a775c9eb", | + | | "vimLevelResourceType": null | + | | } | + | | } | + | | ], | + | | "vnfcResourceInfo": [ | + | | { | + | | "id": "65676b39-1e80-435f-997d-217963d25298", | + | | "vduId": "VDU1", | + | | "computeResource": { | + | | "vimConnectionId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | + | | "resourceId": "0f0ee6b9-cf6c-41c7-a36c-78d41fcba99c", | + | | "vimLevelResourceType": "OS::Nova::Server" | + | | }, | + | | "storageResourceIds": [], | + | | "vnfcCpInfo": [ | + | | { | + | | "id": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb", | + | | "cpdId": "CP1", | + | | "vnfExtCpId": null, | + | | "vnfLinkPortId": "d61dcdf1-d5c6-4add-8b0f-0095b00908cd", | + | | "cpProtocolInfo": [ | + | | { | + | | "layerProtocol": "IP_OVER_ETHERNET", | + | | "ipOverEthernet": { | + | | "macAddress": null, | + | | "ipAddresses": [ | + | | { | + | | "type": "IPV4", | + | | "subnetId": "309614e6-4aab-4424-977f-fd9c8dfe493e", | + | | "isDynamic": true, | + | | "addresses": [] | + | | } | + | | ] | + | | } | + | | } | + | | ] | + | | } | + | | ] | + | | } | + | | ], | + | | "vnfVirtualLinkResourceInfo": [ | + | | { | + | | "id": "006531d5-7bb9-472d-9243-7dd415ca9839", | + | | "vnfVirtualLinkDescId": "internalVL1", | + | | "networkResource": { | + | | "vimConnectionId": null, | + | | "resourceId": "", | + | | "vimLevelResourceType": null | + | | }, | + | | "vnfLinkPorts": [ | + | | { | + | | "id": "11d2a97d-884d-4943-9539-bc6c8e4e9e2b", | + | | "resourceHandle": { | + | | "vimConnectionId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | + | | "resourceId": "601c9ce5-91df-4636-9fc3-0ae979781d9a", | + | | "vimLevelResourceType": "OS::Neutron::Port" | + | | }, | + | | "cpInstanceId": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb" | + | | } | + | | ] | + | | }, | + | | { | + | | "id": "3a9607a4-0d5a-42da-aca3-2c471544ee86", | + | | "vnfVirtualLinkDescId": "test1", | + | | "networkResource": { | + | | "vimConnectionId": null, | + | | "resourceId": "0e1cc46a-6808-4738-8b84-9e99a775c9eb", | + | | "vimLevelResourceType": "OS::Neutron::Net" | + | | }, | + | | "vnfLinkPorts": [ | + | | { | + | | "id": "d61dcdf1-d5c6-4add-8b0f-0095b00908cd", | + | | "resourceHandle": { | + | | "vimConnectionId": null, | + | | "resourceId": "", | + | | "vimLevelResourceType": null | + | | }, | + | | "cpInstanceId": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb" | + | | } | + | | ] | + | | } | + | | ], | + | | "vnfcInfo": [ | + | | { | + | | "id": "341f2d8c-b53f-4d4b-b7f2-2f1726355803", | + | | "vduId": "VDU1", | + | | "vnfcState": "STARTED" | + | | } | + | | ], | + | | "additionalParams": { | + | | "lcm-operation-user-data": "./UserData/lcm_user_data.py", | + | | "lcm-operation-user-data-class": "SampleUserData" | + | | } | + | | } | + | Instantiation State | INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3" | + | | }, | + | | "terminate": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/terminate" | + | | }, | + | | "heal": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/heal" | + | | }, | + | | "changeExtConn": { | + | | "href": "http://localhost:9890/vnflcm/v1/vnf_instances/fba5bda0-0b52-4d80-bffb-709200baf1e3/change_ext_conn" | + | | } | + | | } | + | VIM Connection Info | [ | + | | { | + | | "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1", | + | | "vimId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", | + | | "vimType": "openstack", | + | | "interfaceInfo": {}, | + | | "accessInfo": {}, | + | | "extra": {} | + | | } | + | | ] | + | VNF Configurable Properties | | + | VNF Instance Description | None | + | VNF Instance Name | vnf-fba5bda0-0b52-4d80-bffb-709200baf1e3 | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 | + | VNFD Version | 1.0 | + | vnfPkgId | | + +-----------------------------+----------------------------------------------------------------------------------------------------------------------+ + + * via API: + + .. code:: bash + + $ curl -X GET ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + | jq -r '{ instantiationState: .instantiationState, + vnfcResourceInfo: .instantiatedVnfInfo.vnfcResourceInfo }' + { + "instantiationState": "INSTANTIATED", + "vnfcResourceInfo": [ + { + "id": "df202937-2bb8-40a9-8be0-a8aa5e2ec0ae", + "vduId": "VDU1", + "computeResource": { + "vimConnectionId": "d8d886e4-fd98-4493-81e2-0e2b9991d629", + "resourceId": "0f0ee6b9-cf6c-41c7-a36c-78d41fcba99c", + "vimLevelResourceType": "OS::Nova::Server" + }, + "storageResourceIds": [], + "vnfcCpInfo": [ + { + "id": "a3da58ce-039d-42ee-9569-a0e2a9adf9bb", + "cpdId": "CP1", + "vnfExtCpId": null, + "vnfLinkPortId": "d61dcdf1-d5c6-4add-8b0f-0095b00908cd", + "cpProtocolInfo": [ + { + "layerProtocol": "IP_OVER_ETHERNET", + "ipOverEthernet": { + "macAddress": null, + "ipAddresses": [ + { + "type": "IPV4", + "subnetId": "309614e6-4aab-4424-977f-fd9c8dfe493e", + "isDynamic": true, + "addresses": [] + } + ] + } + } + ] + } + ] + } + ] + } 2. Verify the VM created successfully by :command:`openstack stack list/show` command or OpenStack Dashboard. @@ -378,11 +551,22 @@ Terminate ~~~~~~~~~ Terminate a VNF by specifying the VNF Instance ID. -.. code:: bash +* via CLI command: + + .. code:: bash + + $ openstack vnflcm terminate fba5bda0-0b52-4d80-bffb-709200baf1e3 + Terminate request for VNF Instance 'fba5bda0-0b52-4d80-bffb-709200baf1e3' has been accepted. + +* via API: - $ openstack vnflcm terminate fba5bda0-0b52-4d80-bffb-709200baf1e3 - Terminate request for VNF Instance 'fba5bda0-0b52-4d80-bffb-709200baf1e3' has been accepted. + .. code:: bash + $ curl -i -X POST ${TACKER_ENDPOINT}/vnflcm/v1/vnf_instances/$VNF_INST_ID/terminate \ + -H "Content-type: application/json" -H "X-Auth-Token:$TOKEN" \ + -d '{"terminationType": "FORCEFUL"}' .. _ETSI NFV-SOL VNF Deployment: https://docs.openstack.org/tacker/latest/user/etsi_vnf_deployment_as_vm_with_user_data.html +.. _Use Case Guide: https://docs.openstack.org/tacker/latest/user/etsi_use_case_guide.html +.. _API Reference: https://docs.openstack.org/api-ref/nfv-orchestration .. _Prepare VNF Package: https://docs.openstack.org/tacker/latest/user/vnf-package.html -- 2.16.6