tox

tox 是我们用于运行测试场景的自动化项目。它使我们能够创建包含多个测试场景的动态矩阵、隔离的测试环境,并提供一个单一入口点,以自动化且可重复的方式运行所有测试。

tox 的文档可以在 这里 找到。

环境变量

运行 tox 时,我们允许使用环境变量来调整 playbook 运行的某些设置,使用 Ansible 的 --extra-vars。这对于 Jenkins 作业或 ceph-ansible 的手动测试运行很有帮助。

以下环境变量可供使用

  • CEPH_DOCKER_REGISTRY: (默认: quay.io) 这将配置 ceph-ansible 变量 ceph_docker_registry

  • CEPH_DOCKER_IMAGE: (默认: ceph/daemon) 这将配置 ceph-ansible 变量 ceph_docker_image

  • CEPH_DOCKER_IMAGE_TAG: (默认: latest) 这将配置 ceph-ansible 变量 ceph_docker_image_name

  • CEPH_DEV_BRANCH: (默认: main) 这将配置 ceph-ansible 变量 ceph_dev_branch,该变量定义我们要从 shaman.ceph.com 安装哪个分支。

  • CEPH_DEV_SHA1: (默认: latest) 这将配置 ceph-ansible 变量 ceph_dev_sha1,该变量定义我们要从 shaman.ceph.com 安装哪个 sha1。

  • UPDATE_CEPH_DEV_BRANCH: (默认: main) 这将配置 ceph-ansible 变量 ceph_dev_branch,该变量定义我们要从 shaman.ceph.com 更新到哪个分支。

  • UPDATE_CEPH_DEV_SHA1: (默认: latest) 这将配置 ceph-ansible 变量 ceph_dev_sha1,该变量定义我们要从 shaman.ceph.com 更新到哪个 sha1。

部分

tox.ini 文件有许多由 [ ] 定义的顶级部分以及其中的子部分。有关 tox 部分中所有子部分的完整文档,请参阅 tox 文档。

  • tox : 此部分包含 envlist,用于创建我们的动态矩阵。有关 envlist 工作方式的更多信息,请参阅 这里 的部分。

  • purge : 此部分包含仅针对清除集群并重新部署的场景运行的命令。您将看到此部分在 testenv 中以以下语法重用: {[purge]commands}

  • update : 此部分包含仅针对部署集群然后将其升级到另一个 Ceph 版本的场景运行的命令。

  • testenv : 这是 tox.ini 文件的主要部分,并在每个场景中运行。此部分包含许多根据 envlist 中定义的场景定义条件设置的 *因子*。例如,testenvchangedir 子部分中的因子 centos7_cluster 设置了当选择该因子时 tox 将更改到的目录。这是一个重要的行为,它允许我们使用相同的 tox.ini 并重用命令,同时针对每个测试场景调整某些部分。

修改或添加环境

tox 环境由 [tox] 部分的 envlist 子部分控制。 {} 内的任何内容都被视为一个 *因子*,并将包含在 tox 创建的动态矩阵中。在 {} 内,您可以包含一个逗号分隔的 *因子* 列表。请勿使用连字符 (-) 作为 *因子* 名称的一部分,因为 tox 将其用作不同因子集之间的分隔符。

例如,如果想为下一个 Ceph 版本 luminous 添加一个新的测试 *因子*,您可以这样做。目前,我们 envlist 中的第一个因子集用于定义 Ceph 版本 ({jewel,kraken}-...)。要添加 luminous,您需要将其更改为 {luminous,kraken}-...。在 testenv 部分中,有一个名为 setenv 的子部分,允许您向 tox 环境提供环境变量,我们支持一个名为 CEPH_STABLE_RELEASE 的环境变量。为确保通过添加 luminous *因子* 创建的所有新测试都能正常工作,您需要在此部分中执行以下操作: luminous: CEPH_STABLE_RELEASE=luminous