2f10f6f34d
This adds two sets of deployments scripts to aid in setting up virtual environments for testing StarligX, for libvirt/qemu and VirtualBox. This is the first exposure of an internal project and is not fully error-proofed, it should be examined carefully to understand what the scripts will do to your system before running them. The first set of fixes for this to make it less instrusive and work in a shared server follow in https://review.openstack.org/#/c/597643. There are also a couple of bashate errors fixed since that is now a voting job... [NOTE(dtroyer): I converted the original commit message into a README because that's information that needs to be with the scripts.] Needed-by: https://review.openstack.org/#/c/597643 Change-Id: I0a6a148720b7a239380fd48f7ffdab272472e664 Co-authored-by: Lianhao Lu <lianhao.lu@intel.com> Co-authored-by: Brian Avery <brian.avery@intel.com> Co-authored-by: Nakul Dahiwade <nakul.dahiwade@intel.com> Co-authored-by: Yan Chen <yan.chen@intel.com> Co-authored-by: Ruijing Guo<ruijing.guo@intel.com> Co-authored-by: Shuicheng Lin <shuicheng.lin@intel.com> Co-authored-by: Felipe de Jesus Ruiz Garcia <felipe.de.jesus.ruiz.garcia@intel.com> Co-authored-by: Jose Perez Carranza <jose.perez.carranza@intel.com> Co-authored-by: Eddie Ramirez <eddie.ramirez@intel.com> Co-authored-by: Kailun Qin <kailun.qin@intel.com> Co-authored-by: Forrest Zhao <forrest.zhao@intel.com> Co-authored-by: Kailun Qin <kailun.qin@intel.com> Signed-off-by: Abraham Arce <abraham.arce.moreno@intel.com> Signed-off-by: Dean Troyer <dtroyer@gmail.com>
159 lines
6.3 KiB
Bash
Executable File
159 lines
6.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
|
|
|
|
CONFFILE="${1:-standard_controller.conf}"
|
|
source $SCRIPTPATH/$CONFFILE
|
|
|
|
VM_PREFIX_NAME="${VM_PREFIX_NAME:-default-}"
|
|
CONTROLLER_CPUS="${TIC_CONTROLLER_CPUS:-4}"
|
|
CONTROLLER_MEM="${TIC_CONTROLLER_MEM:-8192}"
|
|
CONTROLLER_DISK1="${TIC_CONTROLLER_DISK1:-81920}"
|
|
CONTROLLER_DISK2="${TIC_CONTROLLER_DISK2:-10240}"
|
|
CONTROLLER_DISK3="${TIC_CONTROLLER_DISK3:-4096}"
|
|
ISO="${TIC_INSTALL_ISO:-$SCRIPTPATH/bootimage.iso}"
|
|
|
|
HOSTADD_SCRIPT="$SCRIPTPATH/add_host.sh"
|
|
|
|
declare -a CREATED_VMS
|
|
machine_folder=`VBoxManage list systemproperties | grep "Default machine folder:" | cut -d : -f 2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'`
|
|
|
|
# VRDE port for 1st VM
|
|
vrdeport="${TIC_VDEPORT_START:-13389}"
|
|
function set_vrde {
|
|
vm=$1
|
|
VBoxManage modifyvm "$vm" --vrde on --vrdeaddress 127.0.0.1 --vrdeport $vrdeport
|
|
let vrdeport=vrdeport+1
|
|
}
|
|
|
|
function my_error {
|
|
echo "Error: $1"
|
|
my_trap_clean
|
|
exit 1
|
|
}
|
|
|
|
function my_trap_clean {
|
|
echo "deleting created VMS ${CREATED_VMS[@]}..."
|
|
for vm in ${CREATED_VMS[@]}; do
|
|
VBoxManage unregistervm "$vm" --delete
|
|
done
|
|
}
|
|
|
|
function init_hostonly_net {
|
|
# Create hostonly networks
|
|
VBoxManage list hostonlyifs | grep vboxnet0 && vboxnet="1"
|
|
if [ "x$vboxnet" != "x" ]; then
|
|
VBoxManage list hostonlyifs
|
|
read -r -p "Hostonly network vboxnet0 already existed. Are you sure to reconfigure it? [y/N] " response
|
|
case $response in
|
|
[yY][eE][sS]|[yY])
|
|
echo
|
|
;;
|
|
*)
|
|
my_error "Please make sure it's safe before you remove hostonly network vboxnet0!"
|
|
;;
|
|
esac
|
|
else
|
|
VBoxManage hostonlyif create
|
|
fi
|
|
VBoxManage hostonlyif ipconfig vboxnet0 --ip 10.10.10.1 --netmask 255.255.255.0
|
|
}
|
|
|
|
function createvm {
|
|
vm=$1
|
|
cpus=$2
|
|
mem=$3
|
|
|
|
echo "creating VM ${vm}..."
|
|
# Find if VM already existing
|
|
VBoxManage showvminfo "$vm" &>/dev/null && my_error "VM $vm already existed. Please delete it first"
|
|
CREATED_VMS+=("$vm")
|
|
# Create VM
|
|
VBoxManage createvm --name "$vm" --register
|
|
|
|
# Configure controller VM
|
|
# CPU
|
|
VBoxManage modifyvm "$vm" --ostype Linux_64 --cpus "$cpus" --pae on --longmode on --x2apic on --largepages off
|
|
# Memory
|
|
VBoxManage modifyvm "$vm" --memory "$mem"
|
|
# Network
|
|
VBoxManage modifyvm "$vm" --cableconnected1 on --nic1 hostonly --nictype1 82540EM --hostonlyadapter1 vboxnet0
|
|
VBoxManage modifyvm "$vm" --cableconnected2 on --nic2 intnet --nictype2 82540EM --intnet2 intnet-management-$(whoami) --nicpromisc2 allow-all --nicbootprio2 1
|
|
VBoxManage modifyvm "$vm" --cableconnected3 on --nic3 intnet --nictype3 virtio --intnet3 intnet-data1-$(whoami) --nicpromisc3 allow-all
|
|
VBoxManage modifyvm "$vm" --cableconnected4 on --nic4 intnet --nictype4 virtio --intnet4 intnet-data2-$(whoami) --nicpromisc4 allow-all
|
|
# Storage Medium
|
|
VBoxManage createmedium disk --filename "${machine_folder}/${vm}/${vm}-disk1.vdi" --size $CONTROLLER_DISK1 --format VDI
|
|
VBoxManage createmedium disk --filename "${machine_folder}/${vm}/${vm}-disk2.vdi" --size $CONTROLLER_DISK2 --format VDI
|
|
VBoxManage createmedium disk --filename "${machine_folder}/${vm}/${vm}-disk3.vdi" --size $CONTROLLER_DISK3 --format VDI
|
|
VBoxManage storagectl "$vm" --name SATA --add sata --controller IntelAhci --portcount 4 --hostiocache on --bootable on
|
|
VBoxManage storageattach "$vm" --storagectl SATA --port 0 --device 0 --type hdd --medium "${machine_folder}/${vm}/${vm}-disk1.vdi"
|
|
VBoxManage storageattach "$vm" --storagectl SATA --port 1 --device 0 --type hdd --medium "${machine_folder}/${vm}/${vm}-disk2.vdi"
|
|
VBoxManage storageattach "$vm" --storagectl SATA --port 2 --device 0 --type hdd --medium "${machine_folder}/${vm}/${vm}-disk3.vdi"
|
|
VBoxManage storageattach "$vm" --storagectl SATA --port 3 --device 0 --type dvddrive --medium emptydrive
|
|
# Display
|
|
VBoxManage modifyvm "$vm" --vram 16
|
|
# Audio
|
|
VBoxManage modifyvm "$vm" --audio none
|
|
# Boot Order
|
|
VBoxManage modifyvm "$vm" --boot1 dvd --boot2 disk --boot3 net --boot4 none
|
|
# Other
|
|
VBoxManage modifyvm "$vm" --ioapic on --rtcuseutc on
|
|
# VM sepcific
|
|
# Serial
|
|
VBoxManage modifyvm "$vm" --uart1 0x3F8 4 --uartmode1 server "/tmp/serial_$vm"
|
|
set_vrde "$vm"
|
|
}
|
|
|
|
function clonevm {
|
|
src=$1
|
|
target=$2
|
|
echo "creating VM ${target} from ${src}..."
|
|
# Find if vm already existing
|
|
VBoxManage showvminfo "$target" &>/dev/null && my_error "VM $target already existed. Please delete it first"
|
|
VBoxManage clonevm "$src" --mode machine --name "$target" --register
|
|
CREATED_VMS+=("$target")
|
|
# Serial
|
|
VBoxManage modifyvm "$target" --uart1 0x3F8 4 --uartmode1 server "/tmp/serial_$target"
|
|
set_vrde "$target"
|
|
}
|
|
|
|
trap my_trap_clean SIGINT SIGTERM
|
|
|
|
set -e
|
|
|
|
[[ -f $ISO ]] || my_error "Can not fild install image $ISO"
|
|
|
|
# Init hostonly network
|
|
init_hostonly_net
|
|
|
|
# Create host_add.sh for Compute and Controller node
|
|
rm -f "$HOSTADD_SCRIPT"
|
|
cat <<EOF > "$HOSTADD_SCRIPT"
|
|
#!/usr/bin/env bash
|
|
source /etc/nova/openrc
|
|
EOF
|
|
chmod +x "$HOSTADD_SCRIPT"
|
|
|
|
# Create Contoller VM, at least controller0
|
|
createvm "${VM_PREFIX_NAME}controller-0" $CONTROLLER_CPUS $CONTROLLER_MEM
|
|
COUNTER=1
|
|
while [ $COUNTER -lt $TIC_CONTROLLER_NUM ]; do
|
|
clonevm ${VM_PREFIX_NAME}controller-0 "${VM_PREFIX_NAME}controller-$COUNTER"
|
|
mac=`VBoxManage showvminfo "${VM_PREFIX_NAME}controller-$COUNTER" | grep intnet-management | grep -o "MAC: [0-9a-fA-F]*" | awk '{ print $2 }' | sed 's/../&:/g;s/:$//'`
|
|
echo "system host-add -n ${VM_PREFIX_NAME}controller-$COUNTER -p controller -m $mac" >> "$HOSTADD_SCRIPT"
|
|
let COUNTER=COUNTER+1
|
|
done
|
|
|
|
# Create Compute VM
|
|
COUNTER=0
|
|
while [ $COUNTER -lt $TIC_COMPUTE_NUM ]; do
|
|
clonevm ${VM_PREFIX_NAME}controller-0 "${VM_PREFIX_NAME}compute-$COUNTER"
|
|
mac=`VBoxManage showvminfo "${VM_PREFIX_NAME}compute-$COUNTER" | grep intnet-management | grep -o "MAC: [0-9a-fA-F]*" | awk '{ print $2 }' | sed 's/../&:/g;s/:$//'`
|
|
echo "system host-add -n ${VM_PREFIX_NAME}compute-$COUNTER -p compute -m $mac" >> "$HOSTADD_SCRIPT"
|
|
let COUNTER=COUNTER+1
|
|
done
|
|
|
|
# Start Controller-0 with bootiso.img
|
|
VBoxManage storageattach ${VM_PREFIX_NAME}controller-0 --storagectl SATA --port 3 --device 0 --type dvddrive --medium "$ISO"
|
|
$SCRIPTPATH/start_vm.sh ${VM_PREFIX_NAME}controller-0
|