ETSI NFV-SOL 更改外部 VNF 连接

本文档描述了在 Tacker v2 API 中更改外部 VNF 连接的方式。

注意

本文档的内容已确认使用以下 VNF 包有效。

先决条件

应安装以下软件包

  • tacker

  • python-tackerclient

ETSI NFV-SOL 使用 LCM 操作用户数据进行 VNF 部署(作为 VM) 的过程中执行到“实例化 VNF”为止。换句话说,不执行“终止 VNF”后的步骤。

更改外部 VNF 连接

如“先决条件”中所述,在执行更改外部连接之前,必须先创建 VNF。

假设存在以下 VNF 实例,将更改此实例。

CLI 命令的详细信息请参阅 使用 v2 Tacker 进行 VNF 生命周期管理

为了更改外部 VNF 连接,您需要在运行更改连接命令之前准备一个 JSON 格式的定义文件。

{
  "extVirtualLinks": [
    {
      "id": "ced0c31f-bb03-4351-90af-8c51f59bcf25",
      "vimConnectionId": "vim1",
      "resourceProviderId": "671cb532-4139-45e6-b873-b06b4864f0ab",
      "resourceId": "dcdd8e59-d303-4659-bdff-d32f2cb2b806",
      "extCps": [
        {
          "cpdId": "VDU1_CP1",
          "cpConfig": {
            "VDU1_CP1": {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET",
                  "ipOverEthernet": {
                    "ipAddresses": [
                      {
                        "type": "IPV4",
                        "numDynamicAddresses": 1,
                        "subnetId": "ab38a204-8c01-4205-95c6-b4e74198700f"
                      }
                    ]
                  }
                }
              ]
            }
          }
        },
        {
          "cpdId": "VDU2_CP2",
          "cpConfig": {
            "VDU2_CP2": {
              "cpProtocolData": [
                {
                  "layerProtocol": "IP_OVER_ETHERNET",
                  "ipOverEthernet": {
                    "ipAddresses": [
                      {
                        "type": "IPV4",
                        "fixedAddresses": [
                          "22.22.22.101"
                        ],
                        "subnetId": "ab38a204-8c01-4205-95c6-b4e74198700f"
                      },
                      {
                        "type": "IPV6",
                        "numDynamicAddresses": 1,
                        "subnetId": "3f023732-8364-43e0-80de-00799d5b78af"
                      }
                    ]
                  }
                }
              ]
            }
          }
        }
      ]
    }
  ],
  "vimConnectionInfo": {
    "vim1": {
      "vimId": "f7ed00b1-06f1-4076-95dc-c6ed11f5541c",
      "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3",
      "interfaceInfo": {
        "endpoint": "https:///identity/v3"
      },
      "accessInfo": {
        "username": "nfv_user",
        "region": "RegionOne",
        "password": "devstack",
        "project": "nfv",
        "projectDomain": "Default",
        "userDomain": "Default"
      },
      "extra": {
        "dummy-key": "dummy-val"
      }
    }
  },
  "additionalParams": {
    "dummy-key": "dummy-val",
    "lcm-operation-user-data": "./UserData/userdata_standard.py",
    "lcm-operation-user-data-class": "StandardUserData"
  }
}

注意

sample_param_file.json 包含所有端口资源信息的数据。如果未包含任何设置,则将其视为信息更改。

注意

更改外部 VNF 连接操作可以更改与现有 VNF 实例关联的 vimConnectionInfo。即使更改外部 VNF 连接操作指定了与一个 VNF 实例关联的多个 vimConnectionInfo,也只会使用其中一个用于生命周期管理操作。无法删除已注册的 vimConnectionInfo 的键。

如何更改特定端口设置

执行更改外部 VNF 连接 CLI 命令,并在操作前后检查堆栈的“ID”和“堆栈状态”。 目的是确认操作前后堆栈“ID”没有变化,并且堆栈更新已成功完成。有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考

操作前的堆栈信息

$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'

结果

+--------------------------------------+------------------------------------------+-----------------+
| ID                                   | Stack Name                               | Stack Status    |
+--------------------------------------+------------------------------------------+-----------------+
| 7a53b676-aa9c-4c7d-a8a7-1311646ec7e2 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | CREATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+

堆栈资源信息

$ openstack stack resource list HEAT_STACK_ID

结果

+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
| resource_name      | physical_resource_id                 | resource_type          | resource_status | updated_time         |
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
| VDU1-0             | ea178dfa-5148-4be0-9508-58c94989b76a | VDU1.yaml              | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| VDU1-VolumeType    | dc71e318-74f3-43dc-ad79-7503846384c7 | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| VDU2-0             | cf97ee84-1681-4498-a0eb-e42f1de2a845 | VDU2.yaml              | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| VDU2-VolumeType    | 322d5605-3409-4c63-b776-d8486a7593fe | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| internalVL3_subnet | 360ec318-5f7d-4f56-b9cc-a089695b24ae | OS::Neutron::Subnet    | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| internalVL3        | 90d2c767-2b54-4c02-85aa-7bb1ff9f4d14 | OS::Neutron::Net       | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+

堆栈资源详细信息

$ openstack stack resource show HEAT_STACK_ID VDU2_CP2  \
  -f json | jq .attributes.fixed_ips

结果

[
  {
    "subnet_id": "a1d042f3-88aa-4150-b42b-8620c9be746c",
    "ip_address": "100.100.100.11"
  },
  {
    "subnet_id": "a12a1603-a30d-4724-80fb-9a7019a3c79f",
    "ip_address": "1111:2222:3333::18d"
  }
]

更改整个 VNF 的外部 VNF 连接执行

$ openstack vnflcm change-ext-conn VNF_INSTANCE_ID sample_param_file.json \
  --os-tacker-api-version 2

结果

Change External VNF Connectivity for VNF Instance df9150a0-8679-4b14-8cbc-9d2d6606ca7c has been accepted.

注意

创建描述要更改的资源信息的文件。

操作后的堆栈信息

$ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status'

结果

+--------------------------------------+------------------------------------------+-----------------+
| ID                                   | Stack Name                               | Stack Status    |
+--------------------------------------+------------------------------------------+-----------------+
| 7a53b676-aa9c-4c7d-a8a7-1311646ec7e2 | vnf-df9150a0-8679-4b14-8cbc-9d2d6606ca7c | UPDATE_COMPLETE |
+--------------------------------------+------------------------------------------+-----------------+

注意

“堆栈状态”过渡到 UPDATE_COMPLETE。

堆栈资源信息

$ openstack stack resource list HEAT_STACK_ID

结果

+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
| resource_name      | physical_resource_id                 | resource_type          | resource_status | updated_time         |
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+
| VDU1-0             | ea178dfa-5148-4be0-9508-58c94989b76a | VDU1.yaml              | UPDATE_COMPLETE | 2023-11-13T07:54:47Z |
| VDU1-VolumeType    | dc71e318-74f3-43dc-ad79-7503846384c7 | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| VDU2-0             | cf97ee84-1681-4498-a0eb-e42f1de2a845 | VDU2.yaml              | UPDATE_COMPLETE | 2023-11-13T07:54:46Z |
| VDU2-VolumeType    | 322d5605-3409-4c63-b776-d8486a7593fe | OS::Cinder::VolumeType | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| internalVL3_subnet | 360ec318-5f7d-4f56-b9cc-a089695b24ae | OS::Neutron::Subnet    | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
| internalVL3        | 90d2c767-2b54-4c02-85aa-7bb1ff9f4d14 | OS::Neutron::Net       | CREATE_COMPLETE | 2023-11-13T04:14:13Z |
+--------------------+--------------------------------------+------------------------+-----------------+----------------------+

堆栈资源详细信息

$ openstack stack resource show HEAT_STACK_ID VDU2_CP2  \
  -f json | jq .attributes.fixed_ips

结果

[
  {
    "subnet_id": "3f023732-8364-43e0-80de-00799d5b78af",
    "ip_address": "1111:2222:4444::39f"
  },
  {
    "subnet_id": "ab38a204-8c01-4205-95c6-b4e74198700f",
    "ip_address": "22.22.22.101"
  }
]

注意

“fixed_ips”已从更改外部 VNF 连接之前的 IP 更改。

有关 Heat CLI 命令的详细信息,请参阅 Heat CLI 参考