blob: 8d6c4a6a1da9da5292bb009666485e3bd00b4c0e [file] [log] [blame]
#!/bin/sh
#
# Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#
# This script helps setup services for running PaaS native, kvm or ovm tests.
# setup.sh -r -d <templates-dir> -s jee,javadb,mysql,oracle,apachemodjk,otd,lb native|kvm|ovm2|ovm3
# Examples:
# 1) Plain native setup
# setup.sh native
# 2) Native with lb service
# setup.sh -s lb native
# 3) KVM with jee service
# setup.sh -t /kvm/images -s jee kvm
# 4) KVM with jee,javadb,apachemodjk services
# setup.sh -t /kvm/images -s jee,javadb,apachemodjk kvm
# 5) OVM with jee service
# setup.sh -t /ovm/templates -s jee -p pool1 ovm2
# 6) OVM with jee,otd services
# setup.sh -t /ovm/templates -s jee,otd -p pool1 ovm2
# 7) Recreate domain1 before setting up
# setup.sh -r native
# Author: Yamini K B
# Date : 8-FEB-2012
GF_HOME=${GF_HOME:-$S1AS_HOME}
USAGE="Usage: $(basename $0) -r -d <templates-dir> -s jee,javadb,mysql,oracle,apachemodjk,otd,lb native|kvm|ovm2|ovm3"
[ -z "$GF_HOME" ] && echo "Please set GF_HOME or S1AS_HOME" && exit 1;
[ $# -lt 1 ] && echo $USAGE && exit 1;
log ()
{
echo "\033[33;33m$1\033[0m"
}
err ()
{
echo "\033[33;31m$1\033[0m"
}
setup_native ()
{
log "Configuring NATIVE mode...."
$A start-domain --debug
$A create-ims-config-native
IFS_TMP=$IFS
IFS=","
for s in $SERVICES
do
case $s in
"lb") log "Creating template for lb service..."
$A create-template --indexes ServiceType=LB,VirtualizationType=Native LBNative
;;
*) err "Ignoring unknown service $s"
;;
esac
done
IFS=$IFS_TMP
$A stop-domain
log "Successfully configured NATIVE mode...."
}
setup_kvm ()
{
log "Configuring KVM...."
log "Removing stale files..."
rm -f /tmp/helloworld?.xml
#rm -rf ~/virt/*
rm -rf ~/virt/disks/*
$A start-domain --debug
$A create-ims-config-libvirt kvm
$A set virtualizations.libvirt-virtualization.kvm.template-cache-size=0
$A create-jvm-options -Dorg.glassfish.paas.orchestrator.parallel-provisioning=true
$A restart-domain --debug
$A create-server-pool --virtualization kvm --subnet 192.168.122.0/24 --portName "virbr0" cloud
$A create-machine --serverPool cloud --networkName localhost local
$A create-machine-user --serverPool cloud --machine local --userId 1000 --groupId 1000 $USER
IFS_TMP=$IFS
IFS=","
for s in $SERVICES
do
case $s in
"jee") log "Creating template for jee service..."
$A create-template --virtualization kvm --files $templates_dir/glassfish.img,$templates_dir/glassfish.xml --indexes ServiceType=JavaEE,VirtualizationType=libvirt glassfish
$A create-template-user --virtualization kvm --template glassfish cloud
;;
"javadb") log "Creating template for javadb service..."
$A create-template --virtualization kvm --files $templates_dir/glassfish.img,$templates_dir/glassfish.xml --indexes ServiceType=Database,VirtualizationType=libvirt javadb
$A create-template-user --virtualization kvm --template javadb cloud
;;
"mysql") log "Creating template for mysql service..."
$A create-template --virtualization kvm --files $templates_dir/MySQL.img,$templates_dir/MySQL.xml --indexes ServiceType=Database,VirtualizationType=libvirt MySQL
$A create-template-user --virtualization kvm --template MySQL mysqluser
;;
"oracle") log "Creating template for oracle service..."
$A create-template --virtualization kvm --files $templates_dir/oracledb.img,$templates_dir/oracledb.xml --indexes ServiceType=Database,VirtualizationType=libvirt oracledb
$A create-template-user --virtualization kvm --template oracledb shalinikvm
;;
"apachemodjk") log "Creating template for apachemodjk service..."
$A create-template --virtualization kvm --files $templates_dir/apache.img,$templates_dir/apache.xml --indexes ServiceType=LB,VirtualizationType=libvirt apachemodjk
$A create-template-user --virtualization kvm --template apachemodjk cloud
;;
*) err "Ignoring unknown service $s"
;;
esac
done
IFS=$IFS_TMP
#copying of the template into ~/virt/templates takes about 2 min.
log "Copying of template(s) into ~/virt/templates in progress..."
sleep 100
ls -l ~/virt/templates/glassfish
$A stop-domain
log "Successfully configured KVM...."
}
setup_init ()
{
log "OVM init ...."
[ -z "$POOL" ] && err "Please specify pool name using -p <pool> option." && exit 3;
[ -z "$CONNECTION_STRING" ] && echo "Please specify connection string using -c <string> option." && exit 1;
[ -z "$SUBNET" ] && echo "Please specify subnet using -n <subnet> option." && exit 1;
# Parse the old style connection string into variables we can use with the
# new commands. At some point we should probably allow these to be
# specified via CLI options, but for now this keeps us compatible with
# current uses of this script.
# Connection string looks like:
# http://adminUser:adminPassword@hostName:port/foo/bar;rootUser:rootPassword
# Convert most delimeters into colons so it looks like
# http://adminUser:adminPassword:hostName:port/foo/bar:rootUser:rootPassword
# Then pick out the fields
_S=`echo "$CONNECTION_STRING" | tr -s "@;" ":"`
# Parse out fields
PROTOCOL=`echo $_S | cut -f 1 -d :`
OVMUSER=`echo $_S | cut -f 2 -d : | sed -e "s|//||"`
OVMPASSWORD=`echo $_S | cut -f 3 -d :`
OVMHOST=`echo $_S | cut -f 4 -d :`
OVMPORT=`echo $_S | cut -f 5 -d :`
POOLUSER=`echo $_S | cut -f 6 -d :`
POOLPASSWORD=`echo $_S | cut -f 7 -d :`
OVMURL="$PROTOCOL://$OVMHOST:$OVMPORT"
log "Parsed $CONNECTION_STRING into: "
log "OVMUSER=$OVMUSER"
log "OVMPASSWORD=$OVMPASSWORD"
log "OVMHOST=$OVMHOST"
log "OVMPORT=$OVMPORT"
log "POOLUSER=$POOLUSER"
log "POOLPASSWORD=$POOLPASSWORD"
log "OVMURL=$OVMURL"
$A start-domain domain1
$A set configs.config.server-config.network-config.protocols.protocol.admin-listener.http.request-timeout-seconds=-1
$A create-jvm-options -Dorg.glassfish.paas.orchestrator.parallel-provisioning=true
}
setup_ovm3 ()
{
log "Configuring OVM 3.0 ...."
setup_init
OVMVERSION=3.0
VIRTTYPE=OVM30
setup_ovm
log "Successfully configured OVM 3.0 ...."
}
setup_ovm2 ()
{
log "Configuring OVM 2.2 ...."
setup_init
OVMVERSION=2.2
VIRTTYPE=OVM
setup_ovm
log "Successfully configured OVM 2.2 ...."
}
setup_ovm ()
{
_PFILE=/tmp/p$$.txt
trap 'rm -f $_PFILE' 0 1 15
# Need to pass passwords vi asadmin password file
echo "AS_ADMIN_OVMPASSWORD=$OVMPASSWORD" > $_PFILE
echo "AS_ADMIN_IAASPASSWORD=$POOLPASSWORD" >> $_PFILE
set -x
$A --passwordfile $_PFILE create-ims-config-ovm --connectionstring $OVMURL --ovmversion $OVMVERSION --ovmuser $OVMUSER ovm
$A create-server-pool --subnet $SUBNET --portname $BRIDGE --virtualization ovm $POOL
$A --passwordfile $_PFILE create-server-pool-user --virtualization ovm --serverpool $POOL $POOLUSER
set +x
rm $_PFILE
IFS_TMP=$IFS
IFS=","
for s in $SERVICES
do
case $s in
"jee") log "Creating template for jee service..."
touch $templates_dir/glassfish.tgz
$A create-template --files $templates_dir/glassfish.tgz --indexes ServiceType=JavaEE,VirtualizationType=$VIRTTYPE glassfish
$A create-template-user --virtualization ovm --template glassfish glassfish
;;
"oracle") log "Creating template for oracle service..."
touch $templates_dir/ORACLEDB.tgz
$A create-template --files $templates_dir/ORACLEDB.tgz --indexes ServiceType=Database,VirtualizationType=$VIRTTYPE ORACLE_DATABASE
$A create-template-user --virtualization ovm --template ORACLE_DATABASE oracle
;;
"derby") log "Creating template for derby service..."
touch $templates_dir/DERBY_DATABASE.tgz
$A create-template --files $templates_dir/DERBY_DATABASE.tgz --indexes ServiceType=Database,VirtualizationType=$VIRTTYPE DERBY_DATABASE
$A create-template-user --virtualization ovm --template DERBY_DATABASE glassfish
;;
"otd") log "Creating template for otd service..."
touch $templates_dir/OTD_LARGE.tgz
$A create-template --files $templates_dir/OTD_LARGE.tgz --properties vendor-name=otd --indexes ServiceType=LB,VirtualizationType=$VIRTTYPE otd-new
$A create-template-user --virtualization ovm --template otd-new cloud
;;
*) err "Ignoring unknown service $s"
;;
esac
done
IFS=$IFS_TMP
$A stop-domain
}
log "GlassFish is at $GF_HOME"
A=$GF_HOME/bin/asadmin
BRIDGE="xenbr0"
while getopts rd:s:c:n:p:b: opt
do
case ${opt} in
r) log "Recreating domain1..."
$A stop-domain domain1
$A delete-domain domain1
$A create-domain --adminport 4848 --nopassword domain1
;;
s) SERVICES=$OPTARG
;;
d)
if [ -d "$OPTARG" ] # Check if dir exists
then
templates_dir=$OPTARG
else
err "Directory \"$OPTARG\" does not exist."
exit 2
fi
;;
c) CONNECTION_STRING=$OPTARG
;;
n) SUBNET=$OPTARG
;;
p) POOL=$OPTARG
;;
b) BRIDGE=$OPTARG
;;
\?) echo $USAGE
exit 2;;
esac
done
shift $(($OPTIND - 1))
case "$1" in
"native") setup_native
;;
"kvm") setup_kvm
;;
"ovm2") setup_ovm2
;;
"ovm3") setup_ovm3
;;
*) echo $USAGE
exit 2;;
esac
exit 0