Skip to content

Commit 20fbd5f

Browse files
init
0 parents  commit 20fbd5f

17 files changed

+1103
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
03-test-vm.bicepparam
2+
01-prereq.bicepparam
3+
02-cbs.bicepparam

00-setup-machine.sh

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
3+
echoerr() { printf "\033[0;31m%s\n\033[0m" "$*" >&2; }
4+
echosuccess() { printf "\033[0;32m%s\n\033[0m" "$*" >&2; }
5+
6+
# Install the az (with bicep)
7+
echo "Installing tools"
8+
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
9+
10+
11+
#4.5. Install the Azure CLI packages, jq, .NET, zip
12+
if [[ "$OSTYPE" =~ ^linux ]]; then
13+
sudo apt -qy install jq
14+
fi
15+
16+
if [[ "$OSTYPE" =~ ^darwin ]]; then
17+
brew help
18+
if [[ $? != 0 ]] ; then
19+
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
20+
else
21+
brew update
22+
fi
23+
brew install jq
24+
fi
25+
26+
# check installed tooling
27+
echo "Testing tools:";
28+
az version
29+
if [ $? == 0 ]; then
30+
echosuccess "[.] az cli tool...OK";
31+
else
32+
echoerr "Error with 'az cli' tool!";
33+
exit 1;
34+
fi
35+
36+
37+
az bicep version
38+
if [ $? == 0 ]; then
39+
echosuccess "[.] bicep support...OK";
40+
else
41+
echo "Installing bicep"
42+
az bicep install
43+
exit 1;
44+
fi
45+
46+
jq --version
47+
if [ $? == 0 ]; then
48+
echosuccess "[.] jq tool...OK";
49+
else
50+
echoerr "Error with 'jq' tool!";
51+
exit 1;
52+
fi
53+
54+
echo "Asking user to log in...";
55+
# ask user for login
56+
az login
57+
if [ $? == 0 ]; then
58+
echosuccess "
59+
Your machine should be ready! Now proceed with ./deploy.sh script
60+
61+
";
62+
else
63+
echoerr "Login into Azure failed!";
64+
exit 1;
65+
fi

01-deploy-prerequisities.sh

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
#!/bin/bash
2+
3+
SHOW_DEBUG_OUTPUT=false
4+
5+
escape_quotes(){
6+
echo $@ | sed s/'"'/'\\"'/g
7+
}
8+
9+
10+
echoerr() { printf "\033[0;31m%s\n\033[0m" "$*" >&2; }
11+
echosuccess() { printf "\033[0;32m%s\n\033[0m" "$*" >&2; }
12+
13+
14+
# Read the bicep parameters
15+
parametersfilename='01-prereq.bicepparam'
16+
17+
echo " "
18+
echo " "
19+
echo " CBS DEPLOYMENT - PREREQUISITES "
20+
echo " "
21+
echo " "
22+
echo " "
23+
24+
25+
echo "Deploying required infrastructure"
26+
27+
paramsJson=`bicep build-params $parametersfilename --stdout | jq -r ".parametersJson"`
28+
29+
30+
location=`echo $paramsJson | jq -r ".parameters.location.value"`
31+
32+
# Deploy our infrastructure
33+
output=$(az deployment sub create \
34+
--name "CBS-deploy-prereq-bicep-sh" \
35+
--location $location \
36+
--template-file "templates/prerequisites.bicep" \
37+
--parameters $parametersfilename
38+
)
39+
40+
41+
subscriptionId=`echo $output | jq -r '.properties.outputs.subscriptionId.value'`
42+
mainRgName=`echo $output | jq -r '.properties.outputs.mainRgName.value'`
43+
arrayVnetId=`echo $output | jq -r '.properties.outputs.arrayVnetId.value'`
44+
arrayVnetName=`echo $output | jq -r '.properties.outputs.arrayVnetName.value'`
45+
vnetMngmtUserManagedIdentityId=`echo $output | jq -r '.properties.outputs.vnetMngmtUserManagedIdentityId.value'`
46+
47+
echo " -------------------------------------------------------"
48+
echo "| Subscription Id | ${subscriptionId} "
49+
echo "| Main resource group | ${mainRgName}"
50+
echo " -------------------------------------------------------"
51+
echo ""
52+
echo ""
53+
echo " -------- Array virtual network (vNET) --------"
54+
echo "| vNET name | ${arrayVnetName}"
55+
echo "| vNET id | ${arrayVnetId}"
56+
echo " ----------------------------------------------"
57+
58+
59+
echo " -------- User managed identity --------"
60+
echo "| Resource Id | ${vnetMngmtUserManagedIdentityId}"
61+
echo " ----------------------------------------------"
62+
63+
64+
echo ""
65+
echo ""
66+
echo ""
67+
echosuccess "The deployment of prerequisities has been completed. Now you can proceed to deployment of CBS itself with *02-deploy-cbs.sh*."
68+
echo ""

01-prereq.bicepparam.example

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using 'templates/prerequisites.bicep'
2+
3+
param location = 'westeurope'
4+
param resourceGroupName = 'your-resource-group-name'

02-cbs.bicepparam.example

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using 'templates/cbs-managed-app.bicep'
2+
3+
param location = 'westeurope'
4+
param resourceName = 'my-resource-name'
5+
param resourceGroupName = 'your-resource-group-name'
6+
param alertRecipients = 'my-email-address@contoso.dev'
7+
param arrayName = 'my-array-name'
8+
param licenseKey = 'CBS-TRIAL-LICENSE'
9+
param cbsModelSku = 'V20MUR1'
10+
param orgDomain = 'myorgdomain.dev'
11+
param managedUserIdentityId = '/subscriptions/<subscriptionId>/resourceGroups/<rgName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uminame>'
12+
param vnetName = 'my-vnet-name'
13+
param availabilityZone = 1

02-deploy-cbs.sh

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#!/bin/bash
2+
SHOW_DEBUG_OUTPUT=false
3+
4+
escape_quotes(){
5+
echo $@ | sed s/'"'/'\\"'/g
6+
}
7+
8+
9+
curlwithcode() {
10+
code=0
11+
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
12+
# and sending the content to a file with -o >(cat >/tmp/curl_body)
13+
statuscode=$(curl -w "%{http_code}" \
14+
-o >(cat >/tmp/curl_body) \
15+
"$@"
16+
) || code="$?"
17+
18+
body="$(cat /tmp/curl_body)"
19+
echo "{\"statusCode\": $statuscode,"
20+
echo "\"exitCode\": $code,"
21+
echo "\"body\": \"$(escape_quotes $body)\"}"
22+
}
23+
24+
echoerr() { printf "\033[0;31m%s\n\033[0m" "$*" >&2; }
25+
echosuccess() { printf "\033[0;32m%s\n\033[0m" "$*" >&2; }
26+
27+
28+
# Read the bicep parameters
29+
parametersfilename='./02-cbs.bicepparam'
30+
31+
echo " "
32+
echo " "
33+
echo " CBS DEPLOYMENT "
34+
echo " "
35+
echo " "
36+
echo " "
37+
38+
39+
40+
echo "Deploying CBS managed app"
41+
42+
paramsJson=`bicep build-params $parametersfilename --stdout | jq -r ".parametersJson"`
43+
44+
45+
location=`echo $paramsJson | jq -r ".parameters.location.value"`
46+
resourceGroupName=`echo $paramsJson | jq -r ".parameters.resourceGroupName.value"`
47+
48+
# Deploy our infrastructure
49+
output=$(az deployment group create \
50+
--name "CBS-deploy-sh" \
51+
--resource-group $resourceGroupName \
52+
--template-file "templates/cbs-managed-app.bicep" \
53+
--parameters $parametersfilename
54+
)
55+
56+
cbsmanagementLbIp=`echo $output | jq -r '.properties.outputs.cbsmanagementLbIp.value'`
57+
cbsmanagementEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsmanagementEndpointCT0.value'`
58+
cbsmanagementEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsmanagementEndpointCT1.value'`
59+
60+
cbsreplicationEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsreplicationEndpointCT0.value'`
61+
cbsreplicationEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsreplicationEndpointCT1.value'`
62+
63+
cbsiSCSIEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsiSCSIEndpointCT0.value'`
64+
cbsiSCSIEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsiSCSIEndpointCT1.value'`
65+
66+
67+
echo ""
68+
echo ""
69+
echo ""
70+
echosuccess "The deployment of CBS managed application has been completed."
71+
echo ""
72+
73+
echo " ******** Array parameters ********"
74+
75+
echo ""
76+
echo ""
77+
echo " -------- Endpoints for management -------------"
78+
echo " Load balancer IP | ${cbsmanagementLbIp}"
79+
echo " CT0 IP address | ${cbsmanagementEndpointCT0}"
80+
echo " CT1 IP address | ${cbsmanagementEndpointCT1}"
81+
echo " -----------------------------------------------"
82+
83+
echo ""
84+
echo ""
85+
echo " --------- Endpoints for replication -----------"
86+
echo " CT0 IP address | ${cbsreplicationEndpointCT0}"
87+
echo " CT1 IP address | ${cbsreplicationEndpointCT1}"
88+
echo " -----------------------------------------------"
89+
90+
echo ""
91+
echo ""
92+
echo " ------------ Endpoints for iSCSI --------------"
93+
echo " CT0 IP address | ${cbsiSCSIEndpointCT0}"
94+
echo " CT1 IP address | ${cbsiSCSIEndpointCT1}"
95+
echo " -----------------------------------------------"

03-deploy-test-vm.sh

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#!/bin/bash
2+
SHOW_DEBUG_OUTPUT=false
3+
4+
escape_quotes(){
5+
echo $@ | sed s/'"'/'\\"'/g
6+
}
7+
8+
9+
curlwithcode() {
10+
code=0
11+
# Run curl in a separate command, capturing output of -w "%{http_code}" into statuscode
12+
# and sending the content to a file with -o >(cat >/tmp/curl_body)
13+
statuscode=$(curl -w "%{http_code}" \
14+
-o >(cat >/tmp/curl_body) \
15+
"$@"
16+
) || code="$?"
17+
18+
body="$(cat /tmp/curl_body)"
19+
echo "{\"statusCode\": $statuscode,"
20+
echo "\"exitCode\": $code,"
21+
echo "\"body\": \"$(escape_quotes $body)\"}"
22+
}
23+
24+
echoerr() { printf "\033[0;31m%s\n\033[0m" "$*" >&2; }
25+
echosuccess() { printf "\033[0;32m%s\n\033[0m" "$*" >&2; }
26+
27+
28+
# Read the bicep parameters
29+
parametersfilename='./03-test-vm.bicepparam'
30+
31+
echo " "
32+
echo " "
33+
echo " TEST VM DEPLOYMENT "
34+
echo " "
35+
echo " "
36+
echo " "
37+
38+
39+
40+
echo "Deploying the VM for testing"
41+
myIpAddress=`curl ifconfig.me 2> /dev/null`
42+
43+
paramsJson=`bicep build-params $parametersfilename --stdout | jq -r ".parametersJson"`
44+
45+
tmpJsonFilename='tmp.json'
46+
resourceGroupName=`echo $paramsJson | jq -r ".parameters.resourceGroupName.value"`
47+
(echo $paramsJson | sed "s/\$myIpAddress/$myIpAddress/") > $tmpJsonFilename
48+
49+
# Deploy our infrastructure
50+
output=$(az deployment group create \
51+
--name "test-vm-deploy-sh" \
52+
--resource-group $resourceGroupName \
53+
--template-file "templates/test-vm.bicep" \
54+
--parameters @$tmpJsonFilename
55+
56+
)
57+
58+
rm $tmpJsonFilename
59+
60+
cbsmanagementLbIp=`echo $output | jq -r '.properties.outputs.cbsmanagementLbIp.value'`
61+
cbsmanagementEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsmanagementEndpointCT0.value'`
62+
cbsmanagementEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsmanagementEndpointCT1.value'`
63+
64+
cbsreplicationEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsreplicationEndpointCT0.value'`
65+
cbsreplicationEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsreplicationEndpointCT1.value'`
66+
67+
cbsiSCSIEndpointCT0=`echo $output | jq -r '.properties.outputs.cbsiSCSIEndpointCT0.value'`
68+
cbsiSCSIEndpointCT1=`echo $output | jq -r '.properties.outputs.cbsiSCSIEndpointCT1.value'`
69+
70+
71+
echo ""
72+
echo ""
73+
echo ""
74+
echosuccess "The deployment of CBS managed application has been completed."
75+
echo ""
76+
77+
echo " ******** Array parameters ********"
78+
79+
echo ""
80+
echo ""
81+
echo " -------- Endpoints for management -------------"
82+
echo "| Load balancer IP | ${cbsmanagementLbIp}"
83+
echo "| CT0 IP address | ${cbsmanagementEndpointCT0}"
84+
echo "| CT1 IP address | ${cbsmanagementEndpointCT1}"
85+
echo " -----------------------------------------------"
86+
87+
echo ""
88+
echo ""
89+
echo " --------- Endpoints for replication -----------"
90+
echo "| CT0 IP address | ${cbsreplicationEndpointCT0}"
91+
echo "| CT1 IP address | ${cbsreplicationEndpointCT1}"
92+
echo " -----------------------------------------------"
93+
94+
echo ""
95+
echo ""
96+
echo " ------------ Endpoints for iSCSI --------------"
97+
echo "| CT0 IP address | ${cbsiSCSIEndpointCT0}"
98+
echo "| CT1 IP address | ${cbsiSCSIEndpointCT1}"
99+
echo " -----------------------------------------------"

README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Bicep framework for deploying CBS on Azure - EXPERIMENTAL
2+
3+
## Prerequisites
4+
- bash
5+
- Windows/Linux/MacOS
6+
- `az-cli`, `bicep-cli`, `jq` (all should get installed with setup-machine script)
7+
8+
## Installation
9+
10+
### Setup a machine (tooling)
11+
12+
Just run the `00-setup-machine.sh` script.
13+
14+
15+
## Usage
16+
17+
### 01 - CBS Prerequisites
18+
19+
The script `01-deploy-prerequisities.sh` deploys all required resources for CBS:
20+
- vNET including subnets
21+
- IP address + NAT gateway for `system` subnet
22+
- user managed identity
23+
- a custom role definition
24+
- a role assignment
25+
26+
To use prepare inputs in a parameter file `01-prereq.bicepparam` and execute `01-deploy-prerequisities.sh` script.
27+
28+
29+
### 02 - CBS Managed App
30+
31+
The script `02-deploy-cbs.sh` deploys CBS managed application itself.
32+
33+
To use prepare inputs in a parameter file `02-cbs.bicepparam` and execute `02-deploy-cbs.sh` script.
34+
Please keep in mind, you need to pass into the parameter file `02-cbs.bicepparam` some outputs from `01-deploy-prerequisities.sh` script.
35+
36+
### 03 - Test VM (WiP)
37+
TODO: description

0 commit comments

Comments
 (0)