3 #Script that install prerequisites
4 #author: Szilard Cserey (szilard.cserey@ericsson.com)
6 #Installs qemu-kvm, libvirt and prepares networking for Fuel VM
13 private_interface='enp6s0'
14 public_interface='enp8s0'
16 fuel_gw_ip='10.20.0.1/16'
18 management_interface="${private_interface}.${management_vid}"
22 ###check whether qemu-kvm is installed, otherwise install it
24 echo "${blue}Checking whether qemu-kvm is installed, otherwise install it${reset}"
25 if ! rpm -qa | grep -iE 'qemu-kvm'; then
26 echo "${blue}qemu-kvm is not installed, installing...${reset}"
27 yum -y install qemu-kvm
29 echo "${green}OK!${reset}"
33 ###check whether libvirt is installed, otherwise install it
35 echo "${blue}Checking whether libvirt is installed, otherwise install it${reset}"
36 if ! rpm -qa | grep -iE 'libvirt'; then
37 echo "${blue}libvirt is not installed, installing...${reset}"
38 yum -y install libvirt
40 echo "${green}OK!${reset}"
44 ###check whether kvm kernel module is loaded, otherwise load it
45 load_kvm_kernel_mod() {
46 echo "${blue}Checking whether kvm kernel module is loaded, otherwise load it${reset}"
47 if ! lsmod | grep -iE 'kvm'; then
48 if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'GenuineIntel' ]]; then
49 echo "${blue}Intel processor identified, loading kernel module kvm-intel${reset}"
50 kernel_mod='kvm-intel'
51 modprobe ${kernel_mod}
53 if [[ `lscpu | grep 'Vendor ID' | awk 'BEGIN { FS = ":" } ; {print $2}' | tr -d ' '` == 'AuthenticAMD' ]]; then
54 echo "${blue}AMD processor identified, loading kernel module kvm-amd${reset}"
56 modprobe ${kernel_mod}
58 if ! lsmod | grep -iE 'kvm'; then
59 echo "${red}Failed to load kernel module ${kernel_mod}!${reset}"
63 echo "${green}OK!${reset}"
67 ###check whether libvirtd service is running otherwise start it
68 start_libvirtd_service() {
69 echo "${blue}Checking whether libvirtd service is running otherwise start it${reset}"
70 if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
71 echo "${blue}starting libvirtd service${reset}"
72 systemctl start libvirtd
73 if ! sudo systemctl status libvirtd | grep -iE 'active \(running\)'; then
74 echo "${red}Failed to start libvirtd service!${reset}"
78 echo "${green}OK!${reset}"
83 #Check whether interface exists
84 check_interface_exists() {
86 echo "${red}Cannot check whether interface exists! No interface specified!${reset}"
90 #Check whether interface exists
91 echo "${blue}Checking whether interface ${interface} exists${reset}"
92 if ! ip link show ${interface}; then
93 echo "${red}Interface ${interface} does not exists!${reset}"
96 echo "${green}OK!${reset}"
100 #Check whether interface is UP
101 check_interface_up() {
103 echo "${red}Cannot check whether interface is UP! No interface specified!${reset}"
108 #Check whether interface is UP
109 echo "${blue}Checking whether interface ${interface} is UP${reset}"
110 link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
111 if [[ ${link_state} != 'UP' ]]; then
112 echo "${blue}${interface} state is ${link_state}. Bringing it UP!${reset}"
113 ip link set dev ${interface} up
115 link_state=$(ip link show ${interface} | grep -oP 'state \K[^ ]+')
116 if [[ ${link_state} == 'DOWN' ]]; then
117 echo "${red}Could not bring UP interface ${interface} link state is ${link_state}${reset}"
121 echo "${green}OK!${reset}"
125 #Create VLAN interface
126 create_vlan_interface() {
128 echo "${red}Cannot create VLAN interface. No base interface specified!${reset}"
132 echo "${red}Cannot create VLAN interface. No VLAN ID specified!${reset}"
136 local base_interface=$1
138 local interface="${base_interface}.${vid}"
140 echo "${blue}Checking whether VLAN ${vid} interface ${interface} exists, otherwise create it${reset}"
141 if ! ip link show ${interface}; then
142 echo "${blue}Creating VLAN ${vid} interface ${interface}${reset}"
143 ip link add link ${base_interface} name ${interface} type vlan id ${vid}
145 echo "${green}OK!${reset}"
148 #Check whether VLAN interface is UP
149 check_interface_up ${interface}
155 pxe_interface="${private_interface}.${pxe_vid}"
156 #Check whether VLAN 0 (PXE) interface exists, otherwise create it
157 create_vlan_interface ${private_interface} ${pxe_vid}
159 #Check whether PXE bridge exists
160 echo "${blue}Checking whether PXE bridge ${pxe_bridge} exists${reset}"
161 if brctl show ${pxe_bridge} 2>&1 | grep 'No such device'; then
162 echo "${blue}Creating PXE bridge ${pxe_bridge}${reset}"
163 brctl addbr ${pxe_bridge}
165 echo "${green}OK!${reset}"
168 #Add VLAN 0 (PXE) interface to PXE bridge
169 echo "${blue}Checking whether VLAN 0 (PXE) interface ${pxe_interface} is added to PXE bridge ${pxe_bridge} exists${reset}"
170 if ! brctl show ${pxe_bridge} 2>&1 | grep ${pxe_interface}; then
171 echo "${blue}Adding VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
172 brctl addif ${pxe_bridge} ${pxe_interface}
173 if ! brctl show ${pxe_bridge} 2>&1 | grep ${pxe_interface}; then
174 echo "${red}Could not add VLAN 0 (PXE) interface ${pxe_interface} to PXE bridge ${pxe_bridge}${reset}"
178 echo "${green}OK!${reset}"
181 #Check whether PXE bridge is UP
182 check_interface_up ${pxe_bridge}
184 #Add Fuel Gateway IP Address to PXE bridge
185 echo "${blue}Checking whether Fuel Gateway IP Address ${fuel_gw_ip} is assigned to PXE bridge ${pxe_bridge}${reset}"
186 if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
187 echo "${blue}Adding Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
188 sudo ip addr add ${fuel_gw_ip} dev ${pxe_bridge}
189 if ! ip addr show ${pxe_bridge} | grep ${fuel_gw_ip}; then
190 echo "${red}Could not add Fuel Gateway IP Address ${fuel_gw_ip} to PXE bridge ${pxe_bridge}${reset}"
194 echo "${green}OK!${reset}"
198 ###check whether access to public network is granted
199 check_access_enabled_to_public_network() {
200 #Check whether IP forwarding is enabled
201 echo "${blue}Checking whether IP Forwarding is enabled ${reset}"
202 if ! sysctl net.ipv4.ip_forward | grep "net.ipv4.ip_forward = 1"; then
203 sysctl -w net.ipv4.ip_forward=1
204 if ! sysctl net.ipv4.ip_forward | grep "net.ipv4.ip_forward = 1"; then
205 echo "${red}IP Forwarding could not be enabled!${reset}"
209 echo "${green}OK!${reset}"
212 echo "${blue}Checking whether access is granted to public network through interface ${public_interface}${reset}"
213 if ! sudo iptables -t nat -L POSTROUTING -v | grep "MASQUERADE.*${public_interface}.*anywhere.*anywhere"; then
214 echo "${blue}Enable access to public network through interface ${public_interface}${reset}"
215 iptables -t nat -A POSTROUTING -o ${public_interface} -j MASQUERADE
217 echo "${green}OK!${reset}"
221 ###setup Openstack Management Interface
222 create_openstack_management_interface() {
223 #Check whether Openstack Management interface exists, otherwise create it
224 create_vlan_interface ${private_interface} ${management_vid}
226 echo "${blue}Moving IP addresses from interface ${private_interface} to VLAN ${management_vid} interface ${management_interface}${reset}"
227 private_interface_ip_addr_list=$(ip addr show ${private_interface} | grep -oP 'inet \K[^ ]+')
228 if [[ ! -z ${private_interface_ip_addr_list} ]]; then
229 echo -e "${blue}Found IP addresses on interface ${private_interface}:\n${private_interface_ip_addr_list}${reset}"
230 for private_interface_ip_addr in ${private_interface_ip_addr_list}
232 echo "${blue}Removing IP address ${private_interface_ip_addr} from interface ${private_interface}${reset}"
233 ip addr del ${private_interface_ip_addr} dev ${private_interface}
234 if ip addr show ${private_interface} | grep ${private_interface_ip_addr}; then
235 echo "${red}Could not remove IP address ${private_interface_ip_addr} from interface ${private_interface}${reset}"
238 if ! ip addr show ${management_interface} | grep ${private_interface_ip_addr}; then
239 echo "${blue}Adding IP address ${private_interface_ip_addr} to VLAN ${management_vid} interface ${management_interface}${reset}"
240 ip addr add ${private_interface_ip_addr} dev ${management_interface}
241 if ! ip addr show ${management_interface} | grep ${private_interface_ip_addr}; then
242 echo "${red}Could not set IP address ${private_interface_ip_addr} to VLAN ${management_vid} interface ${management_interface}${reset}"
246 echo "${blue}VLAN ${management_vid} interface ${management_interface} already has assigned to itself this IP address ${private_interface_ip_addr}${reset}"
250 echo "${red}No IP Address is assigned to interface ${private_interface}, there isn't any IP address to move to interface ${management_interface}${reset}"
260 start_libvirtd_service
261 check_interface_exists ${private_interface}
262 check_interface_up ${private_interface}
263 check_interface_exists ${public_interface}
264 check_interface_up ${public_interface}
266 check_access_enabled_to_public_network
267 create_openstack_management_interface