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:
pagariyaalok 2018-07-17 12:32:44 -07:00 коммит произвёл vikasnav
Родитель 04e212317d
Коммит ce0fb07192
25 изменённых файлов: 2250 добавлений и 0 удалений

Просмотреть файл

@ -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"
}
}
}

Двоичные данные
301-storage-spaces-direct/dsc/config-s2d.ps1.zip Normal file

Двоичный файл не отображается.

Двоичные данные
301-storage-spaces-direct/dsc/prep-s2d.ps1.zip Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -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')]"
}
}
}

1
active-directory-new-domain-ha-2-dc/.gitignore поставляемый Normal file
Просмотреть файл

@ -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"
}
}
}

Двоичные данные
active-directory-new-domain-ha-2-dc/DSC/ConfigureADBDC.zip Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -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"
}
}
}

Двоичные данные
active-directory-new-domain-ha-2-dc/DSC/CreateADPDC.zip Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -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"
}
}
}

Двоичные данные
active-directory-new-domain-ha-2-dc/DSC/PrepareADBDC.zip Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -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')]"
}
}
]
}
}
]
}