2 # Copyright 2019 AT&T Intellectual Property. All rights reserved.
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
8 # http://www.apache.org/licenses/LICENSE-2.0
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.
16 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
19 RANDOM_STRING="$RANDOM_PREFIX"-`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 4`
31 USER_PUBLIC_IP_PREFIX=
36 function check_required_parameter() {
38 # arg2 = parameter name
40 echo "$2 was not was provided. This parameter is required."
45 function check_optional_paramater() {
47 # arg2 = parameter name
56 while test $# -gt 0; do
59 echo "./create_nfs.sh [options]"
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."
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]"
134 USER_PUBLIC_IP_PREFIX=$1
153 echo "Unknown Argument $1. Try running with --help."
159 check_required_parameter "$ADMIN_USER" "--admin-user"
160 check_required_parameter "$PUBLIC_KEY" "--public-key"
161 check_required_parameter "$NFS_LOCATION" "--location"
162 check_required_parameter "$USER_PUBLIC_IP_PREFIX" "--user-public-ip"
163 check_required_parameter "$AKS_POD_CIDR" "--aks-node-cidr"
165 NFS_RG=$(check_optional_paramater "$NFS_RG" $RANDOM_STRING"-NFS-RG")
166 NFS_NAME=$(check_optional_paramater "$NFS_NAME" $RANDOM_STRING"-NFS")
167 NFS_VM_SIZE=$(check_optional_paramater "$NFS_VM_SIZE" "Standard_DS4_v2")
168 SUBNET_CIDR=$(check_optional_paramater "$SUBNET_CIDR" "174.0.0.0/24")
169 BUILD_DIR=$(check_optional_paramater "$BUILD_DIR" /tmp/nfs-$RANDOM_STRING)
170 NFS_VNET_NAME=$(check_optional_paramater "$NFS_VNET_NAME" $RANDOM_STRING"-NFS-VNET")
171 NFS_SUBNET_NAME=$(check_optional_paramater "$NFS_SUBNET_NAME" $RANDOM_STRING"-NFS-VNET-SUBNET")
172 NFS_DISK_SIZE=$(check_optional_paramater "$NFS_DISK_SIZE" "256")
174 if [ $NO_PROMPT = 0 ]; then
175 read -p "Would you like to proceed? [y/n]" -n 1 -r
177 if [[ ! $REPLY =~ ^[Yy]$ ]]
186 NFS_IMAGE="UbuntuLTS"
187 NFS_SECURITY_GROUP=$NFS_NAME"-SG"
188 DATA_FILE=$BUILD_DIR/cloud-cfg.yaml
190 if [ ! -d $BUILD_DIR ]; then
191 echo "running script standalone..."
192 mkdir -p "$BUILD_DIR"
195 $DIR/create_resource_group.sh "$NFS_RG" "$NFS_LOCATION"
197 cat > $DATA_FILE <<EOF
199 package_upgrade: true
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
209 - systemctl restart nfs-kernel-server
212 az network nsg create --resource-group "$NFS_RG" \
213 --name "$NFS_SECURITY_GROUP"
215 $DIR/create_sg_rule.sh "$NFS_RG" "$NFS_SECURITY_GROUP" '*' "22" "$USER_PUBLIC_IP_PREFIX" '*' '*' "SSH" "100"
217 az 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"
233 az 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"