diff --git a/registry/scripts/upgrade_all.sh b/registry/scripts/upgrade_all.sh new file mode 100755 index 0000000000000000000000000000000000000000..db5cec798d4df65812ca90207aa37c12432a672c --- /dev/null +++ b/registry/scripts/upgrade_all.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Copyright (C) 2018 Tetras Libre <Contact@Tetras-Libre.fr> +# Author: Beniamine, David <David.Beniamine@Tetras-Libre.fr> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +getip(){ + awk '/^lease/{IP=$2} /hardware ethernet/{gsub(";","",$3);if($3 == "'$1'"){print IP}}' \ + < /var/lib/dhcp/dhcpd.leases +} + +runcmd(){ + ssh root@$1 $2 +} + +conf_dir="/etc/registry" +conf_file="$conf_dir/hosts" +broadcast=$(ip a | awk '/inet.*eth1/ {print $4}' | cut -d / -f 1) +wait_time=300 +wait_step=5 + +if [ -z "$1" ] +then + cmd="/opt/primtux-eole/upgrade-session.sh" +else + cmd="$@" +fi + +while read date mac name +do + # Boot machine + wakeonlan -i $broadcast "$mac" + MACS+=" $mac" +done < $conf_file + +# Wait for boot +echo "" +while [ $wait_time > 0 ] +do + echo -ne "Waiting for boot, remaining $wait_time seconds\r" + sleep $wait_step + wait_time=$(($wait_time - $wait_step)) +done + +for mac in $MACS +do + ip=$(getip $mac) + run_cmd $ip $cmd & +done