Przypadki testowe dla pliku createUiDefinition.json

W tym artykule opisano testy uruchamiane przy użyciu zestawu narzędzi do testowania szablonu dla plików createUiDefinition.json . Przykłady obejmują nazwy testów i przykłady kodu, które kończą się powodzeniem lub niepowodzeniem testów.

Zestaw narzędzi zawiera przypadki testowe szablonów usługi Azure Resource Manager (szablony usługi ARM) oraz główne pliki szablonów o nazwie azuredeploy.json lub maintemplate.json. Gdy katalog zawiera plik createUiDefinition.json , określone testy są uruchamiane dla kontrolek interfejsu użytkownika. Aby uzyskać więcej informacji na temat uruchamiania testów lub uruchamiania określonego testu, zobacz Parametry testu.

Plik createUiDefinition.json tworzy niestandardowe kontrolki interfejsu użytkownika (UI) przy użyciu elementów i funkcji.

Sprawdzanie, czy parametr szablonu zezwala na wartości

Nazwa testu: dozwolone wartości powinny być dozwolone

Ten test sprawdza, czy wartości dla każdej kontrolki w pliku createUiDefinition.json są dozwolone w parametrach szablonu głównego. Parametry są mapowane według nazwy między głównym szablonem a plikiem createUiDefinition.json .

Parametr szablonu głównego musi akceptować wartości z kontrolki allowedValues. Test sprawdza również, czy kontrolka jest przywołyana w sekcji createUiDefinition.jsonoutputs .

Ten test sprawdza główny szablon i plik createUiDefinition.json . Przykładowy plik createUiDefinition.json jest wyświetlany po głównych przykładach szablonów.

Poniższy przykład kończy się niepowodzeniem , ponieważ nazwa combo parametru głównego szablonu jest niezgodna z nazwą comboBoxparametru kontrolki .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "combo": {
      "type": "string",
      "defaultValue": "two"
    }
  },
  "resources": [],
  "outputs": {
    "comboBoxOutput": {
      "type": "string",
      "value": "[parameters('combo')]"
    }
  }
}

Poniższy przykład kończy się niepowodzeniem , ponieważ typ int parametru szablonu głównego nie akceptuje wartości kontrolki string . A jeśli parametr szablonu głównego definiuje parametr defaultValue , musi być prawidłowy value w kontrolce allowedValues.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "comboBox": {
      "type": "int",
      "defaultValue": 4
    }
  },
  "resources": [],
  "outputs": {
    "comboBoxOutput": {
      "type": "string",
      "value": "[parameters('combo')]"
    }
  }
}

Poniższy przykład przechodzi, ponieważ nazwa parametru szablonu głównego jest zgodna z nazwą parametru kontrolki. Typ parametru szablonu jest string elementem z wartością defaultValue określoną w kontrolce allowedValues.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "comboBox": {
      "type": "string",
      "defaultValue": "two"
    }
  },
  "resources": [],
  "outputs": {
    "comboBoxOutput": {
      "type": "string",
      "value": "[parameters('comboBox')]"
    }
  }
}

Plik createUiDefinition.json dla tego przykładu:

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [],
    "steps": [
      {
        "name": "demoComboBox",
        "label": "demoComboBoxLabel",
        "elements": [
          {
            "name": "comboBox",
            "type": "Microsoft.Common.DropDown",
            "label": "Example drop down",
            "defaultValue": "Value two",
            "toolTip": "This is a tool tip",
            "constraints": {
              "allowedValues": [
                {
                  "label": "Value one",
                  "description": "The value to select for option 1.",
                  "value": "one"
                },
                {
                  "label": "Value two",
                  "description": "The value to select for option 2.",
                  "value": "two"
                }
              ],
              "required": true
            },
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "comboBox": "[steps('demoComboBox').comboBox]"
    }
  }
}

Kontrolki wyjściowe muszą istnieć

Nazwa testu: kontrolki w danych wyjściowych muszą istnieć

Kontrolki używane w outputs sekcji muszą istnieć w elememencie w innym miejscu w pliku createUiDefinition.json. Nazwa, do którego się odwołujesz outputs , musi być zgodna z nazwą używaną w elemencie basics[] lub steps[].

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "nameDoesNotMatchOutput",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Poniższy przykład przekazuje.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Właściwości muszą zawierać wartości

Nazwa testu: CreateUIDefinition nie może zawierać wartości pustych

Właściwości muszą zawierać wartości. Wymagane właściwości muszą używać prawidłowych wartości. Opcjonalne właściwości, które są puste, powinny zostać usunięte. Test umożliwia użycie pustego "basics": []elementu , "steps": []lub defaultValue.

Poniższy przykład kończy się niepowodzeniem , ponieważ labelwartości , placeholderi toolTip są puste.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "",
        "placeholder": "",
        "defaultValue": "",
        "toolTip": ""
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Poniższy przykład przekazuje dane , ponieważ label i toolTip mają wartości i placeholder zostały usunięte.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "defaultValue": "",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Użyj prawidłowego schematu i wersji

Nazwa testu: CreateUIDefinition powinien mieć schemat

Plik createUiDefinition.json musi zawierać $schema właściwość i używać prawidłowej wartości $schema i version. Numery wersji w $schema pliku i version muszą być zgodne.

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.9.9-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.9.9-preview"
}

Poniższy przykład przekazuje kod , ponieważ używa najnowszych $schema elementów i version.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview"
}

Nie ukrywaj potwierdzenia poświadczeń

Nazwa testu: Potwierdzenie poświadczeń nie powinno być ukryte

Ten test sprawdza, czy poświadczenia są potwierdzane dla microsoft.Common.PasswordBox lub Microsoft.Compute.CredentialsCombo. Właściwość powinna być ustawiona hideConfirmation na false wartość , aby potwierdzenie było widoczne.

Poniższy przykład kończy się niepowodzeniem z powodu hideConfirmation błędu .true

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "credentials",
        "type": "Microsoft.Compute.CredentialsCombo",
        "label": {
          "password": "Password",
          "confirmPassword": "Confirm password"
        },
        "toolTip": {
          "password": "Type your credentials"
        },
        "constraints": {
          "required": true,
          "customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{12,}$",
          "customValidationMessage": "The password must be alphanumeric, contain at least 12 characters, and have at least 1 letter and 1 number."
        },
        "options": {
          "hideConfirmation": true
        },
        "osPlatform": "Windows",
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "credentials": "[basics('credentials')]"
    }
  }
}

Poniższy przykład przekazuje element , ponieważ hideConfirmation ma wartość false.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "credentials",
        "type": "Microsoft.Compute.CredentialsCombo",
        "label": {
          "password": "Password",
          "confirmPassword": "Confirm password"
        },
        "toolTip": {
          "password": "Type your credentials"
        },
        "constraints": {
          "required": true,
          "customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{12,}$",
          "customValidationMessage": "The password must be alphanumeric, contain at least 12 characters, and have at least 1 letter and 1 number."
        },
        "options": {
          "hideConfirmation": false
        },
        "osPlatform": "Windows",
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "credentials": "[basics('credentials')]"
    }
  }
}

Używanie poprawnej procedury obsługi

Nazwa testu: Program obsługi musi być poprawny

Użyj polecenia Microsoft.Azure.CreateUIDef lub Microsoft.Compute.MultiVm w pliku createUiDefinition.json .

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.",
  "version": "0.1.2-preview"
}

Poniższy przykład przekazuje.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview"
}

Nie ukrywaj istniejących zasobów

Nazwa testu: HideExisting musi być poprawnie obsłużony

Jeśli hideExisting parametr jest ustawiony na false wartość lub pominięty, outputs musi zawierać resourceGroup wartości i newOrExisting. Wartość domyślna to hideExistingfalse.

Przykłady typów kontrolek, które obejmują hideExisting: Microsoft.Storage.StorageAccountSelector, Microsoft.Network.PublicIpAddressCombo lub Microsoft.Network.VirtualNetworkCombo.

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "storage",
        "type": "Microsoft.Storage.StorageAccountSelector",
        "label": "Storage account",
        "toolTip": "This is a demo storage account",
        "defaultValue": {
          "name": "storageaccount01",
          "type": "Premium_LRS"
        },
        "options": {
          "hideExisting": false
        },
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]"
    }
  }
}

Poniższy przykład przekazuje.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "storage",
        "type": "Microsoft.Storage.StorageAccountSelector",
        "label": "Storage account",
        "toolTip": "This is a demo storage account",
        "defaultValue": {
          "name": "storageaccount01",
          "type": "Premium_LRS"
        },
        "options": {
          "hideExisting": false
        },
        "visible": false
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "resourceGroup": "[basics('storage').resourceGroup]",
      "newOrExisting": "[basics('storage').newOrExisting]"
    }
  }
}

Używanie lokalizacji w danych wyjściowych

Nazwa testu: lokalizacja powinna znajdować się w danych wyjściowych

Sekcja outputs powinna zawierać lokalizację przy użyciu funkcji location .

Poniższy przykład kończy się niepowodzeniem , ponieważ outputs nie zawiera lokalizacji.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Poniższy przykład przekazuje.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]",
      "location": "[location()]"
    }
  }
}

Uwzględnij dane wyjściowe kontrolki w parametrach szablonu

Nazwa testu: dane wyjściowe muszą być obecne w parametrach szablonu

Test sprawdza, czy plik createUiDefinition.json zawiera sekcję outputs . Test sprawdza również, czy są one outputs zdefiniowane w sekcji głównego szablonu parameters . Nazwy muszą być zgodne, ponieważ parametry są mapowane według nazwy między plikiem createUiDefinition.json i głównym szablonem.

Ten test sprawdza główny szablon i plik createUiDefinition.json . Przykładowy plik createUiDefinition.json jest wyświetlany po głównych przykładach szablonów.

Poniższy przykład kończy się niepowodzeniem, ponieważ główny szablon nie zawiera parametru comboBox z sekcji pliku outputscreateUiDefinition.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Poniższy przykład przekazuje, ponieważ główny szablon zawiera comboBox parametr .

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "comboBox": {
      "type": "string",
      "defaultValue": "two"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [],
  "outputs": {
    "comboBox": {
      "type": "string",
      "value": "[parameters('comboBox')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Plik createUiDefinition.json dla tego przykładu:

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]",
      "location": "[location()]"
    }
  }
}

Parametry bez wartości domyślnej muszą istnieć w danych wyjściowych

Nazwa testu: parametry bez wartości domyślnej muszą istnieć w parametrach CreateUIDefinition

Parametry w głównym szablonie bez wartości domyślnej muszą istnieć w sekcji pliku outputscreateUiDefinition.json.

Ten test sprawdza główny szablon i plik createUiDefinition.json . Przykładowy plik azuredeploy.json jest wyświetlany po przykładach kontrolki.

Poniższy przykład kończy się niepowodzeniem, ponieważ plik outputscreateUiDefinition.json nie zawiera parametru comboBoxgłównego szablonu .

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]"
    }
  }
}

Poniższy przykład przekazuje element , ponieważ plik createUiDefinition.json zawiera element comboBox w pliku outputs.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "comboBox": "[basics('comboBox')]",
      "location": "[location()]"
    }
  }
}

W tym przykładzie plik azuredeploy.json . Parametr comboBox nie ma wartości domyślnej.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "comboBox": {
      "type": "string"
    },
    "location": {
      "type": "string"
    }
  },
  "resources": [],
  "outputs": {
    "comboBox": {
      "type": "string",
      "value": "[parameters('comboBox')]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Używanie bezpiecznego parametru z polem hasła

Nazwa testu: Pola tekstowe haseł muszą być używane dla parametrów hasła

Ten test sprawdza, czy element Microsoft.Common.PasswordBox jest zdefiniowany w szablonach parameters głównych i pliku createUiDefinition.jsonoutputs. Typ parametru szablonu głównego dla pola hasła musi mieć secureString wartość lub secureObject.

Ten test sprawdza główny szablon i plik createUiDefinition.json . Przykładowy plik createUiDefinition.json jest wyświetlany po głównych przykładach szablonów.

Poniższy przykład kończy się niepowodzeniem , ponieważ parametr głównego szablonu passwordBox to string.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "passwordBox": {
      "type": "string"
    },
    "location": {
      "type": "string"
    }
  },
  "resources": [],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Poniższy przykład przekazuje element , ponieważ parametr głównego szablonu passwordBox to secureString.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "passwordBox": {
      "type": "secureString"
    },
    "location": {
      "type": "string"
    }
  },
  "resources": [],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Plik createUiDefinition.json dla tego przykładu:

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "passwordBox",
        "type": "Microsoft.Common.PasswordBox",
        "label": {
          "password": "Password",
          "confirmPassword": "Confirm password"
        },
        "toolTip": "Type a password"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "passwordBox": "[basics('passwordBox')]"
    }
  }
}

Pole hasła wymaga minimalnej długości

Nazwa testu: PasswordBoxes musi mieć minimalną długość

Test sprawdza, czy element Microsoft.Common.PasswordBox używa elementu constraints z znakiem regex , który wymaga co najmniej 12 znaków.

Poniższy przykład kończy się niepowodzeniem , ponieważ nie ma constraintspliku .

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "passwordBox",
        "type": "Microsoft.Common.PasswordBox",
        "label": {
          "password": "Password",
          "confirmPassword": "Confirm password"
        },
        "toolTip": "Type a password"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "passwordBox": "[basics('passwordBox')]"
    }
  }
}

Poniższy przykład przechodzi, ponieważ wymaga regex co najmniej 12 znaków.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "passwordBox",
        "type": "Microsoft.Common.PasswordBox",
        "label": {
          "password": "Password",
          "confirmPassword": "Confirm password"
        },
        "toolTip": "Type a password",
        "constraints": {
          "required": true,
          "regex": "^[a-zA-Z0-9]{12,}$",
          "validationMessage": "Password must be at least 12 characters long, contain only numbers and letters"
        }
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "passwordBox": "[basics('passwordBox')]"
    }
  }
}

Pole tekstowe musi używać walidacji

Nazwa testu: pola tekstowe są dobrze sformułowane

Użyj walidacji z polami tekstowymi, aby sprawdzić, czy constraints zawierają element regex i message.

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "textBox",
        "type": "Microsoft.Common.TextBox",
        "label": "Text box",
        "toolTip": "Type 1-30 alphanumeric characters",
        "placeholder": "Type your text here",
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "textBox": "[basics('textBox')]"
    }
  }
}

Poniższy przykład przechodzi.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "textBox",
        "type": "Microsoft.Common.TextBox",
        "label": "Text box",
        "toolTip": "Type 1-30 alphanumeric characters",
        "placeholder": "Type your text here",
        "constraints": {
          "required": true,
          "validations": [
            {
              "regex": "^[a-z0-9A-Z]{1,30}$",
              "message": "Only 1-30 characters alphanumeric characters are allowed."
            }
          ]
        },
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "textBox": "[basics('textBox')]"
    }
  }
}

etykietka narzędzia musi istnieć z wartością

Nazwa testu: Etykietki narzędzi powinny być obecne

Ten test sprawdza, czy toolTip właściwość istnieje i zawiera wartość.

Poniższy przykład kończy się niepowodzeniem.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": ""
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Poniższy przykład przechodzi.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "comboBox",
        "type": "Microsoft.Common.DropDown",
        "label": "Example drop down",
        "toolTip": "This is a tool tip"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "comboBox": "[basics('comboBox')]"
    }
  }
}

Nie ustawiaj domyślnej nazwy użytkownika

Nazwa testu: Nazwy użytkowników nie powinny mieć wartości domyślnej

Test sprawdza, czy istnieje defaultValue zestaw dla elementu Microsoft.Compute.UserNameTextBox.

Poniższy przykład kończy się niepowodzeniem , ponieważ podano element defaultValue .

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "userNameBox",
        "type": "Microsoft.Compute.UserNameTextBox",
        "label": "User name",
        "defaultValue": "admin",
        "toolTip": "Enter your user name",
        "osPlatform": "Windows"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "userNameBox": "[basics('userNameBox')]"
    }
  }
}

Poniższy przykład przechodzi.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "userNameBox",
        "type": "Microsoft.Compute.UserNameTextBox",
        "label": "User name",
        "toolTip": "Enter your user name",
        "osPlatform": "Windows"
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "userNameBox": "[basics('userNameBox')]"
    }
  }
}

Używanie komunikatu z walidacjami

Nazwa testu: Walidacje muszą mieć komunikat

Ten test sprawdza, czy dowolny validations element w pliku createUiDefinition.json zawiera element message.

Poniższy przykład kończy się niepowodzeniem, ponieważ walidacja regex nie ma .message

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "textBox",
        "type": "Microsoft.Common.TextBox",
        "label": "Text box",
        "toolTip": "Type 1-30 alphanumeric characters",
        "placeholder": "Type your text here",
        "constraints": {
          "required": true,
          "validations": [
            {
              "regex": "^[a-z0-9A-Z]{1,30}$"
            }
          ]
        },
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "textBox": "[basics('textBox')]"
    }
  }
}

Poniższy przykład przechodzi.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "textBox",
        "type": "Microsoft.Common.TextBox",
        "label": "Text box",
        "toolTip": "Type 1-30 alphanumeric characters",
        "placeholder": "Type your text here",
        "constraints": {
          "required": true,
          "validations": [
            {
              "regex": "^[a-z0-9A-Z]{1,30}$",
              "message": "Only 1-30 characters alphanumeric characters are allowed."
            }
          ]
        },
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "textBox": "[basics('textBox')]"
    }
  }
}

Rozmiary maszyn wirtualnych muszą być zgodne

Nazwa testu: Rozmiary maszyn wirtualnych muszą być zgodne z szablonem

Ten test sprawdza, czy plik Microsoft.Compute.SizeSelector znajduje się w pliku createUiDefinition.jsonoutputs i sekcji głównego szablonu parameters . Główne parametry szablonu, które określają defaultValue wartość musi być zgodna z wartością w kontrolce allowedSizes.

Ten test sprawdza główny szablon i plik createUiDefinition.json . Przykład pliku createUiDefinition.json jest wyświetlany po przykładach głównego szablonu.

Poniższy przykład kończy się niepowodzeniem, ponieważ szablon defaultValue główny nie jest zgodny z wartością w elemecie allowedSizes.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string"
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_D9"
    }
  },
  "resources": [],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "vmSize": {
      "type": "string",
      "value": "[parameters('vmSize')]"
    }
  }
}

Poniższy przykład przechodzi, ponieważ szablon defaultValue główny pasuje do wartości w pliku allowedSizes.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string"
    },
    "vmSize": {
      "type": "string",
      "defaultValue": "Standard_D3"
    }
  },
  "resources": [],
  "outputs": {
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    },
    "vmSize": {
      "type": "string",
      "value": "[parameters('vmSize')]"
    }
  }
}

Plik createUiDefinition.json dla tego przykładu:

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {
        "name": "vmSize",
        "type": "Microsoft.Compute.SizeSelector",
        "label": "VM Size",
        "toolTip": "Select a virtual machine size",
        "recommendedSizes": [
          "Standard_D1"
        ],
        "constraints": {
          "allowedSizes": [
            "Standard_D1",
            "Standard_D2",
            "Standard_D3"
          ]
        },
        "osPlatform": "Windows",
        "visible": true
      }
    ],
    "steps": [],
    "outputs": {
      "location": "[location()]",
      "vmSize": "[basics('vmSize')]"
    }
  }
}

Następne kroki