共用方式為


安裝或升級之後執行測試

本文說明 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-failurerollback-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 ,以及 upgradeOptionsroleOverrideValues每個 nfApp 的 。 這些參數會擴充以包含新的 testOptions 設定。 公開這些新的參數設定可讓作員控制運行時間的升級行為。 請參閱下列三個示範 使用方式的 testOptions範例。

roleOverrideValues 逸出範例

以下是在和 下名為 之元件的逸出範例roleOverrideValuesapplication1installOptionsupgradeOptionstestOptions 這個範例會使用 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 testOptionsinstallOptions。 這個範例會使用 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 PayloadtestOptionsinstallOptionsupgradeOptions 這個範例使用 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\”]}}}}}}" 
        ]
    }
}