Шаблоны ARM - использование нескольких связанных шаблонов в главном шаблоне запрещено - PullRequest
0 голосов
/ 25 января 2019

Мы пытаемся создать шаблон ARM, используя связанные шаблоны.Итак, я начал с vnet и подсети и создал 2 разных связанных шаблона.Теперь я попытался создать master.json и master.parameters.json.Файл параметров содержит значения для имени и адресного пространства сети и одной подсети.Теперь в главном шаблоне я попытался использовать 2 связанных шаблона, и в выпуске azure devops произошла ошибка со следующей ошибкой: Ошибка проверки шаблона развертывания: «Ресурс« Microsoft.Resources / deployments / LinkedTemplate »в строке« 37 »и столбце«5» определяется несколько раз в шаблоне.Не удалось выполнить задачу при создании или обновлении шаблона.

networkSubnetTest.json

"{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "vnetName": {
        "type": "string",
        "metadata": {
            "description": "Name of the Virtual Network"
        }
    },
    "vnetAddressPrefix": {
        "type": "string",
        "metadata": {
            "description": "The IP Address pool for the virtual network in CIDR format."
            }
    },
    "subnetPrefix": {
        "type": "string",
        "metadata": {
            "description": "The IP Address pool for the Subnet in CIDR format."
        }
    },
      "subnetName": {
        "type": "string",
        "metadata": {
            "description": "Name of the Subnet"
        }
    }
},

"variables": {
"templateBaseUrl": "https://github.com/something/",
"virtualNetworkTemplateUrl": "[concat(variables('templateBaseUrl'), 'VirtualNetwork.json')]",
"subnetTemplateUrl": "[concat(variables('templateBaseUrl'), 'Subnet.json')]",
"parametersUrl": "[concat(variables('templateBaseUrl'), 'networksubnetnsgtest.parameters.json')]"
},

"resources": [
{
   "apiVersion": "2017-05-10",
   "name": "LinkedTemplate",
   "type": "Microsoft.Resources/deployments",
   "properties": {
     "mode": "Incremental",
     "templateLink": {
        "uri":"[parameters('virtualNetworkTemplateUrl')]"
     },
     "parameters": {
      "uri":"[parameters('parametersUrl')]"
      }
   }
},
{
  "apiVersion": "2017-05-10",
  "name": "LinkedTemplate",
  "type": "Microsoft.Resources/deployments",
  "properties": {
    "mode": "Incremental",
    "templateLink": {
       "uri":"[parameters('subnetTemplateUrl')]"
    },
    "parameters": {
      "uri":"[parameters('parametersUrl')]"
     },
     "dependsOn": [
      "LinkedTemplate",
      "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
     ]
    }
},
],

"outputs": {
    "returnedVnetName": {
        "type": "string",
        "value": "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
    },
    "returnedVnetAddressPrefix": {
        "type": "string",
        "value": "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetAddressPrefix'))]"
    }
  }
}

Вопрос здесь заключается в том, что невозможно иметь один главный шаблон и иметь несколько связанных шаблонов?Я знаю, что у меня есть один гигантский шаблон со всем, что написано на нем, но мы этого не хотим.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вот моя версия шаблона ARM, которая работает.Значения шаблона name обязательно должны отличаться при одновременном развертывании.Как показано в записи развертывания, существует три развертывания, созданные одним основным шаблоном.

Я сделал три отмеченных изменения плюс другие для обработки URI.См. Разностный вывод внизу.

enter image description here

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "vnetName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Virtual Network"
      }
    },
    "vnetAddressPrefix": {
      "type": "string",
      "metadata": {
        "description": "The IP Address pool for the virtual network in CIDR format."
      }
    },
    "subnetPrefix": {
      "type": "string",
      "metadata": {
        "description": "The IP Address pool for the Subnet in CIDR format."
      }
    },
    "subnetName": {
      "type": "string",
      "metadata": {
        "description": "Name of the Subnet"
      }
    }
  },
  "variables": {
    "templateBaseUrl": "[deployment().properties.templateLink.uri]",
    "virtualNetworkTemplateUrl": "[uri(variables('templateBaseUrl'), 'VirtualNetwork.json')]",
    "subnetTemplateUrl": "[uri(variables('templateBaseUrl'), 'Subnet.json')]",
    "parametersUrl": "[uri(variables('templateBaseUrl'), 'networksubnetnsgtest.parameters.json')]"
  },
  "resources": [
    {
      "apiVersion": "2017-05-10",
      "name": "VnetDeployment",
      "type": "Microsoft.Resources/deployments",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('virtualNetworkTemplateUrl')]"
        },
        "parameters": {
          "uri": {
            "value": "[variables('parametersUrl')]"
          }
        }
      }
    },
    {
      "apiVersion": "2017-05-10",
      "name": "SubnetDeployment",
      "type": "Microsoft.Resources/deployments",
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "uri": "[variables('subnetTemplateUrl')]"
        },
        "parameters": {
          "uri": {
            "value": "[variables('parametersUrl')]"
          }
        }
      },
      "dependsOn": [
        "VnetDeployment"
      ]
    }
  ],
  "outputs": {
    "returnedVnetName": {
      "type": "string",
      "value": "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetName'))]"
    },
    "returnedVnetAddressPrefix": {
      "type": "string",
      "value": "[resourceId('Microsoft.Network/virtualNetworks', parameters('vnetAddressPrefix'))]"
    }
  }
}

Разностный вывод enter image description here

ЧастиPowerShell используется для выполнения:

$templateUri = 'https://<storageAccountName>.blob.core.windows.net/<containerName>/Lab/Master-Fixed.json'
$parameters = @{ 'vnetName' = 'myvnet'; 'vnetAddressPrefix' = '10.0.0.0/16'; 'subnetPrefix' = '10.0.0.0/24'; 'subnetName' = 'mysubnet'; }
New-AzureRmResourceGroupDeployment -Name "brstring-20190124" -ResourceGroupName $resourceGroupName -TemplateUri $templateUri @parameters
0 голосов
/ 25 января 2019

имена развертываний должны быть разными (потому что он не сможет отличить одно от другого, если они одинаковые). так что просто назовите их как template1, template2, template3. или по функции - что они делают. например, deployVnet, deployVm и т. д.

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