From dddec765a06dd4cf4260e79c2cca0beaa549aba6 Mon Sep 17 00:00:00 2001 From: Tim Rozet Date: Thu, 3 Sep 2015 17:12:11 -0400 Subject: [PATCH] Adds functionality to modify VM resources VM resources (vcpus, memory, disk size) are now configurable in the opnfv_ksgen_settings files. Each node in the ksgen settings file now has "memory, cpus, disk" attributes: - cpus is an integer number of CPUs to assign to the VM - memory is an integer size in kilobytes - disk is an integer size in gigabytes The vagrant box vmdk is resized for each VM. Each VM will then modify its partition to the new size, execute the normal reboot, then extend the physical+logical volumes and filesystem using vagrant provisioning scripts. JIRA: APEX-1 Change-Id: I471319db14d2189052961b2f533c65850ebeb1e7 Signed-off-by: Tim Rozet (cherry picked from commit 5384a722ffae47bc3519512d34802102ebc7be5b) --- foreman/ci/Vagrantfile | 4 +- foreman/ci/deploy.sh | 91 +++++++++++++++++++++++++++++-- foreman/ci/opnfv_ksgen_settings.yml | 12 ++++ foreman/ci/opnfv_ksgen_settings_no_HA.yml | 6 ++ foreman/ci/resize_lvm.sh | 37 +++++++++++++ foreman/ci/resize_partition.sh | 33 +++++++++++ 6 files changed, 177 insertions(+), 6 deletions(-) create mode 100755 foreman/ci/resize_lvm.sh create mode 100755 foreman/ci/resize_partition.sh diff --git a/foreman/ci/Vagrantfile b/foreman/ci/Vagrantfile index 5550976..c7dfc03 100644 --- a/foreman/ci/Vagrantfile +++ b/foreman/ci/Vagrantfile @@ -80,10 +80,11 @@ Vagrant.configure(2) do |config| # sudo apt-get update # sudo apt-get install -y apache2 # SHELL - + config.ssh.username = 'root' config.ssh.password = 'vagrant' config.ssh.insert_key = 'true' + config.vm.provision :shell, path: "resize_partition.sh" config.vm.provision "ansible" do |ansible| ansible.playbook = "reload_playbook.yml" end @@ -97,4 +98,5 @@ Vagrant.configure(2) do |config| config.vm.provision :shell, :inline => "systemctl stop dhcpd" config.vm.provision :shell, :inline => "systemctl disable dhcpd" end + config.vm.provision :shell, path: "resize_lvm.sh" end diff --git a/foreman/ci/deploy.sh b/foreman/ci/deploy.sh index 29ad83c..4c0bf10 100755 --- a/foreman/ci/deploy.sh +++ b/foreman/ci/deploy.sh @@ -29,6 +29,8 @@ declare -A controllers_ip_arr declare -A admin_ip_arr declare -A public_ip_arr +vagrant_box_dir=~/.vagrant.d/boxes/opnfv-VAGRANTSLASH-centos-7.0/1.0.0/virtualbox/ +vagrant_box_vmdk=box-disk1.vmdk vm_dir=/var/opt/opnfv script=`realpath $0` ##END VARS @@ -1023,6 +1025,19 @@ start_virtual_nodes() { node_type=config_nodes_${node}_type node_type=$(eval echo \$$node_type) + ##modify memory and cpu + node_memory=$(eval echo \${config_nodes_${node}_memory}) + node_vcpus=$(eval echo \${config_nodes_${node}_cpus}) + node_storage=$(eval echo \${config_nodes_${node}_disk}) + + sed -i 's/^.*vb.memory =.*$/ vb.memory = '"$node_memory"'/' Vagrantfile + sed -i 's/^.*vb.cpus =.*$/ vb.cpus = '"$node_vcpus"'/' Vagrantfile + + if ! resize_vagrant_disk $node_storage; then + echo "${red}Error while resizing vagrant box to size $node_storage for $node! ${reset}" + exit 1 + fi + ##trozet test make compute nodes wait 20 minutes if [ "$compute_wait_completed" = false ] && [ "$node_type" != "controller" ]; then echo "${blue}Waiting 20 minutes for Control nodes to install before continuing with Compute nodes..." @@ -1101,11 +1116,6 @@ start_virtual_nodes() { sed -i 's/bootstrap.sh/vm_nodes_provision.sh/' Vagrantfile ## modify default_gw to be node_default_gw sed -i 's/^.*default_gw =.*$/ default_gw = '\""$node_default_gw"\"'/' Vagrantfile - ## modify VM memory to be 4gig - ##if node type is controller - if [ "$node_type" == "controller" ]; then - sed -i 's/^.*vb.memory =.*$/ vb.memory = 4096/' Vagrantfile - fi echo "${blue}Starting Vagrant Node $node! ${reset}" ##stand up vagrant if ! vagrant up; then @@ -1226,6 +1236,77 @@ check_baremetal_nodes() { fi } +##resizes vagrant disk (cannot shrink) +##params: size in GB +##usage: resize_vagrant_disk 100 +resize_vagrant_disk() { + if [[ "$1" < 40 ]]; then + echo "${blue}Warn: Requested disk size cannot be less than 40, using 40 as new size${reset}" + new_size_gb=40 + else + new_size_gb=$1 + fi + + if ! vagrant box list | grep opnfv; then + vagrant box remove -f opnfv/centos-7.0 + if ! vagrant box add opnfv/centos-7.0 --provider virtualbox; then + echo "${red}Unable to reclone vagrant box! Exiting...${reset}" + exit 1 + fi + fi + + pushd $vagrant_box_dir + + # Close medium to make sure we can modify it + vboxmanage closemedium disk $vagrant_box_vmdk + + cur_size=$(vboxmanage showhdinfo $vagrant_box_vmdk | grep -i capacity | grep -Eo [0-9]+) + cur_size_gb=$((cur_size / 1024)) + + if [ "$cur_size_gb" -eq "$new_size_gb" ]; then + echo "${blue}Info: Disk size already ${cur_size_gb} ${reset}" + popd + return + elif [[ "$new_size_gb" < "$cur_size_gb" ]] ; then + echo "${blue}Info: Requested disk is less than ${cur_size_gb} ${reset}" + echo "${blue}Re-adding vagrant box${reset}" + if vagrant box list | grep opnfv; then + popd + vagrant box remove -f opnfv/centos-7.0 + if ! vagrant box add opnfv/centos-7.0 --provider virtualbox; then + echo "${red}Unable to reclone vagrant box! Exiting...${reset}" + exit 1 + fi + pushd $vagrant_box_dir + fi + fi + + new_size=$((new_size_gb * 1024)) + if ! vboxmanage clonehd $vagrant_box_vmdk tmp-disk.vdi --format vdi; then + echo "${red}Error: Unable to clone ${vagrant_box_vmdk}${reset}" + popd + return 1 + fi + + if ! vboxmanage modifyhd tmp-disk.vdi --resize $new_size; then + echo "${red}Error: Unable modify tmp-disk.vdi to ${new_size}${reset}" + popd + return 1 + fi + + if ! vboxmanage clonehd tmp-disk.vdi resized-disk.vmdk --format vmdk; then + echo "${red}Error: Unable clone tmp-disk.vdi to vmdk${reset}" + popd + return 1 + fi + + vboxmanage closemedium disk tmp-disk.vdi --delete + rm -f tmp-disk.vdi $vagrant_box_vmdk + cp -f resized-disk.vmdk $vagrant_box_vmdk + vboxmanage closemedium disk resized-disk.vmdk --delete + popd +} + ##END FUNCTIONS main() { diff --git a/foreman/ci/opnfv_ksgen_settings.yml b/foreman/ci/opnfv_ksgen_settings.yml index b41a41b..0478c60 100644 --- a/foreman/ci/opnfv_ksgen_settings.yml +++ b/foreman/ci/opnfv_ksgen_settings.yml @@ -114,6 +114,9 @@ nodes: admin_ip: compute_admin ansible_ssh_pass: "Op3nStack" admin_password: "" + cpus: 2 + memory: 2048 + disk: 40 groups: - compute - foreman_nodes @@ -137,6 +140,9 @@ nodes: private_mac: "10:23:45:67:87:AC" ansible_ssh_pass: "Op3nStack" admin_password: "octopus" + cpus: 2 + memory: 4096 + disk: 40 groups: - controller - foreman_nodes @@ -160,6 +166,9 @@ nodes: private_mac: "10:23:45:67:87:AD" ansible_ssh_pass: "Op3nStack" admin_password: "octopus" + cpus: 2 + memory: 4096 + disk: 40 groups: - controller - foreman_nodes @@ -183,6 +192,9 @@ nodes: private_mac: "10:23:45:67:87:AE" ansible_ssh_pass: "Op3nStack" admin_password: "octopus" + cpus: 2 + memory: 4096 + disk: 40 groups: - controller - foreman_nodes diff --git a/foreman/ci/opnfv_ksgen_settings_no_HA.yml b/foreman/ci/opnfv_ksgen_settings_no_HA.yml index 79db257..80a66a6 100644 --- a/foreman/ci/opnfv_ksgen_settings_no_HA.yml +++ b/foreman/ci/opnfv_ksgen_settings_no_HA.yml @@ -81,6 +81,9 @@ nodes: admin_ip: compute_admin ansible_ssh_pass: "Op3nStack" admin_password: "" + cpus: 2 + memory: 2048 + disk: 40 groups: - compute - foreman_nodes @@ -104,6 +107,9 @@ nodes: private_mac: "10:23:45:67:87:AC" ansible_ssh_pass: "Op3nStack" admin_password: "octopus" + cpus: 2 + memory: 4096 + disk: 40 groups: - controller - foreman_nodes diff --git a/foreman/ci/resize_lvm.sh b/foreman/ci/resize_lvm.sh new file mode 100755 index 0000000..64a9c62 --- /dev/null +++ b/foreman/ci/resize_lvm.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +#script for resizing volumes in Foreman/QuickStack VM +#author: Tim Rozet (trozet@redhat.com) +# +#Uses Vagrant and VirtualBox +#VagrantFile uses resize_partition.sh +# +#Pre-requisties: +#Vagrant box disk size already resized +#Partition already resized + +##VARS +reset=`tput sgr0` +blue=`tput setaf 4` +red=`tput setaf 1` +green=`tput setaf 2` + +##END VARS + +echo "${blue}Resizing physical volume${reset}" +if ! pvresize /dev/sda2; then + echo "${red}Unable to resize physical volume${reset}" + exit 1 +else + new_part_size=`pvdisplay | grep -Eo "PV Size\s*[0-9]+\." | awk {'print $3'} | tr -d .` + echo "${blue}New physical volume size: ${new_part_size}${reset}" +fi + +echo "${blue}Resizing logical volume${reset}" +if ! lvextend /dev/mapper/centos-root -r -l +100%FREE; then + echo "${red}Unable to resize logical volume${reset}" + exit 1 +else + new_fs_size=`df -h | grep centos-root | awk '{print $2}'` + echo "${blue}Filesystem resized to: ${new_fs_size}${reset}" +fi diff --git a/foreman/ci/resize_partition.sh b/foreman/ci/resize_partition.sh new file mode 100755 index 0000000..4c5581d --- /dev/null +++ b/foreman/ci/resize_partition.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +#script for extending disk partition in Foreman/QuickStack VM +#author: Tim Rozet (trozet@redhat.com) +# +#Uses Vagrant and VirtualBox +#VagrantFile uses resize_partition.sh +# +#Pre-requisties: +#Vagrant box disk size already resized + +##VARS +reset=`tput sgr0` +blue=`tput setaf 4` +red=`tput setaf 1` +green=`tput setaf 2` + +##END VARS + +echo "${blue}Extending partition...${reset}" +echo "d +2 +n +p + + + +p +t +2 +8e +w +"|fdisk /dev/sda; true -- 2.16.6