安裝或升級之後執行測試
本文說明 Azure 作員服務管理員 (AOSM) 如何在安裝或升級作業時,在網路功能 (NFs) 上執行測試。 啟用時,每個網路函式應用程式 (nfApp) 都會在元件安裝或升級完成之後進行測試。 需要所有 nfApp 測試的成功結果,NF 作業狀態才能順利完成。
概觀
作為安全升級程式的一部分,AOSM 支援在網路函式安裝或升級作業期間使用 helm 測試作為檢查步驟。 下列工作流程描述在包含此額外一層驗證時,AOSM 所使用的邏輯:
- 使用者在 NF 上線期間撰寫自己的測試,並將其包含在 helm 套件中。
- 只有在啟用時,AOSM 才會在每個 nfApp 上執行這些 helm 測試。
- 測試成功后,AOSM 會繼續進行下一個 nfApp。
- 測試失敗時,AOSM 會接受
rollbackOnTestFail
判斷 nfApp 是否已回復。 - 如果有任何 nfApp 失敗設定的測試,父 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
參數擴充。 使用此參數時,用戶可以指定 testOptions
每個 nfApp 和每個作業類型的設定。 參數 testOptions
支援下列參數:
enable
- 在安裝或升級完成之後,啟用或停用 nfApp 上的 helm 測試。
- 預設值為 False。
timeout
- 接受值,表示以分鐘為單位的測試逾時。
- 預設值為20分鐘。
rollbackOnTestFailure
- 啟用或停用 nfApp helm 測試失敗時的復原。
- 預設值為 True。
filter
- 允許方法只執行測試子集。 接受字串清單,其中清單中的每個字串都代表要執行的測試。
- 默認值不是篩選條件,而且會執行所有測試。
透過參數公開 helm 測試控制件
AOSM 已經支援 NF 承載參數 installOptions
,以及 upgradeOptions
下 roleOverrideValues
每個 nfApp 的 。 這些參數會擴充以包含新的 testOptions
設定。 公開這些新的參數設定可讓作員控制運行時間的升級行為。 請參閱下列三個示範 使用方式的 testOptions
範例。
roleOverrideValues 逸出範例
以下是在和 下名為 之元件的逸出範例roleOverrideValues
。application1
installOptions
upgradeOptions
testOptions
這個範例會使用 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 未逸出範例
以下是在 和 upgradeOptions
下名為 之元件的hellotest
未逸出範例 roleOverrideValues
NF Payload testOptions
installOptions
。 這個範例會使用 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 PayloadtestOptions
。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\”]}}}}}}"
]
}
}