Storage spaces direct template for Azure Stack (#358)
* Template added for S2D - Azure Stack Base template taken from azure-quickstart-templates and required * Added active-directory-new-domain-ha-2-dc for Azure Stack Base line copy : azure-quickstart-templates Made changes, if any, and tested on Azure stack 1804 * repoint to AzureStack git repo repoint to AzureStack git repo * API version updated to match Azure stack API version updated to match Azure stack * Align to Azure stack API version Align to Azure stack API version * Align to Azure stack API version Align to Azure stack API version
This commit is contained in:
Родитель
04e212317d
Коммит
ce0fb07192
|
@ -0,0 +1,2 @@
|
|||
Skip CI due to existing resource requirements
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
# Create a Storage Spaces Direct (S2D) Scale-Out File Server (SOFS) Cluster with Windows Server 2016 on an existing VNET
|
||||
This template will create a Storage Spaces Direct (S2D) Scale-Out File Server (SOFS) cluster using Windows Server 2016 in an existing VNET and Active Directory environment.
|
||||
|
||||
This template creates the following resources by default:
|
||||
|
||||
+ A Premium Storage Account for storing VM disks for each storage node
|
||||
+ A Standard Storage Account for a Cloud Witness
|
||||
+ A Windows Server 2016 cluster for storage nodes, provisioned for Storage Spaces Direct (S2D) and the Scale-Out File Server (SOFS) role
|
||||
+ One Availability Set for the cluster nodes
|
||||
|
||||
To deploy the required Azure VNET and Active Directory infrastructure, if not already in place, you may use <a href="https://github.com/Azure/azure-quickstart-templates/tree/master/active-directory-new-domain-ha-2-dc">this template</a> to deploy the prerequisite infrastructure.
|
||||
|
||||
Click the button below to deploy from the portal:
|
||||
|
||||
<a href="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F301-storage-spaces-direct%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://azuredeploy.net/deploybutton.png"/>
|
||||
</a>
|
||||
<a href="https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F301-storage-spaces-direct%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://azuredeploy.net/AzureGov.png"/>
|
||||
</a>
|
||||
<a href="http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F301-storage-spaces-direct%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://armviz.io/visualizebutton.png"/>
|
||||
</a>
|
||||
|
||||
## Notes
|
||||
|
||||
+ The default settings for storage are to deploy using **premium storage**, which is **strongly** recommended for S2D performance. When using Premium Storage, be sure to select a VM size (DS-series, GS-series) that supports Premium Storage.
|
||||
|
||||
+ The default settings deploy 2 data disks per storage node, but can be increased to up to 32 data disks per node. When increasing # of data disks, be sure to select a VM size that can support the # of data disks you specify.
|
||||
|
||||
+ The default settings for compute require that you have at least 2 cores of free quota to deploy.
|
||||
|
||||
+ The images used to create this deployment are
|
||||
+ Windows Server 2016 Datacenter Edition - Latest Image
|
||||
|
||||
+ To successfully deploy this template, be sure that the subnet to which the storage nodes are being deployed already exists on the specified Azure virtual network, AND this subnet should be defined in Active Directory Sites and Services for the appropriate AD site in which the closest domain controllers are configured.
|
||||
|
||||
+ SPECIAL THANKS to <a href="https://github.com/mmarch">@mmarch</a> on code contributions for dynamic data disk selection nested templates!
|
||||
|
||||
## Deploying Sample Templates
|
||||
|
||||
You can deploy these samples directly through the Azure Portal or by using the scripts supplied in the root of the repo.
|
||||
|
||||
To deploy the sammple using the Azure Portal, click the **Deploy to Azure** button found above.
|
||||
|
||||
To deploy the sample via the command line (using [Azure PowerShell or the Azure CLI](https://azure.microsoft.com/en-us/downloads/)) you can use the scripts.
|
||||
|
||||
Simple execute the script and pass in the folder name of the sample you want to deploy. For example:
|
||||
|
||||
```PowerShell
|
||||
.\Deploy-AzureResourceGroup.ps1 -ResourceGroupLocation 'eastus' -ArtifactStagingDirectory '[foldername]'
|
||||
```
|
||||
```bash
|
||||
azure-group-deploy.sh -a [foldername] -l eastus -u
|
||||
```
|
||||
If the sample has artifacts that need to be "staged" for deployment (Configuration Scripts, Nested Templates, DSC Packages) then set the upload switch on the command.
|
||||
You can optionally specify a storage account to use, if so the storage account must already exist within the subscription. If you don't want to specify a storage account
|
||||
one will be created by the script or reused if it already exists (think of this as "temp" storage for AzureRM).
|
||||
|
||||
```PowerShell
|
||||
.\Deploy-AzureResourceGroup.ps1 -ResourceGroupLocation 'eastus' -ArtifactStagingDirectory '301-storage-spaces-direct' -UploadArtifacts
|
||||
```
|
||||
```bash
|
||||
azure-group-deploy.sh -a '301-storage-spaces-direct' -l eastus -u
|
||||
```
|
||||
|
||||
Tags: ``cluster, ha, storage spaces, storage spaces direct, S2D, windows server 2016, ws2016``
|
|
@ -0,0 +1,196 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"namePrefix": {
|
||||
"type": "string",
|
||||
"minLength": 3,
|
||||
"maxLength": 8,
|
||||
"metadata": {
|
||||
"description": "Naming prefix for each new resource created. 3-char min, 8-char max, lowercase alphanumeric"
|
||||
}
|
||||
},
|
||||
"storageAccountType": {
|
||||
"type": "string",
|
||||
"allowedValues": [
|
||||
"Standard_LRS",
|
||||
"Standard_GRS",
|
||||
"Standard_RAGRS",
|
||||
"Premium_LRS"
|
||||
],
|
||||
"metadata": {
|
||||
"description": "Type of new Storage Accounts (Standard_LRS, Standard_GRS, Standard_RAGRS or Premium_LRS) to be created to store VM disks"
|
||||
},
|
||||
"defaultValue": "Premium_LRS"
|
||||
},
|
||||
"vmSize": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Size of the S2D VMs to be created"
|
||||
},
|
||||
"defaultValue": "Standard_DS1_v2"
|
||||
},
|
||||
"vmCount": {
|
||||
"type": "int",
|
||||
"minValue": 2,
|
||||
"maxValue": 3,
|
||||
"metadata": {
|
||||
"description": "Number of S2D VMs to be created in cluster (Min=2, Max=3)"
|
||||
},
|
||||
"defaultValue": 2
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"type": "int",
|
||||
"minValue": 128,
|
||||
"maxValue": 1023,
|
||||
"metadata": {
|
||||
"description": "Size of each data disk in GB on each S2D VM (Min=128, Max=1023)"
|
||||
},
|
||||
"defaultValue": 1023
|
||||
},
|
||||
"vmDiskCount": {
|
||||
"type": "int",
|
||||
"minValue": 2,
|
||||
"maxValue": 32,
|
||||
"metadata": {
|
||||
"description": "Number of data disks on each S2D VM (Min=2, Max=32). Ensure that the VM size you've selected will support this number of data disks."
|
||||
},
|
||||
"defaultValue": 2
|
||||
},
|
||||
"existingDomainName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "DNS domain name for existing Active Directory domain"
|
||||
}
|
||||
},
|
||||
"adminUsername": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of the Administrator of the existing Active Directory Domain"
|
||||
}
|
||||
},
|
||||
"adminPassword": {
|
||||
"type": "securestring",
|
||||
"minLength": 12,
|
||||
"metadata": {
|
||||
"description": "Password for the Administrator account of the existing Active Directory Domain"
|
||||
}
|
||||
},
|
||||
"existingVirtualNetworkRGName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Resource Group Name for the existing VNET."
|
||||
}
|
||||
},
|
||||
"existingVirtualNetworkName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of the existing VNET."
|
||||
}
|
||||
},
|
||||
"existingSubnetName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of the existing subnet in the existing VNET to which the S2D VMs should be deployed"
|
||||
}
|
||||
},
|
||||
"sofsName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of clustered Scale-Out File Server role"
|
||||
},
|
||||
"defaultValue": "fs01"
|
||||
},
|
||||
"shareName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of shared data folder on clustered Scale-Out File Server role"
|
||||
},
|
||||
"defaultValue": "data"
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Location of resources that the script is dependent on such as linked templates and DSC modules"
|
||||
},
|
||||
"defaultValue": "https://raw.githubusercontent.com/Azure/azurestack-quickstart-templates/master/301-storage-spaces-direct"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"type": "securestring",
|
||||
"metadata": {
|
||||
"description": "The sasToken required to access _artifactsLocation. When the template is deployed using the accompanying scripts, a sasToken will be automatically generated."
|
||||
},
|
||||
"defaultValue": ""
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"subnetRef": "[resourceId(parameters('existingVirtualNetworkRGName'),'Microsoft.Network/virtualNetworks/subnets',parameters('existingVirtualNetworkName'),parameters('existingSubnetName'))]",
|
||||
"deployS2DClusterTemplateURL": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/deploy-s2d-cluster.json',parameters('_artifactsLocationSasToken'))]",
|
||||
"deployS2DCluster": "deployS2DCluster"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "[variables('deployS2DCluster')]",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2015-01-01",
|
||||
"dependsOn": [],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('deployS2DClusterTemplateURL')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"namePrefix": {
|
||||
"value": "[parameters('namePrefix')]"
|
||||
},
|
||||
"domainName": {
|
||||
"value": "[parameters('existingDomainName')]"
|
||||
},
|
||||
"adminUsername": {
|
||||
"value": "[parameters('adminUsername')]"
|
||||
},
|
||||
"adminPassword": {
|
||||
"value": "[parameters('adminPassword')]"
|
||||
},
|
||||
"storageAccountType": {
|
||||
"value": "[parameters('storageAccountType')]"
|
||||
},
|
||||
"nicSubnetUri": {
|
||||
"value": "[variables('subnetRef')]"
|
||||
},
|
||||
"vmSize": {
|
||||
"value": "[parameters('vmSize')]"
|
||||
},
|
||||
"vmCount": {
|
||||
"value": "[parameters('vmCount')]"
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"value": "[parameters('vmDiskSize')]"
|
||||
},
|
||||
"vmDiskCount": {
|
||||
"value": "[parameters('vmDiskCount')]"
|
||||
},
|
||||
"sofsName": {
|
||||
"value": "[parameters('sofsName')]"
|
||||
},
|
||||
"shareName": {
|
||||
"value": "[parameters('shareName')]"
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"value": "[parameters('_artifactsLocation')]"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"value": "[parameters('_artifactsLocationSasToken')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": {
|
||||
"sofsPath": {
|
||||
"type": "string",
|
||||
"value": "[concat('\\\\',reference(variables('deployS2DCluster')).outputs.sofsName.value,'\\',reference(variables('deployS2DCluster')).outputs.shareName.value)]"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"namePrefix": {
|
||||
"value": "GEN-UNIQUE-8"
|
||||
},
|
||||
"existingDomainName": {
|
||||
"value": "contoso.com"
|
||||
},
|
||||
"adminUsername": {
|
||||
"value": "AzureAdmin"
|
||||
},
|
||||
"adminPassword": {
|
||||
"value": "GEN-PASSWORD"
|
||||
},
|
||||
"existingVirtualNetworkName": {
|
||||
"value": "vnet01"
|
||||
},
|
||||
"existingVirtualNetworkRGName": {
|
||||
"value": "rg01"
|
||||
},
|
||||
"existingSubnetName": {
|
||||
"value": "default"
|
||||
}
|
||||
}
|
||||
}
|
Двоичный файл не отображается.
Двоичный файл не отображается.
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"itemDisplayName": "Windows Server 2016 Storage Spaces Direct (S2D) SOFS cluster",
|
||||
"description": "This template creates Azure VMs on an existing VNET, and it provisions them as a Windows Server 2016 Storage Spaces Direct (S2D) Scale-Out File Server (SOFS) cluster.",
|
||||
"summary": "This template creates Azure VMs for a Windows Server 2016 Storage Spaces Direct (S2D) cluster on an existing Azure VNET and Active Directory domain.",
|
||||
"githubUsername": "robotechredmond",
|
||||
"dateUpdated": "2017-03-08"
|
||||
}
|
|
@ -0,0 +1,340 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"namePrefix": {
|
||||
"type": "string",
|
||||
"minLength": 3,
|
||||
"maxLength": 8,
|
||||
"metadata": {
|
||||
"description": "Naming prefix for each new resource created. 3-char min, 8-char max, lowercase alphanumeric"
|
||||
}
|
||||
},
|
||||
"domainName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "DNS domain name for existing Active Directory domain"
|
||||
}
|
||||
},
|
||||
"adminUsername": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of the Administrator of the existing Active Directory Domain"
|
||||
}
|
||||
},
|
||||
"adminPassword": {
|
||||
"type": "securestring",
|
||||
"minLength": 12,
|
||||
"metadata": {
|
||||
"description": "Password for the Administrator account of the existing Active Directory Domain"
|
||||
}
|
||||
},
|
||||
"storageAccountType": {
|
||||
"type": "string",
|
||||
"allowedValues": [
|
||||
"Standard_LRS",
|
||||
"Standard_GRS",
|
||||
"Standard_RAGRS",
|
||||
"Premium_LRS"
|
||||
],
|
||||
"metadata": {
|
||||
"description": "Type of new Storage Accounts (Standard_LRS, Standard_GRS, Standard_RAGRS or Premium_LRS) to be created to store VM disks"
|
||||
}
|
||||
},
|
||||
"nicSubnetUri": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Resource ID for existing vnet/subnet to which VM NICs should be attached"
|
||||
}
|
||||
},
|
||||
"vmSize": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Size of the S2D VMs to be created"
|
||||
}
|
||||
},
|
||||
"vmCount": {
|
||||
"type": "int",
|
||||
"minValue": 2,
|
||||
"maxValue": 3,
|
||||
"metadata": {
|
||||
"description": "Number of S2D VMs to be created in cluster (Min=2, Max=3)"
|
||||
}
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"type": "int",
|
||||
"minValue": 128,
|
||||
"maxValue": 1023,
|
||||
"metadata": {
|
||||
"description": "Size of each data disk in GB on each S2D VM (Min=128, Max=1023)"
|
||||
}
|
||||
},
|
||||
"vmDiskCount": {
|
||||
"type": "int",
|
||||
"minValue": 2,
|
||||
"maxValue": 32,
|
||||
"metadata": {
|
||||
"description": "Number of data disks on each S2D VM (Min=2, Max=32). Ensure that the VM size you've selected will support this number of data disks."
|
||||
}
|
||||
},
|
||||
"sofsName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of clustered Scale-Out File Server role"
|
||||
}
|
||||
},
|
||||
"shareName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "Name of shared data folder on clustered Scale-Out File Server role"
|
||||
}
|
||||
},
|
||||
"imagePublisher": {
|
||||
"type": "string",
|
||||
"defaultValue": "MicrosoftWindowsServer"
|
||||
},
|
||||
"imageOffer": {
|
||||
"type": "string",
|
||||
"defaultValue": "WindowsServer"
|
||||
},
|
||||
"imageSKU": {
|
||||
"type": "string",
|
||||
"defaultValue": "2016-Datacenter"
|
||||
},
|
||||
"imageVersion": {
|
||||
"type": "string",
|
||||
"defaultValue": "latest"
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"type": "string"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"apiVersionStorage": "2016-01-01",
|
||||
"storageNamePrefix": "[concat(parameters('namePrefix'),uniqueString(resourceGroup().id),'vm')]",
|
||||
"witnessStorageName": "[concat(parameters('namePrefix'),uniqueString(resourceGroup().id),'cw')]",
|
||||
"witnessStorageType": "Standard_LRS",
|
||||
"vmNamePrefix": "[concat(parameters('namePrefix'),'-s2d-')]",
|
||||
"vmAvailabilitySetName": "[concat(variables('vmNamePrefix'),'as')]",
|
||||
"clusterName": "[concat(variables('vmNamePrefix'),'c')]",
|
||||
"vmLoopTemplateURL": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/newVM.json',parameters('_artifactsLocationSasToken'))]",
|
||||
"s2dPrepModulesURL": "[concat(parameters('_artifactsLocation'),'/dsc/prep-s2d.ps1.zip',parameters('_artifactsLocationSasToken'))]",
|
||||
"s2dPrepFunction": "PrepS2D.ps1\\PrepS2D",
|
||||
"s2dConfigModulesURL": "[concat(parameters('_artifactsLocation'),'/dsc/config-s2d.ps1.zip',parameters('_artifactsLocationSasToken'))]",
|
||||
"s2dConfigFunction": "ConfigS2D.ps1\\ConfigS2D"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "Microsoft.Compute/availabilitySets",
|
||||
"name": "[variables('vmAvailabilitySetName')]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Storage/storageAccounts",
|
||||
"name": "[variables('witnessStorageName')]",
|
||||
"apiVersion": "2016-01-01",
|
||||
"location": "[resourceGroup().location]",
|
||||
"sku": {
|
||||
"name": "[variables('witnessStorageType')]"
|
||||
},
|
||||
"kind": "Storage"
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Storage/storageAccounts",
|
||||
"name": "[concat(variables('storageNamePrefix'),copyindex())]",
|
||||
"apiVersion": "2016-01-01",
|
||||
"copy": {
|
||||
"name": "storageAccountLoop",
|
||||
"count": "[parameters('vmCount')]"
|
||||
},
|
||||
"location": "[resourceGroup().location]",
|
||||
"sku": {
|
||||
"name": "[parameters('storageAccountType')]"
|
||||
},
|
||||
"kind": "Storage"
|
||||
},
|
||||
{
|
||||
"name": "[concat(variables('vmNamePrefix'), copyindex(), '-nic')]",
|
||||
"type": "Microsoft.Network/networkInterfaces",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"copy": {
|
||||
"name": "nicLoop",
|
||||
"count": "[parameters('vmCount')]"
|
||||
},
|
||||
"properties": {
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"name": "ipconfig1",
|
||||
"properties": {
|
||||
"privateIPAllocationMethod": "Dynamic",
|
||||
"subnet": {
|
||||
"id": "[parameters('nicSubnetUri')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2015-01-01",
|
||||
"copy": {
|
||||
"name": "virtualMachineLoop",
|
||||
"count": "[parameters('vmCount')]"
|
||||
},
|
||||
"name": "[concat(variables('vmNamePrefix'),copyindex(),'-newVM')]",
|
||||
"dependsOn": [
|
||||
"storageAccountLoop",
|
||||
"nicLoop",
|
||||
"[resourceId('Microsoft.Compute/availabilitySets', variables('vmAvailabilitySetName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('vmLoopTemplateURL')]"
|
||||
},
|
||||
"parameters": {
|
||||
"vmName": {
|
||||
"value": "[concat(variables('vmNamePrefix'), copyindex())]"
|
||||
},
|
||||
"storageAccountUri": {
|
||||
"value": "[reference(concat('Microsoft.Storage/storageAccounts/',variables('StorageNamePrefix'),copyIndex()),variables('apiVersionStorage')).primaryEndpoints.blob]"
|
||||
},
|
||||
"vmAvailabilitySetName": {
|
||||
"value": "[variables('vmAvailabilitySetName')]"
|
||||
},
|
||||
"vmSize": {
|
||||
"value": "[parameters('vmSize')]"
|
||||
},
|
||||
"vmDiskCount": {
|
||||
"value": "[parameters('vmDiskCount')]"
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"value": "[parameters('vmDiskSize')]"
|
||||
},
|
||||
"adminUsername": {
|
||||
"value": "[parameters('adminUsername')]"
|
||||
},
|
||||
"adminPassword": {
|
||||
"value": "[parameters('adminPassword')]"
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"value": "[parameters('_artifactsLocation')]"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"value": "[parameters('_artifactsLocationSasToken')]"
|
||||
},
|
||||
"imagePublisher": {
|
||||
"value": "[parameters('imagePublisher')]"
|
||||
},
|
||||
"imageOffer": {
|
||||
"value": "[parameters('imageOffer')]"
|
||||
},
|
||||
"imageSKU": {
|
||||
"value": "[parameters('imageSKU')]"
|
||||
},
|
||||
"imageVersion": {
|
||||
"value": "[parameters('imageVersion')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Compute/virtualMachines/extensions",
|
||||
"name": "[concat(variables('vmNamePrefix'),copyindex(1),'/s2dPrep')]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"virtualMachineLoop"
|
||||
],
|
||||
"copy": {
|
||||
"name": "virtualMachineExtensionLoop",
|
||||
"count": "[sub(parameters('vmCount'),1)]"
|
||||
},
|
||||
"properties": {
|
||||
"publisher": "Microsoft.Powershell",
|
||||
"type": "DSC",
|
||||
"typeHandlerVersion": "2.20",
|
||||
"autoUpgradeMinorVersion": true,
|
||||
"settings": {
|
||||
"modulesUrl": "[variables('s2dPrepModulesURL')]",
|
||||
"configurationFunction": "[variables('s2dPrepFunction')]",
|
||||
"properties": {
|
||||
"domainName": "[parameters('domainName')]",
|
||||
"adminCreds": {
|
||||
"userName": "[parameters('adminUsername')]",
|
||||
"password": "PrivateSettingsRef:adminPassword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"protectedSettings": {
|
||||
"items": {
|
||||
"adminPassword": "[parameters('adminPassword')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Compute/virtualMachines/extensions",
|
||||
"name": "[concat(variables('vmNamePrefix'),'0/s2dConfig')]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"virtualMachineLoop",
|
||||
"virtualMachineExtensionLoop",
|
||||
"[resourceId('Microsoft.Storage/storageAccounts', variables('witnessStorageName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"publisher": "Microsoft.Powershell",
|
||||
"type": "DSC",
|
||||
"typeHandlerVersion": "2.20",
|
||||
"autoUpgradeMinorVersion": true,
|
||||
"settings": {
|
||||
"modulesUrl": "[variables('s2dConfigModulesURL')]",
|
||||
"configurationFunction": "[variables('s2dConfigFunction')]",
|
||||
"properties": {
|
||||
"domainName": "[parameters('domainName')]",
|
||||
"clusterName": "[variables('clusterName')]",
|
||||
"sofsName": "[parameters('sofsName')]",
|
||||
"shareName": "[parameters('shareName')]",
|
||||
"vmNamePrefix": "[variables('vmNamePrefix')]",
|
||||
"vmCount": "[parameters('vmCount')]",
|
||||
"vmDiskSize": "[parameters('vmDiskSize')]",
|
||||
"witnessStorageName": "[variables('witnessStorageName')]",
|
||||
"witnessStorageEndpoint": "[replace(split(reference(concat('Microsoft.Storage/storageAccounts/', variables('witnessStorageName'))).primaryEndpoints.blob, 'blob.')[1], '/', '')]",
|
||||
"witnessStorageKey": {
|
||||
"userName": "PLACEHOLDER-DO-NOT-USE",
|
||||
"password": "PrivateSettingsRef:witnessStorageKey"
|
||||
},
|
||||
"adminCreds": {
|
||||
"userName": "[parameters('adminUsername')]",
|
||||
"password": "PrivateSettingsRef:adminPassword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"protectedSettings": {
|
||||
"items": {
|
||||
"adminPassword": "[parameters('adminPassword')]",
|
||||
"witnessStorageKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts',variables('witnessStorageName')),variables('apiVersionStorage')).keys[0].value]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": {
|
||||
"sofsName": {
|
||||
"type": "string",
|
||||
"value": "[parameters('sofsName')]"
|
||||
},
|
||||
"shareName": {
|
||||
"type": "string",
|
||||
"value": "[parameters('shareName')]"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,362 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"vmDiskCount": {
|
||||
"type": "int",
|
||||
"minValue": 2,
|
||||
"maxValue": 32
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"type": "int",
|
||||
"minValue": 128,
|
||||
"maxValue": 1023
|
||||
},
|
||||
"diskCaching": {
|
||||
"type": "string",
|
||||
"allowedValues": [
|
||||
"None",
|
||||
"ReadOnly",
|
||||
"ReadWrite"
|
||||
],
|
||||
"defaultValue": "None"
|
||||
},
|
||||
"storageAccountUri": {
|
||||
"type": "string"
|
||||
},
|
||||
"diskNamingPrefix": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"diskArray": [
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk0')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 0,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk0.vhd')]"
|
||||
},
|
||||
"caching": "[parameters('diskCaching')]",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk1')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 1,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk1.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk2')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 2,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk2.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk3')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 3,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk3.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk4')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 4,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk4.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk5')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 5,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk5.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk6')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 6,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk6.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk7')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 7,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk7.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk8')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 8,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk8.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk9')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 9,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk9.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk10')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 10,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk10.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk11')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 11,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk11.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk12')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 12,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk12.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk13')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 13,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk13.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk14')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 14,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk14.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk15')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 15,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk15.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk16')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 16,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk16.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk17')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 17,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk17.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk18')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 18,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk18.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk19')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 19,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk19.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk20')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 20,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk20.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk21')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 21,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk21.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk22')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 22,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk22.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk23')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 23,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk23.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk24')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 24,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk24.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk25')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 25,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk25.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk26')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 26,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk26.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk27')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 27,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk27.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk28')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 28,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk28.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk29')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 29,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk29.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk30')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 30,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk30.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
},
|
||||
{
|
||||
"name": "[concat(parameters('diskNamingPrefix'), 'disk31')]",
|
||||
"diskSizeGB": "[parameters('vmDiskSize')]",
|
||||
"lun": 31,
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'),'vhds/',parameters('diskNamingPrefix'),'disk31.vhd')]"
|
||||
},
|
||||
"caching": "None",
|
||||
"createOption": "Empty"
|
||||
}
|
||||
]
|
||||
},
|
||||
"resources": [],
|
||||
"outputs": {
|
||||
"dataDiskArray": {
|
||||
"type": "array",
|
||||
"value": "[take(variables('diskArray'),parameters('vmDiskCount'))]"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"vmName": {
|
||||
"type": "string"
|
||||
},
|
||||
"storageAccountUri": {
|
||||
"type": "string"
|
||||
},
|
||||
"vmAvailabilitySetName": {
|
||||
"type": "string"
|
||||
},
|
||||
"vmSize": {
|
||||
"type": "string"
|
||||
},
|
||||
"vmDiskCount": {
|
||||
"type": "int"
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"type": "int"
|
||||
},
|
||||
"adminUsername": {
|
||||
"type": "string"
|
||||
},
|
||||
"adminPassword": {
|
||||
"type": "securestring"
|
||||
},
|
||||
"imagePublisher": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageOffer": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageSKU": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageVersion": {
|
||||
"type": "string"
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"type": "string"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"diskSelectionTemplateUri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/diskSelection.json',parameters('_artifactsLocationSasToken'))]"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2015-01-01",
|
||||
"name": "[concat(parameters('vmName'),'-diskSelection')]",
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('diskSelectionTemplateUri')]"
|
||||
},
|
||||
"parameters": {
|
||||
"vmDiskCount": {
|
||||
"value": "[parameters('vmDiskCount')]"
|
||||
},
|
||||
"vmDiskSize": {
|
||||
"value": "[parameters('vmDiskSize')]"
|
||||
},
|
||||
"diskCaching": {
|
||||
"value": "None"
|
||||
},
|
||||
"storageAccountUri": {
|
||||
"value": "[parameters('storageAccountUri')]"
|
||||
},
|
||||
"diskNamingPrefix": {
|
||||
"value": "[concat(parameters('vmName'), '-data')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Compute/virtualMachines",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"name": "[parameters('vmName')]",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Resources/deployments/',parameters('vmName'),'-diskSelection')]"
|
||||
],
|
||||
"properties": {
|
||||
"hardwareProfile": {
|
||||
"vmSize": "[parameters('vmSize')]"
|
||||
},
|
||||
"availabilitySet": {
|
||||
"id": "[resourceId('Microsoft.Compute/availabilitySets/', parameters('vmAvailabilitySetName'))]"
|
||||
},
|
||||
"osProfile": {
|
||||
"computerName": "[parameters('vmName')]",
|
||||
"adminUsername": "[parameters('adminUsername')]",
|
||||
"adminPassword": "[parameters('adminPassword')]"
|
||||
},
|
||||
"storageProfile": {
|
||||
"imageReference": {
|
||||
"publisher": "[parameters('imagePublisher')]",
|
||||
"offer": "[parameters('imageOffer')]",
|
||||
"sku": "[parameters('imageSku')]",
|
||||
"version": "[parameters('imageVersion')]"
|
||||
},
|
||||
"osDisk": {
|
||||
"name": "osdisk",
|
||||
"vhd": {
|
||||
"uri": "[concat(parameters('storageAccountUri'), 'vhds/',parameters('vmName'),'-osdisk.vhd')]"
|
||||
},
|
||||
"caching": "ReadWrite",
|
||||
"createOption": "FromImage"
|
||||
},
|
||||
"dataDisks": "[reference(concat(parameters('vmName'),'-diskSelection')).outputs.dataDiskArray.value]"
|
||||
},
|
||||
"networkProfile": {
|
||||
"networkInterfaces": [
|
||||
{
|
||||
"id": "[resourceId('Microsoft.Network/networkInterfaces',concat(parameters('vmName'),'-nic'))]"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": {
|
||||
"vmName": {
|
||||
"type": "string",
|
||||
"value": "[parameters('vmName')]"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
azuredeploy.parameters.local.json
|
|
@ -0,0 +1,68 @@
|
|||
configuration ConfigureADBDC
|
||||
{
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory)]
|
||||
[String]$DomainName,
|
||||
|
||||
[Parameter(Mandatory)]
|
||||
[System.Management.Automation.PSCredential]$Admincreds,
|
||||
|
||||
[Int]$RetryCount=20,
|
||||
[Int]$RetryIntervalSec=30
|
||||
)
|
||||
|
||||
Import-DscResource -ModuleName xActiveDirectory, xPendingReboot
|
||||
|
||||
[System.Management.Automation.PSCredential ]$DomainCreds = New-Object System.Management.Automation.PSCredential ("${DomainName}\$($Admincreds.UserName)", $Admincreds.Password)
|
||||
|
||||
Node localhost
|
||||
{
|
||||
LocalConfigurationManager
|
||||
{
|
||||
RebootNodeIfNeeded = $true
|
||||
}
|
||||
|
||||
xWaitForADDomain DscForestWait
|
||||
{
|
||||
DomainName = $DomainName
|
||||
DomainUserCredential= $DomainCreds
|
||||
RetryCount = $RetryCount
|
||||
RetryIntervalSec = $RetryIntervalSec
|
||||
}
|
||||
xADDomainController BDC
|
||||
{
|
||||
DomainName = $DomainName
|
||||
DomainAdministratorCredential = $DomainCreds
|
||||
SafemodeAdministratorPassword = $DomainCreds
|
||||
DatabasePath = "F:\NTDS"
|
||||
LogPath = "F:\NTDS"
|
||||
SysvolPath = "F:\SYSVOL"
|
||||
DependsOn = "[xWaitForADDomain]DscForestWait"
|
||||
}
|
||||
<#
|
||||
Script UpdateDNSForwarder
|
||||
{
|
||||
SetScript =
|
||||
{
|
||||
Write-Verbose -Verbose "Getting DNS forwarding rule..."
|
||||
$dnsFwdRule = Get-DnsServerForwarder -Verbose
|
||||
if ($dnsFwdRule)
|
||||
{
|
||||
Write-Verbose -Verbose "Removing DNS forwarding rule"
|
||||
Remove-DnsServerForwarder -IPAddress $dnsFwdRule.IPAddress -Force -Verbose
|
||||
}
|
||||
Write-Verbose -Verbose "End of UpdateDNSForwarder script..."
|
||||
}
|
||||
GetScript = { @{} }
|
||||
TestScript = { $false}
|
||||
DependsOn = "[xADDomainController]BDC"
|
||||
}
|
||||
#>
|
||||
xPendingReboot RebootAfterPromotion {
|
||||
Name = "RebootAfterDCPromotion"
|
||||
DependsOn = "[xADDomainController]BDC"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Двоичный файл не отображается.
|
@ -0,0 +1,110 @@
|
|||
configuration CreateADPDC
|
||||
{
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory)]
|
||||
[String]$DomainName,
|
||||
|
||||
[Parameter(Mandatory)]
|
||||
[System.Management.Automation.PSCredential]$Admincreds,
|
||||
|
||||
[Int]$RetryCount=20,
|
||||
[Int]$RetryIntervalSec=30
|
||||
)
|
||||
|
||||
Import-DscResource -ModuleName xActiveDirectory, xStorage, xNetworking, PSDesiredStateConfiguration, xPendingReboot
|
||||
[System.Management.Automation.PSCredential ]$DomainCreds = New-Object System.Management.Automation.PSCredential ("${DomainName}\$($Admincreds.UserName)", $Admincreds.Password)
|
||||
$Interface=Get-NetAdapter|Where Name -Like "Ethernet*"|Select-Object -First 1
|
||||
$InterfaceAlias=$($Interface.Name)
|
||||
|
||||
Node localhost
|
||||
{
|
||||
LocalConfigurationManager
|
||||
{
|
||||
RebootNodeIfNeeded = $true
|
||||
}
|
||||
|
||||
WindowsFeature DNS
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "DNS"
|
||||
}
|
||||
|
||||
Script EnableDNSDiags
|
||||
{
|
||||
SetScript = {
|
||||
Set-DnsServerDiagnostics -All $true
|
||||
Write-Verbose -Verbose "Enabling DNS client diagnostics"
|
||||
}
|
||||
GetScript = { @{} }
|
||||
TestScript = { $false }
|
||||
DependsOn = "[WindowsFeature]DNS"
|
||||
}
|
||||
|
||||
WindowsFeature DnsTools
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "RSAT-DNS-Server"
|
||||
DependsOn = "[WindowsFeature]DNS"
|
||||
}
|
||||
|
||||
xDnsServerAddress DnsServerAddress
|
||||
{
|
||||
Address = '127.0.0.1'
|
||||
InterfaceAlias = $InterfaceAlias
|
||||
AddressFamily = 'IPv4'
|
||||
DependsOn = "[WindowsFeature]DNS"
|
||||
}
|
||||
|
||||
xWaitforDisk Disk2
|
||||
{
|
||||
DiskNumber = 2
|
||||
RetryIntervalSec =$RetryIntervalSec
|
||||
RetryCount = $RetryCount
|
||||
}
|
||||
|
||||
xDisk ADDataDisk {
|
||||
DiskNumber = 2
|
||||
DriveLetter = "F"
|
||||
DependsOn = "[xWaitForDisk]Disk2"
|
||||
}
|
||||
|
||||
WindowsFeature ADDSInstall
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "AD-Domain-Services"
|
||||
DependsOn="[WindowsFeature]DNS"
|
||||
}
|
||||
|
||||
WindowsFeature ADDSTools
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "RSAT-ADDS-Tools"
|
||||
DependsOn = "[WindowsFeature]ADDSInstall"
|
||||
}
|
||||
|
||||
WindowsFeature ADAdminCenter
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "RSAT-AD-AdminCenter"
|
||||
DependsOn = "[WindowsFeature]ADDSTools"
|
||||
}
|
||||
|
||||
xADDomain FirstDS
|
||||
{
|
||||
DomainName = $DomainName
|
||||
DomainAdministratorCredential = $DomainCreds
|
||||
SafemodeAdministratorPassword = $DomainCreds
|
||||
DatabasePath = "F:\NTDS"
|
||||
LogPath = "F:\NTDS"
|
||||
SysvolPath = "F:\SYSVOL"
|
||||
DependsOn = @("[WindowsFeature]ADDSInstall", "[xDisk]ADDataDisk")
|
||||
}
|
||||
|
||||
xPendingReboot RebootAfterPromotion{
|
||||
Name = "RebootAfterPromotion"
|
||||
DependsOn = "[xADDomain]FirstDS"
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Двоичный файл не отображается.
|
@ -0,0 +1,65 @@
|
|||
configuration PrepareADBDC
|
||||
{
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory)]
|
||||
[String]$DNSServer,
|
||||
|
||||
[Int]$RetryCount=20,
|
||||
[Int]$RetryIntervalSec=30
|
||||
)
|
||||
|
||||
Import-DscResource -ModuleName xStorage, xNetworking
|
||||
$Interface=Get-NetAdapter|Where Name -Like "Ethernet*"|Select-Object -First 1
|
||||
$InterfaceAlias=$($Interface.Name)
|
||||
|
||||
Node localhost
|
||||
{
|
||||
LocalConfigurationManager
|
||||
{
|
||||
RebootNodeIfNeeded = $true
|
||||
}
|
||||
|
||||
xWaitforDisk Disk2
|
||||
{
|
||||
DiskNumber = 2
|
||||
RetryIntervalSec =$RetryIntervalSec
|
||||
RetryCount = $RetryCount
|
||||
}
|
||||
|
||||
xDisk ADDataDisk
|
||||
{
|
||||
DiskNumber = 2
|
||||
DriveLetter = "F"
|
||||
DependsOn = "[xWaitForDisk]Disk2"
|
||||
}
|
||||
|
||||
WindowsFeature ADDSInstall
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "AD-Domain-Services"
|
||||
}
|
||||
|
||||
WindowsFeature ADDSTools
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "RSAT-ADDS-Tools"
|
||||
DependsOn = "[WindowsFeature]ADDSInstall"
|
||||
}
|
||||
|
||||
WindowsFeature ADAdminCenter
|
||||
{
|
||||
Ensure = "Present"
|
||||
Name = "RSAT-AD-AdminCenter"
|
||||
DependsOn = "[WindowsFeature]ADDSTools"
|
||||
}
|
||||
|
||||
xDnsServerAddress DnsServerAddress
|
||||
{
|
||||
Address = $DNSServer
|
||||
InterfaceAlias = $InterfaceAlias
|
||||
AddressFamily = 'IPv4'
|
||||
DependsOn="[WindowsFeature]ADDSInstall"
|
||||
}
|
||||
}
|
||||
}
|
Двоичный файл не отображается.
|
@ -0,0 +1,19 @@
|
|||
# Create 2 new Windows VMs, create a new AD Forest, Domain and 2 DCs in an availability set
|
||||
|
||||
This template will deploy 2 new VMs (along with a new VNet, Storage Account and Load Balancer) and create a new AD forest and domain, each VM will be created as a DC for the new domain and will be placed in an availability set. Each VM will also have an RDP endpoint added with a public load balanced IP address.
|
||||
|
||||
Click the button below to deploy
|
||||
|
||||
<a href="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2Factive-directory-new-domain-ha-2-dc%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://azuredeploy.net/deploybutton.png"/>
|
||||
</a>
|
||||
<a href="https://portal.azure.us/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2Factive-directory-new-domain-ha-2-dc%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://azuredeploy.net/AzureGov.png"/>
|
||||
</a>
|
||||
<a href="http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2Factive-directory-new-domain-ha-2-dc%2Fazuredeploy.json" target="_blank">
|
||||
<img src="http://armviz.io/visualizebutton.png"/>
|
||||
</a>
|
||||
|
||||
# Known Issues
|
||||
|
||||
+ This template is entirely serial due to some concurrency issues between the platform agent and the DSC extension which cause problems when multiple VM and\or extension resources are deployed concurrently, this will be fixed in the near future
|
|
@ -0,0 +1,612 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"adminUsername": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "The name of the Administrator of the new VM and Domain"
|
||||
},
|
||||
"defaultValue": "adAdministrator"
|
||||
},
|
||||
"adminPassword": {
|
||||
"type": "securestring",
|
||||
"metadata": {
|
||||
"description": "The password for the Administrator account of the new VM and Domain"
|
||||
}
|
||||
},
|
||||
"domainName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "The FQDN of the AD Domain created "
|
||||
}
|
||||
},
|
||||
"dnsPrefix": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "The DNS prefix for the public IP address used by the Load Balancer"
|
||||
}
|
||||
},
|
||||
"pdcRDPPort": {
|
||||
"type": "int",
|
||||
"metadata": {
|
||||
"description": "The public RDP port for the PDC VM"
|
||||
},
|
||||
"defaultValue": 3389
|
||||
},
|
||||
"bdcRDPPort": {
|
||||
"type": "int",
|
||||
"metadata": {
|
||||
"description": "The public RDP port for the BDC VM"
|
||||
},
|
||||
"defaultValue": 13389
|
||||
},
|
||||
"_artifactsLocation": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"description": "The location of resources, such as templates and DSC modules, that the template depends on"
|
||||
},
|
||||
"defaultValue": "https://raw.githubusercontent.com/Azure/azurestack-quickstart-templates/master/active-directory-new-domain-ha-2-dc"
|
||||
},
|
||||
"_artifactsLocationSasToken": {
|
||||
"type": "securestring",
|
||||
"metadata": {
|
||||
"description": "Auto-generated token to access _artifactsLocation"
|
||||
},
|
||||
"defaultValue": ""
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"vhdStorageAccountName": "[concat('vhds', uniqueString(resourceGroup().id))]",
|
||||
"storageAccountType": "Premium_LRS",
|
||||
"adPDCVMName": "adPDC",
|
||||
"adBDCVMName": "adBDC",
|
||||
"imagePublisher": "MicrosoftWindowsServer",
|
||||
"imageOffer": "WindowsServer",
|
||||
"imageSKU": "2016-Datacenter",
|
||||
"adAvailabilitySetName": "adAvailabiltySet",
|
||||
"publicIPAddressName": "ad-lb-pip",
|
||||
"adVMSize": "Standard_DS2_v2",
|
||||
"adLBFE": "LBFE",
|
||||
"adLBBE": "LBBE",
|
||||
"adPDCRDPNAT": "adPDCRDP",
|
||||
"adBDCRDPNAT": "adBDCRDP",
|
||||
"virtualNetworkName": "adVNET",
|
||||
"virtualNetworkAddressRange": "10.0.0.0/16",
|
||||
"adSubnetName": "adSubnet",
|
||||
"adSubnet": "10.0.0.0/24",
|
||||
"adPDCNicName": "adPDCNic",
|
||||
"adPDCNicIPAddress": "10.0.0.4",
|
||||
"adBDCNicName": "adBDCNic",
|
||||
"adBDCNicIPAddress": "10.0.0.5",
|
||||
"adSubnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('adSubnetName'))]",
|
||||
"adLBName": "adLoadBalancer",
|
||||
"adlbID": "[resourceId('Microsoft.Network/loadBalancers',variables('adLBName'))]",
|
||||
"adlbFEConfigID": "[concat(variables('adlbID'),'/frontendIPConfigurations/',variables('adLBFE'))]",
|
||||
"adPDCRDPNATRuleID": "[concat(variables('adlbID'),'/inboundNatRules/',variables('adPDCRDPNAT'))]",
|
||||
"adBDCRDPNATRuleID": "[concat(variables('adlbID'),'/inboundNatRules/',variables('adBDCRDPNAT'))]",
|
||||
"adBEAddressPoolID": "[concat(variables('adlbID'),'/backendAddressPools/',variables('adLBBE'))]",
|
||||
"adPDCDataDisk": "ADPDCDataDisk",
|
||||
"adBDCDataDisk": "ADBDCDataDisk",
|
||||
"adDataDiskSize": 1000,
|
||||
"vnetTemplateUri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/vnet.json', parameters('_artifactsLocationSasToken'))]",
|
||||
"nicTemplateUri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/nic.json', parameters('_artifactsLocationSasToken'))]",
|
||||
"vnetwithDNSTemplateUri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/vnet-with-dns-server.json', parameters('_artifactsLocationSasToken'))]",
|
||||
"configureADBDCTemplateUri": "[concat(parameters('_artifactsLocation'),'/nestedtemplates/configureADBDC.json', parameters('_artifactsLocationSasToken'))]",
|
||||
"adPDCModulesURL": "[concat(parameters('_artifactsLocation'),'/DSC/CreateADPDC.zip', parameters('_artifactsLocationSasToken'))]",
|
||||
"adPDCConfigurationFunction": "CreateADPDC.ps1\\CreateADPDC",
|
||||
"adBDCPreparationModulesURL": "[concat(parameters('_artifactsLocation'),'/DSC/PrepareADBDC.zip', parameters('_artifactsLocationSasToken'))]",
|
||||
"adBDCPreparationFunction": "PrepareADBDC.ps1\\PrepareADBDC",
|
||||
"adBDCConfigurationModulesURL": "[concat(parameters('_artifactsLocation'),'/DSC/ConfigureADBDC.zip', parameters('_artifactsLocationSasToken'))]",
|
||||
"adBDCConfigurationFunction": "ConfigureADBDC.ps1\\ConfigureADBDC"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "[variables('vhdStorageAccountName')]",
|
||||
"type": "Microsoft.Storage/storageAccounts",
|
||||
"apiVersion": "2016-01-01",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {
|
||||
},
|
||||
"sku":{"name":"[variables('storageAccountType')]"},
|
||||
"kind":"Storage"
|
||||
},
|
||||
{
|
||||
"name": "[variables('publicIPAddressName')]",
|
||||
"type": "Microsoft.Network/publicIPAddresses",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"properties": {
|
||||
"publicIPAllocationMethod": "Dynamic",
|
||||
"dnsSettings": {
|
||||
"domainNameLabel": "[parameters('dnsPrefix')]"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adAvailabilitySetName')]",
|
||||
"type": "Microsoft.Compute/availabilitySets",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[resourceGroup().location]"
|
||||
},
|
||||
{
|
||||
"name": "VNet",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2016-09-01",
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('vnetTemplateUri')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"virtualNetworkName": {
|
||||
"value": "[variables('virtualNetworkName')]"
|
||||
},
|
||||
"virtualNetworkAddressRange": {
|
||||
"value": "[variables('virtualNetworkAddressRange')]"
|
||||
},
|
||||
"subnetName": {
|
||||
"value": "[variables('adSubnetName')]"
|
||||
},
|
||||
"subnetRange": {
|
||||
"value": "[variables('adSubnet')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adLBName')]",
|
||||
"type": "Microsoft.Network/loadBalancers",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"frontendIPConfigurations": [
|
||||
{
|
||||
"name": "[variables('adLBFE')]",
|
||||
"properties": {
|
||||
"publicIPAddress": {
|
||||
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"backendAddressPools": [
|
||||
{
|
||||
"name": "[variables('adLBBE')]"
|
||||
}
|
||||
],
|
||||
"inboundNatRules": [
|
||||
{
|
||||
"name": "[variables('adPDCRDPNAT')]",
|
||||
"properties": {
|
||||
"frontendIPConfiguration": {
|
||||
"id": "[variables('adlbFEConfigID')]"
|
||||
},
|
||||
"protocol": "tcp",
|
||||
"frontendPort": "[parameters('pdcRDPPort')]",
|
||||
"backendPort": 3389,
|
||||
"enableFloatingIP": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adBDCRDPNAT')]",
|
||||
"properties": {
|
||||
"frontendIPConfiguration": {
|
||||
"id": "[variables('adlbFEConfigID')]"
|
||||
},
|
||||
"protocol": "tcp",
|
||||
"frontendPort": "[parameters('bdcRDPPort')]",
|
||||
"backendPort": 3389,
|
||||
"enableFloatingIP": false
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adPDCNicName')]",
|
||||
"type": "Microsoft.Network/networkInterfaces",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"Microsoft.Resources/deployments/VNet",
|
||||
"[variables('adLBName')]"
|
||||
],
|
||||
"properties": {
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"name": "ipconfig1",
|
||||
"properties": {
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"privateIPAddress": "[variables('adPDCNicIPAddress')]",
|
||||
"subnet": {
|
||||
"id": "[variables('adSubnetRef')]"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"id": "[variables('adBEAddressPoolID')]"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": [
|
||||
{
|
||||
"id": "[variables('adPDCRDPNATRuleID')]"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adBDCNicName')]",
|
||||
"type": "Microsoft.Network/networkInterfaces",
|
||||
"apiVersion": "2015-06-15",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"Microsoft.Resources/deployments/VNet",
|
||||
"[concat('Microsoft.Network/loadBalancers/',variables('adLBName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"ipConfigurations": [
|
||||
{
|
||||
"name": "ipconfig1",
|
||||
"properties": {
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"privateIPAddress": "[variables('adBDCNicIPAddress')]",
|
||||
"subnet": {
|
||||
"id": "[variables('adSubnetRef')]"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"id": "[variables('adBEAddressPoolID')]"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": [
|
||||
{
|
||||
"id": "[variables('adBDCRDPNATRuleID')]"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adPDCVMName')]",
|
||||
"type": "Microsoft.Compute/virtualMachines",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Storage/storageAccounts',variables('vhdStorageAccountName'))]",
|
||||
"[resourceId('Microsoft.Network/networkInterfaces',variables('adPDCNicName'))]",
|
||||
"[resourceId('Microsoft.Compute/availabilitySets', variables('adAvailabilitySetName'))]",
|
||||
"[resourceId('Microsoft.Network/loadBalancers',variables('adLBName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"hardwareProfile": {
|
||||
"vmSize": "[variables('adVMSize')]"
|
||||
},
|
||||
"availabilitySet": {
|
||||
"id": "[resourceId('Microsoft.Compute/availabilitySets', variables('adAvailabilitySetName'))]"
|
||||
},
|
||||
"osProfile": {
|
||||
"computerName": "[variables('adPDCVMName')]",
|
||||
"adminUsername": "[parameters('adminUsername')]",
|
||||
"adminPassword": "[parameters('adminPassword')]"
|
||||
},
|
||||
"storageProfile": {
|
||||
"imageReference": {
|
||||
"publisher": "[variables('imagePublisher')]",
|
||||
"offer": "[variables('imageOffer')]",
|
||||
"sku": "[variables('imageSKU')]",
|
||||
"version": "latest"
|
||||
},
|
||||
"osDisk": {
|
||||
"name": "osdisk",
|
||||
"vhd": {
|
||||
"uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('vhdStorageAccountName'))).primaryEndpoints.blob,'vhds0/','osdisk.vhd')]"
|
||||
},
|
||||
"caching": "ReadWrite",
|
||||
"createOption": "FromImage"
|
||||
},
|
||||
"dataDisks": [
|
||||
{
|
||||
"vhd": {
|
||||
"uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('vhdStorageAccountName'))).primaryEndpoints.blob,'vhds0/', variables('adPDCDataDisk'),'-1.vhd')]"
|
||||
},
|
||||
"name": "[concat(variables('adPDCVMName'),'-data-disk1')]",
|
||||
"caching": "None",
|
||||
"diskSizeGB": "[variables('adDataDiskSize')]",
|
||||
"lun": 0,
|
||||
"createOption": "Empty"
|
||||
}
|
||||
]
|
||||
},
|
||||
"networkProfile": {
|
||||
"networkInterfaces": [
|
||||
{
|
||||
"id": "[resourceId('Microsoft.Network/networkInterfaces',variables('adPDCNicName'))]"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "CreateADForest",
|
||||
"type": "extensions",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Compute/virtualMachines', variables('adPDCVMName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"publisher": "Microsoft.Powershell",
|
||||
"type": "DSC",
|
||||
"typeHandlerVersion": "2.19",
|
||||
"autoUpgradeMinorVersion": true,
|
||||
"settings": {
|
||||
"ModulesUrl": "[variables('adPDCModulesURL')]",
|
||||
"ConfigurationFunction": "[variables('adPDCConfigurationFunction')]",
|
||||
"Properties": {
|
||||
"DomainName": "[parameters('domainName')]",
|
||||
"AdminCreds": {
|
||||
"UserName": "[parameters('adminUsername')]",
|
||||
"Password": "PrivateSettingsRef:AdminPassword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"protectedSettings": {
|
||||
"Items": {
|
||||
"AdminPassword": "[parameters('adminPassword')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "UpdateVNetDNS1",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2016-09-01",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Compute/virtualMachines/', variables('adPDCVMName'),'/extensions/CreateADForest')]"
|
||||
],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('vnetwithDNSTemplateUri')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"virtualNetworkName": {
|
||||
"value": "[variables('virtualNetworkName')]"
|
||||
},
|
||||
"virtualNetworkAddressRange": {
|
||||
"value": "[variables('virtualNetworkAddressRange')]"
|
||||
},
|
||||
"subnetName": {
|
||||
"value": "[variables('adSubnetName')]"
|
||||
},
|
||||
"subnetRange": {
|
||||
"value": "[variables('adSubnet')]"
|
||||
},
|
||||
"DNSServerAddress": {
|
||||
"value": [
|
||||
"[variables('adPDCNicIPAddress')]"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "UpdateBDCNIC",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2015-01-01",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Network/networkInterfaces/',variables('adBDCNicName'))]",
|
||||
"Microsoft.Resources/deployments/UpdateVNetDNS1"
|
||||
],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('nicTemplateUri')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"nicName": {
|
||||
"value": "[variables('adBDCNicName')]"
|
||||
},
|
||||
"ipConfigurations": {
|
||||
"value": [
|
||||
{
|
||||
"name": "ipconfig1",
|
||||
"properties": {
|
||||
"privateIPAllocationMethod": "Static",
|
||||
"privateIPAddress": "[variables('adBDCNicIPAddress')]",
|
||||
"subnet": {
|
||||
"id": "[variables('adSubnetRef')]"
|
||||
},
|
||||
"loadBalancerBackendAddressPools": [
|
||||
{
|
||||
"id": "[variables('adBEAddressPoolID')]"
|
||||
}
|
||||
],
|
||||
"loadBalancerInboundNatRules": [
|
||||
{
|
||||
"id": "[variables('adBDCRDPNATRuleID')]"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"dnsServers": {
|
||||
"value": [
|
||||
"[variables('adPDCNicIPAddress')]"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "[variables('adBDCVMName')]",
|
||||
"type": "Microsoft.Compute/virtualMachines",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[resourceId('Microsoft.Storage/storageAccounts',variables('vhdStorageAccountName'))]",
|
||||
"[resourceId('Microsoft.Network/networkInterfaces',variables('adBDCNicName'))]",
|
||||
"[resourceId('Microsoft.Compute/availabilitySets', variables('adAvailabilitySetName'))]",
|
||||
"[resourceId('Microsoft.Network/loadBalancers',variables('adLBName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"hardwareProfile": {
|
||||
"vmSize": "[variables('adVMSize')]"
|
||||
},
|
||||
"availabilitySet": {
|
||||
"id": "[resourceId('Microsoft.Compute/availabilitySets', variables('adAvailabilitySetName'))]"
|
||||
},
|
||||
"osProfile": {
|
||||
"computerName": "[variables('adBDCVMName')]",
|
||||
"adminUsername": "[parameters('adminUsername')]",
|
||||
"adminPassword": "[parameters('adminPassword')]"
|
||||
},
|
||||
"storageProfile": {
|
||||
"imageReference": {
|
||||
"publisher": "[variables('imagePublisher')]",
|
||||
"offer": "[variables('imageOffer')]",
|
||||
"sku": "[variables('imageSKU')]",
|
||||
"version": "latest"
|
||||
},
|
||||
"osDisk": {
|
||||
"name": "osdisk",
|
||||
"vhd": {
|
||||
"uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('vhdStorageAccountName'))).primaryEndpoints.blob,'vhds1/','osdisk.vhd')]"
|
||||
},
|
||||
"caching": "ReadWrite",
|
||||
"createOption": "FromImage"
|
||||
},
|
||||
"dataDisks": [
|
||||
{
|
||||
"vhd": {
|
||||
"uri": "[concat(reference(resourceId('Microsoft.Storage/storageAccounts/', variables('vhdStorageAccountName'))).primaryEndpoints.blob,'vhds1/',variables('adBDCDataDisk'),'-1.vhd')]"
|
||||
},
|
||||
"name": "[concat(variables('adBDCVMName'),'-data-disk1')]",
|
||||
"caching": "None",
|
||||
"diskSizeGB": "[variables('adDataDiskSize')]",
|
||||
"lun": 0,
|
||||
"createOption": "Empty"
|
||||
}
|
||||
]
|
||||
},
|
||||
"networkProfile": {
|
||||
"networkInterfaces": [
|
||||
{
|
||||
"id": "[resourceId('Microsoft.Network/networkInterfaces',variables('adBDCNicName'))]"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Microsoft.Compute/virtualMachines/extensions",
|
||||
"name": "[concat(variables('adBDCVMName'),'/PrepareBDC')]",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[resourceGroup().location]",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Compute/virtualMachines/', variables('adBDCVMName'))]"
|
||||
],
|
||||
"properties": {
|
||||
"publisher": "Microsoft.Powershell",
|
||||
"type": "DSC",
|
||||
"typeHandlerVersion": "2.19",
|
||||
"autoUpgradeMinorVersion": true,
|
||||
"settings": {
|
||||
"ModulesUrl": "[variables('adBDCPreparationModulesURL')]",
|
||||
"ConfigurationFunction": "[variables('adBDCPreparationFunction')]",
|
||||
"Properties": {
|
||||
"DNSServer": "[variables('adPDCNicIPAddress')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "ConfiguringBackupADDomainController",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2016-09-01",
|
||||
"dependsOn": [
|
||||
"[concat('Microsoft.Compute/virtualMachines/',variables('adBDCVMName'),'/extensions/PrepareBDC')]",
|
||||
"Microsoft.Resources/deployments/UpdateBDCNIC"
|
||||
],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('configureADBDCTemplateUri')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"adBDCVMName": {
|
||||
"value": "[variables('adBDCVMName')]"
|
||||
},
|
||||
"location": {
|
||||
"value": "[resourceGroup().location]"
|
||||
},
|
||||
"adminUsername": {
|
||||
"value": "[parameters('adminUsername')]"
|
||||
},
|
||||
"adminPassword": {
|
||||
"value": "[parameters('adminPassword')]"
|
||||
},
|
||||
"domainName": {
|
||||
"value": "[parameters('domainName')]"
|
||||
},
|
||||
"adBDCConfigurationFunction": {
|
||||
"value": "[variables('adBDCConfigurationFunction')]"
|
||||
},
|
||||
"adBDCConfigurationModulesURL": {
|
||||
"value": "[variables('adBDCConfigurationModulesURL')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "UpdateVNetDNS2",
|
||||
"type": "Microsoft.Resources/deployments",
|
||||
"apiVersion": "2016-09-01",
|
||||
"dependsOn": [
|
||||
"Microsoft.Resources/deployments/ConfiguringBackupADDomainController"
|
||||
],
|
||||
"properties": {
|
||||
"mode": "Incremental",
|
||||
"templateLink": {
|
||||
"uri": "[variables('vnetwithDNSTemplateUri')]",
|
||||
"contentVersion": "1.0.0.0"
|
||||
},
|
||||
"parameters": {
|
||||
"virtualNetworkName": {
|
||||
"value": "[variables('virtualNetworkName')]"
|
||||
},
|
||||
"virtualNetworkAddressRange": {
|
||||
"value": "[variables('virtualNetworkAddressRange')]"
|
||||
},
|
||||
"subnetName": {
|
||||
"value": "[variables('adSubnetName')]"
|
||||
},
|
||||
"subnetRange": {
|
||||
"value": "[variables('adSubnet')]"
|
||||
},
|
||||
"DNSServerAddress": {
|
||||
"value": [
|
||||
"[variables('adPDCNicIPAddress')]",
|
||||
"[variables('adBDCNicIPAddress')]"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"adminUsername": {
|
||||
"value": "GEN-UNIQUE"
|
||||
},
|
||||
"adminPassword": {
|
||||
"value": "GEN-PASSWORD"
|
||||
},
|
||||
"dnsPrefix": {
|
||||
"value": "GEN-UNIQUE"
|
||||
},
|
||||
"domainName": {
|
||||
"value": "mydomain.local"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"itemDisplayName": "Create an new AD Domain with 2 Domain Controllers",
|
||||
"description": "This template creates 2 new VMs to be AD DCs (primary and backup) for a new Forest and Domain",
|
||||
"summary": "This template creates 2 Azure VMs with AD",
|
||||
"githubUsername": "simongdavies",
|
||||
"dateUpdated": "2017-04-14"
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"adBDCVMName": {
|
||||
"type": "string"
|
||||
},
|
||||
"location": {
|
||||
"type": "string"
|
||||
},
|
||||
"adminUsername": {
|
||||
"type": "string"
|
||||
},
|
||||
"adminPassword": {
|
||||
"type": "securestring"
|
||||
},
|
||||
"domainName": {
|
||||
"type": "string"
|
||||
},
|
||||
"adBDCConfigurationFunction": {
|
||||
"type": "string"
|
||||
},
|
||||
"adBDCConfigurationModulesURL": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "Microsoft.Compute/virtualMachines/extensions",
|
||||
"name": "[concat(parameters('adBDCVMName'),'/PrepareBDC')]",
|
||||
"apiVersion": "2016-03-30",
|
||||
"location": "[parameters('location')]",
|
||||
"properties": {
|
||||
"publisher": "Microsoft.Powershell",
|
||||
"type": "DSC",
|
||||
"typeHandlerVersion": "2.21",
|
||||
"autoUpgradeMinorVersion": true,
|
||||
"settings": {
|
||||
"modulesURL": "[parameters('adBDCConfigurationModulesURL')]",
|
||||
"wmfVersion": "4.0",
|
||||
"configurationFunction": "[parameters('adBDCConfigurationFunction')]",
|
||||
"properties": {
|
||||
"domainName": "[parameters('domainName')]",
|
||||
"adminCreds": {
|
||||
"userName": "[parameters('adminUsername')]",
|
||||
"password": "privateSettingsRef:adminPassword"
|
||||
}
|
||||
}
|
||||
},
|
||||
"protectedSettings": {
|
||||
"items": {
|
||||
"adminPassword": "[parameters('adminPassword')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"outputs": {}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"nicName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The name of the NIC to Create or Update"
|
||||
}
|
||||
},
|
||||
"ipConfigurations": {
|
||||
"type": "array",
|
||||
"metadata": {
|
||||
"Description": "The IP configurations of the NIC"
|
||||
}
|
||||
},
|
||||
"dnsServers": {
|
||||
"type": "array",
|
||||
"metadata": {
|
||||
"Description": "The DNS Servers of the NIC"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "[parameters('nicName')]",
|
||||
"type": "Microsoft.Network/networkInterfaces",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"properties": {
|
||||
"ipConfigurations": "[parameters('ipConfigurations')]",
|
||||
"dnsSettings": {
|
||||
"dnsServers": "[parameters('dnsServers')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,64 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"virtualNetworkName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The name of the Virtual Network to Create"
|
||||
}
|
||||
},
|
||||
"virtualNetworkAddressRange": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The address range of the new VNET in CIDR format"
|
||||
},
|
||||
"defaultValue": "10.0.0.0/16"
|
||||
},
|
||||
"subnetName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The name of the subnet created in the new VNET"
|
||||
}
|
||||
},
|
||||
"subnetRange": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The address range of the subnet created in the new VNET"
|
||||
},
|
||||
"defaultValue": "10.0.0.0/24"
|
||||
},
|
||||
"DNSServerAddress": {
|
||||
"type": "array",
|
||||
"metadata": {
|
||||
"Description": "The DNS address(es) of the DNS Server(s) used by the VNET"
|
||||
}
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "[parameters('virtualNetworkName')]",
|
||||
"type": "Microsoft.Network/virtualNetworks",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"properties": {
|
||||
"addressSpace": {
|
||||
"addressPrefixes": [
|
||||
"[parameters('virtualNetworkAddressRange')]"
|
||||
]
|
||||
},
|
||||
"dhcpOptions": {
|
||||
"dnsServers": "[parameters('DNSServerAddress')]"
|
||||
},
|
||||
"subnets": [
|
||||
{
|
||||
"name": "[parameters('subnetName')]",
|
||||
"properties": {
|
||||
"addressPrefix": "[parameters('subnetRange')]"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
|
||||
"contentVersion": "1.0.0.0",
|
||||
"parameters": {
|
||||
"virtualNetworkName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The name of the Virtual Network to Create"
|
||||
}
|
||||
},
|
||||
"virtualNetworkAddressRange": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The address range of the new VNET in CIDR format"
|
||||
},
|
||||
"defaultValue": "10.0.0.0/16"
|
||||
},
|
||||
"subnetName": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The name of the subnet created in the new VNET"
|
||||
}
|
||||
},
|
||||
"subnetRange": {
|
||||
"type": "string",
|
||||
"metadata": {
|
||||
"Description": "The address range of the subnet created in the new VNET"
|
||||
},
|
||||
"defaultValue": "10.0.0.0/24"
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"name": "[parameters('virtualNetworkName')]",
|
||||
"type": "Microsoft.Network/virtualNetworks",
|
||||
"location": "[resourceGroup().location]",
|
||||
"apiVersion": "2015-06-15",
|
||||
"properties": {
|
||||
"addressSpace": {
|
||||
"addressPrefixes": [
|
||||
"[parameters('virtualNetworkAddressRange')]"
|
||||
]
|
||||
},
|
||||
"subnets": [
|
||||
{
|
||||
"name": "[parameters('subnetName')]",
|
||||
"properties": {
|
||||
"addressPrefix": "[parameters('subnetRange')]"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Загрузка…
Ссылка в новой задаче