我試圖通過模板實現集裝箱化的級別。最後,我希望能夠在一個模板中定義駐留在虛擬網絡和子網(如db羣集)內的組件(一個或多個服務器)。通過另一個模板,定義駐留在虛擬網絡和子網內的組件,但可能是不同的組件。使用AzureRM在同一vnet中部署不同子網的嵌套模板
模板答:
- 我-VNET
- 我-subnet1
- 我接口1
- 我-subnet1
模板B:
- 我-VNET
- 我-subnet2
- 我的接口2
- 我-subnet2
使得模板A內嵌套模板B將離開我:
模板AB:
- 我-VNET
- 我-subnet1
- 我接口1
- 我-subnet2
- 我的接口2
- 我-subnet1
相反,我得到以下錯誤:
New-AzureRmResourceGroupDeployment : 4:56:27 PM - Resource
Microsoft.Network/virtualNetworks 'overlayTest-vnet' failed with message '
{
"error": {
"code": "InUseSubnetCannotBeDeleted",
"message": "Subnet overlayTest-subnet2 is in use by /subscriptions/beep-boop/resourceGroups/d/providers/Microsoft.Network/networkInterfaces/overlayTest-vnet-interface2/ipConfigurations/ipconfig1 and cannot be deleted.",
"details": []
}
}
得到的資源組填充像這樣(就好像嵌套模板部署和嵌套以下的資源退出)。
模板AB:
- 我-VNET
- 我-subnet2
- 我的接口2
- 我-subnet2
我的模板如下:
azuredeploy.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"solutionName": {
"type": "string",
"defaultValue": "testing"
},
"vmIP": {
"type": "string",
"defaultValue": "10.0.100.100"
},
"virtualNetworkName": {
"type": "string",
"defaultValue": "[concat(parameters('solutionName'), '-vnet')]"
},
"vnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.0.0/16"
},
"subnetName": {
"type": "string",
"defaultValue": "[concat(parameters('solutionName'),'-subnet1')]"
},
"subnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.100.0/24"
},
"subnetName2": {
"type": "string",
"defaultValue": "[concat(parameters('solutionName'),'-subnet2')]"
},
"subnetAddressPrefix2": {
"type": "string",
"defaultValue": "10.0.101.0/24"
},
"_artifactsLocation": {
"type": "string"
},
"_artifactsLocationSasToken": {
"type": "securestring"
}
},
"variables": {
"OverlaySubnetTemplateFolder": "nestedtemplates",
"OverlaySubnetTemplateFileName": "OverlaySubnet.json",
"OverlaySubnetTemplateParametersFileName": "OverlaySubnet.parameters.json",
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]",
"subnetRef": "[concat(variables('vnetID'), '/subnets/', parameters('subnetName'))]"
},
"resources": [
{
"name": "OverlaySubnet",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2016-09-01",
"dependsOn": [],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(parameters('_artifactsLocation'), '/', variables('OverlaySubnetTemplateFolder'), '/', variables('OverlaySubnetTemplateFileName'), parameters('_artifactsLocationSasToken'))]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"solutionName": {
"value": "[parameters('solutionName')]"
}
}
}
},
{
"apiVersion": "2015-06-15",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('virtualNetworkName')]",
"location": "[resourceGroup().location]",
"dependsOn": [],
"properties": {
"mode": "Incremental",
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"mode": "Incremental",
"addressPrefix": "[parameters('subnetAddressPrefix')]"
}
}
],
"virtualNetworkPeerings": []
}
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"name": "[concat(parameters('virtualNetworkName'), '/', parameters('subnetName'))]",
"apiVersion": "2017-06-01",
"properties": {
"addressPrefix": "[parameters('subnetAddressPrefix')]",
"privateAccessServices": []
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
]
},
{
"type": "Microsoft.Network/virtualNetworks/subnets",
"name": "[concat(parameters('virtualNetworkName'), '/', parameters('subnetName2'))]",
"apiVersion": "2017-06-01",
"properties": {
"addressPrefix": "[parameters('subnetAddressPrefix2')]",
"privateAccessServices": []
},
"dependsOn": [
"[resourceId('Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]"
]
},
{
"apiVersion": "2015-06-15",
"type": "Microsoft.Network/networkInterfaces",
"name": "[concat(parameters('virtualNetworkName'), '-interface1')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
/*
"privateIPAllocationMethod": "Static",
// reserved IP address range for /24 is 1-3, so start with [0 + 4] or more
"privateIPAddress": "[parameters('vmIP')]",
*/
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
}
],
"outputs": {}
}
nestedtemplates/OverlaySubnet.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"solutionName": {
"type": "string",
"defaultValue": "testing"
},
"virtualNetworkName": {
"type": "string",
"defaultValue": "[concat(parameters('solutionName'), '-vnet')]"
},
"vnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.0.0/16"
},
"subnetName": {
"type": "string",
"defaultValue": "[concat(parameters('solutionName'),'-subnet2')]"
},
"subnetAddressPrefix": {
"type": "string",
"defaultValue": "10.0.101.0/24"
}
},
"variables": {
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
"subnetRef": "[concat(variables('vnetID'),'/subnets/', parameters('subnetName'))]"
},
"resources": [
{
"apiVersion": "2015-06-15",
"type": "Microsoft.Network/virtualNetworks",
"name": "[parameters('virtualNetworkName')]",
"location": "[resourceGroup().location]",
"dependsOn": [],
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"mode": "Incremental",
"addressPrefix": "[parameters('subnetAddressPrefix')]"
}
}
],
"virtualNetworkPeerings": []
}
},
{
"apiVersion": "2015-06-15",
"type": "Microsoft.Network/networkInterfaces",
"name": "[concat(parameters('virtualNetworkName'), '-interface2')]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
/*
"privateIPAllocationMethod": "Static",
// reserved IP address range for /24 is 1-3, so start with [0 + 4] or more
"privateIPAddress": "[parameters('vmIP')]",
*/
"privateIPAllocationMethod": "Dynamic",
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
]
}
}
],
"outputs": {}
}
如果我更改了嵌套模板互聯星空資源子網,嵌套的模板將不再對自己的部署。它將被要求嵌套,這對調試或升級來說相當不方便。 關於您的建議,整個方法是錯誤的:如何將一個副本和屬性跨越模板的循環? – ir0h
好吧,我告訴你如何解決你的問題。如果你不能解決你的問題,我不能幫你。首先,在您共享的模板片段中,不需要嵌套部署。所以你只會讓自己的生活變得複雜,之後你會抱怨調試嵌套模板會更困難。好吧,我已經告訴你如何解決,但你不想聽。所以你想讓我做什麼?我無法改變臂模板的工作方式。 @ ir0h – 4c74356b41
感謝您認爲是有幫助的。上面的模板是我真正在使用的非常簡單的例子。當然,根據您的豐富經驗,您可以在尋求幫助之前簡化使用案例,否則由於實際細節的噪音,難以定位問題。其次,我沒有抱怨。我解釋了您的解決方案的問題是嵌套模板不會獨立運行沒有VNET。我邀請你解釋如何使用它們,但是你卻決定在沒有澄清的情況下侮辱和侮辱。請坐下,你的幫助是不可取的。 – ir0h