-
-
Save shaivaldalal/151c4b20722d63f579771d599f8710ab to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <subscriptionId> -g <resourceGroupName> -n <deploymentName> -l <resourceGroupLocation>" 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="template.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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment