Поделиться через


Выполнение тестов после установки или обновления

В этой статье описывается, как оператор Azure Service Manager (AOSM) может выполнять тесты в сетевых функциях (NFS) в рамках операций установки или обновления. При включении каждое сетевое приложение-функция (nfApp) проверяется после завершения установки компонента или обновления. Результат успешного выполнения всех тестов nfApp необходим для успешного завершения операции NF.

Обзор

В рамках программы безопасного обновления AOSM поддерживает использование тестов helm в качестве шага gating во время операций установки или обновления сетевой функции. Следующий рабочий процесс описывает логику, используемую AOSM при включении этого дополнительного уровня проверки:

  • Пользователи создают собственные тесты и включают их в пакет helm во время подключения NF.
  • Только при включении AOSM выполняет эти тесты helm на каждом nfApp.
  • После успешного тестирования AOSM переходит к следующему nfApp.
  • При сбое теста AOSM учитывает rollbackOnTestFail , выполняется ли откат nfApp.
  • Родительская операция NF завершается сбоем, если какой-либо nfApp завершается сбоем настроенного теста.
  • При родительском сбое AOSM учитывает настроенный метод элемента управления сбоем NF либо pause-on-failurerollback-on-failure.

Примечание.

Тест Helm поддерживается только в рамках операции установки или обновления и не может выполняться автономно.

Разработка тестов helm

Издатель отвечает за разработку тестов helm во время построения диаграмм helm. Тесты helm определяются в диаграмме helm в папке: <ChartName>/Templates/ Каждый тест включает определение задания, указывающее среду контейнера и команду для выполнения. Среда контейнера должна успешно завершиться, чтобы тест считался успешным. Определение задания должно включать заметку (helm.sh/hook: test) хука теста helm, чтобы быть признана тестом helm.

Включение тестов helm во время операций

AOSM предоставляет набор настраиваемых параметров установки и обновления для каждого nfApp. Эти существующие параметры расширены новым параметром testOptions . С помощью этого параметра пользователь может указать testOptions параметры для каждого nfApp и для каждого типа операции. Параметр testOptions поддерживает следующие параметры:

  • enable
    • Включает или отключает тест helm на nfApp после завершения установки или обновления.
    • По умолчанию используется значение false.
  • timeout
    • Принимает значение, представляющее время ожидания теста в минутах.
    • Значение по умолчанию — 20 минут.
  • rollbackOnTestFailure
    • Включает или отключает откат на сбой теста nfApp helm.
    • Значение по умолчанию — «истина».
  • filter
    • Позволяет методу выполнять только подмножество тестов. Принимает список строк, где каждая строка в списке представляет тест для выполнения.
    • Значение по умолчанию не является фильтром и выполняются все тесты.

Предоставление тестового элемента управления helm с помощью параметров

AOSM уже поддерживает параметры installOptions полезных данных NF и upgradeOptions для каждого nfApp в разделе roleOverrideValues. Эти параметры расширены для включения новых testOptions параметров. Предоставление этих новых параметров позволяет оператору управлять поведением обновления во время выполнения. См. три следующих примера, демонстрирующих использование testOptions.

Пример escape-кода roleOverrideValues

Ниже приведен escape-пример с именем компонента в разделе installOptions и upgradeOptions для компонентаapplication1.testOptionsroleOverrideValues В этом примере используется 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 без отключаемого примера

Ниже приведен неопубликованный пример roleOverrideValues полезных данных NF в testOptions разделе installOptions и upgradeOptions для компонента с именем hellotest. В этом примере используется 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

Ниже приведен пример полезных данных NF, в testOptionsinstallOptions который входит и upgradeOptions для компонента с именем application1. В этом примере используется 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\”]}}}}}}" 
        ]
    }
}