Tempest 运行后清理¶
https://blueprints.launchpad.net/tempest/+spec/post-run-cleanup
问题描述¶
现有的脚本 /tempest/stress/cleanup.py 可以用于在 Tempest 运行后进行一些基本的清理,但需要一个更强大的工具来报告 Tempest 运行后残留的尽可能多的悬挂对象(泄漏),以便帮助找出对象残留的原因并针对根本原因报告错误。此外,该工具应该完全将环境重置为运行前的状态,以防 Tempest 留下任何悬挂对象。
设想是用户应该能够查看生成的报告,找到对象未被删除的根本原因。此外,该工具将使系统恢复到可以重新运行 Tempest 的状态,并期望返回相同测试结果。
目前,根据测试失败情况,可能需要进行大量手动操作才能恢复到这种运行前的状态。此蓝图旨在缓解此问题。
提议的变更¶
将 /tempest/stress/cleanup.py 作为起点并进行扩展。它应该从 /tempest/stress 移动到 tempest/cmd/,并为其添加一个入口点。这样,当运行 setup.py 时,它将被安装为二进制文件,这也允许对其进行单元测试。目前该工具使用 Tempest OpenStack 客户端,这将保持不变。
修复 cleanup.py,通过循环遍历每个租户/用户来删除对象,而不是当前使用 admin 用户和“all_tenants”参数的方式,因为某些对象类型不支持此参数,例如浮动 IP。
目前 cleanup.py 删除所有用户/租户中的所有对象。添加两个运行时参数:–init-saved-state,它创建一个 JSON 文件,包含 Tempest 运行前的状态,以及 –preserve-state,它将保留部署的 Tempest 运行前的状态,包括 tempest.conf 中定义的租户和用户。这将强制部署处于与运行 Tempest 之前的相同状态,并允许再次运行 Tempest,而无需重新配置 Tempest 并重新创建 Tempest 测试用户等。例如,如果 –preserve-state 为 true,cleanup 将加载 JSON 文件(通过在运行 cleanup 时使用 –init-saved-state 标志在 Tempest 运行之前创建),其中包含环境的保留状态,并将数据编组到一些定义的实例变量中。然后,当 cleanup 循环遍历浮动 IP 时,我们将得到类似如下内容:
- for f in floating_ips
- if not preserve or (preserve and f[‘id’] not in self.floating_ips)
- try
admin_manager.floating_ips_client.delete_floating_ip(f[‘id’])
- except Exception
…
cleanup.py 目前删除服务器(实例)、密钥对、安全组、浮动 IP、用户、租户、快照和卷。它还应该删除任何堆栈、可用区以及 Tempest 创建的任何其他对象,完整列表待定。
如上文概述部分所述,某些测试失败会将系统置于奇怪的状态。例如,由于实例处于 Error 状态,无法删除该实例。即使使用 CLI 将实例重置为 Active 状态,未来的删除调用仍然会再次导致 Error 状态。这种情况表明 OpenStack 中存在错误。此工具应该提供尽可能多的详细信息,说明出了什么问题,以便可以针对问题打开缺陷。
添加参数 –dry-run,该参数仅以报告模式运行 cleanup,显示将要删除的内容,而不执行实际删除操作
场景 1:运行 cleanup.py¶
这是当前行为,它删除系统中的所有对象,除了缺失的对象、堆栈和可用区等。
场景 2:运行 cleanup.py –preserve-state¶
与场景 1 相同,但 tempest.conf 中定义的、在 Tempest 运行中使用的对象将被保留。
例如(异常是 tempest.conf 中定义的变量)
删除所有用户,除了:username、alt_username、admin_username
删除所有租户,除了:tenant_name、alt_tenant_name、admin_tenant_name
删除所有镜像,除了:image_ref、image_ref_alt
其他影响¶
在数据库中会存在一些残留,因为 OpenStack 的缺陷不允许在清理过程中删除对象。在这种情况下,将系统重置为预先存在的状态需要直接与数据库交互。设计清理脚本使其具有可插拔接口可能是有用的,例如,下游功能可以添加以自动执行所需的数据库交互。尽管 API 删除失败表明需要修复的上游错误,但在该错误得到修复之前,在删除记录之前无法进一步测试环境。
实现¶
负责人¶
- 主要负责人
David Paterson <davpat2112@yahoo.com>
如果他们打算在此蓝图上进行大量实现工作,可以选择性地列出其他 ID。
里程碑¶
完成目标里程碑
Juno 发布周期,大约在 2014 年 7 月 24 日的那一周。
工作项¶
重构 cleanup.py 的位置
在 cleanup.py 中注册新的运行时参数
启用基于 –preserve-state 参数和 tempest.conf 中定义的值的删除过滤
编写代码,详细报告悬挂资源和清理失败的可能根本原因。
实现代码,仅报告模式的 –dry-run 参数。
依赖项¶
仅以上列出的