Merge "Rework pacemaker constraints from ovs and netns cleanup agents"
[apex-tripleo-heat-templates.git] / extraconfig / tasks / yum_update.sh
1 #!/bin/bash
2
3 # A heat-config-script which runs yum update during a stack-update.
4 # Inputs:
5 #   deploy_action - yum will only be run if this is UPDATE
6 #   update_identifier - yum will only run for previously unused values of update_identifier
7 #   command - yum sub-command to run, defaults to "update"
8 #   command_arguments - yum command arguments, defaults to ""
9
10 echo "Started yum_update.sh on server $deploy_server_id at `date`"
11 echo -n "false" > $heat_outputs_path.update_managed_packages
12
13 if [[ -z "$update_identifier" ]]; then
14     echo "Not running due to unset update_identifier"
15     exit 0
16 fi
17
18 timestamp_dir=/var/lib/overcloud-yum-update
19 mkdir -p $timestamp_dir
20
21 # sanitise to remove unusual characters
22 update_identifier=${update_identifier//[^a-zA-Z0-9-_]/}
23
24 # seconds to wait for this node to rejoin the cluster after update
25 cluster_start_timeout=360
26
27 timestamp_file="$timestamp_dir/$update_identifier"
28 if [[ -a "$timestamp_file" ]]; then
29     echo "Not running for already-run timestamp \"$update_identifier\""
30     exit 0
31 fi
32 touch "$timestamp_file"
33
34 command_arguments=${command_arguments:-}
35
36 list_updates=$(yum list updates)
37
38 if [[ "$list_updates" == "" ]]; then
39     echo "No packages require updating"
40     exit 0
41 fi
42
43 pacemaker_status=$(systemctl is-active pacemaker)
44
45 if [[ "$pacemaker_status" == "active" ]] ; then
46     echo "Pacemaker running, stopping cluster node and doing full package update"
47     pcs cluster stop
48 else
49     echo "Excluding upgrading packages that are handled by config management tooling"
50     command_arguments="$command_arguments --skip-broken"
51     for exclude in $(cat /var/lib/tripleo/installed-packages/* | sort -u); do
52         command_arguments="$command_arguments --exclude $exclude"
53     done
54 fi
55
56 command=${command:-update}
57 full_command="yum -y $command $command_arguments"
58 echo "Running: $full_command"
59
60 result=$($full_command)
61 return_code=$?
62 echo "$result"
63 echo "yum return code: $return_code"
64
65 if [[ "$pacemaker_status" == "active" ]] ; then
66     echo "Starting cluster node"
67     pcs cluster start
68
69     hostname=$(hostname -s)
70     tstart=$(date +%s)
71     while [[ "$(pcs status | grep "^Online" | grep -F -o $hostname)" == "" ]]; do
72         sleep 5
73         tnow=$(date +%s)
74         if (( tnow-tstart > cluster_start_timeout )) ; then
75             echo "ERROR $hostname failed to join cluster in $cluster_start_timeout seconds"
76             pcs status
77             exit 1
78         fi
79     done
80     pcs status
81
82 else
83     echo -n "true" > $heat_outputs_path.update_managed_packages
84 fi
85
86 echo "Finished yum_update.sh on server $deploy_server_id at `date`"
87
88 exit $return_code