mirror of https://github.com/dapr/samples.git
133 lines
4.1 KiB
Bash
Executable File
133 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# This script will run an ARM template deployment to deploy all the
|
|
# required resources into Azure. All the keys, tokens and endpoints
|
|
# will be automatically retreived and passed to the helm chart used
|
|
# in deployment. The only requirement is to populate the mysecrets.yaml
|
|
# file in the demochart folder with the twitter tokens, secrets and keys.
|
|
# If you already have existing infrastructure do not use this file.
|
|
# Simply fill in all the values of the mysecrets.yaml file and call helm
|
|
# install passing in that file using the -f flag.
|
|
# Requirements:
|
|
# Helm 3+
|
|
# Azure CLI (log in)
|
|
|
|
# Progress Spinner
|
|
function spinner {
|
|
local pid=$!
|
|
local spin='-\|/'
|
|
local i=0
|
|
while kill -0 $pid 2>/dev/null; do
|
|
(( i = (i + 1) % 4 ))
|
|
printf '\b%c' "${spin:i:1}"
|
|
sleep .1
|
|
done
|
|
printf ' \r'
|
|
}
|
|
|
|
# Linebreak carriage return
|
|
function linebreak {
|
|
printf ' \n '
|
|
}
|
|
# Get outputs of Azure Deployment
|
|
function getOutput {
|
|
echo $(az deployment sub show --name $rgName --query "properties.outputs.$1.value" --output tsv)
|
|
}
|
|
|
|
# Get the IP address of specified Kubernetes service
|
|
function getIp {
|
|
kubectl get services $1 --output jsonpath='{.status.loadBalancer.ingress[0].ip}'
|
|
}
|
|
|
|
# Get the latest version of Kubernetes available in specified location
|
|
function getLatestK8s {
|
|
versions=$(az aks get-versions -l $location -o tsv --query="orchestrators[].orchestratorVersion")
|
|
|
|
latestVersion=$(printf '%s\n' "${versions[@]}" |
|
|
awk '$1 > m || NR == 1 { m = $1 } END { print m }')
|
|
|
|
echo $latestVersion
|
|
}
|
|
|
|
# The name of the resource group to be created. All resources will be place in
|
|
# the resource group and start with name.
|
|
rgName=$1
|
|
rgName=${rgName:-twitterDemo}
|
|
|
|
# The location to store the meta data for the deployment.
|
|
location=$2
|
|
location=${location:-eastus}
|
|
|
|
# The version of the dapr runtime version to deploy.
|
|
daprVersion=$3
|
|
daprVersion=${daprVersion:-1.3.0}
|
|
|
|
# The version of k8s control plane
|
|
k8sversion=$4
|
|
k8sversion=${k8sversion:-$(getLatestK8s)}
|
|
|
|
# Deploy the infrastructure
|
|
az deployment sub create --name $rgName \
|
|
--location $location \
|
|
--template-file ./iac/main.json \
|
|
--parameters rgName=$rgName \
|
|
--parameters location=$location \
|
|
--parameter k8sversion=$k8sversion \
|
|
--output none
|
|
|
|
# Get all the outputs
|
|
aksName=$(getOutput 'aksName')
|
|
storageAccountKey=$(getOutput 'storageAccountKey')
|
|
serviceBusEndpoint=$(getOutput 'serviceBusEndpoint')
|
|
storageAccountName=$(getOutput 'storageAccountName')
|
|
cognitiveServiceKey=$(getOutput 'cognitiveServiceKey')
|
|
cognitiveServiceEndpoint=$(getOutput 'cognitiveServiceEndpoint')
|
|
|
|
# Get the credentials to use with dapr init and helm install
|
|
az aks get-credentials --resource-group $rgName --name "$aksName"
|
|
|
|
# Initialize Dapr
|
|
dapr init --kubernetes --runtime-version $daprVersion
|
|
|
|
# Confirm Dapr is running. If you run helm install to soon the Dapr side car
|
|
# will not be injected.
|
|
# Once all the services are running they will all report True instead of False.
|
|
# Keep checking the status until you don't find False
|
|
linebreak
|
|
status=$(dapr status --kubernetes)
|
|
while ($(echo $status | grep -q 'dapr-system False')); do
|
|
printf " Dapr starting. Please wait... "
|
|
sleep 20 &
|
|
spinner
|
|
status=$(dapr status --kubernetes)
|
|
done
|
|
linebreak
|
|
printf " Dapr ready! \n"
|
|
|
|
# Copy the twitter component file from the demos/components folder to the
|
|
# templates folder. Copy this file removes the need for the user to set
|
|
# those values second time.
|
|
cp -f ../components/twitter.yaml ./demochart/templates/
|
|
|
|
# Install the demo into the cluster
|
|
helm upgrade --install demo3 ./demochart \
|
|
--set serviceBus.connectionString=$serviceBusEndpoint \
|
|
--set cognitiveService.token=$cognitiveServiceKey \
|
|
--set cognitiveService.endpoint=$cognitiveServiceEndpoint \
|
|
--set tableStorage.key=$storageAccountKey \
|
|
--set tableStorage.name=$storageAccountName
|
|
|
|
# Make sure services are ready
|
|
linebreak
|
|
until [[ $viewerIp && $zipkinIp ]]
|
|
do {
|
|
printf " Getting IP addresses. Please wait... "
|
|
sleep 20 &
|
|
spinner
|
|
viewerIp=$(getIp 'viewer')
|
|
zipkinIp=$(getIp 'publiczipkin')
|
|
}
|
|
done
|
|
|
|
printf "\nYour app is accessible from http://%s\n" $viewerIp
|
|
printf "Zipkin is accessible from http://%s\n\n" $zipkinIp
|