Exercise quantum v2 api without namespace
Added quantum_v2.sh for quantum v2 api exercise. Quantum exercise script requires the following settings: - Q_USE_NAMESPACE=False - LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver And the following services enabled: - quantum, q-svc, q-agt, q-dhcp Change-Id: I5767f94c94187a4ca0fd189244fa6f5781519ab4
This commit is contained in:
parent
43bedda56c
commit
ea23e68664
486
exercises/quantum-adv-test.sh
Executable file
486
exercises/quantum-adv-test.sh
Executable file
@ -0,0 +1,486 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
|
||||
# **quantum.sh**
|
||||
|
||||
# We will use this test to perform integration testing of nova and
|
||||
# other components with Quantum.
|
||||
|
||||
echo "*********************************************************************"
|
||||
echo "Begin DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
||||
|
||||
# This script exits on an error so that errors don't compound and you see
|
||||
# only the first error that occured.
|
||||
|
||||
set -o errtrace
|
||||
trap failed ERR
|
||||
failed() {
|
||||
local r=$?
|
||||
set +o errtrace
|
||||
set +o xtrace
|
||||
echo "Failed to execute"
|
||||
echo "Starting cleanup..."
|
||||
delete_all
|
||||
echo "Finished cleanup"
|
||||
exit $r
|
||||
}
|
||||
|
||||
# Print the commands being run so that we can see the command that triggers
|
||||
# an error. It is also useful for following allowing as the install occurs.
|
||||
set -o xtrace
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Quantum config check
|
||||
#------------------------------------------------------------------------------
|
||||
# Warn if quantum is not enabled
|
||||
if [[ ! "$ENABLED_SERVICES" =~ "q-svc" ]]; then
|
||||
echo "WARNING: Running quantum test without enabling quantum"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Environment
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Keep track of the current directory
|
||||
EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
|
||||
TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
|
||||
|
||||
# Import common functions
|
||||
source $TOP_DIR/functions
|
||||
|
||||
# Import configuration
|
||||
source $TOP_DIR/openrc
|
||||
|
||||
# Import exercise configuration
|
||||
source $TOP_DIR/exerciserc
|
||||
|
||||
# If quantum is not enabled we exit with exitcode 55 which mean
|
||||
# exercise is skipped.
|
||||
is_service_enabled quantum && is_service_enabled q-agt && is_service_enabled q-dhcp || exit 55
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Test settings for quantum
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
TENANTS="DEMO1"
|
||||
# TODO (nati)_Test public network
|
||||
#TENANTS="DEMO1,DEMO2"
|
||||
|
||||
PUBLIC_NAME="admin"
|
||||
DEMO1_NAME="demo1"
|
||||
DEMO2_NAME="demo2"
|
||||
|
||||
PUBLIC_NUM_NET=1
|
||||
DEMO1_NUM_NET=1
|
||||
DEMO2_NUM_NET=2
|
||||
|
||||
PUBLIC_NET1_CIDR="200.0.0.0/24"
|
||||
DEMO1_NET1_CIDR="190.0.0.0/24"
|
||||
DEMO2_NET1_CIDR="191.0.0.0/24"
|
||||
DEMO2_NET2_CIDR="191.0.1.0/24"
|
||||
|
||||
PUBLIC_NET1_GATEWAY="200.0.0.1"
|
||||
DEMO1_NET1_GATEWAY="190.0.0.1"
|
||||
DEMO2_NET1_GATEWAY="191.0.0.1"
|
||||
DEMO2_NET2_GATEWAY="191.0.1.1"
|
||||
|
||||
PUBLIC_NUM_VM=1
|
||||
DEMO1_NUM_VM=1
|
||||
DEMO2_NUM_VM=2
|
||||
|
||||
PUBLIC_VM1_NET='admin-net1'
|
||||
DEMO1_VM1_NET='demo1-net1'
|
||||
# Multinic settings. But this is fail without nic setting in OS image
|
||||
DEMO2_VM1_NET='demo2-net1'
|
||||
DEMO2_VM2_NET='demo2-net2'
|
||||
|
||||
PUBLIC_NUM_ROUTER=1
|
||||
DEMO1_NUM_ROUTER=1
|
||||
DEMO2_NUM_ROUTER=1
|
||||
|
||||
PUBLIC_ROUTER1_NET="admin-net1"
|
||||
DEMO1_ROUTER1_NET="demo1-net1"
|
||||
DEMO2_ROUTER1_NET="demo2-net1"
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Keystone settings.
|
||||
#------------------------------------------------------------------------------
|
||||
KEYSTONE="keystone"
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Get a token for clients that don't support service catalog
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# manually create a token by querying keystone (sending JSON data). Keystone
|
||||
# returns a token and catalog of endpoints. We use python to parse the token
|
||||
# and save it.
|
||||
|
||||
TOKEN=`keystone token-get | grep ' id ' | awk '{print $4}'`
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Various functions.
|
||||
#------------------------------------------------------------------------------
|
||||
function foreach_tenant {
|
||||
COMMAND=$1
|
||||
for TENANT in ${TENANTS//,/ };do
|
||||
eval ${COMMAND//%TENANT%/$TENANT}
|
||||
done
|
||||
}
|
||||
|
||||
function foreach_tenant_resource {
|
||||
COMMAND=$1
|
||||
RESOURCE=$2
|
||||
for TENANT in ${TENANTS//,/ };do
|
||||
eval 'NUM=$'"${TENANT}_NUM_$RESOURCE"
|
||||
for i in `seq $NUM`;do
|
||||
local COMMAND_LOCAL=${COMMAND//%TENANT%/$TENANT}
|
||||
COMMAND_LOCAL=${COMMAND_LOCAL//%NUM%/$i}
|
||||
eval $COMMAND_LOCAL
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
function foreach_tenant_vm {
|
||||
COMMAND=$1
|
||||
foreach_tenant_resource "$COMMAND" 'VM'
|
||||
}
|
||||
|
||||
function foreach_tenant_net {
|
||||
COMMAND=$1
|
||||
foreach_tenant_resource "$COMMAND" 'NET'
|
||||
}
|
||||
|
||||
function get_image_id {
|
||||
local IMAGE_ID=$(glance image-list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
|
||||
echo "$IMAGE_ID"
|
||||
}
|
||||
|
||||
function get_tenant_id {
|
||||
local TENANT_NAME=$1
|
||||
local TENANT_ID=`keystone tenant-list | grep " $TENANT_NAME " | head -n 1 | get_field 1`
|
||||
echo "$TENANT_ID"
|
||||
}
|
||||
|
||||
function get_user_id {
|
||||
local USER_NAME=$1
|
||||
local USER_ID=`keystone user-list | grep $USER_NAME | awk '{print $2}'`
|
||||
echo "$USER_ID"
|
||||
}
|
||||
|
||||
function get_role_id {
|
||||
local ROLE_NAME=$1
|
||||
local ROLE_ID=`keystone role-list | grep $ROLE_NAME | awk '{print $2}'`
|
||||
echo "$ROLE_ID"
|
||||
}
|
||||
|
||||
function get_network_id {
|
||||
local NETWORK_NAME="$1"
|
||||
local NETWORK_ID=`quantum net-list -F id -- --name=$NETWORK_NAME | awk "NR==4" | awk '{print $2}'`
|
||||
echo $NETWORK_ID
|
||||
}
|
||||
|
||||
function get_flavor_id {
|
||||
local INSTANCE_TYPE=$1
|
||||
local FLAVOR_ID=`nova flavor-list | grep $INSTANCE_TYPE | awk '{print $2}'`
|
||||
echo "$FLAVOR_ID"
|
||||
}
|
||||
|
||||
function confirm_server_active {
|
||||
local VM_UUID=$1
|
||||
if ! timeout $ACTIVE_TIMEOUT sh -c "while ! nova --no_cache show $VM_UUID | grep status | grep -q ACTIVE; do sleep 1; done"; then
|
||||
echo "server '$VM_UUID' did not become active!"
|
||||
false
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
function add_tenant {
|
||||
local TENANT=$1
|
||||
local USER=$2
|
||||
|
||||
$KEYSTONE tenant-create --name=$TENANT
|
||||
$KEYSTONE user-create --name=$USER --pass=${ADMIN_PASSWORD}
|
||||
|
||||
local USER_ID=$(get_user_id $USER)
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
|
||||
$KEYSTONE user-role-add --user-id $USER_ID --role-id $(get_role_id Member) --tenant-id $TENANT_ID
|
||||
}
|
||||
|
||||
function remove_tenant {
|
||||
local TENANT=$1
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
|
||||
$KEYSTONE tenant-delete $TENANT_ID
|
||||
}
|
||||
|
||||
function remove_user {
|
||||
local USER=$1
|
||||
local USER_ID=$(get_user_id $USER)
|
||||
|
||||
$KEYSTONE user-delete $USER_ID
|
||||
}
|
||||
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# "Create" functions
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
function create_tenants {
|
||||
source $TOP_DIR/openrc admin admin
|
||||
add_tenant demo1 demo1 demo1
|
||||
add_tenant demo2 demo2 demo2
|
||||
}
|
||||
|
||||
function delete_tenants_and_users {
|
||||
source $TOP_DIR/openrc admin admin
|
||||
remove_user demo1
|
||||
remove_tenant demo1
|
||||
remove_user demo2
|
||||
remove_tenant demo2
|
||||
echo "removed all tenants"
|
||||
}
|
||||
|
||||
function create_network {
|
||||
local TENANT=$1
|
||||
local GATEWAY=$2
|
||||
local CIDR=$3
|
||||
local NUM=$4
|
||||
local EXTRA=$5
|
||||
local NET_NAME="${TENANT}-net$NUM"
|
||||
local ROUTER_NAME="${TENANT}-router${NUM}"
|
||||
source $TOP_DIR/openrc admin admin
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
source $TOP_DIR/openrc $TENANT $TENANT
|
||||
local NET_ID=$(quantum net-create --tenant_id $TENANT_ID $NET_NAME $EXTRA| grep ' id ' | awk '{print $4}' )
|
||||
quantum subnet-create --ip_version 4 --tenant_id $TENANT_ID --gateway $GATEWAY $NET_ID $CIDR
|
||||
#T0DO(nati) comment out until l3-agent is merged
|
||||
#local ROUTER_ID=$($QUANTUM router-create --tenant_id $TENANT_ID $ROUTER_NAME| grep ' id ' | awk '{print $4}' )
|
||||
#for NET_NAME in ${NET_NAMES//,/ };do
|
||||
# SUBNET_ID=`get_subnet_id $NET_NAME`
|
||||
# $QUANTUM router-interface-create $NAME --subnet_id $SUBNET_ID
|
||||
#done
|
||||
}
|
||||
|
||||
function create_networks {
|
||||
foreach_tenant_net 'create_network ${%TENANT%_NAME} ${%TENANT%_NET%NUM%_GATEWAY} ${%TENANT%_NET%NUM%_CIDR} %NUM% ${%TENANT%_NET%NUM%_EXTRA}'
|
||||
#TODO(nati) test security group function
|
||||
# allow ICMP for both tenant's security groups
|
||||
#source $TOP_DIR/openrc demo1 demo1
|
||||
#$NOVA secgroup-add-rule default icmp -1 -1 0.0.0.0/0
|
||||
#source $TOP_DIR/openrc demo2 demo2
|
||||
#$NOVA secgroup-add-rule default icmp -1 -1 0.0.0.0/0
|
||||
}
|
||||
|
||||
function create_vm {
|
||||
local TENANT=$1
|
||||
local NUM=$2
|
||||
local NET_NAMES=$3
|
||||
source $TOP_DIR/openrc $TENANT $TENANT
|
||||
local NIC=""
|
||||
for NET_NAME in ${NET_NAMES//,/ };do
|
||||
NIC="$NIC --nic net-id="`get_network_id $NET_NAME`
|
||||
done
|
||||
#TODO (nati) Add multi-nic test
|
||||
#TODO (nati) Add public-net test
|
||||
local VM_UUID=`nova --no_cache boot --flavor $(get_flavor_id m1.tiny) \
|
||||
--image $(get_image_id) \
|
||||
$NIC \
|
||||
$TENANT-server$NUM | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
|
||||
die_if_not_set VM_UUID "Failure launching $TENANT-server$NUM" VM_UUID
|
||||
confirm_server_active $VM_UUID
|
||||
}
|
||||
|
||||
function create_vms {
|
||||
foreach_tenant_vm 'create_vm ${%TENANT%_NAME} %NUM% ${%TENANT%_VM%NUM%_NET}'
|
||||
}
|
||||
|
||||
function ping_ip {
|
||||
# Test agent connection. Assumes namespaces are disabled, and
|
||||
# that DHCP is in use, but not L3
|
||||
local VM_NAME=$1
|
||||
IP=`nova --no_cache show $VM_NAME | grep 'network' | awk '{print $5}'`
|
||||
if ! timeout $BOOT_TIMEOUT sh -c "while ! ping -c1 -w1 $IP; do sleep 1; done"; then
|
||||
echo "Could not ping $VM_NAME"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
function check_vm {
|
||||
local TENANT=$1
|
||||
local NUM=$2
|
||||
local VM_NAME="$TENANT-server$NUM"
|
||||
source $TOP_DIR/openrc $TENANT $TENANT
|
||||
ping_ip $VM_NAME
|
||||
# TODO (nati) test ssh connection
|
||||
# TODO (nati) test inter connection between vm
|
||||
# TODO (nati) test namespace dhcp
|
||||
# TODO (nati) test dhcp host routes
|
||||
# TODO (nati) test multi-nic
|
||||
# TODO (nati) use test-agent
|
||||
# TODO (nati) test L3 forwarding
|
||||
# TODO (nati) test floating ip
|
||||
# TODO (nati) test security group
|
||||
}
|
||||
|
||||
function check_vms {
|
||||
foreach_tenant_vm 'check_vm ${%TENANT%_NAME} %NUM%'
|
||||
}
|
||||
|
||||
function shutdown_vm {
|
||||
local TENANT=$1
|
||||
local NUM=$2
|
||||
source $TOP_DIR/openrc $TENANT $TENANT
|
||||
VM_NAME=${TENANT}-server$NUM
|
||||
nova --no_cache delete $VM_NAME
|
||||
}
|
||||
|
||||
function shutdown_vms {
|
||||
foreach_tenant_vm 'shutdown_vm ${%TENANT%_NAME} %NUM%'
|
||||
if ! timeout $TERMINATE_TIMEOUT sh -c "while nova --no_cache list | grep -q ACTIVE; do sleep 1; done"; then
|
||||
echo "Some VMs failed to shutdown"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
function delete_network {
|
||||
local TENANT=$1
|
||||
source $TOP_DIR/openrc admin admin
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
#TODO(nati) comment out until l3-agent merged
|
||||
#for res in port subnet net router;do
|
||||
for res in port subnet net;do
|
||||
quantum ${res}-list -F id -F tenant_id | grep $TENANT_ID | awk '{print $2}' | xargs -I % quantum ${res}-delete %
|
||||
done
|
||||
}
|
||||
|
||||
function delete_networks {
|
||||
foreach_tenant 'delete_network ${%TENANT%_NAME}'
|
||||
#TODO(nati) add secuirty group check after it is implemented
|
||||
# source $TOP_DIR/openrc demo1 demo1
|
||||
# nova secgroup-delete-rule default icmp -1 -1 0.0.0.0/0
|
||||
# source $TOP_DIR/openrc demo2 demo2
|
||||
# nova secgroup-delete-rule default icmp -1 -1 0.0.0.0/0
|
||||
}
|
||||
|
||||
function create_all {
|
||||
create_tenants
|
||||
create_networks
|
||||
create_vms
|
||||
}
|
||||
|
||||
function delete_all {
|
||||
shutdown_vms
|
||||
delete_networks
|
||||
delete_tenants_and_users
|
||||
}
|
||||
|
||||
function all {
|
||||
create_all
|
||||
check_vms
|
||||
delete_all
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Test functions.
|
||||
#------------------------------------------------------------------------------
|
||||
function test_functions {
|
||||
IMAGE=$(get_image_id)
|
||||
echo $IMAGE
|
||||
|
||||
TENANT_ID=$(get_tenant_id demo)
|
||||
echo $TENANT_ID
|
||||
|
||||
FLAVOR_ID=$(get_flavor_id m1.tiny)
|
||||
echo $FLAVOR_ID
|
||||
|
||||
NETWORK_ID=$(get_network_id admin)
|
||||
echo $NETWORK_ID
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Usage and main.
|
||||
#------------------------------------------------------------------------------
|
||||
usage() {
|
||||
echo "$0: [-h]"
|
||||
echo " -h, --help Display help message"
|
||||
echo " -t, --tenant Create tenants"
|
||||
echo " -n, --net Create networks"
|
||||
echo " -v, --vm Create vms"
|
||||
echo " -c, --check Check connection"
|
||||
echo " -x, --delete-tenants Delete tenants"
|
||||
echo " -y, --delete-nets Delete networks"
|
||||
echo " -z, --delete-vms Delete vms"
|
||||
echo " -T, --test Test functions"
|
||||
}
|
||||
|
||||
main() {
|
||||
|
||||
echo Description
|
||||
echo
|
||||
echo Copyright 2012, Cisco Systems
|
||||
echo Copyright 2012, Nicira Networks, Inc.
|
||||
echo Copyright 2012, NTT MCL, Inc.
|
||||
echo
|
||||
echo Please direct any questions to dedutta@cisco.com, dan@nicira.com, nachi@nttmcl.com
|
||||
echo
|
||||
|
||||
|
||||
if [ $# -eq 0 ] ; then
|
||||
# if no args are provided, run all tests
|
||||
all
|
||||
else
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-h | --help ) usage
|
||||
exit
|
||||
;;
|
||||
-n | --net ) create_networks
|
||||
exit
|
||||
;;
|
||||
-v | --vm ) create_vms
|
||||
exit
|
||||
;;
|
||||
-t | --tenant ) create_tenants
|
||||
exit
|
||||
;;
|
||||
-c | --check ) check_vms
|
||||
exit
|
||||
;;
|
||||
-T | --test ) test_functions
|
||||
exit
|
||||
;;
|
||||
-x | --delete-tenants ) delete_tenants_and_users
|
||||
exit
|
||||
;;
|
||||
-y | --delete-nets ) delete_networks
|
||||
exit
|
||||
;;
|
||||
-z | --delete-vms ) shutdown_vms
|
||||
exit
|
||||
;;
|
||||
-a | --all ) all
|
||||
exit
|
||||
;;
|
||||
* ) usage
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Kick off script.
|
||||
#-------------------------------------------------------------------------------
|
||||
echo $*
|
||||
main $*
|
||||
|
||||
set +o xtrace
|
||||
echo "*********************************************************************"
|
||||
echo "SUCCESS: End DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
@ -1,396 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
|
||||
# **quantum.sh**
|
||||
|
||||
# We will use this test to perform integration testing of nova and
|
||||
# other components with Quantum.
|
||||
|
||||
echo "*********************************************************************"
|
||||
echo "Begin DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
||||
|
||||
# This script exits on an error so that errors don't compound and you see
|
||||
# only the first error that occured.
|
||||
set -o errexit
|
||||
|
||||
# Print the commands being run so that we can see the command that triggers
|
||||
# an error. It is also useful for following allowing as the install occurs.
|
||||
set -o xtrace
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Quantum config check
|
||||
#------------------------------------------------------------------------------
|
||||
# Warn if quantum is not enabled
|
||||
if [[ ! "$ENABLED_SERVICES" =~ "q-svc" ]]; then
|
||||
echo "WARNING: Running quantum test without enabling quantum"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Environment
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Keep track of the current directory
|
||||
EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
|
||||
TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
|
||||
|
||||
# Import common functions
|
||||
source $TOP_DIR/functions
|
||||
|
||||
# Import configuration
|
||||
source $TOP_DIR/openrc
|
||||
|
||||
# Import exercise configuration
|
||||
source $TOP_DIR/exerciserc
|
||||
|
||||
# If quantum is not enabled we exit with exitcode 55 which mean
|
||||
# exercise is skipped.
|
||||
is_service_enabled quantum || exit 55
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Various default parameters.
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# Max time to wait while vm goes from build to active state
|
||||
ACTIVE_TIMEOUT=${ACTIVE_TIMEOUT:-30}
|
||||
|
||||
# Max time till the vm is bootable
|
||||
BOOT_TIMEOUT=${BOOT_TIMEOUT:-60}
|
||||
|
||||
# Max time to wait for proper association and dis-association.
|
||||
ASSOCIATE_TIMEOUT=${ASSOCIATE_TIMEOUT:-15}
|
||||
|
||||
# Max time to wait before delete VMs and delete Networks
|
||||
VM_NET_DELETE_TIMEOUT=${VM_NET_TIMEOUT:-10}
|
||||
|
||||
# Instance type to create
|
||||
DEFAULT_INSTANCE_TYPE=${DEFAULT_INSTANCE_TYPE:-m1.tiny}
|
||||
|
||||
# Boot this image, use first AMi image if unset
|
||||
DEFAULT_IMAGE_NAME=${DEFAULT_IMAGE_NAME:-ami}
|
||||
|
||||
# OVS Hosts
|
||||
OVS_HOSTS=${DEFAULT_OVS_HOSTS:-"localhost"}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Nova settings.
|
||||
#------------------------------------------------------------------------------
|
||||
if [ -f /opt/stack/nova/bin/nova-manage ] ; then
|
||||
NOVA_MANAGE=/opt/stack/nova/bin/nova-manage
|
||||
else
|
||||
NOVA_MANAGE=/usr/local/bin/nova-manage
|
||||
NOVA=/usr/local/bin/nova
|
||||
NOVA_CONF=/etc/nova/nova.conf
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Mysql settings.
|
||||
#------------------------------------------------------------------------------
|
||||
MYSQL="/usr/bin/mysql --skip-column-name --host=$MYSQL_HOST"
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Keystone settings.
|
||||
#------------------------------------------------------------------------------
|
||||
KEYSTONE="keystone"
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Get a token for clients that don't support service catalog
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
# manually create a token by querying keystone (sending JSON data). Keystone
|
||||
# returns a token and catalog of endpoints. We use python to parse the token
|
||||
# and save it.
|
||||
|
||||
TOKEN=`keystone token-get | grep ' id ' | awk '{print $4}'`
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Various functions.
|
||||
#------------------------------------------------------------------------------
|
||||
function get_image_id {
|
||||
local IMAGE_ID=$(glance image-list | egrep " $DEFAULT_IMAGE_NAME " | get_field 1)
|
||||
echo "$IMAGE_ID"
|
||||
}
|
||||
|
||||
function get_tenant_id {
|
||||
local TENANT_NAME=$1
|
||||
local TENANT_ID=`keystone tenant-list | grep $TENANT_NAME | awk '{print $2}'`
|
||||
echo "$TENANT_ID"
|
||||
}
|
||||
|
||||
function get_user_id {
|
||||
local USER_NAME=$1
|
||||
local USER_ID=`keystone user-list | grep $USER_NAME | awk '{print $2}'`
|
||||
echo "$USER_ID"
|
||||
}
|
||||
|
||||
function get_role_id {
|
||||
local ROLE_NAME=$1
|
||||
local ROLE_ID=`keystone role-list | grep $ROLE_NAME | awk '{print $2}'`
|
||||
echo "$ROLE_ID"
|
||||
}
|
||||
|
||||
# TODO: (Debo) Change Quantum client CLI and then remove the MYSQL stuff.
|
||||
function get_network_id {
|
||||
local NETWORK_NAME=$1
|
||||
local QUERY="select uuid from networks where label='$NETWORK_NAME'"
|
||||
local NETWORK_ID=`echo $QUERY | $MYSQL -u root -p$MYSQL_PASSWORD nova`
|
||||
echo "$NETWORK_ID"
|
||||
}
|
||||
|
||||
function get_flavor_id {
|
||||
local INSTANCE_TYPE=$1
|
||||
local FLAVOR_ID=`nova flavor-list | grep $INSTANCE_TYPE | awk '{print $2}'`
|
||||
echo "$FLAVOR_ID"
|
||||
}
|
||||
|
||||
function add_tenant {
|
||||
local TENANT=$1
|
||||
local USER=$3
|
||||
local PASSWORD=$2
|
||||
|
||||
$KEYSTONE tenant-create --name=$TENANT
|
||||
$KEYSTONE user-create --name=$USER --pass=${PASSWORD}
|
||||
|
||||
local USER_ID=$(get_user_id $USER)
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
|
||||
$KEYSTONE user-role-add --user $USER_ID --role $(get_role_id Member) --tenant_id $TENANT_ID
|
||||
$KEYSTONE user-role-add --user $USER_ID --role $(get_role_id admin) --tenant_id $TENANT_ID
|
||||
$KEYSTONE user-role-add --user $USER_ID --role $(get_role_id anotherrole) --tenant_id $TENANT_ID
|
||||
#$KEYSTONE user-role-add --user $USER_ID --role $(get_role_id sysadmin) --tenant_id $TENANT_ID
|
||||
#$KEYSTONE user-role-add --user $USER_ID --role $(get_role_id netadmin) --tenant_id $TENANT_ID
|
||||
}
|
||||
|
||||
function remove_tenant {
|
||||
local TENANT=$1
|
||||
local TENANT_ID=$(get_tenant_id $TENANT)
|
||||
|
||||
$KEYSTONE tenant-delete $TENANT_ID
|
||||
}
|
||||
|
||||
function remove_user {
|
||||
local USER=$1
|
||||
local USER_ID=$(get_user_id $USER)
|
||||
|
||||
$KEYSTONE user-delete $USER_ID
|
||||
}
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# "Create" functions
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
function create_tenants {
|
||||
add_tenant demo1 nova demo1
|
||||
add_tenant demo2 nova demo2
|
||||
}
|
||||
|
||||
function delete_tenants_and_users {
|
||||
remove_tenant demo1
|
||||
remove_tenant demo2
|
||||
remove_user demo1
|
||||
remove_user demo2
|
||||
}
|
||||
|
||||
function create_networks {
|
||||
$NOVA_MANAGE --flagfile=$NOVA_CONF network create \
|
||||
--label=public-net1 \
|
||||
--fixed_range_v4=11.0.0.0/24
|
||||
|
||||
$NOVA_MANAGE --flagfile=$NOVA_CONF network create \
|
||||
--label=demo1-net1 \
|
||||
--fixed_range_v4=12.0.0.0/24 \
|
||||
--project_id=$(get_tenant_id demo1) \
|
||||
--priority=1
|
||||
|
||||
$NOVA_MANAGE --flagfile=$NOVA_CONF network create \
|
||||
--label=demo2-net1 \
|
||||
--fixed_range_v4=13.0.0.0/24 \
|
||||
--project_id=$(get_tenant_id demo2) \
|
||||
--priority=1
|
||||
}
|
||||
|
||||
function create_vms {
|
||||
PUBLIC_NET1_ID=$(get_network_id public-net1)
|
||||
DEMO1_NET1_ID=$(get_network_id demo1-net1)
|
||||
DEMO2_NET1_ID=$(get_network_id demo2-net1)
|
||||
|
||||
export OS_TENANT_NAME=demo1
|
||||
export OS_USERNAME=demo1
|
||||
export OS_PASSWORD=nova
|
||||
VM_UUID1=`$NOVA boot --flavor $(get_flavor_id m1.tiny) \
|
||||
--image $(get_image_id) \
|
||||
--nic net-id=$PUBLIC_NET1_ID \
|
||||
--nic net-id=$DEMO1_NET1_ID \
|
||||
demo1-server1 | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
|
||||
die_if_not_set VM_UUID1 "Failure launching demo1-server1"
|
||||
|
||||
export OS_TENANT_NAME=demo2
|
||||
export OS_USERNAME=demo2
|
||||
export OS_PASSWORD=nova
|
||||
VM_UUID2=`$NOVA boot --flavor $(get_flavor_id m1.tiny) \
|
||||
--image $(get_image_id) \
|
||||
--nic net-id=$PUBLIC_NET1_ID \
|
||||
--nic net-id=$DEMO2_NET1_ID \
|
||||
demo2-server1 | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
|
||||
die_if_not_set VM_UUID2 "Failure launching demo2-server1"
|
||||
|
||||
VM_UUID3=`$NOVA boot --flavor $(get_flavor_id m1.tiny) \
|
||||
--image $(get_image_id) \
|
||||
--nic net-id=$PUBLIC_NET1_ID \
|
||||
--nic net-id=$DEMO2_NET1_ID \
|
||||
demo2-server2 | grep ' id ' | cut -d"|" -f3 | sed 's/ //g'`
|
||||
die_if_not_set VM_UUID3 "Failure launching demo2-server2"
|
||||
|
||||
}
|
||||
|
||||
function ping_vms {
|
||||
|
||||
echo "Sleeping a bit let the VMs come up"
|
||||
sleep $ACTIVE_TIMEOUT
|
||||
|
||||
export OS_TENANT_NAME=demo1
|
||||
export OS_USERNAME=demo1
|
||||
export OS_PASSWORD=nova
|
||||
# get the IP of the servers
|
||||
PUBLIC_IP1=`nova show $VM_UUID1 | grep public-net1 | awk '{print $5}'`
|
||||
export OS_TENANT_NAME=demo2
|
||||
export OS_USERNAME=demo2
|
||||
export OS_PASSWORD=nova
|
||||
PUBLIC_IP2=`nova show $VM_UUID2 | grep public-net1 | awk '{print $5}'`
|
||||
|
||||
MULTI_HOST=`trueorfalse False $MULTI_HOST`
|
||||
if [ "$MULTI_HOST" = "False" ]; then
|
||||
# sometimes the first ping fails (10 seconds isn't enough time for the VM's
|
||||
# network to respond?), so let's ping for a default of 15 seconds with a
|
||||
# timeout of a second for each ping.
|
||||
if ! timeout $BOOT_TIMEOUT sh -c "while ! ping -c1 -w1 $PUBLIC_IP1; do sleep 1; done"; then
|
||||
echo "Couldn't ping server"
|
||||
exit 1
|
||||
fi
|
||||
if ! timeout $BOOT_TIMEOUT sh -c "while ! ping -c1 -w1 $PUBLIC_IP2; do sleep 1; done"; then
|
||||
echo "Couldn't ping server"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# On a multi-host system, without vm net access, do a sleep to wait for the boot
|
||||
sleep $BOOT_TIMEOUT
|
||||
fi
|
||||
}
|
||||
|
||||
function shutdown_vms {
|
||||
export OS_TENANT_NAME=demo1
|
||||
export OS_USERNAME=demo1
|
||||
export OS_PASSWORD=nova
|
||||
nova delete $VM_UUID1
|
||||
|
||||
export OS_TENANT_NAME=demo2
|
||||
export OS_USERNAME=demo2
|
||||
export OS_PASSWORD=nova
|
||||
nova delete $VM_UUID2
|
||||
nova delete $VM_UUID3
|
||||
|
||||
}
|
||||
|
||||
function delete_networks {
|
||||
PUBLIC_NET1_ID=$(get_network_id public-net1)
|
||||
DEMO1_NET1_ID=$(get_network_id demo1-net1)
|
||||
DEMO2_NET1_ID=$(get_network_id demo2-net1)
|
||||
nova-manage network delete --uuid=$PUBLIC_NET1_ID
|
||||
nova-manage network delete --uuid=$DEMO1_NET1_ID
|
||||
nova-manage network delete --uuid=$DEMO2_NET1_ID
|
||||
}
|
||||
|
||||
function all {
|
||||
create_tenants
|
||||
create_networks
|
||||
create_vms
|
||||
ping_vms
|
||||
shutdown_vms
|
||||
delete_networks
|
||||
delete_tenants_and_users
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Test functions.
|
||||
#------------------------------------------------------------------------------
|
||||
function test_functions {
|
||||
IMAGE=$(get_image_id)
|
||||
echo $IMAGE
|
||||
|
||||
TENANT_ID=$(get_tenant_id demo)
|
||||
echo $TENANT_ID
|
||||
|
||||
FLAVOR_ID=$(get_flavor_id m1.tiny)
|
||||
echo $FLAVOR_ID
|
||||
|
||||
NETWORK_ID=$(get_network_id private)
|
||||
echo $NETWORK_ID
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Usage and main.
|
||||
#------------------------------------------------------------------------------
|
||||
usage() {
|
||||
echo "$0: [-h]"
|
||||
echo " -h, --help Display help message"
|
||||
echo " -n, --net Create networks"
|
||||
echo " -v, --vm Create vms"
|
||||
echo " -t, --tenant Create tenants"
|
||||
echo " -T, --test Test functions"
|
||||
}
|
||||
|
||||
main() {
|
||||
if [ $# -eq 0 ] ; then
|
||||
usage
|
||||
exit
|
||||
fi
|
||||
|
||||
echo Description
|
||||
echo
|
||||
echo Copyright 2012, Cisco Systems
|
||||
echo Copyright 2012, Nicira Networks, Inc.
|
||||
echo
|
||||
echo Please direct any questions to dedutta@cisco.com, dlapsley@nicira.com
|
||||
echo
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-h | --help ) usage
|
||||
exit
|
||||
;;
|
||||
-n | --net ) create_networks
|
||||
exit
|
||||
;;
|
||||
-v | --vm ) create_vms
|
||||
exit
|
||||
;;
|
||||
-t | --tenant ) create_tenants
|
||||
exit
|
||||
;;
|
||||
-p | --ping ) ping_vms
|
||||
exit
|
||||
;;
|
||||
-T | --test ) test_functions
|
||||
exit
|
||||
;;
|
||||
-a | --all ) all
|
||||
exit
|
||||
;;
|
||||
* ) usage
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Kick off script.
|
||||
#-------------------------------------------------------------------------------
|
||||
echo $*
|
||||
main -a
|
||||
|
||||
set +o xtrace
|
||||
echo "*********************************************************************"
|
||||
echo "SUCCESS: End DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
4
stack.sh
4
stack.sh
@ -269,7 +269,8 @@ Q_HOST=${Q_HOST:-localhost}
|
||||
Q_ADMIN_USERNAME=${Q_ADMIN_USERNAME:-quantum}
|
||||
# Default auth strategy
|
||||
Q_AUTH_STRATEGY=${Q_AUTH_STRATEGY:-keystone}
|
||||
|
||||
# Use namespace or not
|
||||
Q_USE_NAMESPACE=${Q_USE_NAMESPACE:-True}
|
||||
|
||||
# Name of the lvm volume group to use/create for iscsi volumes
|
||||
VOLUME_GROUP=${VOLUME_GROUP:-stack-volumes}
|
||||
@ -1204,6 +1205,7 @@ if is_service_enabled q-dhcp; then
|
||||
iniset $Q_DHCP_CONF_FILE DEFAULT verbose True
|
||||
# Set debug
|
||||
iniset $Q_DHCP_CONF_FILE DEFAULT debug True
|
||||
iniset $Q_DHCP_CONF_FILE DEFAULT use_namespaces $Q_USE_NAMESPACE
|
||||
|
||||
# Update database
|
||||
iniset $Q_DHCP_CONF_FILE DEFAULT db_connection "mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/$Q_DB_NAME?charset=utf8"
|
||||
|
Loading…
Reference in New Issue
Block a user