aboutsummaryrefslogtreecommitdiffstats
path: root/deployment/aks/cloud.sh
diff options
context:
space:
mode:
Diffstat (limited to 'deployment/aks/cloud.sh')
-rwxr-xr-xdeployment/aks/cloud.sh424
1 files changed, 424 insertions, 0 deletions
diff --git a/deployment/aks/cloud.sh b/deployment/aks/cloud.sh
new file mode 100755
index 000000000..ac471a91b
--- /dev/null
+++ b/deployment/aks/cloud.sh
@@ -0,0 +1,424 @@
+#!/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
+NO_INSTALL=0
+OVERRIDE=0
+
+OPENSTACK_CLI_POD="os-cli-0"
+
+if [ ! -f $DIR/cloud.conf ]; then
+ echo "cloud.conf not found, exiting..."
+ exit 1
+fi
+
+. $DIR/cloud.conf
+
+while test $# -gt 0; do
+ case "$1" in
+ -h|--help)
+ echo "./cloud.sh [options]"
+ echo " "
+ echo " "
+ echo "options:"
+ echo "-f, --no-prompt executes with no prompt for confirmation"
+ echo "-n, --no-install don't install ONAP"
+ echo "-o, --override create integration override for robot configuration"
+ echo "-h, --help provide brief overview of script"
+ echo " "
+ echo "This script deploys a cloud environment in Azure."
+ echo "It: "
+ echo "- Uses Azure Kubernetes Service (AKS) to bootstrap a kubernetes cluster."
+ echo "- Creates a VM with an external disk to be used as NFS storage."
+ echo "- Creates a VM and installs DevStack, to be used with ONAP."
+ echo "- Launches ONAP onto the AKS Cluster via OOM."
+ echo "- Configures Networking, SSH Access, and Security Group Rules"
+ echo ""
+ exit 0
+ ;;
+ -f|--no-prompt)
+ shift
+ NO_PROMPT=1
+ ;;
+ -n|--no-install)
+ shift
+ NO_INSTALL=1
+ ;;
+ -o|--override)
+ shift
+ OVERRIDE=1
+ ;;
+ *)
+ echo "Unknown Argument. Try running with --help ."
+ exit 0
+ ;;
+ esac
+done
+
+cat <<EOF
+
+Here are the parameters to be used in this build:
+
+# GLOBAL PARAMS
+LOCATION = "$LOCATION"
+USER_PUBLIC_IP_PREFIX = "$USER_PUBLIC_IP_PREFIX"
+BUILD_DIR = "$BUILD_DIR"
+
+# AKS PARAMS
+AKS_RESOURCE_GROUP_NAME = "$AKS_RESOURCE_GROUP_NAME"
+AKS_NAME = "$AKS_NAME"
+AKS_K8_VERSION = "$AKS_K8_VERSION"
+AKS_NODE_COUNT = "$AKS_NODE_COUNT"
+AKS_NODE_SIZE = "$AKS_NODE_SIZE"
+AKS_DNS_PREFIX = "$AKS_DNS_PREFIX"
+AKS_POD_CIDR = "$AKS_POD_CIDR"
+AKS_NODE_CIDR = "$AKS_NODE_CIDR"
+AKS_SERVICE_CIDR = "$AKS_SERVICE_CIDR"
+AKS_DNS_IP = "$AKS_DNS_IP"
+AKS_VNET_NAME = "$AKS_VNET_NAME"
+AKS_ADMIN_USER= = "$AKS_ADMIN_USER"
+
+# NFS PARAMS
+NFS_NAME = "$NFS_NAME"
+NFS_RG = "$NFS_RG"
+NFS_VM_SIZE = "$NFS_VM_SIZE"
+NFS_LOCATION = "$NFS_LOCATION"
+NFS_CIDR = "$NFS_CIDR"
+NFS_ADMIN_USER = "$NFS_ADMIN_USER"
+NFS_VNET_NAME = "$NFS_VNET_NAME"
+NFS_SUBNET_NAME = "$NFS_SUBNET_NAME"
+NFS_DISK_SIZE = "$NFS_DISK_SIZE"
+
+# DEVSTACK PARAMS
+DEVSTACK_NAME = "$DEVSTACK_NAME"
+DEVSTACK_RG = "$DEVSTACK_RG"
+DEVSTACK_VM_SIZE = "$DEVSTACK_VM_SIZE"
+DEVSTACK_LOCATION = "$DEVSTACK_LOCATION"
+DEVSTACK_CIDR = "$DEVSTACK_CIDR"
+DEVSTACK_PRIVATE_IP = "$DEVSTACK_PRIVATE_IP"
+DEVSTACK_ADMIN_USER = "$DEVSTACK_ADMIN_USER"
+DEVSTACK_VNET_NAME = "$DEVSTACK_VNET_NAME"
+DEVSTACK_SUBNET_NAME = "$DEVSTACK_SUBNET_NAME"
+DEVSTACK_DISK_SIZE = "$DEVSTACK_DISK_SIZE"
+OPENSTACK_USER = "$OPENSTACK_USER"
+OPENSTACK_PASS = "$OPENSTACK_PASS"
+OPENSTACK_TENANT = "$OPENSTACK_TENANT"
+IMAGE_LIST = "$IMAGE_LIST"
+
+# ONAP PARAMS
+CLLI = "$CLLI"
+CLOUD_OWNER = "$CLOUD_OWNER"
+CLOUD_REGION = "$CLOUD_REGION"
+CUSTOMER = "$CUSTOMER"
+SUBSCRIBER = "$SUBSCRIBER"
+SERVICE_TYPE = "$SERVICE_TYPE"
+AZ = "$AZ"
+OE = "$OE"
+LOB = "$LOB"
+PLATFORM = "$PLATFORM"
+OS_ID = "$OS_ID"
+OS_TENANT_ROLE = "$OS_TENANT_ROLE"
+OS_KEYSTONE = "$OS_KEYSTONE"
+OPENSTACK_REGION = "$OPENSTACK_REGION"
+PROJECT = "$PROJECT"
+OOM_BRANCH = "$OOM_BRANCH"
+CHART_VERSION = "$CHART_VERSION"
+OOM_OVERRIDES = "$OOM_OVERRIDES"
+DOCKER_REPOSITORY = "$DOCKER_REPOSITORY"
+
+EOF
+
+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
+
+echo "Starting instantiation. This will take a little while..."
+sleep 3
+
+set -x
+set -e
+
+mkdir -p $BUILD_DIR
+
+echo "#!/bin/bash" > $BUILD_DIR/clean.sh
+echo "" >> $BUILD_DIR/clean.sh
+chmod 755 $BUILD_DIR/clean.sh
+
+ssh-keygen -t rsa -N "" -f $BUILD_DIR/id_rsa
+
+PUBLIC_KEY=$BUILD_DIR/id_rsa.pub
+PRIVATE_KEY=$BUILD_DIR/id_rsa
+
+
+echo "az group delete --resource-group $DEVSTACK_RG --yes" >> $BUILD_DIR/clean.sh
+echo "" >> $BUILD_DIR/clean.sh
+
+echo "Creating DEVSTACK Server $DEVSTACK_NAME in $LOCATION"
+$DIR/create_devstack.sh --name "$DEVSTACK_NAME" \
+ --resource-group "$DEVSTACK_RG" \
+ --size "$DEVSTACK_VM_SIZE" \
+ --location "$DEVSTACK_LOCATION" \
+ --cidr "$DEVSTACK_CIDR" \
+ --admin-user "$DEVSTACK_ADMIN_USER" \
+ --directory "$BUILD_DIR" \
+ --vnet-name "$DEVSTACK_VNET_NAME" \
+ --public-key "$PUBLIC_KEY" \
+ --user-public-ip "$USER_PUBLIC_IP_PREFIX" \
+ --devstack-private-ip "$DEVSTACK_PRIVATE_IP" \
+ --devstack-subnet-name "$DEVSTACK_SUBNET_NAME" \
+ --devstack-disk-size "$DEVSTACK_DISK_SIZE" \
+ --openstack-username "$OPENSTACK_USER" \
+ --openstack-password "$OPENSTACK_PASS" \
+ --openstack-tenant "$OPENSTACK_TENANT" \
+ --image-list "$IMAGE_LIST" \
+ --no-prompt
+
+
+echo "az group delete --resource-group $NFS_RG --yes" >> $BUILD_DIR/clean.sh
+echo "" >> $BUILD_DIR/clean.sh
+
+echo "Creating NFS Server $NFS_NAME in $LOCATION"
+$DIR/create_nfs.sh --name "$NFS_NAME" \
+ --resource-group "$NFS_RG" \
+ --size "$NFS_VM_SIZE" \
+ --location "$NFS_LOCATION" \
+ --cidr "$NFS_CIDR" \
+ --admin-user "$NFS_ADMIN_USER" \
+ --directory "$BUILD_DIR" \
+ --vnet-name "$NFS_VNET_NAME" \
+ --public-key "$PUBLIC_KEY" \
+ --user-public-ip "$USER_PUBLIC_IP_PREFIX" \
+ --nfs-subnet-name "$NFS_SUBNET_NAME" \
+ --aks-node-cidr "$AKS_NODE_CIDR" \
+ --nfs-disk-size "$NFS_DISK_SIZE" \
+ --no-prompt
+
+
+echo "az group delete --resource-group $AKS_RESOURCE_GROUP_NAME --yes" >> $BUILD_DIR/clean.sh
+echo "" >> $BUILD_DIR/clean.sh
+
+echo "Creating AKS $AKS_NAME in $LOCATION"
+$DIR/create_aks.sh --name "$AKS_NAME" \
+ --resource-group "$AKS_RESOURCE_GROUP_NAME" \
+ --kube-version "$AKS_K8_VERSION" \
+ --location "$LOCATION" \
+ --node-count "$AKS_NODE_COUNT" \
+ --size "$AKS_NODE_SIZE" \
+ --service-cidr "$AKS_SERVICE_CIDR" \
+ --pod-cidr "$AKS_POD_CIDR" \
+ --dns-ip "$AKS_DNS_IP" \
+ --node-cidr "$AKS_NODE_CIDR" \
+ --vnet-name "$AKS_VNET_NAME" \
+ --user-public-ip "$USER_PUBLIC_IP_PREFIX" \
+ --public-key "$PUBLIC_KEY" \
+ --admin-user "$AKS_ADMIN_USER" \
+ --no-prompt
+
+
+AKS_MANAGEMENT_RESOURCE_GROUP_NAME=`az group list --query "[?starts_with(name, 'MC_${AKS_RESOURCE_GROUP_NAME}')].name | [0]" --output tsv`
+AKS_VNET_ID=`az network vnet show --resource-group ${AKS_RESOURCE_GROUP_NAME} --name ${AKS_VNET_NAME} --query 'id' --output tsv`
+NFS_VNET_ID=`az network vnet show --name ${NFS_VNET_NAME} --resource-group ${NFS_RG} --query "id" --output tsv`
+DEVSTACK_VNET_ID=`az network vnet show --name ${DEVSTACK_VNET_NAME} --resource-group ${DEVSTACK_RG} --query "id" --output tsv`
+AKS_ROUTE_TABLE_NAME=`az resource list --resource-group ${AKS_MANAGEMENT_RESOURCE_GROUP_NAME} --resource-type "Microsoft.Network/routeTables" --query "[0] | name" --output tsv`
+DEVSTACK_PRIVATE_IP=`az vm show --name ${DEVSTACK_NAME} --resource-group ${DEVSTACK_RG} -d --query "privateIps" --output tsv`
+NFS_PRIVATE_IP=`az vm show --name ${NFS_NAME} --resource-group ${NFS_RG} -d --query "privateIps" --output tsv`
+NFS_PUBLIC_IP=`az vm show --name ${NFS_NAME} --resource-group ${NFS_RG} -d --query "publicIps" --output tsv`
+DEVSTACK_PUBLIC_IP=`az vm show --name ${DEVSTACK_NAME} --resource-group ${DEVSTACK_RG} -d --query "publicIps" --output tsv`
+
+# adding public ip to aks
+NIC_NAME0=`az resource list --resource-group ${AKS_MANAGEMENT_RESOURCE_GROUP_NAME} --resource-type "Microsoft.Network/networkInterfaces" --query "[0] | name" --output tsv`
+AKS_NSG_NAME=`az resource list --resource-group ${AKS_MANAGEMENT_RESOURCE_GROUP_NAME} --resource-type "Microsoft.Network/networkSecurityGroups" --query "[0] | name" --output tsv`
+$DIR/create_public_ip.sh "AKSPUBLICIP1" "$AKS_MANAGEMENT_RESOURCE_GROUP_NAME" "$NIC_NAME0"
+$DIR/create_sg_rule.sh "$AKS_MANAGEMENT_RESOURCE_GROUP_NAME" "$AKS_NSG_NAME" '*' "30000-32000" "$USER_PUBLIC_IP_PREFIX" '*' '*' "ONAP" "120"
+
+AKS_PUBLIC_IP_ADDRESS=`az network public-ip show --resource-group ${AKS_MANAGEMENT_RESOURCE_GROUP_NAME} -n AKSPUBLICIP1 --query "ipAddress" --output tsv`
+
+### Peering networks ###
+# peering requires source = VNet NAME, destination = VNet ID
+
+echo "creating peering from AKS Vnet to NFS Vnet..."
+$DIR/create_peering.sh "$AKS_VNET_NAME" \
+ "$AKS_RESOURCE_GROUP_NAME" \
+ "$NFS_VNET_ID" \
+ "kube-to-nfs"
+
+echo "creating peering from AKS Vnet to Devstack Vnet..."
+$DIR/create_peering.sh "$AKS_VNET_NAME" \
+ "$AKS_RESOURCE_GROUP_NAME" \
+ "$DEVSTACK_VNET_ID" \
+ "kube-to-devstack"
+
+echo "creating peering from NFS Vnet to AKS Vnet..."
+$DIR/create_peering.sh "$NFS_VNET_NAME" \
+ "$NFS_RG" \
+ "$AKS_VNET_ID" \
+ "nfs-to-kube"
+
+echo "creating peering from NFS Vnet to AKS Vnet..."
+$DIR/create_peering.sh "$DEVSTACK_VNET_NAME" \
+ "$DEVSTACK_RG" \
+ "$AKS_VNET_ID" \
+ "devstack-to-kube"
+
+
+### Adding next hop to kubernetes for devstack ###
+echo "creating route from AKS Vnet to Devstack Vnet..."
+$DIR/create_route.sh "$DEVSTACK_CIDR" \
+ "guestvms" \
+ "$AKS_MANAGEMENT_RESOURCE_GROUP_NAME" \
+ "$AKS_ROUTE_TABLE_NAME" \
+ "$DEVSTACK_PRIVATE_IP"
+
+
+
+# TODO
+# Lets find a better place for this
+az aks get-credentials --resource-group "$AKS_RESOURCE_GROUP_NAME" \
+ --name "$AKS_NAME" \
+ --file "$BUILD_DIR"/"kubeconfig"
+
+$DIR/configure_nfs_pod.sh "$PRIVATE_KEY" \
+ "$BUILD_DIR"/"kubeconfig" \
+ "$NFS_PRIVATE_IP" \
+ "$AKS_ADMIN_USER"
+
+# TODO
+# add this to post-install or post-configure phase
+# to support adding multiple devstacks to same ONAP
+cat > "$BUILD_DIR/openstack_rc" <<EOF
+export OS_USERNAME="$OPENSTACK_USER"
+export OS_PROJECT_NAME="$OPENSTACK_TENANT"
+export OS_AUTH_URL="http://$DEVSTACK_PRIVATE_IP/identity"
+export OS_PASSWORD="$OPENSTACK_PASS"
+export OS_USER_DOMAIN_NAME=default
+export OS_PROJECT_DOMAIN_ID=default
+EOF
+
+$DIR/util/create_openstack_cli.sh "$BUILD_DIR/kubeconfig" \
+ "$BUILD_DIR/openstack_rc" \
+ "$OPENSTACK_CLI_POD"
+
+if [ $OVERRIDE = 1 ]; then
+
+$DIR/util/create_integration_override.sh "$BUILD_DIR" \
+ "$OPENSTACK_CLI_POD" \
+ "$BUILD_DIR/openstack_rc" \
+ "$DOCKER_REPOSITORY" \
+ "$NFS_PRIVATE_IP" \
+ "$AKS_PUBLIC_IP_ADDRESS" \
+ "$BUILD_DIR/kubeconfig"
+
+fi
+
+if [ $NO_INSTALL = 0 ]; then
+
+### Starting OOM install ###
+echo "Installing ONAP..."
+$DIR/create_onap.sh "$BUILD" \
+ "$BUILD_DIR/kubeconfig" \
+ "$NFS_PRIVATE_IP" \
+ "$OOM_BRANCH" \
+ "$BUILD_DIR" \
+ "$CHART_VERSION" \
+ "$OOM_OVERRIDES"
+
+### Starting OOM install ###
+echo "Configuring ONAP..."
+
+cat > "$BUILD_DIR/onap.conf" <<EOF
+export CLLI=$CLLI
+export CLOUD_OWNER=$CLOUD_OWNER
+export CLOUD_REGION=$CLOUD_REGION
+export OPENSTACK_IP=$DEVSTACK_PRIVATE_IP
+export OPENSTACK_USER=$OPENSTACK_USER
+export OPENSTACK_PASS=$OPENSTACK_PASS
+export OPENSTACK_TENANT=$OPENSTACK_TENANT
+export OPENSTACK_REGION=$OPENSTACK_REGION
+export CUSTOMER=$CUSTOMER
+export SUBSCRIBER=$SUBSCRIBER
+export SERVICE_TYPE=$SERVICE_TYPE
+export AZ=$AZ
+export OE=$OE
+export LOB=$LOB
+export PLATFORM=$PLATFORM
+export PROJECT=$PROJECT
+export OS_ID=$OS_ID
+export OS_TENANT_ROLE=$OS_TENANT_ROLE
+export OS_KEYSTONE=$OS_KEYSTONE
+export KUBECONFIG=$BUILD_DIR/kubeconfig
+EOF
+
+$DIR/bootstrap_onap.sh "$BUILD_DIR/onap.conf"
+
+fi
+
+set +x
+
+cat > "$BUILD_DIR/deployment.notes" <<EOF
+==================================================================
+Phew, all done (yay!). ONAP and DevStack might still be installing
+but here are the access details...
+
+--------DEVSTACK ACCESS--------
+ssh -i ${PRIVATE_KEY} ${DEVSTACK_ADMIN_USER}@${DEVSTACK_PUBLIC_IP}
+horizon: http://${DEVSTACK_PUBLIC_IP}
+cli: kubectl exec $OPENSTACK_CLI_POD -- sh -lc "<openstack command>"
+
+--------NFS ACCESS--------
+ssh -i ${PRIVATE_KEY} ${NFS_ADMIN_USER}@${NFS_PUBLIC_IP}
+
+--------KUBERNETES ACCESS--------
+kubeconfig: export KUBECONFIG=$BUILD_DIR/kubeconfig
+dashboard: az aks browse --resource-group ${AKS_RESOURCE_GROUP_NAME} --name ${AKS_NAME}
+
+--------BUILD DETAILS--------
+Build directory: $BUILD_DIR
+Integration repo: $BUILD_DIR/integration
+OOM repo: $BUILD_DIR/oom
+
+--------ADD TO /etc/hosts--------
+$AKS_PUBLIC_IP_ADDRESS portal.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS sdc.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS sdc.api.fe.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS sdc.api.be.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS vid.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS policy.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS aai.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS cli.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS so.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS so.monitoring.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS so-monitoring
+$AKS_PUBLIC_IP_ADDRESS sdnc.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS clamp.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS dcae.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS appc.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS aaf.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS portal-sdk.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS robot.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS msb.api.discovery.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS msb.api.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS aai.ui.simpledemo.onap.org
+$AKS_PUBLIC_IP_ADDRESS policy.api.simpledemo.onap.org
+
+EOF
+
+cat "$BUILD_DIR/deployment.notes"