aboutsummaryrefslogtreecommitdiffstats
path: root/deployment/aks/create_nfs.sh
diff options
context:
space:
mode:
Diffstat (limited to 'deployment/aks/create_nfs.sh')
-rwxr-xr-xdeployment/aks/create_nfs.sh237
1 files changed, 237 insertions, 0 deletions
diff --git a/deployment/aks/create_nfs.sh b/deployment/aks/create_nfs.sh
new file mode 100755
index 000000000..8262d1e8c
--- /dev/null
+++ b/deployment/aks/create_nfs.sh
@@ -0,0 +1,237 @@
+#!/bin/bash
+# Copyright 2019 AT&T Intellectual Property. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+NO_PROMPT=0
+RANDOM_PREFIX="ONAP"
+RANDOM_STRING="$RANDOM_PREFIX"-`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 4`
+
+
+NFS_NAME=
+NFS_RG=
+NFS_VM_SIZE=
+NFS_LOCATION=
+SUBNET_CIDR=
+ADMIN_USER=
+BUILD_DIR=
+NFS_VNET_NAME=
+PUBLIC_KEY=
+USER_PUBLIC_IP_PREFIX=
+NFS_SUBNET_NAME=
+AKS_POD_CIDR=
+NFS_DISK_SIZE=
+
+function check_required_parameter() {
+ # arg1 = parameter
+ # arg2 = parameter name
+ if [ -z "$1" ]; then
+ echo "$2 was not was provided. This parameter is required."
+ exit 1
+ fi
+}
+
+function check_optional_paramater() {
+ # arg1 = parameter
+ # arg2 = parameter name
+ if [ -z "$1" ]; then
+ echo "$2"
+ else
+ echo "$1"
+ fi
+}
+
+
+while test $# -gt 0; do
+ case "$1" in
+ -h|--help)
+ echo "./create_nfs.sh [options]"
+ echo " "
+ echo " "
+ echo "required:"
+ echo "--public-key public key to add for admin user [required]"
+ echo "--user-public-ip public ip that will be granted access to VM [required]"
+ echo "-l, --location location to deploy VM [required]"
+ echo "-u, --admin-user admin user to create on VM [required]"
+ 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."
+ echo " "
+ echo "additional options:"
+ echo "-f, --no-prompt executes with no prompt for confirmation"
+ echo "-h, --help provide brief overview of script"
+ echo "-n, --name VM name [optional]"
+ echo "-g, --resource-group resource group that will be created [optional]"
+ echo "-s, --size Azure flavor size for VM [optional]"
+ echo "-c, --cidr cidr for VNET to create for VM [optional]."
+ echo "-d, --directory directory to store cloud config data [optional]"
+ echo "--vnet-name name of Vnet to create for VM [optional]"
+ echo "--nfs-subnet-name subnet name created on VNET [optional]"
+ echo "--nfs-disk-size size of external disk to be mounted on NFS VM [optional]"
+ echo ""
+ exit 0
+ ;;
+ -f|--no-prompt)
+ shift
+ NO_PROMPT=1
+ ;;
+ -n|--name)
+ shift
+ NFS_NAME=$1
+ shift
+ ;;
+ -g|--resource-group)
+ shift
+ NFS_RG=$1
+ shift
+ ;;
+ -s|--size)
+ shift
+ NFS_VM_SIZE=$1
+ shift
+ ;;
+ -l|--location)
+ shift
+ NFS_LOCATION=$1
+ shift
+ ;;
+ -c|--cidr)
+ shift
+ SUBNET_CIDR=$1
+ shift
+ ;;
+ -u|--admin-user)
+ shift
+ ADMIN_USER=$1
+ shift
+ ;;
+ -d|--directory)
+ shift
+ BUILD_DIR=$1
+ shift
+ ;;
+ --vnet-name)
+ shift
+ NFS_VNET_NAME=$1
+ shift
+ ;;
+ --public-key)
+ shift
+ PUBLIC_KEY=$1
+ shift
+ ;;
+ --user-public-ip)
+ shift
+ USER_PUBLIC_IP_PREFIX=$1
+ shift
+ ;;
+ --aks-node-cidr)
+ shift
+ AKS_POD_CIDR=$1
+ shift
+ ;;
+ --nfs-subnet-name)
+ shift
+ NFS_SUBNET_NAME=$1
+ shift
+ ;;
+ --nfs-disk-size)
+ shift
+ NFS_DISK_SIZE=$1
+ shift
+ ;;
+ *)
+ echo "Unknown Argument $1. Try running with --help."
+ exit 0
+ ;;
+ esac
+done
+
+check_required_parameter "$ADMIN_USER" "--admin-user"
+check_required_parameter "$PUBLIC_KEY" "--public-key"
+check_required_parameter "$NFS_LOCATION" "--location"
+check_required_parameter "$USER_PUBLIC_IP_PREFIX" "--user-public-ip"
+check_required_parameter "$AKS_POD_CIDR" "--aks-node-cidr"
+
+NFS_RG=$(check_optional_paramater "$NFS_RG" $RANDOM_STRING"-NFS-RG")
+NFS_NAME=$(check_optional_paramater "$NFS_NAME" $RANDOM_STRING"-NFS")
+NFS_VM_SIZE=$(check_optional_paramater "$NFS_VM_SIZE" "Standard_DS4_v2")
+SUBNET_CIDR=$(check_optional_paramater "$SUBNET_CIDR" "174.0.0.0/24")
+BUILD_DIR=$(check_optional_paramater "$BUILD_DIR" /tmp/nfs-$RANDOM_STRING)
+NFS_VNET_NAME=$(check_optional_paramater "$NFS_VNET_NAME" $RANDOM_STRING"-NFS-VNET")
+NFS_SUBNET_NAME=$(check_optional_paramater "$NFS_SUBNET_NAME" $RANDOM_STRING"-NFS-VNET-SUBNET")
+NFS_DISK_SIZE=$(check_optional_paramater "$NFS_DISK_SIZE" "256")
+
+if [ $NO_PROMPT = 0 ]; then
+ read -p "Would you like to proceed? [y/n]" -n 1 -r
+ echo " "
+ if [[ ! $REPLY =~ ^[Yy]$ ]]
+ then
+ exit 0
+ fi
+fi
+
+set -x
+set -e
+
+NFS_IMAGE="UbuntuLTS"
+NFS_SECURITY_GROUP=$NFS_NAME"-SG"
+DATA_FILE=$BUILD_DIR/cloud-cfg.yaml
+
+if [ ! -d $BUILD_DIR ]; then
+ echo "running script standalone..."
+ mkdir -p "$BUILD_DIR"
+fi
+
+$DIR/create_resource_group.sh "$NFS_RG" "$NFS_LOCATION"
+
+cat > $DATA_FILE <<EOF
+#cloud-config
+package_upgrade: true
+packages:
+ - nfs-kernel-server
+ - portmap
+runcmd:
+ - echo "/dockerdata-nfs $AKS_POD_CIDR(rw,async,no_root_squash,no_subtree_check)" >> /etc/exports
+ - mkdir /dockerdata-nfs
+ - chmod 777 -R /dockerdata-nfs
+ - chown nobody:nogroup /dockerdata-nfs
+ - exportfs -ra
+ - systemctl restart nfs-kernel-server
+EOF
+
+az network nsg create --resource-group "$NFS_RG" \
+ --name "$NFS_SECURITY_GROUP"
+
+$DIR/create_sg_rule.sh "$NFS_RG" "$NFS_SECURITY_GROUP" '*' "22" "$USER_PUBLIC_IP_PREFIX" '*' '*' "SSH" "100"
+
+az vm create --name "$NFS_NAME" \
+ --resource-group "$NFS_RG" \
+ --size "$NFS_VM_SIZE" \
+ --os-disk-size-gb "$NFS_DISK_SIZE" \
+ --admin-username "$ADMIN_USER" \
+ --ssh-key-value @"$PUBLIC_KEY" \
+ --image "UbuntuLTS" \
+ --location "$NFS_LOCATION" \
+ --subnet-address-prefix "$SUBNET_CIDR" \
+ --subnet "$NFS_SUBNET_NAME" \
+ --vnet-address-prefix "$SUBNET_CIDR" \
+ --vnet-name "$NFS_VNET_NAME" \
+ --custom-data "$DATA_FILE" \
+ --nsg "$NFS_SECURITY_GROUP"
+echo ""
+
+az network vnet subnet update --resource-group "$NFS_RG" \
+ --name "$NFS_SUBNET_NAME" \
+ --vnet-name "$NFS_VNET_NAME" \
+ --network-security-group "$NFS_SECURITY_GROUP"
+