blob: 8262d1e8cd31b2cdfe19c6b451e7fe2a066c90d2 [file] [log] [blame]
#!/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"