blob: 8262d1e8cd31b2cdfe19c6b451e7fe2a066c90d2 [file] [log] [blame]
stark, steven6754bc12019-09-19 15:43:00 -07001#!/bin/bash
2# Copyright 2019 AT&T Intellectual Property. All rights reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
17NO_PROMPT=0
18RANDOM_PREFIX="ONAP"
19RANDOM_STRING="$RANDOM_PREFIX"-`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 4`
20
21
22NFS_NAME=
23NFS_RG=
24NFS_VM_SIZE=
25NFS_LOCATION=
26SUBNET_CIDR=
27ADMIN_USER=
28BUILD_DIR=
29NFS_VNET_NAME=
30PUBLIC_KEY=
31USER_PUBLIC_IP_PREFIX=
32NFS_SUBNET_NAME=
33AKS_POD_CIDR=
34NFS_DISK_SIZE=
35
36function check_required_parameter() {
37 # arg1 = parameter
38 # arg2 = parameter name
39 if [ -z "$1" ]; then
40 echo "$2 was not was provided. This parameter is required."
41 exit 1
42 fi
43}
44
45function check_optional_paramater() {
46 # arg1 = parameter
47 # arg2 = parameter name
48 if [ -z "$1" ]; then
49 echo "$2"
50 else
51 echo "$1"
52 fi
53}
54
55
56while test $# -gt 0; do
57 case "$1" in
58 -h|--help)
59 echo "./create_nfs.sh [options]"
60 echo " "
61 echo " "
62 echo "required:"
63 echo "--public-key public key to add for admin user [required]"
64 echo "--user-public-ip public ip that will be granted access to VM [required]"
65 echo "-l, --location location to deploy VM [required]"
66 echo "-u, --admin-user admin user to create on VM [required]"
67 echo "--aks-node-cidr CIDR for Kubernetes nodes [required]. This is used during the NFS deploy to grant access to the NFS server from Kubernetes."
68 echo " "
69 echo "additional options:"
70 echo "-f, --no-prompt executes with no prompt for confirmation"
71 echo "-h, --help provide brief overview of script"
72 echo "-n, --name VM name [optional]"
73 echo "-g, --resource-group resource group that will be created [optional]"
74 echo "-s, --size Azure flavor size for VM [optional]"
75 echo "-c, --cidr cidr for VNET to create for VM [optional]."
76 echo "-d, --directory directory to store cloud config data [optional]"
77 echo "--vnet-name name of Vnet to create for VM [optional]"
78 echo "--nfs-subnet-name subnet name created on VNET [optional]"
79 echo "--nfs-disk-size size of external disk to be mounted on NFS VM [optional]"
80 echo ""
81 exit 0
82 ;;
83 -f|--no-prompt)
84 shift
85 NO_PROMPT=1
86 ;;
87 -n|--name)
88 shift
89 NFS_NAME=$1
90 shift
91 ;;
92 -g|--resource-group)
93 shift
94 NFS_RG=$1
95 shift
96 ;;
97 -s|--size)
98 shift
99 NFS_VM_SIZE=$1
100 shift
101 ;;
102 -l|--location)
103 shift
104 NFS_LOCATION=$1
105 shift
106 ;;
107 -c|--cidr)
108 shift
109 SUBNET_CIDR=$1
110 shift
111 ;;
112 -u|--admin-user)
113 shift
114 ADMIN_USER=$1
115 shift
116 ;;
117 -d|--directory)
118 shift
119 BUILD_DIR=$1
120 shift
121 ;;
122 --vnet-name)
123 shift
124 NFS_VNET_NAME=$1
125 shift
126 ;;
127 --public-key)
128 shift
129 PUBLIC_KEY=$1
130 shift
131 ;;
132 --user-public-ip)
133 shift
134 USER_PUBLIC_IP_PREFIX=$1
135 shift
136 ;;
137 --aks-node-cidr)
138 shift
139 AKS_POD_CIDR=$1
140 shift
141 ;;
142 --nfs-subnet-name)
143 shift
144 NFS_SUBNET_NAME=$1
145 shift
146 ;;
147 --nfs-disk-size)
148 shift
149 NFS_DISK_SIZE=$1
150 shift
151 ;;
152 *)
153 echo "Unknown Argument $1. Try running with --help."
154 exit 0
155 ;;
156 esac
157done
158
159check_required_parameter "$ADMIN_USER" "--admin-user"
160check_required_parameter "$PUBLIC_KEY" "--public-key"
161check_required_parameter "$NFS_LOCATION" "--location"
162check_required_parameter "$USER_PUBLIC_IP_PREFIX" "--user-public-ip"
163check_required_parameter "$AKS_POD_CIDR" "--aks-node-cidr"
164
165NFS_RG=$(check_optional_paramater "$NFS_RG" $RANDOM_STRING"-NFS-RG")
166NFS_NAME=$(check_optional_paramater "$NFS_NAME" $RANDOM_STRING"-NFS")
167NFS_VM_SIZE=$(check_optional_paramater "$NFS_VM_SIZE" "Standard_DS4_v2")
168SUBNET_CIDR=$(check_optional_paramater "$SUBNET_CIDR" "174.0.0.0/24")
169BUILD_DIR=$(check_optional_paramater "$BUILD_DIR" /tmp/nfs-$RANDOM_STRING)
170NFS_VNET_NAME=$(check_optional_paramater "$NFS_VNET_NAME" $RANDOM_STRING"-NFS-VNET")
171NFS_SUBNET_NAME=$(check_optional_paramater "$NFS_SUBNET_NAME" $RANDOM_STRING"-NFS-VNET-SUBNET")
172NFS_DISK_SIZE=$(check_optional_paramater "$NFS_DISK_SIZE" "256")
173
174if [ $NO_PROMPT = 0 ]; then
175 read -p "Would you like to proceed? [y/n]" -n 1 -r
176 echo " "
177 if [[ ! $REPLY =~ ^[Yy]$ ]]
178 then
179 exit 0
180 fi
181fi
182
183set -x
184set -e
185
186NFS_IMAGE="UbuntuLTS"
187NFS_SECURITY_GROUP=$NFS_NAME"-SG"
188DATA_FILE=$BUILD_DIR/cloud-cfg.yaml
189
190if [ ! -d $BUILD_DIR ]; then
191 echo "running script standalone..."
192 mkdir -p "$BUILD_DIR"
193fi
194
195$DIR/create_resource_group.sh "$NFS_RG" "$NFS_LOCATION"
196
197cat > $DATA_FILE <<EOF
198#cloud-config
199package_upgrade: true
200packages:
201 - nfs-kernel-server
202 - portmap
203runcmd:
204 - echo "/dockerdata-nfs $AKS_POD_CIDR(rw,async,no_root_squash,no_subtree_check)" >> /etc/exports
205 - mkdir /dockerdata-nfs
206 - chmod 777 -R /dockerdata-nfs
207 - chown nobody:nogroup /dockerdata-nfs
208 - exportfs -ra
209 - systemctl restart nfs-kernel-server
210EOF
211
212az network nsg create --resource-group "$NFS_RG" \
213 --name "$NFS_SECURITY_GROUP"
214
215$DIR/create_sg_rule.sh "$NFS_RG" "$NFS_SECURITY_GROUP" '*' "22" "$USER_PUBLIC_IP_PREFIX" '*' '*' "SSH" "100"
216
217az vm create --name "$NFS_NAME" \
218 --resource-group "$NFS_RG" \
219 --size "$NFS_VM_SIZE" \
220 --os-disk-size-gb "$NFS_DISK_SIZE" \
221 --admin-username "$ADMIN_USER" \
222 --ssh-key-value @"$PUBLIC_KEY" \
223 --image "UbuntuLTS" \
224 --location "$NFS_LOCATION" \
225 --subnet-address-prefix "$SUBNET_CIDR" \
226 --subnet "$NFS_SUBNET_NAME" \
227 --vnet-address-prefix "$SUBNET_CIDR" \
228 --vnet-name "$NFS_VNET_NAME" \
229 --custom-data "$DATA_FILE" \
230 --nsg "$NFS_SECURITY_GROUP"
231echo ""
232
233az network vnet subnet update --resource-group "$NFS_RG" \
234 --name "$NFS_SUBNET_NAME" \
235 --vnet-name "$NFS_VNET_NAME" \
236 --network-security-group "$NFS_SECURITY_GROUP"
237