summaryrefslogtreecommitdiffstats
path: root/foreman
diff options
context:
space:
mode:
authorTim Rozet <trozet@redhat.com>2015-09-03 17:12:11 -0400
committerTim Rozet <trozet@redhat.com>2015-09-10 17:31:52 +0000
commitdddec765a06dd4cf4260e79c2cca0beaa549aba6 (patch)
tree17dd63a95a417019874242ca0f5a86ad2036bf97 /foreman
parent94ecbe154d19dcfe2cac13075adf0a08e10a7e24 (diff)
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 <trozet@redhat.com> (cherry picked from commit 5384a722ffae47bc3519512d34802102ebc7be5b)
Diffstat (limited to 'foreman')
-rw-r--r--foreman/ci/Vagrantfile4
-rwxr-xr-xforeman/ci/deploy.sh91
-rw-r--r--foreman/ci/opnfv_ksgen_settings.yml12
-rw-r--r--foreman/ci/opnfv_ksgen_settings_no_HA.yml6
-rwxr-xr-xforeman/ci/resize_lvm.sh37
-rwxr-xr-xforeman/ci/resize_partition.sh33
6 files changed, 177 insertions, 6 deletions
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