diff options
Diffstat (limited to 'deployment/aks/create_nfs.sh')
-rwxr-xr-x | deployment/aks/create_nfs.sh | 237 |
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" + |