#!/bin/bash set -euo pipefail IFS=$'\n\t' # -e: immediately exit if any command has a non-zero exit status # -o: prevents errors in a pipeline from being masked # IFS new value is less likely to cause confusing bugs when looping arrays or arguments (e.g. $@) usage() { echo "Usage: $0 -i -g -n -l " 1>&2; exit 1; } declare subscriptionId="" declare resourceGroupName="" declare deploymentName="" declare resourceGroupLocation="" # Initialize parameters specified from command line while getopts ":i:g:n:l:" arg; do case "${arg}" in i) subscriptionId=${OPTARG} ;; g) resourceGroupName=${OPTARG} ;; n) deploymentName=${OPTARG} ;; l) resourceGroupLocation=${OPTARG} ;; esac done shift $((OPTIND-1)) #Prompt for parameters is some required parameters are missing if [[ -z "$subscriptionId" ]]; then echo "Your subscription ID can be looked up with the CLI using: az account show --out json " echo "Enter your subscription ID:" read subscriptionId [[ "${subscriptionId:?}" ]] fi if [[ -z "$resourceGroupName" ]]; then echo "This script will look for an existing resource group, otherwise a new one will be created " echo "You can create new resource groups with the CLI using: az group create " echo "Enter a resource group name" read resourceGroupName [[ "${resourceGroupName:?}" ]] fi if [[ -z "$deploymentName" ]]; then echo "Enter a name for this deployment:" read deploymentName fi if [[ -z "$resourceGroupLocation" ]]; then echo "If creating a *new* resource group, you need to set a location " echo "You can lookup locations with the CLI using: az account list-locations " echo "Enter resource group location:" read resourceGroupLocation fi #templateFile Path - template file to be used templateFilePath="mesh_rp.linux.json" if [ ! -f "$templateFilePath" ]; then echo "$templateFilePath not found" exit 1 fi #parameter file path parametersFilePath="parameters.json" if [ ! -f "$parametersFilePath" ]; then echo "$parametersFilePath not found" exit 1 fi if [ -z "$subscriptionId" ] || [ -z "$resourceGroupName" ] || [ -z "$deploymentName" ]; then echo "Either one of subscriptionId, resourceGroupName, deploymentName is empty" usage fi #login to azure using your credentials az account show 1> /dev/null if [ $? != 0 ]; then az login fi #set the default subscription id az account set --subscription $subscriptionId set +e #Check for existing RG az group show --name $resourceGroupName 1> /dev/null if [ $? != 0 ]; then echo "Resource group with name" $resourceGroupName "could not be found. Creating new resource group.." set -e ( set -x az group create --name $resourceGroupName --location $resourceGroupLocation 1> /dev/null ) else echo "Using existing resource group..." fi #Start deployment echo "Starting deployment..." ( set -x az group deployment create --name "$deploymentName" --resource-group "$resourceGroupName" --template-file "$templateFilePath" --parameters "@${parametersFilePath}" ) if [ $? == 0 ]; then echo "Template has been successfully deployed" fi