使用模板配置场景测试

https://blueprints.launchpad.net/sahara/+spec/scenario-test-config-template

想要运行 Sahara 仓库中可用的场景测试的用户需要修改提供的 YAML 文件,即使这些文件并未明确标记为模板文件。可以通过扩展测试运行器来读取模板并执行所需变量的替换,从而改进此过程的可用性。

问题描述

Sahara 仓库中提供的场景测试实际上是模板文件,即使它们仅被标记为 YAML 文件;这在 README.rst 文件中并不明确。想要运行它们的用户需要手动替换所需的变量(这些变量是必需的,因为它们取决于环境:主机 IP、凭据、网络类型、使用的风味等)。开发人员、测试人员以及用于在 CI 上运行脚本的包装脚本都需要执行此步骤。主要的 Sahara CI 仓库 sahara-ci-config 包含替换变量的代码

https://github.com/stackforge/sahara-ci-config/blob/master/slave-scripts/functions-common.sh#L148

提议的变更

当前模板文件(目前主要在 etc/sahara-ci 下)需要被正确识别为模板。选择的格式是 Mako,因为它已经是场景测试运行器 (runner.py) 的依赖项。文件将使用特殊后缀(file.yaml.mako)标记,并且所使用的变量将被转换为 Mako 格式。模板的使用将仅限于变量替换,这意味着模板中不包含任何逻辑。

测试运行器将继续像往常一样处理普通的 YAML 文件,除了模板文件之外。

runner.py 还会接收一个简单的 INI 风格的文件,其中包含模板中使用的变量的值。运行器将使用该文件生成用于输入的实际 YAML 文件(除了指定的普通 YAML 文件之外)。

如果某个变量的值缺失(INI 文件中没有该键),将引发异常并导致运行器终止。这与 sahara-ci-config 代码的当前行为不同,后者只是打印警告,但考虑到这很可能导致失败,强制提前终止可以限制资源消耗。

当前的 sahara-ci-config 代码允许为替换变量指定更多详细信息,例如用于停止某个键匹配的特定结束键,但如果为变量选择合适的名称,这些信息可能是不需要的。

最后,sahara/tests/scenario/README.rst 应该被修改,以记录当前使用的变量以及如何提供键/值配置文件。sahara-ci-config 中的代码也应该被修改,以创建这样的配置文件并使用模板文件的新的名称来对应相应的测试。

替代方案

数据模型影响

REST API 影响

其他最终用户影响

部署者影响

运行 tox -e scenario 的 CI 系统应该更新为使用新的文件名。

开发者影响

运行测试的开发人员/QE 需要使用新的模板名称。

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

实现

负责人

主要负责人

ltoscano

工作项

更改将按以下方式实施

  1. 允许 runner.py 使用 mako 模板文件作为输入;

  2. 将现有文件复制到新名称并使用非歧义的变量名称来创建模板;

  3. 更改 sahara-ci 脚本以设置新的变量并使用重命名的模板文件;

  4. 删除旧的 yaml 文件;

  5. (可选) 清理不必要的代码(insert_scenario_value 等)

受影响的仓库:- sahara:1, 2, 4 - sahara-ci-config:3, 5

依赖项

测试

成功的 CI 运行将确保新代码没有导致现有场景出现回归。

文档影响

需要更新 sahara/tests/scenario/README.rst。

参考资料