Adding prep script for Fuel Deployment
[genesis.git] / common / ci / setup.sh
1 #!/usr/bin/env bash
2
3 #Script that install prerequisites
4 #author: Szilard Cserey (szilard.cserey@ericsson.com)
5 #
6 #Installs qemu-kvm, libvirt and prepares networking for Fuel VM
7
8 ##VARS
9 reset=`tput sgr0`
10 blue=`tput setaf 4`
11 red=`tput setaf 1`
12 green=`tput setaf 2`
13 interface='enp7s0'
14 pxe_bridge='pxebr'
15 fuel_gw_ip='10.20.0.1/16'
16 ##END VARS
17
18 ##FUNCTIONS
19 ###check whether qemu-kvm is installed, otherwise install it
20 install_qemu_kvm() {
21   echo "${blue}Checking whether qemu-kvm is installed, otherwise install it${reset}"
22   if ! rpm -qa | grep -iE 'qemu-kvm'; then
23     echo "${blue}qemu-kvm is not installed, installing...${reset}"
24     yum -y install qemu-kvm
25   else
26     echo "${green}OK!${reset}"
27   fi
28 }
29
30 ###check whether libvirt is installed, otherwise install it
31 install_libvirt() {
32   echo "${blue}Checking whether libvirt is installed, otherwise install it${reset}"
33   if ! rpm -qa | grep -iE 'libvirt'; then
34     echo "${blue}libvirt is not installed, installing...${reset}"
35     yum -y install libvirt
36   else
37     echo "${green}OK!${reset}"
38   fi
39 }
40
41 ###check whether kvm kernel module is loaded, otherwise load it
42 load_kvm_kernel_mod() {
43   echo "${blue}Checking whether kvm kernel module is loaded, otherwise load it${reset}"
44   if ! lsmod | grep -iE 'kvm'; then
45     if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'GenuineIntel' ]]; then
46       echo "${blue}Intel processor identified, loading kernel module kvm-intel${reset}"
47       kernel_mod='kvm-intel'
48       modprobe ${kernel_mod}
49     fi
50     if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'AuthenticAMD' ]]; then
51       echo "${blue}AMD processor identified, loading kernel module kvm-amd${reset}"
52       kernel_mod='kvm-amd'
53       modprobe ${kernel_mod}
54     fi
55     if ! lsmod | grep -iE 'kvm'; then
56       echo "${red}Failed to load kernel module ${kernel_mod}!${reset}"
57       exit 1
58     fi
59   else
60     echo "${green}OK!${reset}"
61   fi
62 }
63
64 ###check whether libvirtd service is running otherwise start it
65 start_libvirtd_service() {
66   echo "${blue}Checking whether libvirtd service is running otherwise start it${reset}"
67   if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
68     echo "${blue}starting libvirtd service${reset}"
69     systemctl start libvirtd
70     if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
71       echo "${red}Failed to start libvirtd service!${reset}"
72       exit 1
73     fi
74   else
75     echo "${green}OK!${reset}"
76   fi
77 }
78
79 #Check whether interface is UP
80 check_interface() {
81   if [ -z $1 ]; then
82     echo "${red}Cannot bring UP, No interface specified${reset}"
83     exit 1
84   fi
85   local interface=$1
86   echo "${blue}Checking whether interface ${interface} is UP${reset}"
87   link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
88   if [[ ${link_state} != 'UP' ]]; then
89     echo "${blue}${interface} state is ${link_state}. Bringing it UP!${reset}"
90     ip link set dev ${interface} up
91     link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
92     if [[ ${link_state} != 'UP' ]]; then
93       echo "${red}Could not bring UP interface ${interface} link state is ${link_state}${reset}"
94       exit 1
95     fi
96   else
97     echo "${green}OK!${reset}"
98   fi
99 }
100
101 setup_pxe_bridge() {
102   #Check whether base interface exists
103   echo "${blue}Checking whether base interface ${interface} exists${reset}"
104   if ! ip link show ${interface}; then
105     echo "${red}Base interface ${interface} does not exists!${reset}"
106     exit 1
107   else
108     echo "${green}OK!${reset}"
109   fi
110
111   #Check whether base interface is UP
112   check_interface ${interface}
113
114   pxe_vid=0
115   pxe_interface="${interface}.${pxe_vid}"
116
117   #Check whether VLAN 0 (PXE) interface exists
118   echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} exists${reset}"
119   if ! ip link show ${pxe_interface}; then
120     echo "${blue}Creating  VLAN 0 (PXE) interface ${pxe_interface}${reset}"
121     ip link add link ${interface} name ${pxe_interface} type vlan id ${pxe_vid}
122   else
123     echo "${green}OK!${reset}"
124   fi
125
126   #Check whether VLAN 0 (PXE) interface is UP
127   check_interface ${pxe_interface}
128
129   #Check whether PXE bridge exists
130   echo "${blue}Checking whether PXE bridge ${pxe_bridge} exists${reset}"
131   if brctl show ${pxe_bridge} | grep 'No such device'; then
132     echo "${blue}Creating PXE bridge ${pxe_bridge}${reset}"
133     brctl addbr ${pxe_bridge}
134   else
135     echo "${green}OK!${reset}"
136   fi
137
138   #Check whether PXE bridge is UP
139   check_interface ${pxe_bridge}
140
141   #Add VLAN 0 (PXE) interface to PXE bridge
142   echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} is added to PXE bridge ${pxe_bridge} exists${reset}"
143   if ! brctl show ${pxe_bridge} | grep ${pxe_interface}; then
144     echo "${blue}Adding VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
145     brctl addif ${pxe_bridge} ${pxe_interface}
146     if ! brctl show ${pxe_bridge} | grep ${pxe_interface}; then
147       echo "${red}Could not add VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
148       exit 1
149     fi
150   else
151     echo "${green}OK!${reset}"
152   fi
153
154   #Add Fuel Gateway IP Address to PXE bridge
155   echo "${blue}Checking whether Fuel Gateway IP Address ${fuel_gw_ip} is assigned to PXE bridge ${pxe_bridge}${reset}"
156   if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
157     echo "${blue}Adding Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
158     sudo ip addr add ${fuel_gw_ip} dev ${pxe_bridge}
159     if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
160       echo "${red}Could not add Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
161       exit 1
162     fi
163   else
164     echo "${green}OK!${reset}"
165   fi
166 }
167 ##END FUNCTIONS
168
169 main() {
170   install_qemu_kvm
171   install_libvirt
172   load_kvm_kernel_mod
173   start_libvirtd_service
174   setup_pxe_bridge
175 }
176
177 main "$@"