From 739c38d1b44d849a21daf73a2728ceb99a0eac60 Mon Sep 17 00:00:00 2001
From: mwiegand <mwiegand@seibert-media.net>
Date: Tue, 29 Mar 2022 12:31:04 +0200
Subject: [PATCH] only reboot where necessary

---
 bin/apt_upgrade_and_restart_all | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/bin/apt_upgrade_and_restart_all b/bin/apt_upgrade_and_restart_all
index 873d396..7e977e2 100755
--- a/bin/apt_upgrade_and_restart_all
+++ b/bin/apt_upgrade_and_restart_all
@@ -7,9 +7,10 @@ from ipaddress import ip_interface
 repo = Repository(dirname(dirname(realpath(__file__))))
 nodes = [
     node
-        for node in repo.nodes_in_group('debian')
+        for node in sorted(repo.nodes_in_group('debian'))
         if not node.dummy
 ]
+reboot_nodes = []
 
 print('updating nodes:', sorted(node.name for node in nodes))
 
@@ -21,13 +22,16 @@ for node in nodes:
     print('--------------------------------------')
     repo.libs.wol.wake(node)
     print(node.run('DEBIAN_FRONTEND=noninteractive apt update').stdout.decode())
-    print(node.run('DEBIAN_FRONTEND=noninteractive apt -y dist-upgrade').stdout.decode())
+    print(node.run('DEBIAN_FRONTEND=noninteractive apt list --upgradable').stdout.decode())
+    if int(node.run('DEBIAN_FRONTEND=noninteractive apt list --upgradable 2> /dev/null | grep upgradable | wc -l').stdout.decode()):
+        print(node.run('DEBIAN_FRONTEND=noninteractive apt -y dist-upgrade').stdout.decode())
+        reboot_nodes.append(node)
 
 # REBOOT IN ORDER
 
 wireguard_servers = [
     node
-        for node in nodes
+        for node in reboot_nodes
         if node.has_bundle('wireguard')
         and (
             ip_interface(node.metadata.get('wireguard/my_ip')).network.prefixlen <
@@ -37,7 +41,7 @@ wireguard_servers = [
 
 wireguard_s2s = [
     node
-        for node in nodes
+        for node in reboot_nodes
         if node.has_bundle('wireguard')
         and (
             ip_interface(node.metadata.get('wireguard/my_ip')).network.prefixlen ==
@@ -47,12 +51,11 @@ wireguard_s2s = [
 
 everything_else = [
     node
-        for node in nodes
+        for node in reboot_nodes
         if not node.has_bundle('wireguard')
 ]
 
 print('======================================')
-print(len(everything_else), len(wireguard_s2s), len(wireguard_servers))
 
 for node in [
     *everything_else,