Azure Quickstart Templates
Clone or download
Pull request Compare This branch is 6280 commits behind Azure:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.github
1-CONTRIBUTION-GUIDE
100-blank-template
101-acs-dcos
101-acs-kubernetes
101-acs-swarm
101-acsengine-swarmmode
101-app-service-certificate-standard
101-app-service-certificate-wildcard
101-application-gateway-create
101-application-gateway-public-ip-ssl-offload
101-application-gateway-public-ip
101-application-gateway-waf
101-automation-runbook-getvms
101-availability-set-create-3FDs-20UDs
101-azure-api-management-create
101-azure-dns-new-zone
101-azure-relay-create-namespace
101-azure-search-create
101-backup-protect-iaasvm
101-backup-vault-create
101-cdn-with-custom-origin
101-container-registry
101-create-ase-with-webapp
101-data-factory-blob-to-sql-copy-stored-proc
101-data-factory-blob-to-sql-copy
101-data-factory-hive-transformation
101-data-factory-salesforce-to-blob-copy
101-datalake-analytics
101-datalake-store
101-documentdb-account-consistencypolicy-create
101-documentdb-account-create-multi-region-account
101-documentdb-account-create
101-dtl-create-lab
101-expressroute-circuit-create
101-function-app-create-dedicated
101-function-app-create-dynamic
101-hdinsight-hbase-linux-vnet
101-hdinsight-hbase-linux
101-hdinsight-hbase-replication-one-vnet
101-hdinsight-hbase-replication-two-vnets-same-region
101-hdinsight-linux-add-edge-node
101-hdinsight-linux-ssh-password
101-hdinsight-linux-ssh-publickey-metastore-vnet
101-hdinsight-linux-ssh-publickey
101-hdinsight-linux-with-edge-node
101-hdinsight-linux-with-sql-database
101-hdinsight-rserver
101-hdinsight-secure-vnet
101-hdinsight-spark-linux-vnet
101-hdinsight-spark-linux
101-internal-loadbalancer-create
101-iothub-with-consumergroup-create
101-jenkins
101-key-vault-create
101-loadbalancer-with-multivip
101-loadbalancer-with-nat-rule
101-logic-app-and-function-app
101-logic-app-create
101-logic-app-ftp-to-blob
101-logic-app-sendgrid
101-logic-app-sql-proc
101-media-services-create
101-mobile-app-create
101-nic-publicip-dns-vnet
101-notification-hub
101-point-to-site
101-rbac-builtinrole-resourcegroup
101-rbac-builtinrole-virtualmachine
101-recovery-services-backup-vms
101-recovery-services-daily-backup-policy-create
101-recovery-services-vault-create
101-recovery-services-weekly-backup-policy-create
101-redis-cache
101-security-group-create
101-servicebus-create-namespace
101-servicebus-namespace
101-servicebus-pn-ar
101-servicebus-queue
101-servicebus-topic-subscription
101-servicebus-topic
101-site-to-site-vpn-create
101-spinnaker
101-storage-account-create
101-streamanalytics-create
101-subnet-add-vnet-existing
101-traffic-manager-external-endpoint
101-vm-automatic-static-ip
101-vm-customdata
101-vm-from-user-image
101-vm-full-disk-encrypted-rhel-unmanaged
101-vm-full-disk-encrypted-rhel
101-vm-linux-serial-output
101-vm-multiple-data-disk
101-vm-multiple-ipconfig
101-vm-secure-password
101-vm-simple-freebsd
101-vm-simple-linux
101-vm-simple-rhel-unmanaged
101-vm-simple-rhel
101-vm-simple-windows
101-vm-sql-existing-autobackup-update
101-vm-sql-existing-autopatching-update
101-vm-sql-existing-keyvault-update
101-vm-sshkey
101-vm-tags
101-vm-user-image-data-disks
101-vm-with-data-management-gateway
101-vm-with-rdp-port
101-vnet-two-subnets
101-vsts-cloudloadtest-rig
101-webapp-with-golang
101-webappazure-oms-monitoring
201-1-vm-loadbalancer-2-nics
201-2-vms-internal-load-balancer
201-2-vms-loadbalancer-lbrules
201-2-vms-loadbalancer-natrules
201-alert-to-queue-with-logic-app
201-alert-to-slack-with-logic-app
201-alert-to-text-message-with-logic-app
201-application-gateway-multihosting
201-application-gateway-url-path-based-routing
201-azure-relay-create-all-resources
201-azure-relay-create-hybridconnection
201-azure-relay-create-wcfrelay
201-cdn-customize
201-cdn-with-storage-account
201-cdn-with-web-app
201-create-encrypted-managed-disk
201-customscript-extension-azure-storage-on-ubuntu
201-customscript-extension-public-storage-on-ubuntu
201-data-factory-ftp-hive-blob
201-decrypt-running-linux-vm
201-decrypt-running-windows-vm
201-dependency-between-scripts-using-extensions
201-discover-private-ip-dynamically
201-documentdb-webapp
201-dsc-linux-azure-storage-on-ubuntu
201-dsc-linux-public-storage-on-ubuntu
201-dynamic-web-tests
201-encrypt-create-new-vm-gallery-image-managed-disks
201-encrypt-create-new-vm-gallery-image
201-encrypt-create-pre-encrypted-vm
201-encrypt-running-linux-vm
201-encrypt-running-windows-vm-aad-client-cert
201-encrypt-running-windows-vm
201-event-hubs-create-event-hub-and-consumer-group
201-eventhubs-create-namespace-and-enable-archive
201-expressroute-circuit-public-private-peering
201-extend-vnet-to-multi-vnet
201-function-app-dedicated-github-deploy
201-hdinsight-datalake-store-azure-storage
201-insights-alertrules-servicehealth
201-jenkins-acr
201-key-vault-secret-create
201-key-vault-with-logging-create
201-list-storage-keys-windows-vm
201-load-balancer-ipv6-create
201-logic-app-as2-send-receive
201-logic-app-custom-api
201-logic-app-transform-function
201-logic-app-veter-pipeline
201-logic-app-x12-disaster-recovery-replication
201-logic-app-xslt-with-params
201-nsg-dmz-in-vnet
201-oms-extension-ubuntu-vm
201-oms-extension-windows-vm
201-ospatching-extension-on-ubuntu
201-premium-storage-windows-vm
201-rbac-builtinrole-multipleVMs
201-recovery-services-backup-classic-resource-manager-vms
201-redis-premium-cluster-diagnostics
201-redis-premium-persistence
201-redis-premium-vnet-cluster-diagnostics
201-reserved-ip
201-scheduler-webapp
201-servicebus-create-queue
201-servicebus-create-topic-and-subscription
201-servicebus-create-topic-subscription-rule
201-site-to-site-vpn
201-spinnaker-acr-k8s
201-sql-database-transparent-encryption-create
201-storage-account-service-encryption-create
201-traffic-manager-vm
201-traffic-manager-webapp
201-userdefined-routes-appliance
201-vm-copy-index-loops
201-vm-custom-image-new-storage-account
201-vm-custom-script-windows
201-vm-diagnostics-extension-windows
201-vm-different-rg-vnet
201-vm-domain-join-existing
201-vm-domain-join
201-vm-dynamic-data-disks-selection
201-vm-linux-dynamic-data-disks
201-vm-monitoring-diagnostics-extension
201-vm-multiple-nics-linux
201-vm-os-disk-and-data-disk-existing-vnet
201-vm-push-certificate-windows
201-vm-specialized-vhd-existing-vnet
201-vm-specialized-vhd
201-vm-sql-full-autobackup
201-vm-sql-full-autopatching
201-vm-sql-full-keyvault
201-vm-win-iis-app-ssl
201-vm-winrm-keyvault-windows
201-vm-winrm-lb-windows
201-vm-winrm-windows
201-vmaccess-on-ubuntu
201-vmss-automation-dsc
201-vmss-bottle-autoscale
201-vmss-custom-script-windows
201-vmss-existing-vnet
201-vmss-internal-loadbalancer
201-vmss-linux-customimage-autoscale
201-vmss-linux-jumpbox
201-vmss-linux-nat
201-vmss-scale-existing
201-vmss-ubuntu-app-gateway
201-vmss-ubuntu-autoscale
201-vmss-ubuntu-web-gitpull
201-vmss-ubuntu-web-ssl
201-vmss-win-iis-app-ssl
201-vmss-windows-app-gateway
201-vmss-windows-autoscale
201-vmss-windows-customimage
201-vmss-windows-jumpbox
201-vmss-windows-nat
201-vmss-windows-webapp-dsc-autoscale
201-vnet-to-vnet-bgp
201-vnet-to-vnet-peering
201-vnet-to-vnet
201-vnet-transitive-bgp
201-vsts-cloudloadtest-rig-existing-vnet
201-web-app-ase-create
201-web-app-ase-ilb-configure-default-ssl
201-web-app-ase-ilb-create
201-web-app-asp-app-on-ase-create
201-web-app-blob-connection
201-web-app-certificate-from-key-vault
201-web-app-custom-domain-and-ssl
201-web-app-custom-domain
201-web-app-github-deploy
201-web-app-java-tomcat
201-web-app-python
201-web-app-redis-cache-sql-database
201-web-app-sql-database
201-web-app-vm-dsc
201-web-app-with-redis-cache
301-2fe-lb80-rdp-1be-nsg-rdp
301-2fe-linux-lb80-ssh-1be-win-nsg-rdp-datadisk-ssd
301-azure-relay-create-authrule-namespace-and-hybridconnection
301-custom-images-at-scale
301-dmz-nsg
301-dns-forwarder
301-drupal8-vmss-glusterfs-mysql
301-eventHub-create-authrule-namespace-and-eventHub
301-expressroute-circuit-vnet-connection
301-jenkins-acr-spinnaker-k8s
301-multi-tier-loadbalancing
301-multi-tier-service-networking
301-multi-vmss-linux
301-multi-vmss-windows
301-servicebus-create-authrule-namespace-and-queue
301-storage-spaces-direct
301-subnet-driven-deployment
301-vm-32-data-disks-high-iops
301-vm-sql-full-autobackup-autopatching-keyvault
301-web-app-sql-docdb-search
IaaS-Story
active-directory-new-domain-ha-2-dc
active-directory-new-domain
ansible-advancedlinux
ansible-tower-rhel
anti-malware-extension-windows-vm
apache2-on-ubuntu-vm
app-service-environment-serviceplan-logicapp
application-gateway-demo-setup
apprenda60-express
apprenda60-small
arm-asm-s2s
asr-automation-recovery
asr-oms-monitoring
azure-governance-operations-automation
azure-jenkins
barracuda-waf-iis
bigchaindb-on-ubuntu
bitcore-centos-vm
blockchain
bootstorm-vm-boot-time
bosh-cf-crossregion
bosh-setup
centos-2nics-lb-cluster
checkpoint-multi-nic
checkpoint-single-nic
chef-automate
chef-ha-cluster
chef-json-parameters-linux-vm
cisco-csr-1000v-4-nic
cisco-csr-1000v-existing-vnet-4-nic
cisco-csr-1000v-existing-vnet
cisco-csr-1000v
cloudbeesjenkins-dockerdatacenter
cloudera-director-on-centos
cloudera-on-centos
cloudera-tableau
concourse-ci
consul-on-ubuntu
coreos-with-fleet-multivm
coscale-dev-env
couchbase
create-hpc-cluster-custom-image
create-hpc-cluster-linux-cn
create-hpc-cluster
custom-private-dns
datameer-trend-chef-riskanalysis
datastax
deis-cluster-coreos
devtest-p2s-iis
diagnostics-eventhub-elk
diagnostics-with-elk
diskraid-ubuntu-vm
django-app
dnx-on-ubuntu
docker-ckan
docker-kibana-elasticsearch
docker-neo4j
docker-parse
docker-rancher
docker-simple-on-ubuntu
docker-swarm-cluster
docker-wordpress-mysql
dokku-vm
drone-ubuntu-vm
dsc-extension-azure-automation-pullserver
dsc-extension-iis-server-windows-vm
dsc-pullserver-to-win-server
elasticsearch-centos-3node
elasticsearch-jmeter
elasticsearch-vmss
elasticsearch
episerver-cms-in-azure
eris-platform
eset-vm-extension
ethereum-consortium-blockchain-network
ethereum-cpp-on-ubuntu
ethereum-studio-docker-standalone-ubuntu
github-enterprise
glassfish-on-suse
gluster-file-system
go-ethereum-on-ubuntu
go-expanse-on-ubuntu
guacamole-rdp-vnc-gateway-existing-vnet
haproxy-redundant-floatingip-ubuntu
hazelcast-vm-cluster
hdInsight-apache-spark
hdinsight-genomics-adam
hdinsight-linux-run-script-action
iis-2vm-sql-1vm
informatica-adf-hdinsight-powerbi
intel-lustre-client-server
intel-lustre-clients-on-centos
intel-lustre-clients-vmss-centos
iomad-cluster-ubuntu
iomad-singlevm-ubuntu
jenkins-on-ubuntu
kafka-on-ubuntu
kafka-ubuntu-multidisks
kemp-loadmaster-multi-nic
lamp-app
lansa-vmss-windows-autoscale-existing-db
lansa-vmss-windows-autoscale-sql-database
lap-mysql-ubuntu
lap-neo4j-ubuntu
managed-disk-performance-meter
managed-disk-raid-performance-meter
manifold-endpoint
marketplace-samples
matlab-cluster
mcafee-extension-windows-vm
media-service-output-primary-key
memcached-multi-vm-ubuntu
minecraft-on-ubuntu
mongodb-high-availability
mongodb-nodejs-high-availability
mongodb-on-centos
mongodb-on-ubuntu
mongodb-replica-set-centos
mongodb-sharding-centos
moodle-cluster-centos
moodle-cluster-ubuntu
moodle-singlevm-centos
moodle-singlevm-ubuntu
multi-vm-chef-template-ubuntu-vm
mysql-ha-pxc
mysql-mha-haproxy-ubuntu
mysql-replication
mysql-standalone-server-ubuntu
nagios-on-ubuntu
netki-wns-api-server-on-ubuntu
nylas-email-sync-engine
octopusdeploy3-single-vm-windows
oms-all-deploy
oms-automation-solution
oms-azure-storage-analytics-solution
oms-azure-vminventory-solution
oms-existing-storage-account
oms-hyperv-replica-solution
oms-kemp-applicationdelivery-solution
oms-scomacs-solution
oms-service-fabric-solution
oms-servicebus-solution
openchain-blockchain-coinprism
openedx-devstack-ubuntu
openedx-fullstack-ubuntu
openedx-scalable-ubuntu
openjdk-tomcat-ubuntu-vm
openldap-cluster-ubuntu
openldap-singlevm-ubuntu
openshift-origin-rhel
opensis-cluster-ubuntu
opensis-singlevm-ubuntu
openvpn-access-server-ubuntu
orchard-cms-video-portal
pci-paas-webapp-ase-sqldb-appgateway-keyvault-oms
pf-freebsd-setup
phabricator-on-ubuntu
php_pgsql-freebsd-setup
pivotalcloudfoundry-apigee
postgresql-on-ubuntu
postgresql-standalone-server-ubuntu
pubnub-eventhub-bridge
puppet-agent-linux
puppet-agent-windows
puppet-enterprise-cluster
puppet-enterprise-rhel-win
python-proxy-on-ubuntu
radium-blockchain-ubuntu
rds-deployment-existing-ad
rds-deployment-ha-gateway
rds-deployment
rds-update-certificate
rds-update-rdsh-collection
redis-high-availability
rhel-3tier-iaas
s2d-oms-mgmt-solution
sap-2-tier-marketplace-image
sap-2-tier-user-disk
sap-2-tier-user-image
sap-3-tier-marketplace-image-converged
sap-3-tier-marketplace-image-multi-sid-apps
sap-3-tier-marketplace-image-multi-sid-db
sap-3-tier-marketplace-image-multi-sid-xscs
sap-3-tier-marketplace-image
sap-3-tier-user-image-converged
sap-3-tier-user-image
scrapy-on-ubuntu
service-fabric-cluster-ubuntu-5-node-1-nodetype
service-fabric-oms
service-fabric-secure-cluster-5-node-1-nodetype
service-fabric-secure-nsg-cluster-65-node-3-nodetype
service-fabric-vmss-oms
shared_scripts
sharepoint-server-farm-ha
sharepoint-three-vm
shibboleth-cluster-ubuntu
shibboleth-cluster-windows
shibboleth-singlevm-ubuntu
shibboleth-singlevm-windows
slurm-on-sles12-hpc
slurm
sonarqube-azuresql
spark-2.0-on-suse
spark-and-cassandra-on-centos
spark-on-ubuntu
spark-ubuntu-multidisks
spinnaker-jenkins-to-vmss
splunk-on-ubuntu
sql-reporting-services-sql-server
sql-server-2014-alwayson-existing-vnet-and-ad
sqldb-django-on-ubuntu
sqlvm-alwayson-cluster
sqlvm-provisioning-csp
stampery-trailbot-ubuntu
storage-iops-latency-throughput-demo
symantec-extension-windows-vm
test
thinkbox-deadline
torque-cluster
traffic-manager-application-gateway-demo-setup
traffic-manager-demo-setup
trend-chef-splunk-security
ubuntu-apache-test-page
ubuntu-desktop-gnome
ubuntu-desktop-xfce-rdp
umbraco-cms-webapp-redis-cache
umbraco-webapp-simple
vertx-openjdk-apache-mysql-on-ubuntu
visual-studio-dev-vm-O365
visual-studio-dev-vm-chocolatey
visual-studio-dev-vm
visual-studio-vstsbuildagent-vm
vm-cpu-sysbench-meter
vm-disk-performance-meter
vm-simple-sles
vm-to-vm-bandwidth-meter
vm-to-vm-throughput-meter-multithreaded
vod-aspera-wowza-azuremediaservices
vsts-fullbuild-redhat-vm
vsts-fullbuild-ubuntu-vm
vsts-minbuildjava-ubuntu-vm
vsts-tomcat-redhat-vm
vsts-tomcat-ubuntu-vm
webapp-blob-connection
website-cluster-centos
windows-server-containers-preview
windows-vm-O365
wordpress-app-service-linux
wordpress-mysql-replication
wordpress-single-vm-ubuntu
xtremedata-dbx-cluster-centos
zabbix-monitoring-cluster
zookeeper-cluster-ubuntu-vm
.beautifyrc
.gitignore
.jscsrc
.jshintrc
.travis.yml
Deploy-AzureResourceGroup.ps1
Gruntfile.js
LICENSE
README.md
azure-group-deploy.sh
localTest.cmd
managed-disk-support-list.md
package.json

README.md

Azure Resource Manager QuickStart Templates

This repo contains all currently available Azure Resource Manager templates contributed by the community. A searchable template index is maintained at https://azure.microsoft.com/en-us/documentation/templates/. The following information is relevant to get started with contributing to this repository.

Deploying Samples

You can deploy these samples directly through the Azure Portal or by using the scripts supplied in the root of the repo.

To deploy a sample using the Azure Portal, click the Deploy to Azure button found in the README.md of each sample.

To deploy the sample via the command line (using Azure PowerShell or the Azure CLI) you can use the scripts.

Simply execute the script and pass in the folder name of the sample you want to deploy. For example:

.\Deploy-AzureResourceGroup.ps1 -ResourceGroupLocation 'eastus' -ArtifactStagingDirectory '[foldername]'
azure-group-deploy.sh -a [foldername] -l eastus

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).

.\Deploy-AzureResourceGroup.ps1 -ResourceGroupLocation 'eastus' -ArtifactStagingDirectory '201-vm-custom-script-windows' -UploadArtifacts 
azure-group-deploy.sh -a '201-vm-custom-script-windows' -l eastus -u

Contribution guide

To make sure your template is added to Azure.com index, please follow these guidelines. Any templates that are out of compliance will be added to the blacklist and not be indexed on Azure.com

Files, folders and naming conventions

  1. Every deployment template and its associated files must be contained in its own folder. Name this folder something that describes what your template does. Usually this naming pattern looks like appName-osName or level-platformCapability (e.g. 101-vm-user-image)
  • Required - Numbering should start at 101. 100 is reserved for things that need to be at the top.
  • Protip - Try to keep the name of your template folder short so that it fits inside the Github folder name column width.
  1. Github uses ASCII for ordering files and folder. For consistent ordering create all files and folders in lowercase. The only exception to this guideline is the README.md, that should be in the format UPPERCASE.lowercase.
  2. Include a README.md file that explains how the template works.
  • Guidelines on the README.md file below.
  1. The deployment template file must be named azuredeploy.json.
  2. There should be a parameters file named azuredeploy.parameters.json.
  • Please fill out the values for the parameters according to rules defined in the template (allowed values etc.), For parameters without rules, a simple "changeme" will do as the acomghbot only checks for syntactic correctness using the ARM Validate Template API.
  1. The template folder must contain a metadata.json file to allow the template to be indexed on Azure.com.
  • Guidelines on the metadata.json file below.
  1. The custom scripts that are needed for successful template execution must be placed in a folder called scripts.
  2. Linked templates must be placed in a folder called nested.
  3. Images used in the README.md must be placed in a folder called images.
  4. Any resources that need to be setup outside the template should be named prefixed with existing (e.g. existingVNET, existingDiagnosticsStorageAccount).

alt text

README.md

The README.md describes your deployment. A good description helps other community members to understand your deployment. The README.md uses Github Flavored Markdown for formatting text. If you want to add images to your README.md file, store the images in the images folder. Reference the images in the README.md with a relative path (e.g. ![alt text](images/namingConvention.png "Files, folders and naming conventions")). This ensures the link will reference the target repository if the source repository is forked. A good README.md contains the following sections

  • Deploy to Azure button
  • Visualize button
  • Description of what the template will deploy
  • Tags, that can be used for search. Specify the tags comma seperated and enclosed between two back-ticks (e.g Tags: cluster, ha, sql)
  • *Optional: Prerequisites
  • *Optional: Description on how to use the application
  • *Optional: Notes

Do not include the parameters or the variables of the deployment script. We render this on Azure.com from the template. Specifying these in the README.md will result in duplicate entries on Azure.com.

You can download a sample README.md for use in your deployment scenario. The sample README.md also contains the code for the Deploy to Azure and Visualize buttons, that you can use as a reference.

metadata.json

A valid metadata.json must adhere to the following structure

{
  "itemDisplayName": "",
  "description": "",
  "summary": "",
  "githubUsername": "",
  "dateUpdated": "<e.g. 2015-12-20>"
}

The metadata.json file will be validated using these rules

itemDisplayName

  • Cannot be more than 60 characters

description

  • Cannot be more than 1000 characters
  • Cannot contain HTML This is used for the template description on the Azure.com index template details page

summary

  • Cannot be more than 200 characters
  • This is shown for template description on the main Azure.com template index page

githubUsername

  • This is the username of the original template author. Do not change this
  • This is used to display template author and Github profile pic in the Azure.com index

dateUpdated

  • Must be in yyyy-mm-dd format.
  • The date must not be in the future to the date of the pull request

Common errors from acomghbot

acomghbot is a bot designed to enforce the above rules and check the syntactic correctness of the template using the ARM Validate Template API. Below are some of the more cryptic error messages you might receive from the bot and how to solve these issues.

  • This error is received when the parameters file contains a parameter that is not defined in the template.

The file azuredeploy.json is not valid. Response from ARM API: BadRequest - {"error":{"code":"InvalidTemplate","message":"Deployment template validation failed: 'The template parameters 'vmDnsName' are not valid; they are not present in the original template and can therefore not be provided at deployment time. The only supported parameters for this template are 'newStorageAccountName, adminUsername, adminPassword, dnsNameForPublicIP, windowsOSVersion, sizeOfDiskInGB'.'."}}

  • This error is received when a parameter in the parameter file has an empty value.

The file azuredeploy.json is not valid. Response from ARM API: BadRequest - {"error":{"code":"InvalidTemplate","message":"Deployment template validation failed: 'The template resource '' at line '66' and column '6' is not valid. The name property cannot be null or empty'."}}

  • This error message is received when a value entered in the parameters file is different from the allowed values defined for the parameter in the template file.

The file azuredeploy.json is not valid. Response from ARM API: BadRequest - {"error":{"code":"InvalidTemplate","message":"Deployment template validation failed: 'The provided value for the template parameter 'publicIPAddressType' at line '40' and column '29' is not valid.'."}}

Travis CI

We have automated template validation through Travis CI. These builds can be accessed by clicking the 'Details' link at the bottom of the pull-request dialog. This process will ensure that your template conforms to all the rules mentioned above and will also deploy your template to our test azure subscription.

Parameters File Placeholders

To ensure your template passes, special placeholder values are required when deploying a template, depending what the parameter is used for:

  • GEN-UNIQUE - use this placeholder for new storage account names, domain names for public ips and other fields that need a unique name. The value will always be alpha numeric value with a length of 18 characters.
  • GEN-UNIQUE-[N] - use this placeholder for new storage account names, domain names for public ips and other fields that need a unique name. The value will always be alpha numeric value with a length of [N], where [N] can be any number from 3 to 32 inclusive.
  • GEN-SSH-PUB-KEY - use this placeholder if you need an SSH public key
  • GEN-PASSWORD - use this placeholder if you need an azure-compatible password for a VM

Here's an example in an azuredeploy.parameters.json file:

{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
 "newStorageAccountName":{
  "value": "GEN-UNIQUE"
 },
 "adminUsername": {
  "value": "sedouard"
 },
 "sshKeyData": {
  "value": "GEN-SSH-PUB-KEY"
 },
 "dnsNameForPublicIP": {
  "value": "GEN-UNIQUE-13"
 }
}

raw.githubusercontent.com Links

If you're making use of raw.githubusercontent.com links within your template contribution (within the template file itself or any scripts in your contribution) please ensure the following:

  • Ensure any raw.githubusercontent.com links which refer to content within your pull request points to https://raw.githubusercontent.com/Azure/azure-quickstart-templates/... and NOT your fork.
  • All raw.githubusercontent.com links are placed in your azuredeploy.json and you pass the link down into your scripts & linked templates via this top-level template. This ensures we re-link correctly from your pull-request repository and branch.
  • Although pull requests with links pointing to https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/... may not exist in the Azure repo at the time of your pull-request, at CI run-time, those links will be converted to https://raw.githubusercontent.com/{your_user_name}/azure-quickstart-templates/{your_branch}/.... Be sure to check the casing of https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/... as this is case-sensitive.

Note: You can find an example of relative linking in the nested template section of best practices document.

Template Pre-requisites

If your template has some pre-requisite such as an Azure Active Directory application or service principal, we don't support this yet. To bypass the CI workflow include a file called .ci_skip in the root of your template folder.

Diagnosing Failures

If your deployment fails, check the details link of the Travis CI build, which will take you to the CI log. If the template deployment was attempted, you will get two top-level fields. The first is parameters which is the rendered version of your azuredeploy.parameters.json. This will include any replacements for GEN- parameters. The second is template which is the contents of your azuredeploy.json, after any raw.githubusercontent.com relinking. These values are the exact values you need to reproduce the error. Keep in mind, that depending on the resources allocated, it can take a few minutes for the CI system to cleanup provisioned resources.

Here is an example failure log:

Server Error:{
    "error": "Deployment provisioning state was not successful\n",
    "_rgName": "qstci-26dd2ec4-bae9-12fb-fd46-fd4ce455a035",
    "command": "azure group deployment create --resource-group (your_group_name) --template-file azuredeploy.json --parameters-file azuredeploy.parameters.json",
    "parameters": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "clusterName": {
                "value": "ci4391bcd700f86e84"
            },
            "clusterType": {
                "value": "hadoop"
            },
            "clusterStorageAccountName": {
                "value": "cifb07cf059735afba"
            },
            "clusterLoginUserName": {
                "value": "admin"
            },
            "clusterLoginPassword": {
                "value": "ciP$ss2e6a28784055eda8"
            }
        }
    },
    "template": {
        "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "clusterType": {
                "type": "string",
                "allowedValues": [
                    "hadoop",
                    "hbase",
                    "storm",
                    "spark"
                ],
                "metadata": {
                    "description": "The type of the HDInsight cluster to create."
                }
            }
            // more parameters here...
        },
        "variables": {
            "defaultApiVersion": "2015-06-15",
            "clusterApiVersion": "2015-03-01-preview",
            "adlsApiVersion": "2015-10-01-preview"
        },
        "resources": [
            {
                "name": "[parameters('adlStoreName')]",
                "type": "Microsoft.DataLakeStore/accounts",
                "location": "East US 2",
                "apiVersion": "[variables('adlsApiVersion')]",
                "dependsOn": [],
                "tags": {},
                "properties": {
                    "initialUser": "[parameters('servicePrincipalObjectId')]"
                }
            },
            // more resources here...
        ],
        "outputs": {
            "adlStoreAccount": {
                "type": "object",
                "value": "[reference(resourceId('Microsoft.DataLakeStore/accounts',parameters('adlStoreName')))]"
            }
            // more outputs here...
        }
    }
}
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.