summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcommon/ci/clean.sh2
-rw-r--r--common/ci/setup.sh177
2 files changed, 178 insertions, 1 deletions
diff --git a/common/ci/clean.sh b/common/ci/clean.sh
index 7842762..bb47479 100755
--- a/common/ci/clean.sh
+++ b/common/ci/clean.sh
@@ -215,7 +215,7 @@ if rpm -qa | grep -iE 'libvirt|kvm'; then
fi
echo "${blue}Removing libvirt and kvm packages"
yum -y remove libvirt-*
- yum -y remove qemu-kvm-*
+ yum -y remove *qemu*
else
echo "${blue}libvirt/KVM is not installed${reset}"
fi
diff --git a/common/ci/setup.sh b/common/ci/setup.sh
new file mode 100644
index 0000000..73b0aa6
--- /dev/null
+++ b/common/ci/setup.sh
@@ -0,0 +1,177 @@
+#!/usr/bin/env bash
+
+#Script that install prerequisites
+#author: Szilard Cserey (szilard.cserey@ericsson.com)
+#
+#Installs qemu-kvm, libvirt and prepares networking for Fuel VM
+
+##VARS
+reset=`tput sgr0`
+blue=`tput setaf 4`
+red=`tput setaf 1`
+green=`tput setaf 2`
+interface='enp7s0'
+pxe_bridge='pxebr'
+fuel_gw_ip='10.20.0.1/16'
+##END VARS
+
+##FUNCTIONS
+###check whether qemu-kvm is installed, otherwise install it
+install_qemu_kvm() {
+ echo "${blue}Checking whether qemu-kvm is installed, otherwise install it${reset}"
+ if ! rpm -qa | grep -iE 'qemu-kvm'; then
+ echo "${blue}qemu-kvm is not installed, installing...${reset}"
+ yum -y install qemu-kvm
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+
+###check whether libvirt is installed, otherwise install it
+install_libvirt() {
+ echo "${blue}Checking whether libvirt is installed, otherwise install it${reset}"
+ if ! rpm -qa | grep -iE 'libvirt'; then
+ echo "${blue}libvirt is not installed, installing...${reset}"
+ yum -y install libvirt
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+
+###check whether kvm kernel module is loaded, otherwise load it
+load_kvm_kernel_mod() {
+ echo "${blue}Checking whether kvm kernel module is loaded, otherwise load it${reset}"
+ if ! lsmod | grep -iE 'kvm'; then
+ if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'GenuineIntel' ]]; then
+ echo "${blue}Intel processor identified, loading kernel module kvm-intel${reset}"
+ kernel_mod='kvm-intel'
+ modprobe ${kernel_mod}
+ fi
+ if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'AuthenticAMD' ]]; then
+ echo "${blue}AMD processor identified, loading kernel module kvm-amd${reset}"
+ kernel_mod='kvm-amd'
+ modprobe ${kernel_mod}
+ fi
+ if ! lsmod | grep -iE 'kvm'; then
+ echo "${red}Failed to load kernel module ${kernel_mod}!${reset}"
+ exit 1
+ fi
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+
+###check whether libvirtd service is running otherwise start it
+start_libvirtd_service() {
+ echo "${blue}Checking whether libvirtd service is running otherwise start it${reset}"
+ if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
+ echo "${blue}starting libvirtd service${reset}"
+ systemctl start libvirtd
+ if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
+ echo "${red}Failed to start libvirtd service!${reset}"
+ exit 1
+ fi
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+
+#Check whether interface is UP
+check_interface() {
+ if [ -z $1 ]; then
+ echo "${red}Cannot bring UP, No interface specified${reset}"
+ exit 1
+ fi
+ local interface=$1
+ echo "${blue}Checking whether interface ${interface} is UP${reset}"
+ link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
+ if [[ ${link_state} != 'UP' ]]; then
+ echo "${blue}${interface} state is ${link_state}. Bringing it UP!${reset}"
+ ip link set dev ${interface} up
+ link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
+ if [[ ${link_state} != 'UP' ]]; then
+ echo "${red}Could not bring UP interface ${interface} link state is ${link_state}${reset}"
+ exit 1
+ fi
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+
+setup_pxe_bridge() {
+ #Check whether base interface exists
+ echo "${blue}Checking whether base interface ${interface} exists${reset}"
+ if ! ip link show ${interface}; then
+ echo "${red}Base interface ${interface} does not exists!${reset}"
+ exit 1
+ else
+ echo "${green}OK!${reset}"
+ fi
+
+ #Check whether base interface is UP
+ check_interface ${interface}
+
+ pxe_vid=0
+ pxe_interface="${interface}.${pxe_vid}"
+
+ #Check whether VLAN 0 (PXE) interface exists
+ echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} exists${reset}"
+ if ! ip link show ${pxe_interface}; then
+ echo "${blue}Creating VLAN 0 (PXE) interface ${pxe_interface}${reset}"
+ ip link add link ${interface} name ${pxe_interface} type vlan id ${pxe_vid}
+ else
+ echo "${green}OK!${reset}"
+ fi
+
+ #Check whether VLAN 0 (PXE) interface is UP
+ check_interface ${pxe_interface}
+
+ #Check whether PXE bridge exists
+ echo "${blue}Checking whether PXE bridge ${pxe_bridge} exists${reset}"
+ if brctl show ${pxe_bridge} | grep 'No such device'; then
+ echo "${blue}Creating PXE bridge ${pxe_bridge}${reset}"
+ brctl addbr ${pxe_bridge}
+ else
+ echo "${green}OK!${reset}"
+ fi
+
+ #Check whether PXE bridge is UP
+ check_interface ${pxe_bridge}
+
+ #Add VLAN 0 (PXE) interface to PXE bridge
+ echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} is added to PXE bridge ${pxe_bridge} exists${reset}"
+ if ! brctl show ${pxe_bridge} | grep ${pxe_interface}; then
+ echo "${blue}Adding VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
+ brctl addif ${pxe_bridge} ${pxe_interface}
+ if ! brctl show ${pxe_bridge} | grep ${pxe_interface}; then
+ echo "${red}Could not add VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
+ exit 1
+ fi
+ else
+ echo "${green}OK!${reset}"
+ fi
+
+ #Add Fuel Gateway IP Address to PXE bridge
+ echo "${blue}Checking whether Fuel Gateway IP Address ${fuel_gw_ip} is assigned to PXE bridge ${pxe_bridge}${reset}"
+ if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
+ echo "${blue}Adding Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
+ sudo ip addr add ${fuel_gw_ip} dev ${pxe_bridge}
+ if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
+ echo "${red}Could not add Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
+ exit 1
+ fi
+ else
+ echo "${green}OK!${reset}"
+ fi
+}
+##END FUNCTIONS
+
+main() {
+ install_qemu_kvm
+ install_libvirt
+ load_kvm_kernel_mod
+ start_libvirtd_service
+ setup_pxe_bridge
+}
+
+main "$@"