212f0f
From 9969cf3eaa23398816d140b319b3277465aa4bb8 Mon Sep 17 00:00:00 2001
212f0f
From: Eduardo Otubo <otubo@redhat.com>
212f0f
Date: Fri, 6 Sep 2019 12:12:11 +0200
212f0f
Subject: [PATCH] Fix for network configuration not persisting after reboot
212f0f
212f0f
RH-Author: Eduardo Otubo <otubo@redhat.com>
212f0f
Message-id: <20190906121211.23172-1-otubo@redhat.com>
212f0f
Patchwork-id: 90300
212f0f
O-Subject: [RHEL-7.8/RHEL-8.1.0 cloud-init PATCH] Fix for network configuration not persisting after reboot
212f0f
Bugzilla: 1593010
212f0f
RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
212f0f
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
212f0f
212f0f
The reasons the configuration does not persist after reboot includes
212f0f
different aspects and they're all fixed on this patch:
212f0f
212f0f
  1) The rpm package doesn't include the systemd-generator and
212f0f
ds-identify. The systemd-generator is called early in the boot process
212f0f
that calls ds-identify to check if there's any Data Source available in
212f0f
the current boot. In the current use case, the Data Source is removed
212f0f
from the VM on the second boot, this means cloud-init should disable
212f0f
itself in order to keep the configuration it did in the first boot.
212f0f
212f0f
  2) Even after adding those scripts, cloud-init was still being
212f0f
executed and the configurations were being lost. The reason for this is
212f0f
that the cloud-init systemd units had a wrong dependency
212f0f
212f0f
     WantedBy: multi-user.target
212f0f
212f0f
     Which would start them every time no matter the return of
212f0f
ds-identify. The fix is to replace the dependency by the systemd unit to
212f0f
cloud-init.target, which is the main cloud-init target enabled - or in
212f0f
this case, disabled by ds-identify. The file cloud-init.target was also
212f0f
missing on rpm package.
212f0f
212f0f
After adding both scripts, the main cloud-init systemd target and
212f0f
adjusting the systemd dependencies the configuration persists after
212f0f
reboots and shutdowns.
212f0f
212f0f
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
212f0f
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
212f0f
---
212f0f
 redhat/cloud-init.spec.template       | 15 +++++++++++++++
212f0f
 rhel/systemd/cloud-config.service     |  2 +-
212f0f
 rhel/systemd/cloud-final.service      |  2 +-
212f0f
 rhel/systemd/cloud-init-local.service |  2 +-
212f0f
 rhel/systemd/cloud-init.service       |  2 +-
212f0f
 rhel/systemd/cloud-init.target        |  7 +++++++
212f0f
 6 files changed, 26 insertions(+), 4 deletions(-)
212f0f
 create mode 100644 rhel/systemd/cloud-init.target
212f0f
212f0f
diff --git a/rhel/systemd/cloud-config.service b/rhel/systemd/cloud-config.service
212f0f
index 12ca9df..f3dcd4b 100644
212f0f
--- a/rhel/systemd/cloud-config.service
212f0f
+++ b/rhel/systemd/cloud-config.service
212f0f
@@ -15,4 +15,4 @@ TimeoutSec=0
212f0f
 StandardOutput=journal+console
212f0f
 
212f0f
 [Install]
212f0f
-WantedBy=multi-user.target
212f0f
+WantedBy=cloud-init.target
212f0f
diff --git a/rhel/systemd/cloud-final.service b/rhel/systemd/cloud-final.service
212f0f
index 32a83d8..739b7e3 100644
212f0f
--- a/rhel/systemd/cloud-final.service
212f0f
+++ b/rhel/systemd/cloud-final.service
212f0f
@@ -16,4 +16,4 @@ KillMode=process
212f0f
 StandardOutput=journal+console
212f0f
 
212f0f
 [Install]
212f0f
-WantedBy=multi-user.target
212f0f
+WantedBy=cloud-init.target
212f0f
diff --git a/rhel/systemd/cloud-init-local.service b/rhel/systemd/cloud-init-local.service
212f0f
index 656eddb..8f9f6c9 100644
212f0f
--- a/rhel/systemd/cloud-init-local.service
212f0f
+++ b/rhel/systemd/cloud-init-local.service
212f0f
@@ -28,4 +28,4 @@ TimeoutSec=0
212f0f
 StandardOutput=journal+console
212f0f
 
212f0f
 [Install]
212f0f
-WantedBy=multi-user.target
212f0f
+WantedBy=cloud-init.target
212f0f
diff --git a/rhel/systemd/cloud-init.service b/rhel/systemd/cloud-init.service
212f0f
index 68fc5f1..d0023a0 100644
212f0f
--- a/rhel/systemd/cloud-init.service
212f0f
+++ b/rhel/systemd/cloud-init.service
212f0f
@@ -22,4 +22,4 @@ TimeoutSec=0
212f0f
 StandardOutput=journal+console
212f0f
 
212f0f
 [Install]
212f0f
-WantedBy=multi-user.target
212f0f
+WantedBy=cloud-init.target
212f0f
diff --git a/rhel/systemd/cloud-init.target b/rhel/systemd/cloud-init.target
212f0f
new file mode 100644
212f0f
index 0000000..083c3b6
212f0f
--- /dev/null
212f0f
+++ b/rhel/systemd/cloud-init.target
212f0f
@@ -0,0 +1,7 @@
212f0f
+# cloud-init target is enabled by cloud-init-generator
212f0f
+# To disable it you can either:
212f0f
+#  a.) boot with kernel cmdline of 'cloud-init=disabled'
212f0f
+#  b.) touch a file /etc/cloud/cloud-init.disabled
212f0f
+[Unit]
212f0f
+Description=Cloud-init target
212f0f
+After=multi-user.target
212f0f
-- 
212f0f
1.8.3.1
212f0f