你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在安装或升级后运行测试
本文介绍 Azure 运营商服务管理器 (AOSM) 如何在安装或升级操作过程中对网络函数 (NF) 运行测试。 启用后,系统将在组件安装或升级完成后测试每个网络函数应用程序 (nfApp)。 若要成功完成 NF 操作状态,需要跨所有 nfApp 测试的成功结果。
概述
作为安全升级程序的一部分,AOSM 支持在网络函数安装或升级操作期间将 Helm 测试用作管控步骤。 以下工作流描述了 AOSM 在包括此额外验证层时使用的逻辑:
- 用户在 NF 载入期间创作自己的测试并将其包含在 Helm 包中。
- 仅在启用的情况下,AOSM 在每个 nfApp 上执行这些 Helm 测试。
- 测试成功后,AOSM 将转到下一个 nfApp。
- 测试失败后,AOSM 会遵循
rollbackOnTestFail
以确定 nfApp 是否回滚。 - 如果任意 nfApp 未通过配置的测试,父 NF 操作将终止并失败。
- 父 NF 操作失败后,AOSM 会遵循 NF 故障控制配置的方法,即
pause-on-failure
或rollback-on-failure
。
注意
Helm 测试仅在安装或升级作中受支持,不能独立运行。
创作 Helm 测试
发布商负责在构建 Helm 图表期间创作 Helm 测试。 Helm 测试在文件夹下的 Helm 图表中定义:<ChartName>/Templates/
。 每个测试都包含一个作业定义,用于指定要运行的容器环境和命令。 容器环境应成功退出,以便将测试视为成功。 作业定义必须包含 Helm 测试挂钩注释 (helm.sh/hook: test)
,才能被 Helm 识别为测试。
在操作期间启用 Helm 测试
AOSM 为每个 nfApp 提供一组可配置的安装和升级选项。 这些现有选项使用新 testOptions
参数进行扩展。 使用此参数,用户可以指定每个 nfApp 和每种操作类型的 testOptions
设置。
testOptions
参数支持以下参数:
enable
- 安装或升级完成后,启用或禁用 nfApp 上的 Helm 测试。
- 默认值为 false。
timeout
- 采用某个值,该值表示测试超时(以分钟为单位)。
- 默认值为 20 分钟。
rollbackOnTestFailure
- 启用或禁用在 nfApp Helm 测试失败时回滚。
- 默认值为 true。
filter
- 允许使用某种方法仅运行部分测试。 接受字符串列表,其中列表中的每个字符串表示要执行的测试。
- 默认值为无筛选,即运行所有测试。
通过参数公开 Helm 测试控件
AOSM 已支持 NF 有效负载参数 installOptions
,以及 upgradeOptions
下每个 nfApp 的 roleOverrideValues
。 这些参数经过扩展以包含新的 testOptions
设置。 公开这些新参数设置可让运营商控制运行时的升级行为。 请参阅下面三个演示 testOptions
用法的示例。
roleOverrideValues 转义示例
以下是一个适用于名为 application1
的组件的转义示例 roleOverrideValues
,该示例包含 testOptions
且需 installOptions
和 upgradeOptions
条件。 此示例使用 filter
,只执行与提供的字符串匹配的测试,使用自定义超时并启用 rollbackOnTestFailures
。
"roleOverrideValues": [
"{\"name\":\"application1\",\"deployParametersMappingRuleProfile\":{\"helmMappingRuleProfile\":{\"helmPackageVersion\":\"2.1.3\",\"values\":\"{\\\"roleOneParam\\\":\\\"roleOneOverrideValue\\\"}\",\"options\":{\"installOptions\":{\"atomic\":\”true\”,\"wait\":\"true\",\"timeout\":\"30m\",\”testOptions\”:{\”enable\”:\”true\”,\”timeout\”:\”15\”,\”rollbackOnTestFailure\”:\”true\”,\”filter\”:[\”test1\”,\”test2\”,\”test3\”]}},\"upgradeOptions\":{\"atomic\": \”true\”,\"wait\":\"true\",\"timeout\":\"30\", \”testOptions\”:{\”enable ”:\”true\”,\”timeout\”:\”15\”,\”rollbackOnTestFailure\”:\”true\”,\” filter \”:[\”test1\”,\”test2\”,\”test3\”]}}}}}}"]
roleOverrideValues 未转义示例
以下是一个适用于名为 hellotest
的组件的未转义示例 roleOverrideValues
NF 有效负载,该示例包含 testOptions
且需 installOptions
和 upgradeOptions
条件。 此示例使用 filter
,只执行与提供的字符串匹配的测试,使用自定义超时并启用 rollbackOnTestFailures
。
"roleOverrideValues": ["{
"name":"hellotest",
"deployParametersMappingRuleProfile": {
"helmMappingRuleProfile": {
"options": {
"installOptions": {
"atomic":"true",
"wait":"true",
"timeout":"1"
“testOptions”: {
“enable”: “true”,
“timeout”: “10”,
“rollbackOnTestFailure”: “true”,
"filter”: [“test1”, “test2”] } },
"upgradeOptions": {
"atomic":"true",
"wait":"true",
"timeout":"2",
“testOptions”: {
“enable”: “true”,
“timeout”: “10”,
“rollbackOnTestFailure”: “true”,
"filter”: [“test1”, “test2”] } } } } } }"
]
NF 有效负载示例
以下是一个适用于名为 application1
的组件的示例 NF 有效负载,该示例包含 testOptions
且需 installOptions
和 upgradeOptions
条件。 此示例仅执行 filter
与提供的字符串匹配的测试,使用自定义超时并启用 rollbackOnTestFailures
。
{
"location": "eastus",
"properties": {
"publisherName": "testVendor",
"publisherScope": "Public",
"networkFunctionDefinitionGroupName": "testnetworkFunctionDefinitionGroupName",
"networkFunctionDefinitionVersion": "1.0.1",
"networkFunctionDefinitionOfferingLocation": "eastus",
"nfviType": "AzureArcKubernetes",
"nfviId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testResourceGroup/providers/Microsoft.ExtendedLocation/customLocations/testCustomLocation",
"allowSoftwareUpdate": true,
"deploymentValues": "{\"releaseName\":\"testReleaseName\",\"namespace\":\"testNamespace\",\"wait\":\"false\"}",
"roleOverrideValues": [
"{\"name\":\"application1\",\"deployParametersMappingRuleProfile\":{\"helmMappingRuleProfile\":{\"helmPackageVersion\":\"2.1.3\",\"values\":\"{\\\"roleOneParam\\\":\\\"roleOneOverrideValue\\\"}\",\"options\":{\"installOptions\":{\"atomic\":\”true\”,\"wait\":\"true\",\"timeout\":\"30m\",\” testOptions \”:{\” enable \”:\”true\”,\” timeout\”:\”15\”,\”rollbackOnTestFailure\”:\”true\”,\” filter \”:[\”test1\”,\”test2\”,\”test3\”]}},\"upgradeOptions\":{\"atomic\": \”true\”,\"wait\":\"true\",\"timeout\":\"30\", \” testOptions \”:{\” enable \”:\”true\”,\” timeout\”:\”15\”,\”rollbackOnTestFailure\”:\”true\”,\” filter \”:[\”test1\”,\”test2\”,\”test3\”]}}}}}}"
]
}
}