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