Pin software dep versions, various Foreman scripts
[genesis.git] / foreman / ci / clean.sh
1 #!/usr/bin/env bash
2
3 #Clean script to uninstall provisioning server for Foreman/QuickStack
4 #author: Tim Rozet (trozet@redhat.com)
5 #
6 #Uses Vagrant and VirtualBox
7 #
8 #Destroys Vagrant VM running in /tmp/bgs_vagrant
9 #Shuts down all nodes found in Khaleesi settings
10 #Removes hypervisor kernel modules (VirtualBox)
11
12 ##VARS
13 reset=`tput sgr0`
14 blue=`tput setaf 4`
15 red=`tput setaf 1`
16 green=`tput setaf 2`
17 ##END VARS
18
19 ##FUNCTIONS
20 display_usage() {
21   echo -e "\n\n${blue}This script is used to uninstall Foreman/QuickStack Installer and Clean OPNFV Target System${reset}\n\n"
22   echo -e "\nUsage:\n$0 [arguments] \n"
23   echo -e "\n   -no_parse : No variable parsing into config. Flag. \n"
24   echo -e "\n   -base_config : Full path of ksgen settings file to parse. Required.  Will provide BMC info to shutdown hosts.  Example:  -base_config /opt/myinventory.yml \n"
25 }
26
27 ##END FUNCTIONS
28
29 if [[ ( $1 == "--help") ||  $1 == "-h" ]]; then
30     display_usage
31     exit 0
32 fi
33
34 echo -e "\n\n${blue}This script is used to uninstall Foreman/QuickStack Installer and Clean OPNFV Target System${reset}\n\n"
35 echo "Use -h to display help"
36 sleep 2
37
38 while [ "`echo $1 | cut -c1`" = "-" ]
39 do
40     echo $1
41     case "$1" in
42         -base_config)
43                 base_config=$2
44                 shift 2
45             ;;
46         *)
47                 display_usage
48                 exit 1
49             ;;
50 esac
51 done
52
53
54 # Install ipmitool
55 # Major version is pinned to force some consistency for Arno
56 if ! yum list installed | grep -i ipmitool; then
57   if ! yum -y install ipmitool-1*; then
58     echo "${red}Unable to install ipmitool!${reset}"
59     exit 1
60   fi
61 else
62   echo "${blue}Skipping ipmitool as it is already installed!${reset}"
63 fi
64
65 ###find all the bmc IPs and number of nodes
66 node_counter=0
67 output=`grep bmc_ip $base_config | grep -Eo '[0-9]+.[0-9]+.[0-9]+.[0-9]+'`
68 for line in ${output} ; do
69   bmc_ip[$node_counter]=$line
70   ((node_counter++))
71 done
72
73 max_nodes=$((node_counter-1))
74
75 ###find bmc_users per node
76 node_counter=0
77 output=`grep bmc_user $base_config | sed 's/\s*bmc_user:\s*//'`
78 for line in ${output} ; do
79   bmc_user[$node_counter]=$line
80   ((node_counter++))
81 done
82
83 ###find bmc_pass per node
84 node_counter=0
85 output=`grep bmc_pass $base_config | sed 's/\s*bmc_pass:\s*//'`
86 for line in ${output} ; do
87   bmc_pass[$node_counter]=$line
88   ((node_counter++)) 
89 done
90
91 for mynode in `seq 0 $max_nodes`; do
92   echo "${blue}Node: ${bmc_ip[$mynode]} ${bmc_user[$mynode]} ${bmc_pass[$mynode]} ${reset}"
93   if ipmitool -I lanplus -P ${bmc_pass[$mynode]} -U ${bmc_user[$mynode]} -H ${bmc_ip[$mynode]} chassis power off; then
94     echo "${blue}Node: $mynode, ${bmc_ip[$mynode]} powered off!${reset}"
95   else
96     echo "${red}Error: Unable to power off $mynode, ${bmc_ip[$mynode]} ${reset}"
97     exit 1
98   fi
99 done
100
101 ###check to see if vbox is installed
102 vboxpkg=`rpm -qa | grep VirtualBox`
103 if [ $? -eq 0 ]; then
104   skip_vagrant=0
105 else
106   skip_vagrant=1
107 fi
108
109 ###destroy vagrant
110 if [ $skip_vagrant -eq 0 ]; then
111   cd /tmp/bgs_vagrant
112   if vagrant destroy -f; then
113     echo "${blue}Successfully destroyed Foreman VM ${reset}"
114   else
115     echo "${red}Unable to destroy Foreman VM ${reset}"
116     echo "${blue}Checking if vagrant was already destroyed and no process is active...${reset}"
117     if ps axf | grep vagrant; then
118       echo "${red}Vagrant VM still exists...exiting ${reset}"
119       exit 1
120     else
121       echo "${blue}Vagrant process doesn't exist.  Moving on... ${reset}"
122     fi
123   fi
124
125   ###kill virtualbox
126   echo "${blue}Killing VirtualBox ${reset}"
127   killall virtualbox
128   killall VBoxHeadless
129
130   ###remove virtualbox
131   echo "${blue}Removing VirtualBox ${reset}"
132   yum -y remove $vboxpkg
133
134 else
135   echo "${blue}Skipping Vagrant destroy + Vbox Removal as VirtualBox package is already removed ${reset}"
136 fi
137
138
139 ###remove kernel modules
140 echo "${blue}Removing kernel modules ${reset}"
141 for kernel_mod in vboxnetadp vboxnetflt vboxpci vboxdrv; do
142   if ! rmmod $kernel_mod; then
143     if rmmod $kernel_mod 2>&1 | grep -i 'not currently loaded'; then
144       echo "${blue} $kernel_mod is not currently loaded! ${reset}"
145     else
146       echo "${red}Error trying to remove Kernel Module: $kernel_mod ${reset}"
147       exit 1
148     fi
149   else
150     echo "${blue}Removed Kernel Module: $kernel_mod ${reset}"
151   fi
152 done