支持 ansible driver 的多工件

https://blueprints.launchpad.net/tacker/+spec/add-ansible-mgmt-driver-sample

我们将能够使用多部署模式的配置。

问题描述

Ansible Driver 仅对 VDU 有一个配置信息。此配置信息在 implementation 键中定义。

注意

implementation 键在 TOSCA Simple Profile 3.6.14 中定义 [1]

此参数不能有多个值,它只有一个值。它在每个 VNF 生命周期开始和结束时根据此定义执行。

node_templates:
  VNF:
    type: SAMPLE.VNF
    properties:
      flavour_description: 'n-vnf'
      vnfm_info:
        - Tacker
    interfaces:
      Vnflcm:
        instantiate: []
        instantiate_start: []
        instantiate_end:
          implementation: ansible_driver
    ...
    artifacts:
      ansible_driver:
        description: Management driver plugin
        type: tosca.artifacts.Implementation.Python
        file: /opt/stack/tacker/tacker/vnfm/mgmt_drivers/ansible/ansible.py

如果我们希望为不同部署 flavor 的 VNFD 提供不同的配置,我们需要在 Driver 中实现条件分支,或者提供另一个 Driver。然而,这些方法会增加 Driver 的特异性。

我们思考了确保 Driver 的通用性的方法,并提出了以下更改。

提议的变更

建议的更改是实现 TOSCA 定义的 primarydependencies 键。

primary 可以定义主脚本。

dependencies 可以定义由主脚本引用的辅助脚本。

如果您实现了此依赖关系,您可以这样定义它

node_templates:
  VNF:
    type: SAMPLE.VNF
    properties:
      flavour_description: 'n-vnf'
      vnfm_info:
        - Tacker
    interfaces:
      Vnflcm:
        instantiate: []
        instantiate_start:
          implementation:
            primary: ansible_driver
            dependencies:
              - mgmt-drivers-ansible-config-start
        instantiate_end:
          implementation:
            primary: ansible_driver
            dependencies:
              - mgmt-drivers-ansible-config-end
    ...
    artifacts:
      ansible_driver:
        description: Management driver plugin
        type: tosca.artifacts.Implementation.Python
        file: /opt/stack/tacker/tacker/vnfm/mgmt_drivers/ansible/ansible.py
      mgmt-drivers-ansible-config-start:
        description: Management driver config_start.yaml
        type: tosca.artifacts.Implementation.Yaml
        file: ../ScriptAnsible/config_start.yaml
      mgmt-drivers-ansible-config-end:
        description: Management driver config_end.yaml
        type: tosca.artifacts.Implementation.Yaml
        file: ../ScriptAnsible/config_end.yaml

primary 定义具有运行管理能力的脚本,而 dependencies 定义执行实际注入的脚本。这些定义允许用户进行灵活的配置。

注意

此规范还保持对 VNFD 当前使用的单个工件格式的向后兼容性支持。

如何使用

Ansible Driver 使用 yaml 文件。但是,yaml 定义未在 OASIS 中定义,因此无法按原样由引用 OASIS 定义文件的 Tacker 使用。为了使用 yaml 文件,我们创建以下定义文件。

示例:additional_type.yaml

tosca_definitions_version: tosca_simple_yaml_1_2
description: yaml types definitions version 0.0.1

metadata:
  template_name: additional_type
  template_author: ---
  template_version: 0.0.1

artifact_types:
  tosca.artifacts.Implementation.Yaml:
    derived_from: tosca.artifacts.Implementation
    description: artifacts for Yaml
    mime_type: application/x-yaml
    file_ext: [yaml]

创建此文件后,我们将此文件放在 VNF Package 的 Definitions 文件夹中。

示例

VNF Package
|
+--TOSCA-Metadata
|  +--TOSCA.meta
|
+--Definitions
|  +--etsi_nfv_sol001_common_types.yaml
|  +--etsi_nfv_sol001_vnfd_types.yaml
|  +--helloworld3_df_simple.yaml
|  +--helloworld3_top.vnfd.yaml
|  +--helloworld3_types.yaml
|  +--additional_type.yaml               <<< add file
|
+--Files
|  +--images
|     +--cirros-0.5.2-x86_64-disk.img
|
+--Drivers
|  +--vnflcm_noop.py
|
+--UserData
   +--__init__.py
   +--lcm_user_data.py

VNFD 在 imports 部分导入此定义文件。

此外,VNFD 不能仅仅通过存储来读取此定义文件。为了能够读取此定义文件,我们将以下配置添加到 VNFD。

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
  - additional_type.yaml                  <<< import file

在以下设置之后,您可以执行 VNF LCM。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Wataru Juso <w-juso@nec.com>

其他贡献者

Aldinson C. Esto <esto.aln@nec.com>

Pooja Singla <pooja.singla@india.nec.com>

工作项

  • 在 tosca-parser 中启用对 primary 和 dependencies 的理解

  • 在 tacker 的 schema 中启用对 primary 和 dependencies 的理解

  • 扩展获取 implementation 信息的方法

依赖项

测试

文档影响

  • 修改 Ansible Driver 的用户文档

参考资料