Вопрос PowerShell с использованием массива параметров шаблона Azure ARM (моя реализация ConvertFrom- Json с использованием массива не удалась) - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь передать $ paramObject в новый шаблон развертывания ARM. Я думаю, что мне не хватает чего-то в моей PowerShell, чтобы правильно преобразовать массивы, чтобы их можно было использовать в шаблоне.

    $ResourceGroupName = "rg-testtemplate"
    New-AzResourceGroup -Name "rg-testtemplate" -Location "West US"

    $addressPrefixes = '["10.0.0.0/24"]' | ConvertFrom-Json
    $subnet = '[{"name":"default","properties":{"addressPrefix":"10.0.0.0/24"}}]' | ConvertFrom-Json

    $paramObject = @{
        'addressPrefixes' = $addressPrefixes
        'subnets' = $subnet
        'virtualNetworkName' = "vnet-testtemplate"
    }

    $parameters = @{
         'ResourceGroupName'     = $ResourceGroupName
         'TemplateFile'          = '.\testpowershell.json'
         'TemplateParameterObject'    = $paramObject
        'Verbose'               = $true
    }

    New-AzResourceGroupDeployment @parameters 

Мой шаблон принимает массивы.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "addressPrefixes": {
      "type": "array"
    },
    "subnets": {
      "type": "array"
    },
    "virtualNetworkName": {
      "type":  "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('virtualNetworkName')]",
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2019-09-01",
      "location": "West US",
      "properties": {
        "addressSpace": {
          "addressPrefixes": "[parameters('addressPrefixes')]"
        },
        "subnets": "[parameters('subnets')]"
      }
    }
  ]
}

Но когда я go для развертывания, я получаю обратно:

   New-AzResourceGroupDeployment : 8:35:23 AM - Error: Code=InvalidTemplate; Message=Deployment template validation
failed: 'Template parameter JToken type is not valid. Expected 'Array'. Actual 'Object'. Please see
https://aka.ms/resource-manager-parameter-files for usage details.'.
At D:\repo\foldername\TestVM\testpowershelldeploy.ps1:30 char:5
+     New-AzResourceGroupDeployment @parameters
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [New-AzResourceGroupDeployment], Exception
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDep
   loymentCmdlet
New-AzResourceGroupDeployment : The deployment validation failed
At D:\repo\foldername\TestVM\testpowershelldeploy.ps1:30 char:5
+     New-AzResourceGroupDeployment @parameters
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzResourceGroupDeployment], InvalidOperationException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.NewAzureResourceGroupDeploymentCmdlet

Что такое "исправление" "для преобразования моего Json в массив PowerShell, который нужен моему шаблону?

1 Ответ

0 голосов
/ 15 апреля 2020

Если вы хотите создать объект массива с помощью PowerShell, используйте команду $t=@() для создания.

Например, Мой шаблон. json

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "addressPrefixes": {
      "type": "array"
    },
    "subnets": {
      "type": "array"
    },
    "virtualNetworkName": {
      "type":  "string"
    }
  },
  "resources": [
    {
      "name": "[parameters('virtualNetworkName')]",
      "type": "Microsoft.Network/virtualNetworks",
      "apiVersion": "2019-09-01",
      "location": "West US",
      "properties": {
        "addressSpace": {
          "addressPrefixes": "[parameters('addressPrefixes')]"
        },
        "subnets": "[parameters('subnets')]"
      }
    }
  ]
}

Мой сценарий развертывания

Connect-AzAccount

$addressPrefixes =@( "10.0.0.0/24")
$subnet1= @{
       "name"= "default"
       "properties"=@{
                  "addressPrefix"="10.0.0.0/24"
        }

 }

$subnets = @($subnet1)

 $paramObject = @{
        'addressPrefixes' = $addressPrefixes
        'subnets' = $subnets
        'virtualNetworkName' = "vnet-testtemplate"
    } 

$parameters = @{
         'ResourceGroupName'     = "testtable"
         'TemplateFile'          = 'E:\test1.json'
         'TemplateParameterObject'    = $paramObject
        'Verbose'               = $true
    }

    New-AzResourceGroupDeployment @parameters 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...