Övning – Tillämpa bra metoder på mallen med hjälp av TESTverktyg för ARM-mallar
Du ingår i utvecklingsteamet på företaget Tailwind Traders. I ditt jobb ingår att skapa ARM-mallar (Azure Resource Manager) för att distribuera och hantera resurser i molnet. Du vill se till att mallarna följer några sunda metoder innan resurserna distribueras. Du väljer att använda testverktyget för ARM-mallar för att analysera dina mallar, så att du kan åtgärda eventuella problem.
Konfigurera din testmiljö
Verktyget är en PowerShell-modul. Använd följande steg för att kunna köra det:
- Installera PowerShell-modulen. Den här uppgiften utförs på olika sätt beroende på om du använder Linux, Mac eller Windows.
- Ladda ned modulen. Modulen finns på en GitHub-lagringsplats. Du kan ladda ned det därifrån eller hämta det via ett
git clone
-kommando. - Importera modulen. Det här steget är bara en enradsinstruktion som du anger i en PowerShell-session som gör ARM-TTK-kommandona tillgängliga.
Installera PowerShell
Om du vill installera PowerShell följer du anvisningarna i Installera PowerShell på Linux.
Verifiera installationen genom att köra
pwsh
i terminalen:pwsh
Ditt resultat ser ut ungefär så här:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Ladda ned testverktyget
Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:
Kör
git clone
för att klona lagringsplatsen:git clone https://github.com/Azure/arm-ttk.git
Ladda ned lagringsplatsen som en .zip-fil i webbläsaren.
Inspektera testverktyget
Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone
köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Testverktyget finns i underkatalogen /arm-ttk.
Skapa mallfilen
Välj en katalog och skapa en fil med namnet azuredeploy.json.
Varning
Se till att katalogen är tom och att det inte finns några underkataloger.
Lägg till följande innehåll:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Skriv ned sökvägen till mallfilen. Du kan köra kommandot pwd
i terminalen för att visa sökvägen. Du använder den här sökvägen senare som en parameter när du kör testverktyget.
Identifiera och åtgärda problem i mallen genom att köra testverktyget
Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.
Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.
Varning
I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.
I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:
code .
Kommentar
Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.
Öppna den integrerade terminalen i Visual Studio Code genom att välja Terminal>Ny terminal på huvudmenyn. Skapa en PowerShell-session genom att köra följande kommando i terminalen:
pwsh
Du ser utdata som liknar det här:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Analysera mallen
Kör
Import-Module
så att du kan köra testerna från valfri katalog.Kommentar
Innan du importerar modulen ska du ersätta path/to/arm-ttk/arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Dricks
Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.
Kör
Test-AzTemplate
med parametern-TemplatePath
som pekar på platsen för mallfilens sökväg (exklusive filnamnet):Test-AzTemplate -TemplatePath .
Du bör se utdata som liknar följande i terminalen:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
Observera hur två tester misslyckas i utdata: Resurser ska ha plats och parametrar måste refereras till. Prefixet
[-]
anger ett misslyckat test.Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Testerna misslyckas av två orsaker:
- Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
- Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.
Tillämpa en snabbkorrigering på mallen
Hur åtgärdar vi de misslyckade testen?
Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.
Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.
Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:
"resources": [{ "location": "westus" }]
med det här innehållet:
"resources": [{ "location": "[parameters('location')]" }]
Kör testverktyget i den integrerade terminalen igen för att verifiera korrigeringen:
Test-AzTemplate -TemplatePath .
Nu bör du se utdata där alla tester lyckas:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.
Följ instruktionerna i Installera PowerShell i macOS.
Verifiera installationen genom att köra
pwsh
i terminalen:pwsh
Ditt resultat ser ut ungefär så här:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Ladda ned testverktyget
Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:
Kör
git clone
för att klona lagringsplatsen:git clone https://github.com/Azure/arm-ttk.git
Ladda ned lagringsplatsen som en .zip-fil i webbläsaren.
Inspektera testverktyget
Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone
köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Testverktyget finns i underkatalogen /arm-ttk.
Skapa mallfilen
Välj en katalog och skapa en fil med namnet azuredeploy.json.
Varning
Se till att katalogen är tom och att det inte finns några underkataloger.
Lägg till följande innehåll:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Skriv ned sökvägen till mallfilen. Du kan köra kommandot pwd
i terminalen för att visa sökvägen. Du använder den här sökvägen senare som en parameter när du kör testverktyget.
Identifiera och åtgärda problem i mallen genom att köra testverktyget
Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.
Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.
Varning
I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.
I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:
code .
Kommentar
Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.
Öppna den integrerade terminalen i Visual Studio Code genom att välja Terminal>Ny terminal på huvudmenyn. Skapa en PowerShell-session genom att köra följande kommando i terminalen:
pwsh
Du ser utdata som liknar det här:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Analysera mallen
Kör
Import-Module
så att du kan köra testerna från valfri katalog.Kommentar
Innan du importerar modulen ska du ersätta path/to/arm-ttk/arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Dricks
Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.
Kör
Test-AzTemplate
med parametern-TemplatePath
som pekar på platsen för mallfilens sökväg (exklusive filnamnet):Test-AzTemplate -TemplatePath .
Du bör se utdata som liknar följande i terminalen:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
Föregående utdata visar hur två tester misslyckas: Resurser ska ha plats och parametrar måste refereras. Prefixet
[-]
anger ett misslyckat test.Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Testerna misslyckas av två orsaker:
- Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
- Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.
Tillämpa en snabbkorrigering på mallen
Hur åtgärdar vi de misslyckade testen?
Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.
Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.
Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:
"resources": [{ "location": "westus" }]
med det här innehållet:
"resources": [{ "location": "[parameters('location')]" }]
Kör testverktyget i den integrerade terminalen igen för att verifiera korrigeringen:
Test-AzTemplate -TemplatePath .
Nu bör du se utdata där alla tester lyckas:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.
- Följ instruktionerna i installera PowerShell i Windows.
- Installera PowerShell-tillägget från Visual Studio Code.
Ladda ned testverktyget
Testverktyget finns på en GitHub-lagringsplats. Välj någon av följande åtgärder:
Kör
git clone
för att klona lagringsplatsen:git clone https://github.com/Azure/arm-ttk.git
Ladda ned lagringsplatsen som en .zip-fil i webbläsaren.
Inspektera testverktyget
Du har precis laddat ned testverktyget till en katalog. Nu ska vi titta på katalogstrukturen. (Se till att du har packat upp filen om du valde att ladda ned .zip-filen i stället för att git clone
köra kommandot.) Du bör ha en katalogstruktur som ser ut så här om du går till katalogen för ARM-testverktyget:
-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Testverktyget finns i underkatalogen \arm-ttk.
Skapa mallfilen
Skapa en fil med namnet azuredeploy.json i en valfri katalog, som C:\Temp.
Varning
Se till att katalogen är tom och att det inte finns några underkataloger.
Lägg till följande innehåll:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
}
},
"resources": [{
"location": "westus"
}]
}
Skriv ned sökvägen till mallfilen. Du använder den här katalogsökvägen (till exempel C:\Temp) senare som en parameter när du kör testverktyget.
Identifiera och åtgärda problem i mallen genom att köra testverktyget
Vi rekommenderar att du startar Visual Studio Code och en integrerad terminal.
Du ska köra testverktyget för en sökväg som innehåller en distributionsmall och åtgärda eventuella fel som upptäcks genom att du ändrar mallen.
Varning
I den här övningen genomsöker du en enda mallfil. Testverktyget genomsöker alla filer under den katalog du anger. Det beror på att distributionen kan innehålla flera filer. Se till att det inte finns några JSON-filer under katalogen där azuredeploy.json.
I en terminal går du till sökvägen där azuredeploy.json-filen finns. Starta Visual Studio Code med följande kommando:
code .
Kommentar
Öppna Visual Studio Code manuellt och öppna mallkatalogen om Visual Studio Code inte redan är vid sökvägen.
I Visual Studio Code tar du upp kommandopaletten och väljer kommandot PowerShell: Visa integrerad konsol.
Analysera mallen
Kör
Import-Module
i PowerShell-terminalen:Kommentar
Innan du importerar modulen ska du ersätta path\to\arm-ttk\arm-ttk.psd1 med sökvägen till det nedladdade testverktyget.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Kommandot ovan visar sökvägen för testverktygsmodulen.
Dricks
Om du har laddat ned eller klonat verktyget till katalogen Nedladdningar ser sökvägen ut ungefär så här: C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
Nu kan du använda verktyget. Så länge som du är kvar i samma PowerShell-session behöver du inte köra importkommandot igen.
Kommentar
Om du startar en ny PowerShell-session måste du köra
Import-Module
kommandot igen.Kör
Test-AzTemplate
i PowerShell-terminalen för att starta en testkörning:Test-AzTemplate -TemplatePath .
Du bör se utdata som liknar följande i terminalen:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (16 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (6 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (10 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (7 ms) artifacts parameter [+] artifacts parameter (5 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (7 ms) DependsOn Best Practices [+] DependsOn Best Practices (6 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (5 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (5 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (4 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (4 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (6 ms) deploymentTemplate [-] Location Should Not Be Hardcoded (13 ms) Location value of 'westus' on resource '' must be an expression or 'global'. Line: 14, Column: 9 ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (5 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (5 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (5 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (9 ms) deploymentTemplate [-] Parameters Must Be Referenced (6 ms) Unreferenced parameter: location Line: 5, Column: 9 Password params must be secure [+] Password params must be secure (11 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (5 ms) ResourceIds should not contain [+] ResourceIds should not contain (5 ms) deploymentTemplate [-] Resources Should Have Location (5 ms) Resource Location must be an expression or 'global' Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (7 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (10 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (7 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (5 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (8 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (5 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (8 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (5 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (5 ms) Fail : 3 Total : 31 Pass : 28
Föregående utdata visar hur tre tester misslyckas: Platsen ska inte vara hårdkodad, parametrar måste refereras och resurser ska ha plats. Prefixet
[-]
anger ett misslyckat test.Du kan ta reda på vad det är som händer genom att öppna filen azuredeploy.json. Den bör se ut så här:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for the resources." } } }, "resources": [{ "location": "westus" }] }
Testerna misslyckas av två orsaker:
- Parametern location används inte. Det här fel meddelandet kan till exempel ange att vi har använt parametern tidigare och glömt att rensa bort den. Eller så ska den användas men vi har glömt att uppdatera koden.
- Egenskapen location är inställd som den hårdkodade strängen westus. Det här är inget bra alternativ eftersom du vill kunna styra placeringen för en resurs med hjälp av indataparametrar när du distribuerar.
Tillämpa en snabbkorrigering på mallen
Hur åtgärdar vi de misslyckade testen?
Som testet anger kan du byta ut westus mot texten global. Det löser dock bara ett av problemen. Det bästa är förmodligen att använda parametern location och använda det aktuella värdet som resursplats.
Det finns två anledningar till det här. Platsparametern kan inte bara anges som en parameter för distribution, den har också den rimliga återställningen av att vara inställd på resourceGroup().location som defaultValue om du utelämnar att ange platsparametern när du kör distributionen.
Leta rätt på det första resursobjektet i arrayen resources och byt ut följande innehåll:
"resources": [{ "location": "westus" }]
med det här innehållet:
"resources": [{ "location": "[parameters('location')]" }]
Kör
Test-AzTemplate
för att köra testverktyget igen:Test-AzTemplate -TemplatePath .
Nu bör du se utdata där alla tester lyckas:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (83 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (36 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (57 ms) piVersions Should Be Recent [+] apiVersions Should Be Recent (67 ms) artifacts parameter [+] artifacts parameter (19 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (93 ms) DependsOn Best Practices [+] DependsOn Best Practices (52 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (77 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (18 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (73 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (72 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (15 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (24 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (143 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (23 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (160 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (13 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (13 ms) Password params must be secure [+] Password params must be secure (12 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (79 ms) ResourceIds should not contain [+] ResourceIds should not contain (12 ms) Resources Should Have Location [+] Resources Should Have Location (17 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (17 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (17 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (16 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (83 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (108 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (111 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (16 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (22 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (133 ms) Fail : 0 Total : 31 Pass : 31
Lyckades! Du har kört testverktyget, hittat fel och korrigerat dem.
Nu är du redo att köra testerna på din mall.