Mgmt Driver 错误信息改进¶
https://blueprints.launchpad.net/tacker/+spec/improving-mgmt-driver-log
本规范提出以下两个改进:
定义 Tacker 和 Mgmt Driver 之间的错误处理接口
改进 Ansible playbook 失败时引发的异常信息
问题描述¶
Tacker 和 Mgmt Driver 之间缺乏清晰的接口¶
当 Mgmt Driver 中发生错误时,Tacker-conductor 接收 Mgmt Driver 引发的任何类型的异常。然后,Tacker-conductor 将其转换为 ETSI GS NFV-SOL 013 v2.6.1 [1] 中定义的 ProblemDetails 类型,并将其存储在 ETSI GS NFV-SOL 003 v2.6.1 [2] 中定义的 VnfLcmOpOcc 的错误字段中。
这样,Tacker 和 Mgmt Driver 之间没有错误消息处理的规则,如何定义 Mgmt Driver 引发的错误类型取决于用户的实现。
Mgmt Driver 是 Tacker 中的用户可定制的插件。因此,用户之间 Tacker 和 Mgmt Driver 之间存在清晰的错误处理接口是理想的。
Ansible Mgmt Driver 错误消息缺乏信息¶
Tacker 源代码包含 Ansible Mgmt Driver 示例 [3]。
在使用此示例时,Ansible playbook 失败时生成的异常中包含的信息只是“命令的返回码不是 0”,用户只能通过 CLI “vnflcm op show” 检查此消息。
tacker-conductor.log 包含有关错误的更多信息。但通常,只有管理员才有权访问日志,因此用户无法调试错误。
因此,有必要改进用户通过 CLI 命令看到的错误信息。
提议的变更¶
本规范提出两个改进。
1) 定义 Tacker 和 Mgmt Driver 之间的错误处理接口¶
为 Tacker-conductor 和 Mgmt Driver 之间的错误处理定义以下规则。
Mgmt Driver 引发的异常必须符合 ETSI GS NFV-SOL 013 规范 [1] 中定义的
ProblemDetails格式。Tacker-conductor 必须能够捕获异常的类型。
注意
为了保持向后兼容性,也可以接收任何类型的异常。在这种情况下,异常将被转换为字符串并存储在 VnfLcmOpOccs 的错误字段中,如当前实现。
ProblemDetails 的定义如下:
属性名称 |
数据类型 |
基数 |
描述 |
|---|---|---|---|
type |
Uri |
0..1 |
根据 IETF RFC 3986 [4] 的 URI 引用,用于标识问题类型。鼓励 URI 在取消引用时为问题提供人类可读的文档(例如,使用 HTML)。当未提供此成员时,其值假定为‘about:blank’。 |
title |
字符串 |
0..1 |
问题类型的简短、人类可读的摘要。它不应从问题的出现到出现发生变化,除非是为了本地化。如果提供了 type 且不为‘about:blank’,则也应提供此属性。 |
status |
Integer |
1 |
此问题发生的 HTTP 状态码。 |
detail |
字符串 |
1 |
此问题发生的特定的人类可读的解释。 |
实例 |
Uri |
0..1 |
一个 URI 引用,用于标识问题的特定发生。如果取消引用,它可能会产生更多信息 |
(附加属性) |
未指定。 |
0..N |
由规范或实现定义的任意数量的附加属性。 |
为了实现此规则,Tacker 侧应具有符合 ProblemDetails 的基本异常类。并且 Mgmt Driver 的开发人员使用它来使他们的 Mgmt Driver 中的异常与 ProblemDetails 兼容。
基本类定义在 tacker/common/exceptions.py 中。格式如下:
class ManagementDriverException(TackerException):
def __init__(self, type=None, title=None, status, detail, instance=None)
self.type = type
self.title = title
self.status = status
self.detail = detail
self.instance = instance
Mgmt Driver 中的异常必须继承基本类以符合 ProblemDetails,如下所示:
class CommandExecutionError(ManagementDriverError):
2) 改进 Ansible playbook 失败时引发的异常信息¶
在 Ansible Mgmt Driver 示例中,Ansible playbook 失败时会引发 CommandExecutionError。无论哪个任务失败,此错误始终输出相同消息。
在此规范中,对其进行了修改以包含以下 3 点:
要配置的 VDU 名称
失败的任务名称
与失败的任务相关的 ansible-playbook 命令的提取的 stdout 消息
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Masaki Oyama <ma-ooyama@kddi.com>
- 其他贡献者
Yukihiro Kinjo <yu-kinjou@kddi.com>
Xu Hongjin <ho-xu@kddi.com>
Hitomi Koba <hi-koba@kddi.com>
工作项¶
实现 Tacker 和 Mgmt Driver 之间的错误处理接口
改进 Ansible playbook 失败时引发的异常信息
添加接口的单元测试
依赖项¶
无
测试¶
无
文档影响¶
将添加有关 Tacker 和 Mgmt Driver 之间错误处理接口的文档。