diff --git a/doc/source/cli/cli-etsi-vnfpkgm.rst b/doc/source/cli/cli-etsi-vnfpkgm.rst index 7571882a5..3f5e7e881 100644 --- a/doc/source/cli/cli-etsi-vnfpkgm.rst +++ b/doc/source/cli/cli-etsi-vnfpkgm.rst @@ -137,7 +137,36 @@ Help: specify 'both' option value. Provide this option only when --vnfd is set. -4. List VNF Package +4. Fetch VNF Package Artifacts +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: console + + $ openstack vnf package artifact download --file \ + + + +Help: + +.. code-block:: console + + $ openstack vnf package artifact download --help + usage: openstack vnf package artifact download [-h] [--file ] + + + Download VNF package artifact of an on-boarded VNF package. + + positional arguments: + VNF package ID + The artifact file's path + + optional arguments: + -h, --help show this help message and exit + --file Local file to save downloaded VNF Package artifact file + data. If this is not specified and there is no redirection + then data will not be saved. + +5. List VNF Package ^^^^^^^^^^^^^^^^^^^ .. code-block:: console @@ -186,7 +215,7 @@ Help: tacker server will throw bad request error -5. Show VNF Package +6. Show VNF Package ^^^^^^^^^^^^^^^^^^^ .. code-block:: console @@ -198,30 +227,43 @@ Result: .. code-block:: console - +----------------------+------------------------------------------------------------------------------------------------------------+ - | Field | Value | - +----------------------+------------------------------------------------------------------------------------------------------------+ - | Checksum | algorithm=sha512, hash=f8eb9883f04901af2d6e09d3621b7bbb37a36a89b076d322cc5994f3c5264854d1a0137efb23e61be96 | - | | 9a7ba60989715b3e3feced9d7c582ffaaec6b5a89e2b1 | - | ID | e712a702-741f-4093-a971-b3ad69411ac1 | - | Links | packageContent=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1/package_content, | - | | self=href=/vnfpkgm/v1/vnf_packages/e712a702-741f-4093-a971-b3ad69411ac1 | - | Onboarding State | ONBOARDED | - | Operational State | ENABLED | - | Software Images | [{'diskFormat': 'qcow2', 'minDisk': 1, 'minRam': 0, 'imagePath': '', 'size': 1, 'createdAt': '2020-05-28 | - | | 01:50:14+00:00', 'containerFormat': 'bare', 'version': '0.4.0', 'provider': '', 'id': 'VDU1', 'name': | - | | 'Software of VDU1', 'checksum': {'algorithm': 'sha-256', 'hash': '6513f21e44aa3da349f248188a44bc304a3653a0 | - | | 4122d8fb4535423c8e1d14cd6a153f735bb0982e2161b5b5186106570c17a9e58b64dd39390617cd5a350f78'}, | - | | 'userMetadata': {}}] | - | Usage State | NOT_IN_USE | - | User Defined Data | | - | VNF Product Name | Sample VNF | - | VNF Provider | Company | - | VNF Software Version | 1.0 | - | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 | - | VNFD Version | 1.0 | - +----------------------+------------------------------------------------------------------------------------------------------------+ - + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | Additional Artifacts | [ | + | | { | + | | "artifactPath": "Files/kubernetes/deployment.yaml", | + | | "checksum": { | + | | "hash": "6a40dfb06764394fb604ae807d1198bc2e2ee8aece3b9483dfde48e53f316a58", | + | | "algorithm": "SHA-256" | + | | }, | + | | "metadata": {} | + | | } | + | | ] | + | Checksum | { | + | | "algorithm": "sha512", | + | | "hash": "f51de874f4dd831986aff19b4d74b8e30009681683ff2d25b2969a2c679ae3a78f6bd79cc131d00e92a5e264cd8df02e2decb8b3f2acc6e877161977cdbdd304" | + | | } | + | ID | e712a702-741f-4093-a971-b3ad69411ac1 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" | + | | } | + | | } | + | Onboarding State | ONBOARDED | + | Operational State | ENABLED | + | Software Images | | + | Usage State | IN_USE | + | User Defined Data | {} | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000003 | + | VNFD Version | 1.0 | + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ Help: @@ -243,7 +285,7 @@ Help: -h, --help show this help message and exit -6. Update VNF Package Info +7. Update VNF Package Info ^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console @@ -291,7 +333,7 @@ Help: to set multiple user defined data) -7. Delete VNF Package +8. Delete VNF Package ^^^^^^^^^^^^^^^^^^^^^ .. code-block:: console diff --git a/doc/source/user/etsi_containerized_vnf_usage_guide.rst b/doc/source/user/etsi_containerized_vnf_usage_guide.rst new file mode 100644 index 000000000..94b5a5677 --- /dev/null +++ b/doc/source/user/etsi_containerized_vnf_usage_guide.rst @@ -0,0 +1,656 @@ +=================================================================== +(ETSI NFV-SOL) Experimenting CNF with Kubernetes VIM +=================================================================== + +This section covers how to deploy ETSI NFV-SOL containerized VNF +in Tacker using Kubernetes VIM. + +Prepare Kubernetes VIM +======================= +1. Create a config file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before register a Kubernetes VIM to tacker, we should create config file. +The following ``vim-k8s.yaml`` file provides necessary information to +register a Kubernetes VIM. +This sample specifies the values of the ``bearer_token`` and ``ssl_ca_cert`` +parameters that can be obtained from the Kubernetes Master-node. +For specific methods of obtaining "bearer_token" and "ssl_ca_cert", +please refer to [#first]_. + +.. code-block:: console + + $ cat vim-k8s.yaml + auth_url: "https://192.168.33.100:6443" + project_name: "default" + bearer_token: "eyJhbGciOiJSUzI1NiIsImtpZCI6IlBRVDgxQkV5VDNVR1M1WGEwUFYxSXFkZFhJWDYzNklvMEp2WklLMnNFdk0ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi12cnpoaiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImNhY2VmMzEzLTMzYjYtNDQ5MS1iMWUyLTg0NmQ2N2E0OTdkNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.R76VIWVZnQxa9NG02HIqux1xTJG4i7dkXsp52T4UU8bvNfsfi18kW_p3ZvaNTxw0yABBcmkYZoOBe4MNP5cTP6TtR_ERZoA5QCViasW_u36rSTBT0-MHRPbkXjJYetzYaFYUO-DlJd3194yOtVHtrxUd8D31qw0f1FlP8BHxblDjZkYlgYSjHCxcwEdwlnYaa0SiH2kl6_oCBRFg8cUfXDeTOmH9XEfdrJ6ubJ4OyqG6YjfiKDDiEHgIehy7s7vZGVwVIPy6EhT1YSOIhY5aF-G9nQSg-GK1V9LIq7petFoW_MIEt0yfNQVXy2D1tBhdJEa1bgtVsLmdlrNVf-m3uA" + ssl_ca_cert: "-----BEGIN CERTIFICATE----- + MIICwjCCAaqgAwIBAgIBADANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDEwdrdWJl + LWNhMB4XDTIwMDgyNjA5MzIzMVoXDTMwMDgyNDA5MzIzMVowEjEQMA4GA1UEAxMH + a3ViZS1jYTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxkeE16lPAd + pfJj5GJMvZJFcX/CD6EB/LUoKwGmqVoOUQPd3b/NGy+qm+3bO9EU73epUPsVaWk2 + Lr+Z1ua7u+iib/OMsfsSXMZ5OEPgd8ilrTGhXOH8jDkif9w1NtooJxYSRcHEwxVo + +aXdIJhqKdw16NVP/elS9KODFdRZDfQ6vU5oHSg3gO49kgv7CaxFdkF7QEHbchsJ + 0S1nWMPAlUhA5b8IAx0+ecPlMYUGyGQIQgjgtHgeawJebH3PWy32UqfPhkLPzxsy + TSxk6akiXJTg6mYelscuxPLSe9UqNvHRIUoad3VnkF3+0CJ1z0qvfWIrzX3w92/p + YsDBZiP6vi8CAwEAAaMjMCEwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB/wQFMAMB + Af8wDQYJKoZIhvcNAQELBQADggEBAIbv2ulEcQi019jKz4REy7ZyH8+ExIUBBuIz + InAkfxNNxV83GkdyA9amk+LDoF/IFLMltAMM4b033ZKO5RPrHoDKO+xCA0yegYqU + BViaUiEXIvi/CcDpT9uh2aNO8wX5T/B0WCLfWFyiK+rr9qcosFYxWSdU0kFeg+Ln + YAaeFY65ZWpCCyljGpr2Vv11MAq1Tws8rEs3rg601SdKhBmkgcTAcCzHWBXR1P8K + rfzd6h01HhIomWzM9xrP2/2KlYRvExDLpp9qwOdMSanrszPDuMs52okXgfWnEqlB + 2ZrqgOcTmyFzFh9h2dj1DJWvCvExybRmzWK1e8JMzTb40MEApyY= + -----END CERTIFICATE-----" + type: "kubernetes" + +2. Register Kubernetes VIM +~~~~~~~~~~~~~~~~~~~~~~~~~~ +We could register Kubernetes VIM to tacker by running the following command: + +.. code-block:: console + + $ openstack vim register --config-file CONFIG_FILE KUBERNETES_VIM_NAME --fit-width + +Config file in chapter 1 need to be input by parameter --config-file. +After successful execution, VIM information will be displayed. +For example, id. +We can also use authentication methods such as username and password to +register Kubernetes VIM. For details, please refer to the hyperlink in +the [1. Create a config file] chapter. + + +.. code-block:: console + + $ openstack vim register --config-file vim-k8s.yaml test-vim-k8s --fit-width + +----------------+-----------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +----------------+-----------------------------------------------------------------------------------------------------------------+ + | auth_cred | { | + | | "bearer_token": "***", | + | | "ssl_ca_cert": "b'gAAAAABfknE_feCVMPWTYZsvrifP0C3j-OQAy17n1CQ8CuTNsg1zGdHKSGW-YmOtHaRvma3pib3gLPjYlrybWxm_W | + | | IEtXedP1M11TJb1NbNJclbNgw8-anW3RTO3gahXNvt5yU6iD3XOnG_PtrXydDtcoVBqa3Ry4MhK3bbMMD92PN- | + | | veqQV_pV2xza1WJdE8YhAWevsEWaQPaxjxDdS9PWGg-_n5DtVulCrxGJNmEIi8p8cqnFiFuC4I1b1I0MjDt5f5khE1uKtGvhqBf8RpWS_tvZUo4 | + | | TCkeqCeh6TxU1q2xDLZM5T8wWXaHDviYt4qmUVQhPsEi2LoO4kipoR2j7cBfOtr6H82HRpaRyiMM46g6BubTylW-qFaxAmX6SuQzJhjwmXM-62r | + | | w8pmUvpDO1RKkyGj76XjcsaDwNUkrl3IVFPVsJAaMgDX3-R4adDqmfVSzXRiA0aF91PAuiOlaAMQY8xFjRxqwZKkXq7rN9uKLo8lH0yBPhWgpq7 | + | | 6kZpXprlGaHrgKRnswrnMbBqew3W0sTrTW1hm39-jcVrMomNcXLe0b3Ebru-VKfRloW1c6_jDHZ3lKUo6xNg_2Wy52mrryrRqK3xN9itAuXFM5P | + | | Cm2bYXIyb4XfQGR4f6fuJU-6j_lEImjr9xY7bXylNDYKjt9c6AUJSPAxGCraPNrjNjmeXSbI3di_yfqzbzk78XaD4u7vcPNUyiWJj5jJB5tOWIZ | + | | gnNPdB5mM4H0-sE2eCwDnrZDRqGCskLTnXHpssROZiZYXGkPaRFQS9XAnswL2oTP5I9kOdVlmI89c63bIJwtgPZmUnIdoy9VyDsACO7cf_b4lMr | + | | kZYY1VmQRIhJ0pGY_CbZHrwP1V41g9xQAWDar-ezxFypI_lQqjlcaPA0W1ZDNmoJDVrGQJbqprRGW76JhU2qdZR_GRG- | + | | DnyWPpmAHjIjtG_6d9d_CGtGs24UTL-Di2B2aLCVaHTGd6ugW7av15ymPgXsXaTox4NVBrU-4l4GgiUN9oE65NF3xfvZ3b2t_bTAxXgCd9gVMgm | + | | NGyp8DbdgN9yUuLCBfA2x_KYIBDyQIQv0pevTDaDO3Mfntsq5_KQ0y4A07EKtXkQ7b4qbKoDpksKqlhLJmDm5qsjx3QcybaGXAJ8CTmg0F3vMV8 | + | | _mOIkwgj1zegjyUhm0oO-MUr-abuuKg-prejLOzDQpNTYzEnmuvUY4_l4Y3zYm1OlkGoU2yzWOd8vTV7GW9IFSZ76RG9IrrsFLNEXdVlt5ASPaV | + | | 1q5CUcsv8mttAEs9HaQe1hPM0Eyigd1xF4u3yPh-- | + | | kYlMFNJkNS8m8vtjPMY7oBfVE0KCeIx7SldYTI_xHuadD6n6w0hBSzS4_F_MujKkysmxZ3rq3WOkDdDaNk80IaT1CfYjiSPpXVPqKgJAPK0ChB- | + | | JGkN8vDQfkYLuxypOZBXJt3Q=='", | + | | "auth_url": "https://192.168.33.100:6443", | + | | "username": "None", | + | | "key_type": "barbican_key", | + | | "secret_uuid": "***", | + | | "password": "***" | + | | } | + | auth_url | https://192.168.33.100:6443 | + | created_at | 2020-10-19 08:08:12.116040 | + | description | | + | id | 8d8373fe-6977-49ff-83ac-7756572ed186 | + | is_default | False | + | name | test-vim-k8s | + | placement_attr | { | + | | "regions": [ | + | | "default", | + | | "kube-node-lease", | + | | "kube-public", | + | | "kube-system" | + | | ] | + | | } | + | project_id | 2a505a8efb7a4569af73594bd9904834 | + | status | PENDING | + | type | kubernetes | + | updated_at | None | + | vim_project | { | + | | "name": "default" | + | | } | + +----------------+-----------------------------------------------------------------------------------------------------------------+ + +Also we can check if the status of VIM is REACHABLE by +`openstack vim list` command. + +.. code-block:: console + + $ openstack vim list + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | ID | Name | Tenant_id | Type | Is Default | Status | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | 8d8373fe-6977-49ff-83ac-7756572ed186 | test-vim-k8s | 2a505a8efb7a4569af73594bd9904834 | kubernetes | False | REACHABLE | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + +Prepare VNF Package +=================== +1. Create directories of VNF Package +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +TOSCA YAML CSAR file is an archive file using the ZIP file format whose +structure complies with the TOSCA Simple Profile YAML v1.2 Specification. +Here is a sample of building a VNF Package CSAR directory: + +.. code-block:: console + + $ mkdir -p deployment/{TOSCA-Metadata,Definitions,Files/kubernetes} + +2. Create a Kubernetes object file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A CSAR VNF package shall have a object file that defines Kubernetes resources +to be deployed. +The file name shall have an extension of ".yaml". +Different Kubernetes api resources can be created according to the content of +different yaml files. + +.. note:: Please refer to Kubernetes api resource [#second]_ for an example yaml file of + each resource. + +For the types of resources that can be deployed in Victoria, please refer to +following link Kubernetes resource kind support [#third]_. + +The following is a simple example of `deployment` resource. + +.. code-block:: console + + $ cat ./deployment/Files/kubernetes/deployment.yaml + apiVersion: apps/v1 + kind: Deployment + metadata: + name: curry-probe-test001 + namespace: default + spec: + replicas: 1 + selector: + matchLabels: + selector: curry-probe-test001 + template: + metadata: + labels: + selector: curry-probe-test001 + app: webserver + spec: + containers: + - name: nginx-liveness-probe + image: nginx + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + protocol: TCP + - image: celebdor/kuryr-demo + imagePullPolicy: IfNotPresent + name: kuryr-demo-readiness-probe + ports: + - containerPort: 8080 + protocol: TCP + +3. Create a TOSCA.meta file +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The TOSCA.Meta file contains version information for the TOSCA.Meta file, CSAR, +Definitions file, and artifact file. +Name, content-Type, encryption method, and hash value of the Artifact file are +required in the TOSCA.Meta file. +Here is an example of a TOSCA.meta file: + +.. code-block:: console + + $ cat ./deployment/TOSCA-Metadata/TOSCA.meta + TOSCA-Meta-File-Version: 1.0 + Created-by: dummy_user + CSAR-Version: 1.1 + Entry-Definitions: Definitions/helloworld3_top.vnfd.yaml + + Name: Files/kubernetes/deployment.yaml + Content-Type: application/yaml + Algorithm: SHA-256 + Hash: 6a40dfb06764394fb604ae807d1198bc2e2ee8aece3b9483dfde48e53f316a58 + +4. Download ETSI Definition file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Download official documents. +ETSI GS NFV-SOL 001 [i.4] specifies the structure and format of the VNFD based +on TOSCA specifications. + +.. code-block:: console + + $ cd deployment/Definitions + $ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml + $ wget https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml + +5. Create VNFD +~~~~~~~~~~~~~~ +How to create VNFD composed of plural deployment flavours is described in +VNF Descriptor (VNFD) based on ETSI NFV-SOL001 [#fourth]_. + +VNFD will not contain any Kubernetes resource information such as VDU, +Connection points, Virtual links because all required components of CNF will be +specified in Kubernetes resource files. + +Following is an example of a VNFD file includes the definition of VNF. + +.. code-block:: console + + $ cat helloworld3_top.vnfd.yaml + tosca_definitions_version: tosca_simple_yaml_1_2 + + description: Sample VNF + + imports: + - etsi_nfv_sol001_common_types.yaml + - etsi_nfv_sol001_vnfd_types.yaml + - helloworld3_types.yaml + - helloworld3_df_simple.yaml + + topology_template: + inputs: + selected_flavour: + type: string + description: VNF deployment flavour selected by the consumer. It is provided in the API + + node_templates: + VNF: + type: company.provider.VNF + properties: + flavour_id: { get_input: selected_flavour } + descriptor_id: b1bb0ce7-ebca-4fa7-95ed-4840d7000003 + provider: Company + product_name: Sample VNF + software_version: '1.0' + descriptor_version: '1.0' + vnfm_info: + - Tacker + requirements: + #- virtual_link_external # mapped in lower-level templates + #- virtual_link_internal # mapped in lower-level templates + +The `helloworld3_types.yaml` file defines the parameter types and default +values of the VNF. + +.. code-block:: console + + $ cat helloworld3_types.yaml + tosca_definitions_version: tosca_simple_yaml_1_2 + + description: VNF type definition + + imports: + - etsi_nfv_sol001_common_types.yaml + - etsi_nfv_sol001_vnfd_types.yaml + + node_types: + company.provider.VNF: + derived_from: tosca.nodes.nfv.VNF + properties: + descriptor_id: + type: string + constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d7000003 ] ] + default: b1bb0ce7-ebca-4fa7-95ed-4840d7000003 + descriptor_version: + type: string + constraints: [ valid_values: [ '1.0' ] ] + default: '1.0' + provider: + type: string + constraints: [ valid_values: [ 'Company' ] ] + default: 'Company' + product_name: + type: string + constraints: [ valid_values: [ 'Sample VNF' ] ] + default: 'Sample VNF' + software_version: + type: string + constraints: [ valid_values: [ '1.0' ] ] + default: '1.0' + vnfm_info: + type: list + entry_schema: + type: string + constraints: [ valid_values: [ Tacker ] ] + default: [ Tacker ] + flavour_id: + type: string + constraints: [ valid_values: [ simple ] ] + default: simple + flavour_description: + type: string + default: "falvour" + requirements: + - virtual_link_external: + capability: tosca.capabilities.nfv.VirtualLinkable + - virtual_link_internal: + capability: tosca.capabilities.nfv.VirtualLinkable + +`helloworld3_df_simple.yaml` defines the parameter type of VNF input. + +.. code-block:: console + + $ cat helloworld3_df_simple.yaml + tosca_definitions_version: tosca_simple_yaml_1_2 + + description: Simple deployment flavour for Sample VNF + + imports: + - etsi_nfv_sol001_common_types.yaml + - etsi_nfv_sol001_vnfd_types.yaml + - helloworld3_types.yaml + + topology_template: + inputs: + descriptor_id: + type: string + descriptor_version: + type: string + provider: + type: string + product_name: + type: string + software_version: + type: string + vnfm_info: + type: list + entry_schema: + type: string + flavour_id: + type: string + flavour_description: + type: string + + substitution_mappings: + node_type: company.provider.VNF + properties: + flavour_id: simple + requirements: + virtual_link_external: [] + + node_templates: + VNF: + type: company.provider.VNF + properties: + flavour_description: A simple flavour + +6. Compress VNF Package +~~~~~~~~~~~~~~~~~~~~~~~ +CSAR Package should be compressed into a ZIP file for uploading. +Following commands are an example of compressing a VNF Package: + +.. code-block:: console + + $ cd - + $ cd ./deployment + $ zip deployment.zip -r Definitions/ Files/ TOSCA-Metadata/ + $ ls deployment + deployment.zip Definitions Files TOSCA-Metadata + +Create and upload VNF Package +============================= +We need to create an empty VNF package object in tacker and upload compressed +VNF package created in previous section. + +1. Create VNF Package +~~~~~~~~~~~~~~~~~~~~~ +An empty vnf package could be created by command +`openstack vnf package create`. +After create a VNF Package successfully, some information including ID, Links, +Onboarding State, Operational State, and Usage State will be returned. +When the Onboarding State is CREATED, the Operational State is DISABLED, +and the Usage State is NOT_IN_USE, indicate the creation is successful. + +.. code-block:: console + + $ openstack vnf package create + +-------------------+-------------------------------------------------------------------------------------------------+ + | Field | Value | + +-------------------+-------------------------------------------------------------------------------------------------+ + | ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" | + | | } | + | | } | + | Onboarding State | CREATED | + | Operational State | DISABLED | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + +-------------------+-------------------------------------------------------------------------------------------------+ + +2. Upload VNF Package +~~~~~~~~~~~~~~~~~~~~~ +Upload the VNF package created above in to the VNF Package by running the +following command +`openstack vnf package upload --path ` +Here is an example of upload VNF package: + +.. code-block:: console + + $ openstack vnf package upload --path deployment.zip 08d00a5c-e8aa-4219-9412-411458eaa7d2 + Upload request for VNF package 08d00a5c-e8aa-4219-9412-411458eaa7d2 has been accepted. + +3. Check VNF Package Status +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Check the VNF Package Status by `openstack vnf package list` command. +Find the item which the id is same as the created vnf package id, when the +Onboarding State is ONBOARDED, and the Operational State is ENABLED, and the +Usage State is NOT_IN_USE, indicate the VNF Package is uploaded successfully. + +.. code-block:: console + + $ openstack vnf package list + +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+ + | Id | Vnf Product Name | Onboarding State | Usage State | Operational State | Links | + +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+ + | 08d00a5c-e8aa-4219-9412-411458eaa7d2 | Sample VNF | ONBOARDED | NOT_IN_USE | ENABLED | { | + | | | | | | "self": { | + | | | | | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" | + | | | | | | }, | + | | | | | | "packageContent": { | + | | | | | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" | + | | | | | | } | + | | | | | | } | + +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+ + +Create VNF +=========== +1. Get VNFD ID +~~~~~~~~~~~~~~ + +The VNFD ID of a uploaded vnf package could be found by +`openstack vnf package show ` command. +Here is an example of checking VNFD-ID value: + +.. code-block:: console + + $ openstack vnf package show 08d00a5c-e8aa-4219-9412-411458eaa7d2 + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | Field | Value | + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + | Additional Artifacts | [ | + | | { | + | | "artifactPath": "Files/kubernetes/deployment.yaml", | + | | "checksum": { | + | | "algorithm": "SHA-256", | + | | "hash": "6a40dfb06764394fb604ae807d1198bc2e2ee8aece3b9483dfde48e53f316a58" | + | | }, | + | | "metadata": {} | + | | } | + | | ] | + | Checksum | { | + | | "algorithm": "sha512", | + | | "hash": "f51de874f4dd831986aff19b4d74b8e30009681683ff2d25b2969a2c679ae3a78f6bd79cc131d00e92a5e264cd8df02e2decb8b3f2acc6e877161977cdbdd304" | + | | } | + | ID | 08d00a5c-e8aa-4219-9412-411458eaa7d2 | + | Links | { | + | | "self": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2" | + | | }, | + | | "packageContent": { | + | | "href": "/vnfpkgm/v1/vnf_packages/08d00a5c-e8aa-4219-9412-411458eaa7d2/package_content" | + | | } | + | | } | + | Onboarding State | ONBOARDED | + | Operational State | ENABLED | + | Software Images | | + | Usage State | NOT_IN_USE | + | User Defined Data | {} | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000003 | + | VNFD Version | 1.0 | + +----------------------+------------------------------------------------------------------------------------------------------------------------------------------------+ + +2. Execute Create VNF command +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +We could create VNF by running `openstack vnflcm create `. +After the command is executed, the generated ID is `VNF instance ID`. + +.. code-block:: console + + $ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d7000003 + +--------------------------+---------------------------------------------------------------------------------------------+ + | Field | Value | + +--------------------------+---------------------------------------------------------------------------------------------+ + | ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 | + | Instantiation State | NOT_INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" | + | | }, | + | | "instantiate": { | + | | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/instantiate" | + | | } | + | | } | + | VNF Instance Description | None | + | VNF Instance Name | None | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000003 | + | VNFD Version | 1.0 | + +--------------------------+---------------------------------------------------------------------------------------------+ + +Instantiate VNF +=============== +1. Set the value to the request parameter file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Get the ID of target VIM. + +.. code-block:: console + + $ openstack vim list + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | ID | Name | Tenant_id | Type | Is Default | Status | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + | 8d8373fe-6977-49ff-83ac-7756572ed186 | test-vim-k8s | 2a505a8efb7a4569af73594bd9904834 | kubernetes | False | REACHABLE | + +--------------------------------------+----------------+----------------------------------+------------+------------+-----------+ + +A json file includes path of Kubernetes resource definition file and Kubernetes +VIM information should be provided while instantiating a containerized VNF. +Here is an example of json file: + +`additionalParams` includes path of Kubernetes resource definition file, +notice that `lcm-kubernetes-def-files` should be a list. +The vimConnectionInfo includes id whose value can be defined autonomously, +vimId and vimType. + +.. code-block:: console + + $ cat ./instance_kubernetes.json + { + "flavourId": "simple", + "additionalParams": { + "lcm-kubernetes-def-files": [ + "Files/kubernetes/deployment.yaml" + ] + }, + "vimConnectionInfo": [ + { + "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", + "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", + "vimType": "kubernetes" + } + ] + } + +2. Execute the instantiation command +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Run `openstack vnflcm instantiate ` to instantiate +a VNF. + +The `VNF instance ID` is the ID generated after the `openstack vnflcm create` +command is executed. We can find it in the [2. Execute Create VNF command] +chapter. + +.. code-block:: console + + $ openstack vnflcm instantiate 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 instance_kubernetes.json + Instantiate request for VNF Instance 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 has been accepted. + +3. Check the Instantiation State +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +We could check the Instantiation State by running the following command. +When the Instantiation State is INSTANTIATED, indicate the instantiation is +successful. + +.. code-block:: console + + $ openstack vnflcm show 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 + +--------------------------+-------------------------------------------------------------------------------------------+ + | Field | Value | + +--------------------------+-------------------------------------------------------------------------------------------+ + | ID | 92cf0ccb-e575-46e2-9c0d-30c67e75aaf6 | + | Instantiated Vnf Info | { | + | | "flavourId": "simple", | + | | "vnfState": "STARTED", | + | | "extCpInfo": [], | + | | "additionalParams": {} | + | | } | + | Instantiation State | INSTANTIATED | + | Links | { | + | | "self": { | + | | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6" | + | | }, | + | | "terminate": { | + | | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/terminate" | + | | }, | + | | "heal": { | + | | "href": "/vnflcm/v1/vnf_instances/92cf0ccb-e575-46e2-9c0d-30c67e75aaf6/heal" | + | | } | + | | } | + | VIM Connection Info | [ | + | | { | + | | "id": "8a3adb69-0784-43c7-833e-aab0b6ab4470", | + | | "vimId": "8d8373fe-6977-49ff-83ac-7756572ed186", | + | | "vimType": "kubernetes", | + | | "accessInfo": {} | + | | } | + | | ] | + | VNF Instance Description | None | + | VNF Instance Name | None | + | VNF Product Name | Sample VNF | + | VNF Provider | Company | + | VNF Software Version | 1.0 | + | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d7000003 | + | VNFD Version | 1.0 | + +--------------------------+-------------------------------------------------------------------------------------------+ + +4. Check the deployment in Kubernetes +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To test a containerized VNF is running in target Kubernetes VIM environment, +we can check by running the following command. +When the READY is 1/1, indicate the deployment is created successfully. + +.. code-block:: console + + $ kubectl get deploy + NAME READY UP-TO-DATE AVAILABLE AGE + curry-probe-test001 1/1 1 1 8m43s + +References +========== +.. [#first] https://docs.openstack.org/tacker/latest/install/kubernetes_vim_installation.html +.. [#second] https://opendev.org/openstack/tacker/src/branch/master/tacker/tests/unit/vnfm/infra_drivers/kubernetes/kubernetes_api_resource +.. [#third] https://specs.openstack.org/openstack/tacker-specs/specs/victoria/container-network-function.html#kubernetes-resource-kind-support +.. [#fourth] https://docs.openstack.org/tacker/latest/user/vnfd-sol001.html diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst index c8456339f..ed1c18029 100644 --- a/doc/source/user/index.rst +++ b/doc/source/user/index.rst @@ -50,6 +50,7 @@ Use cases alarm_monitoring_usage_guide.rst dynamic_vnffg_usage_guide.rst enhanced_placement_awareness_usage_guide.rst + etsi_containerized_vnf_usage_guide.rst containerized_vnf_usage_guide.rst ../reference/mistral_workflows_usage_guide.rst multisite_vim_usage_guide.rst