Getting Started with v1 Tacker

摘要

本讲座将使您能够

  • 在 OpenStack 上使用 Tacker v1 API 创建和删除示例 VNF

注意

本文档是关于 Tacker v1 API 的。有关 Tacker v2 API,请参阅 Getting Started with v2 Tacker

本讲座介绍了 Tacker 支持的两种 VNF 部署类型。

“使用 LCM 操作用户数据的 VNF 部署”是可选的。该部分将用以下标注进行说明 [这是特定于 UserData 的部分]。

下图显示了本讲座中使用的示例 VNF。

../_images/etsi-getting-started-sample-vnf.png

注意

VIM 配置、VNF 包和实例化参数用于本教程,并放置在仓库中。

注意

您可以使用以下命令查看 Tacker 的日志

$ sudo journalctl -u devstack@tacker.service
$ sudo journalctl -u devstack@tacker-conductor.service

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

配置

加载客户端操作的凭据

在运行任何 Tacker 命令之前,需要先获取您的凭据。

注意

有关详细信息,请参阅 创建 OpenStack 客户端环境脚本。 在本文档中,设置如下

OS_REGION_NAME=RegionOne
OS_PROJECT_DOMAIN_ID=default
OS_CACERT=
OS_AUTH_URL=http://192.168.56.10/identity
OS_TENANT_NAME=admin
OS_USER_DOMAIN_ID=default
OS_USERNAME=admin
OS_VOLUME_API_VERSION=3
OS_AUTH_TYPE=password
OS_PROJECT_NAME=admin
OS_PASSWORD=devstack
OS_IDENTITY_API_VERSION=3

您可以通过检查以下命令是否无错误地运行来确认 Tacker 可用

$ openstack vim list

注意

请参阅 命令行界面参考 以查找所有可用命令。

注册 VIM

  1. 准备 VIM 配置文件

    您可以使用设置脚本生成 VIM 配置文件,也可以按照 注册 VIM 的配置文件 中所述从头开始编辑它。 该脚本从您的环境变量中查找配置参数,例如用户名或密码。 以下是生成 OpenStack VIM 配置文件的示例,名为 vim_config.yaml。 在本文档中,TACKER_ROOT 是您服务器上 tacker 仓库的根目录。

    $ bash TACKER_ROOT/tools/gen_vim_config.sh
    Config for OpenStack VIM 'vim_config.yaml' generated.
    

    支持从命令行配置参数的几种选项。 有关详细信息,请参阅帮助信息 -h

    您也可以使用示例配置文件 vim_config.yaml 代替使用该脚本。

    $ cp TACKER_ROOT/samples/etsi_getting_started/tosca/vim/vim_config.yaml ./
    $ vi vim_config.yaml
    
    auth_url: 'http://127.0.0.1/identity'
    username: 'admin'
    password: 'devstack'
    project_name: 'admin'
    domain_name: "default"
    project_domain_name: 'default'
    user_domain_name: 'default'
    cert_verify: 'True'
    
  2. 注册默认 VIM

    设置好 VIM 配置文件后,您可以通过 openstack 命令使用 --is-default 选项注册默认 VIM。

    $ openstack vim register --config-file ./vim_config.yaml \
      --is-default --fit-width openstack-admin-vim
    +----------------+-----------------------------------------------------+
    | Field          | Value                                               |
    +----------------+-----------------------------------------------------+
    | auth_cred      | {                                                   |
    |                |     "username": "admin",                            |
    |                |     "user_domain_name": "default",                  |
    |                |     "cert_verify": "True",                          |
    |                |     "project_id": null,                             |
    |                |     "project_name": "admin",                        |
    |                |     "project_domain_name": "default",               |
    |                |     "auth_url": "http://192.168.56.10/identity/v3", |
    |                |     "key_type": "barbican_key",                     |
    |                |     "secret_uuid": "***",                           |
    |                |     "password": "***"                               |
    |                | }                                                   |
    | auth_url       | http://192.168.56.10/identity/v3                    |
    | created_at     | 2023-12-21 07:39:09.617234                          |
    | description    |                                                     |
    | extra          |                                                     |
    | id             | 662e5f4f-3b16-4ca6-b560-28b62dd0e13b                |
    | is_default     | True                                                |
    | name           | openstack-admin-vim                                 |
    | placement_attr | {                                                   |
    |                |     "regions": [                                    |
    |                |         "RegionOne"                                 |
    |                |     ]                                               |
    |                | }                                                   |
    | project_id     | 1994d69783d64c00aadab564038c2fd7                    |
    | status         | ACTIVE                                              |
    | type           | openstack                                           |
    | updated_at     | None                                                |
    | vim_project    | {                                                   |
    |                |     "name": "admin",                                |
    |                |     "project_domain_name": "default"                |
    |                | }                                                   |
    +----------------+-----------------------------------------------------+
    
  3. 确认已注册 VIM 的状态为 ACTIVE,表示已准备好使用

    $ openstack vim list
    +--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
    | ID                                   | Name                | Tenant_id                        | Type      | Is Default | Status |
    +--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
    | 662e5f4f-3b16-4ca6-b560-28b62dd0e13b | openstack-admin-vim | 1994d69783d64c00aadab564038c2fd7 | openstack | True       | ACTIVE |
    +--------------------------------------+---------------------+----------------------------------+-----------+------------+--------+
    

创建并上传 VNF 包

准备 VNF 包

  1. 创建 VNF 包 CSAR 目录

    $ mkdir -p ./sample_vnf_package_csar/TOSCA-Metadata \
      ./sample_vnf_package_csar/Definitions \
      ./sample_vnf_package_csar/Files/images
    

    [这是特定于 UserData 的部分] 使用 UserData 时,除了创建以下目录。

    $ mkdir -p ./sample_vnf_package_csar/BaseHOT/simple \
      ./sample_vnf_package_csar/UserData
    
  2. 创建一个 TOSCA.meta 文件

    $ vi ./sample_vnf_package_csar/TOSCA-Metadata/TOSCA.meta
    
    TOSCA-Meta-File-Version: 1.0
    Created-by: Dummy User
    CSAR-Version: 1.1
    Entry-Definitions: Definitions/sample_vnfd_top.yaml
    
  3. 下载镜像文件

    $ cd ./sample_vnf_package_csar/Files/images
    $ wget https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
    
  4. 下载 ETSI 定义文件

    您应该将 ${TOSCA_VERSION} 设置为适当的 TOSCA 服务模板版本之一 (SOL001),例如 export TOSCA_VERSION=v2.6.1

    重要提示

    您还应该检查 tacker 是否支持 TOSCA 服务模板的版本。 请参阅 基于 ETSI NFV-SOL001 的 VNF 描述符 (VNFD) 以获取支持的版本。

    $ cd -
    $ cd ./sample_vnf_package_csar/Definitions
    $ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_common_types.yaml
    $ wget https://forge.etsi.org/rep/nfv/SOL001/raw/${TOSCA_VERSION}/etsi_nfv_sol001_vnfd_types.yaml
    
  5. 创建 VNFD 文件

    • 创建 sample_vnfd_top.yaml

      $ vi ./sample_vnfd_top.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
        - sample_vnfd_types.yaml
        - sample_vnfd_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-4840d70a1177
              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
      
    • 创建 sample_vnfd_types.yaml

      $ vi ./sample_vnfd_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:
            id:
              type: string
              description: ID of this VNF
              default: vnf_id
            vendor:
              type: string
              description: name of the vendor who generate this VNF
              default: vendor
            version:
              type: version
              description: version of the software for this VNF
              default: 1.0
            descriptor_id:
              type: string
              constraints: [ valid_values: [ b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 ] ]
              default: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
            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: This is the default flavour description
          requirements:
            - virtual_link_internal:
                capability: tosca.capabilities.nfv.VirtualLinkable
          interfaces:
            Vnflcm:
              type: tosca.interfaces.nfv.Vnflcm
      

      注意

      description_id 必须全局唯一,即您不能使用相同的 description_id 创建多个 VNFD。

    • 创建 sample_vnfd_df_simple.yaml

      $ vi ./sample_vnfd_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
        - sample_vnfd_types.yaml
      
      topology_template:
        inputs:
          id:
            type: string
          vendor:
            type: string
          version:
            type: version
          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
            interfaces:
              Vnflcm:
                instantiate: []
                instantiate_start: []
                instantiate_end: []
                terminate: []
                terminate_start: []
                terminate_end: []
                modify_information: []
                modify_information_start: []
                modify_information_end: []
      
          VDU1:
            type: tosca.nodes.nfv.Vdu.Compute
            properties:
              name: VDU1
              description: VDU1 compute node
              vdu_profile:
                min_number_of_instances: 1
                max_number_of_instances: 1
              sw_image_data:
                name: Software of VDU1
                version: '0.5.2'
                checksum:
                  algorithm: sha-512
                  hash: 6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe36225e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869
                container_format: bare
                disk_format: qcow2
                min_disk: 1 GB
                size: 1 GB
      
            artifacts:
              sw_image:
                type: tosca.artifacts.nfv.SwImage
                file: ../Files/images/cirros-0.5.2-x86_64-disk.img
      
            capabilities:
              virtual_compute:
                properties:
                  virtual_memory:
                    virtual_mem_size: 512 MB
                  virtual_cpu:
                    num_virtual_cpu: 1
                  virtual_local_storage:
                    - size_of_storage: 1 GB
      
          CP1:
            type: tosca.nodes.nfv.VduCp
            properties:
              layer_protocols: [ ipv4 ]
            requirements:
              - virtual_binding: VDU1
              - virtual_link: internalVL1
      
          internalVL1:
            type: tosca.nodes.nfv.VnfVirtualLink
            properties:
              connectivity_type:
                layer_protocols: [ ipv4 ]
              description: Internal Virtual link in the VNF
              vl_profile:
                max_bitrate_requirements:
                  root: 1048576
                  leaf: 1048576
                min_bitrate_requirements:
                  root: 1048576
                  leaf: 1048576
                virtual_link_protocol_data:
                  - associated_layer_protocol: ipv4
                    l3_protocol_data:
                      ip_version: ipv4
                      cidr: 10.0.0.0/24
      

      注意

      “VNF”中的 flavour_description 应该更新,但 Tacker 无法处理它。实例化后,sample_vnfd_types.yaml 中的默认值始终被使用。

  6. [这是特定于 UserData 的部分] 创建 BaseHOT 文件

    $ cd -
    $ vi ./sample_vnf_package_csar/BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
    
    heat_template_version: 2013-05-23
    description: 'Template for test _generate_hot_from_tosca().'
    
    parameters:
      nfv:
        type: json
    
    resources:
      VDU1:
        type: OS::Nova::Server
        properties:
          flavor:
            get_resource: VDU1_flavor
          name: VDU1
          image: { get_param: [ nfv, VDU, VDU1, image ] }
          networks:
          - port:
              get_resource: CP1
    
      CP1:
        type: OS::Neutron::Port
        properties:
          network: { get_param: [ nfv, CP, CP1, network ] }
    
      VDU1_flavor:
        type: OS::Nova::Flavor
        properties:
          ram: { get_param: [ nfv, VDU, VDU1, flavor, ram ] }
          vcpus: { get_param: [ nfv, VDU, VDU1, flavor, vcpus ] }
          disk: { get_param: [ nfv, VDU, VDU1, flavor, disk ] }
    
    outputs: {}
    
  7. [这是特定于 UserData 的部分] 创建 UserData 文件

    $ cd ./sample_vnf_package_csar/UserData/
    $ touch ./__init__.py
    $ vi ./lcm_user_data.py
    
    #
    # Licensed under the Apache License, Version 2.0 (the "License"); you may
    # not use this file except in compliance with the License. You may obtain
    # a copy of the License at
    #
    # https://apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    # License for the specific language governing permissions and limitations
    # under the License.
    
    import tacker.vnfm.lcm_user_data.utils as UserDataUtil
    
    from tacker.vnfm.lcm_user_data.abstract_user_data import AbstractUserData
    
    
    class SampleUserData(AbstractUserData):
    
        @staticmethod
        def instantiate(base_hot_dict=None,
                        vnfd_dict=None,
                        inst_req_info=None,
                        grant_info=None):
    
            # Create HOT input parameter using util functions.
            initial_param_dict = UserDataUtil.create_initial_param_dict(
                base_hot_dict)
    
            vdu_flavor_dict = UserDataUtil.create_vdu_flavor_dict(vnfd_dict)
            vdu_image_dict = UserDataUtil.create_sw_image_dict(vnfd_dict)
            cpd_vl_dict = UserDataUtil.create_network_dict(
                inst_req_info, initial_param_dict)
    
            final_param_dict = UserDataUtil.create_final_param_dict(
                initial_param_dict, vdu_flavor_dict, vdu_image_dict, cpd_vl_dict)
    
            return final_param_dict
    
  8. 将 VNF 包 CSAR 压缩为 zip 文件

    $ cd -
    $ cd ./sample_vnf_package_csar
    $ zip sample_vnf_package_csar.zip -r Definitions/ Files/ TOSCA-Metadata/
    

    zip 文件中的内容应如下所示。

    $ unzip -Z -1 sample_vnf_package_csar.zip
    Definitions/
    Definitions/etsi_nfv_sol001_vnfd_types.yaml
    Definitions/sample_vnfd_top.yaml
    Definitions/etsi_nfv_sol001_common_types.yaml
    Definitions/sample_vnfd_types.yaml
    Definitions/sample_vnfd_df_simple.yaml
    Files/
    Files/images/
    Files/images/cirros-0.5.2-x86_64-disk.img
    TOSCA-Metadata/
    TOSCA-Metadata/TOSCA.meta
    
    • [这是特定于 UserData 的部分] 使用 UserData 时,添加 BaseHOTUserData 目录。

      $ zip sample_vnf_package_csar.zip -r BaseHOT/ UserData/
      

      zip 文件中的内容应如下所示。

      $ unzip -Z -1 sample_vnf_package_csar.zip
      BaseHOT/
      BaseHOT/simple/
      BaseHOT/simple/sample_lcm_with_user_data_hot.yaml
      Definitions/
      Definitions/etsi_nfv_sol001_vnfd_types.yaml
      Definitions/sample_vnfd_top.yaml
      Definitions/etsi_nfv_sol001_common_types.yaml
      Definitions/sample_vnfd_types.yaml
      Definitions/sample_vnfd_df_simple.yaml
      Files/
      Files/images/
      Files/images/cirros-0.5.2-x86_64-disk.img
      TOSCA-Metadata/
      TOSCA-Metadata/TOSCA.meta
      UserData/
      UserData/lcm_user_data.py
      UserData/__init__.py
      

    在这里,您可以找到示例 VNF 包 CSAR 作为 zip 文件的结构。

创建 VNF 包

  1. 执行 vnfpkgm create

    记下“VNF 包 ID”,因为它将在下一步中使用。

    $ cd -
    
    $ openstack vnf package create
    +-------------------+-------------------------------------------------------------------------------------------------+
    | Field             | Value                                                                                           |
    +-------------------+-------------------------------------------------------------------------------------------------+
    | ID                | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d                                                            |
    | Links             | {                                                                                               |
    |                   |     "self": {                                                                                   |
    |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d"                 |
    |                   |     },                                                                                          |
    |                   |     "packageContent": {                                                                         |
    |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
    |                   |     }                                                                                           |
    |                   | }                                                                                               |
    | Onboarding State  | CREATED                                                                                         |
    | Operational State | DISABLED                                                                                        |
    | Usage State       | NOT_IN_USE                                                                                      |
    | User Defined Data | {}                                                                                              |
    +-------------------+-------------------------------------------------------------------------------------------------+
    

上传 VNF 包

  1. 执行 vnfpkgm upload

    “VNF 包 ID” 156f1c4f-bfe2-492b-a079-a1bad32c0c3d 需要替换为从 创建 VNF 包 中获得的适当 ID。

    $ openstack vnf package upload \
      --path ./sample_vnf_package_csar/sample_vnf_package_csar.zip \
      156f1c4f-bfe2-492b-a079-a1bad32c0c3d
    Upload request for VNF package 156f1c4f-bfe2-492b-a079-a1bad32c0c3d has been accepted.
    

检查创建的 VNF 包

  1. 确认“入职状态”为 ONBOARDED(可能需要 30 秒以上)

    $ openstack vnf package list
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | Id                                   | Vnf Product Name | Onboarding State | Usage State | Operational State | Links                                                                                           |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d |                  | PROCESSING       | NOT_IN_USE  | DISABLED          | {                                                                                               |
    |                                      |                  |                  |             |                   |     "self": {                                                                                   |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d"                 |
    |                                      |                  |                  |             |                   |     },                                                                                          |
    |                                      |                  |                  |             |                   |     "packageContent": {                                                                         |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
    |                                      |                  |                  |             |                   |     }                                                                                           |
    |                                      |                  |                  |             |                   | }                                                                                               |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    
    $ openstack vnf package list
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | Id                                   | Vnf Product Name | Onboarding State | Usage State | Operational State | Links                                                                                           |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF       | ONBOARDED        | NOT_IN_USE  | ENABLED           | {                                                                                               |
    |                                      |                  |                  |             |                   |     "self": {                                                                                   |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d"                 |
    |                                      |                  |                  |             |                   |     },                                                                                          |
    |                                      |                  |                  |             |                   |     "packageContent": {                                                                         |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
    |                                      |                  |                  |             |                   |     }                                                                                           |
    |                                      |                  |                  |             |                   | }                                                                                               |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    

创建和实例化 VNF

创建 VNF

  1. 查找“VNFD ID”以创建 VNF

    “VNFD-ID”可以在示例中找到为 b1bb0ce7-ebca-4fa7-95ed-4840d70a1177

    $ openstack vnf package show \
      156f1c4f-bfe2-492b-a079-a1bad32c0c3d -c 'VNFD ID'
    +---------+--------------------------------------+
    | Field   | Value                                |
    +---------+--------------------------------------+
    | VNFD ID | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
    +---------+--------------------------------------+
    
  2. 创建 VNF

    “VNFD ID” b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 需要替换为适当的 ID。

    $ openstack vnflcm create b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
    +-----------------------------+------------------------------------------------------------------------------------------------------------------+
    | Field                       | Value                                                                                                            |
    +-----------------------------+------------------------------------------------------------------------------------------------------------------+
    | ID                          | 810d8c9b-e467-4b06-9265-ac9dce015fce                                                                             |
    | Instantiation State         | NOT_INSTANTIATED                                                                                                 |
    | Links                       | {                                                                                                                |
    |                             |     "self": {                                                                                                    |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce"             |
    |                             |     },                                                                                                           |
    |                             |     "instantiate": {                                                                                             |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/instantiate" |
    |                             |     }                                                                                                            |
    |                             | }                                                                                                                |
    | VNF Configurable Properties |                                                                                                                  |
    | VNF Instance Description    |                                                                                                                  |
    | VNF Instance Name           | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce                                                                         |
    | VNF Package ID              | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d                                                                             |
    | VNF Product Name            | Sample VNF                                                                                                       |
    | VNF Provider                | Company                                                                                                          |
    | VNF Software Version        | 1.0                                                                                                              |
    | VNFD ID                     | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177                                                                             |
    | VNFD Version                | 1.0                                                                                                              |
    +-----------------------------+------------------------------------------------------------------------------------------------------------------+
    

实例化 VNF

  1. 创建 <param-file>

    必需参数

    • flavourId

    可选参数

    • instantiationLevelId

    • extVirtualLinks

    • extManagedVirtualLinks

    • vimConnectionInfo

    • additionalParams

    注意

    只有在您拥有默认 VIM 时,才能跳过 vimConnectionInfo

    一个名为 sample_param_file.json 的示例 <param-file>,其中包含最少的参数

    $ vi ./sample_param_file.json
    
    • 使用 TOSCA 时,使用以下参数。

      {
        "flavourId": "simple",
        "vimConnectionInfo": [
          {
            "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
            "vimId": "${vim_uuid}",
            "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2"
          }
        ]
      }
      
    • [这是特定于 UserData 的部分] 使用 UserData 时,请使用以下参数。

      {
        "flavourId": "simple",
        "extVirtualLinks": [
          {
            "id": "net0",
            "resourceId": "${network_uuid}",
            "extCps": [
              {
                "cpdId": "CP1",
                "cpConfig": [
                  {
                    "cpProtocolData": [
                      {
                        "layerProtocol": "IP_OVER_ETHERNET",
                        "ipOverEthernet": {
                          "ipAddresses": [
                            {
                              "type": "IPV4",
                              "numDynamicAddresses": 1,
                              "subnetId": "${subnet_uuid}"
                            }
                          ]
                        }
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ],
        "vimConnectionInfo": [
          {
            "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",
            "vimId": "${vim_uuid}",
            "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2"
          }
        ],
        "additionalParams": {
          "lcm-operation-user-data": "./UserData/lcm_user_data.py",
          "lcm-operation-user-data-class": "SampleUserData"
        }
      }
      

    ${network_uuid}${subnet_uuid}${vim_uuid} 应该替换为要使用的网络的 uuid、要使用的子网的 uuid 以及要使用的 VIM 的 uuid,分别。

    提示

    您可以使用 network 命令 查找网络及其相应子网的 uuid

    $ openstack network list
    
  2. 实例化 VNF

    “VNF 实例的 ID”和“指向 <param-file> 的路径”是实例化 vnf 所必需的。

    $ openstack vnflcm instantiate \
      810d8c9b-e467-4b06-9265-ac9dce015fce ./sample_param_file.json
    Instantiate request for VNF Instance 810d8c9b-e467-4b06-9265-ac9dce015fce has been accepted.
    

    检查实例化 vnf 的详细信息。

    $ openstack vnflcm list
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | ID                                   | VNF Instance Name                        | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID                              |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | INSTANTIATED        | Company      | 1.0                  | Sample VNF       | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    
    $ openstack vnflcm show 810d8c9b-e467-4b06-9265-ac9dce015fce
    +-----------------------------+----------------------------------------------------------------------------------------------------------------------+
    | Field                       | Value                                                                                                                |
    +-----------------------------+----------------------------------------------------------------------------------------------------------------------+
    | ID                          | 810d8c9b-e467-4b06-9265-ac9dce015fce                                                                                 |
    | Instantiated Vnf Info       | {                                                                                                                    |
    |                             |     "flavourId": "simple",                                                                                           |
    |                             |     "vnfState": "STARTED",                                                                                           |
    |                             |     "extCpInfo": [],                                                                                                 |
    |                             |     "vnfcResourceInfo": [                                                                                            |
    |                             |         {                                                                                                            |
    |                             |             "id": "6894448f-4a88-45ec-801f-4ef455e8a613",                                                            |
    |                             |             "vduId": "VDU1",                                                                                         |
    |                             |             "computeResource": {                                                                                     |
    |                             |                 "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b",                                           |
    |                             |                 "resourceId": "cfb5d6de-90a1-433a-9af4-1159ca279e27",                                                |
    |                             |                 "vimLevelResourceType": "OS::Nova::Server"                                                           |
    |                             |             },                                                                                                       |
    |                             |             "storageResourceIds": [],                                                                                |
    |                             |             "vnfcCpInfo": [                                                                                          |
    |                             |                 {                                                                                                    |
    |                             |                     "id": "b6dffe31-2e4b-44e6-8ddd-b94608a9210b",                                                    |
    |                             |                     "cpdId": "CP1",                                                                                  |
    |                             |                     "vnfExtCpId": null,                                                                              |
    |                             |                     "vnfLinkPortId": "5040ae0d-ef8b-4d12-b96b-d9d05a0ba7fe"                                          |
    |                             |                 }                                                                                                    |
    |                             |             ]                                                                                                        |
    |                             |         }                                                                                                            |
    |                             |     ],                                                                                                               |
    |                             |     "vnfVirtualLinkResourceInfo": [                                                                                  |
    |                             |         {                                                                                                            |
    |                             |             "id": "4b67e6f9-8133-4f7d-b384-abd64f9bcbac",                                                            |
    |                             |             "vnfVirtualLinkDescId": "internalVL1",                                                                   |
    |                             |             "networkResource": {                                                                                     |
    |                             |                 "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b",                                           |
    |                             |                 "resourceId": "d04beb5f-b29a-4f7e-b32b-7ea669afa3eb",                                                |
    |                             |                 "vimLevelResourceType": "OS::Neutron::Net"                                                           |
    |                             |             },                                                                                                       |
    |                             |             "vnfLinkPorts": [                                                                                        |
    |                             |                 {                                                                                                    |
    |                             |                     "id": "5040ae0d-ef8b-4d12-b96b-d9d05a0ba7fe",                                                    |
    |                             |                     "resourceHandle": {                                                                              |
    |                             |                         "vimConnectionId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b",                                   |
    |                             |                         "resourceId": "84edd7c7-a02f-4f25-be2a-a0ee5b1c8dc7",                                        |
    |                             |                         "vimLevelResourceType": "OS::Neutron::Port"                                                  |
    |                             |                     },                                                                                               |
    |                             |                     "cpInstanceId": "b6dffe31-2e4b-44e6-8ddd-b94608a9210b"                                           |
    |                             |                 }                                                                                                    |
    |                             |             ]                                                                                                        |
    |                             |         }                                                                                                            |
    |                             |     ],                                                                                                               |
    |                             |     "vnfcInfo": [                                                                                                    |
    |                             |         {                                                                                                            |
    |                             |             "id": "6c0ba2a3-3f26-4ba0-9b4f-db609b2e843c",                                                            |
    |                             |             "vduId": "VDU1",                                                                                         |
    |                             |             "vnfcState": "STARTED"                                                                                   |
    |                             |         }                                                                                                            |
    |                             |     ],                                                                                                               |
    |                             |     "additionalParams": {}                                                                                           |
    |                             | }                                                                                                                    |
    | Instantiation State         | INSTANTIATED                                                                                                         |
    | Links                       | {                                                                                                                    |
    |                             |     "self": {                                                                                                        |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce"                 |
    |                             |     },                                                                                                               |
    |                             |     "terminate": {                                                                                                   |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/terminate"       |
    |                             |     },                                                                                                               |
    |                             |     "scale": {                                                                                                       |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/scale"           |
    |                             |     },                                                                                                               |
    |                             |     "heal": {                                                                                                        |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/heal"            |
    |                             |     },                                                                                                               |
    |                             |     "changeExtConn": {                                                                                               |
    |                             |         "href": "https://:9890/vnflcm/v1/vnf_instances/810d8c9b-e467-4b06-9265-ac9dce015fce/change_ext_conn" |
    |                             |     }                                                                                                                |
    |                             | }                                                                                                                    |
    | VIM Connection Info         | [                                                                                                                    |
    |                             |     {                                                                                                                |
    |                             |         "id": "e24f9796-a8e9-4cb0-85ce-5920dcddafa1",                                                                |
    |                             |         "vimId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b",                                                             |
    |                             |         "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_2",                                                                 |
    |                             |         "interfaceInfo": {},                                                                                         |
    |                             |         "accessInfo": {},                                                                                            |
    |                             |         "extra": {}                                                                                                  |
    |                             |     },                                                                                                               |
    |                             |     {                                                                                                                |
    |                             |         "id": "67820f17-a82a-4e3a-b200-8ef119646749",                                                                |
    |                             |         "vimId": "662e5f4f-3b16-4ca6-b560-28b62dd0e13b",                                                             |
    |                             |         "vimType": "openstack",                                                                                      |
    |                             |         "interfaceInfo": {},                                                                                         |
    |                             |         "accessInfo": {},                                                                                            |
    |                             |         "extra": {}                                                                                                  |
    |                             |     }                                                                                                                |
    |                             | ]                                                                                                                    |
    | VNF Configurable Properties |                                                                                                                      |
    | VNF Instance Description    |                                                                                                                      |
    | VNF Instance Name           | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce                                                                             |
    | VNF Package ID              | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d                                                                                 |
    | VNF Product Name            | Sample VNF                                                                                                           |
    | VNF Provider                | Company                                                                                                              |
    | VNF Software Version        | 1.0                                                                                                                  |
    | VNFD ID                     | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177                                                                                 |
    | VNFD Version                | 1.0                                                                                                                  |
    | metadata                    | tenant=admin                                                                                                         |
    +-----------------------------+----------------------------------------------------------------------------------------------------------------------+
    

终止和删除 VNF

终止 VNF

  1. 检查要终止的 VNF 实例 ID

    $ openstack vnflcm list
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | ID                                   | VNF Instance Name                        | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID                              |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | INSTANTIATED        | Company      | 1.0                  | Sample VNF       | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    
  2. 终止 VNF 实例

    执行终止命令

    $ openstack vnflcm terminate 810d8c9b-e467-4b06-9265-ac9dce015fce
    Terminate request for VNF Instance '810d8c9b-e467-4b06-9265-ac9dce015fce' has been accepted.
    

    检查 VNF 实例的状态

    $ openstack vnflcm list
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | ID                                   | VNF Instance Name                        | Instantiation State | VNF Provider | VNF Software Version | VNF Product Name | VNFD ID                              |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    | 810d8c9b-e467-4b06-9265-ac9dce015fce | vnf-810d8c9b-e467-4b06-9265-ac9dce015fce | NOT_INSTANTIATED    | Company      | 1.0                  | Sample VNF       | b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 |
    +--------------------------------------+------------------------------------------+---------------------+--------------+----------------------+------------------+--------------------------------------+
    

删除 VNF

  1. 删除 VNF 实例

    $ openstack vnflcm delete 810d8c9b-e467-4b06-9265-ac9dce015fce
    Vnf instance '810d8c9b-e467-4b06-9265-ac9dce015fce' is deleted successfully
    

删除 VNF 包

  1. 删除 VNF 包

    检查要删除的 VNF 包 ID

    $ openstack vnf package list
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | Id                                   | Vnf Product Name | Onboarding State | Usage State | Operational State | Links                                                                                           |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF       | ONBOARDED        | NOT_IN_USE  | ENABLED           | {                                                                                               |
    |                                      |                  |                  |             |                   |     "self": {                                                                                   |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d"                 |
    |                                      |                  |                  |             |                   |     },                                                                                          |
    |                                      |                  |                  |             |                   |     "packageContent": {                                                                         |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
    |                                      |                  |                  |             |                   |     }                                                                                           |
    |                                      |                  |                  |             |                   | }                                                                                               |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    

    将运行状态更新为 DISABLED

    $ openstack vnf package update --operational-state 'DISABLED' \
      156f1c4f-bfe2-492b-a079-a1bad32c0c3d
    +-------------------+----------+
    | Field             | Value    |
    +-------------------+----------+
    | Operational State | DISABLED |
    +-------------------+----------+
    

    检查是否已更改运行状态

    $ openstack vnf package list
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | Id                                   | Vnf Product Name | Onboarding State | Usage State | Operational State | Links                                                                                           |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    | 156f1c4f-bfe2-492b-a079-a1bad32c0c3d | Sample VNF       | ONBOARDED        | NOT_IN_USE  | DISABLED          | {                                                                                               |
    |                                      |                  |                  |             |                   |     "self": {                                                                                   |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d"                 |
    |                                      |                  |                  |             |                   |     },                                                                                          |
    |                                      |                  |                  |             |                   |     "packageContent": {                                                                         |
    |                                      |                  |                  |             |                   |         "href": "/vnfpkgm/v1/vnf_packages/156f1c4f-bfe2-492b-a079-a1bad32c0c3d/package_content" |
    |                                      |                  |                  |             |                   |     }                                                                                           |
    |                                      |                  |                  |             |                   | }                                                                                               |
    +--------------------------------------+------------------+------------------+-------------+-------------------+-------------------------------------------------------------------------------------------------+
    

    删除 VNF 包

    $ openstack vnf package delete 156f1c4f-bfe2-492b-a079-a1bad32c0c3d
    All specified vnf-package(s) deleted successfully
    

故障排除

  • Neutron QoSPlugin 错误

    Vnf instantiation failed for vnf 810d8c9b-e467-4b06-9265-ac9dce015fce, error: ERROR: HEAT-E99001 Service neutron is not available for resource type OS::Neutron::QoSPolicy, reason: Required extension qos in neutron service is not available.
    
    1. 编辑 /etc/neutron/neutron.conf

      $ sudo vi /etc/neutron/neutron.conf
      
      - service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin
      + service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
      
    2. 编辑 /etc/neutron/plugins/ml2/ml2_conf.ini

      $ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
      
      - extension_drivers = port_security
      + extension_drivers = port_security,qos
      
    3. 重新启动 neutron 服务

      $ sudo systemctl restart devstack@q-*
      
  • networking-sfc 中的错误

    1. 通过编辑 /etc/neutron/neutron.conf 禁用 networking-sfc

      $ sudo vi /etc/neutron/neutron.conf
      
      - service_plugins = ovn-router,networking_sfc.services.flowclassifier.plugin.FlowClassifierPlugin,networking_sfc.services.sfc.plugin.SfcPlugin,neutron.services.qos.qos_plugin.QoSPlugin,qos
      + service_plugins = ovn-router,neutron.services.qos.qos_plugin.QoSPlugin
      
      - [sfc]
      - drivers = ovs
      - [flowclassifier]
      - drivers = ovs
      
    2. 编辑 /etc/neutron/plugins/ml2/ml2_conf.ini

      $ sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
      
      - [agent]
      - extensions = sfc
      
    3. 重新启动 neutron 服务

      $ sudo systemctl restart devstack@q-*