diff --git a/SOURCES/ci-Azure-Return-static-fallback-address-as-if-failed-to.patch b/SOURCES/ci-Azure-Return-static-fallback-address-as-if-failed-to.patch
new file mode 100644
index 0000000..78269a0
--- /dev/null
+++ b/SOURCES/ci-Azure-Return-static-fallback-address-as-if-failed-to.patch
@@ -0,0 +1,102 @@
+From ae0f85f867714009af7d4ec6c58e30c552bab556 Mon Sep 17 00:00:00 2001
+From: Eduardo Otubo <otubo@redhat.com>
+Date: Wed, 3 Jul 2019 13:06:49 +0200
+Subject: [PATCH 2/2] Azure: Return static fallback address as if failed to
+ find endpoint
+
+RH-Author: Eduardo Otubo <otubo@redhat.com>
+Message-id: <20190703130649.14511-1-otubo@redhat.com>
+Patchwork-id: 89353
+O-Subject: [RHEL-8.0.1/RHEL-8.1.0 cloud-init PATCH] Azure: Return static fallback address as if failed to find endpoint
+Bugzilla: 1691986
+RH-Acked-by: Bandan Das <bsd@redhat.com>
+RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
+
+commit ade77012c8bbcd215b7e26065981194ce1b6a157
+Author: Jason Zions (MSFT) <jasonzio@microsoft.com>
+Date:   Fri May 10 18:38:55 2019 +0000
+
+    Azure: Return static fallback address as if failed to find endpoint
+
+    The Azure data source helper attempts to use information in the dhcp
+    lease to find the Wireserver endpoint (IP address). Under some unusual
+    circumstances, those attempts will fail. This change uses a static
+    address, known to be always correct in the Azure public and sovereign
+    clouds, when the helper fails to locate a valid dhcp lease. This
+    address is not guaranteed to be correct in Azure Stack environments;
+    it's still best to use the information from the lease whenever possible.
+
+Signed-off-by: Eduardo Otubo <otubo@redhat.com>
+Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
+---
+ cloudinit/sources/helpers/azure.py                   | 14 +++++++++++---
+ tests/unittests/test_datasource/test_azure_helper.py |  9 +++++++--
+ 2 files changed, 18 insertions(+), 5 deletions(-)
+
+diff --git a/cloudinit/sources/helpers/azure.py b/cloudinit/sources/helpers/azure.py
+index d3af05e..82c4c8c 100755
+--- a/cloudinit/sources/helpers/azure.py
++++ b/cloudinit/sources/helpers/azure.py
+@@ -20,6 +20,9 @@ from cloudinit.reporting import events
+ 
+ LOG = logging.getLogger(__name__)
+ 
++# This endpoint matches the format as found in dhcp lease files, since this
++# value is applied if the endpoint can't be found within a lease file
++DEFAULT_WIRESERVER_ENDPOINT = "a8:3f:81:10"
+ 
+ azure_ds_reporter = events.ReportEventStack(
+     name="azure-ds",
+@@ -297,7 +300,12 @@ class WALinuxAgentShim(object):
+     @azure_ds_telemetry_reporter
+     def _get_value_from_leases_file(fallback_lease_file):
+         leases = []
+-        content = util.load_file(fallback_lease_file)
++        try:
++            content = util.load_file(fallback_lease_file)
++        except IOError as ex:
++            LOG.error("Failed to read %s: %s", fallback_lease_file, ex)
++            return None
++
+         LOG.debug("content is %s", content)
+         option_name = _get_dhcp_endpoint_option_name()
+         for line in content.splitlines():
+@@ -372,9 +380,9 @@ class WALinuxAgentShim(object):
+                           fallback_lease_file)
+                 value = WALinuxAgentShim._get_value_from_leases_file(
+                     fallback_lease_file)
+-
+         if value is None:
+-            raise ValueError('No endpoint found.')
++            LOG.warning("No lease found; using default endpoint")
++            value = DEFAULT_WIRESERVER_ENDPOINT
+ 
+         endpoint_ip_address = WALinuxAgentShim.get_ip_from_lease_value(value)
+         LOG.debug('Azure endpoint found at %s', endpoint_ip_address)
+diff --git a/tests/unittests/test_datasource/test_azure_helper.py b/tests/unittests/test_datasource/test_azure_helper.py
+index 0255616..bd006ab 100644
+--- a/tests/unittests/test_datasource/test_azure_helper.py
++++ b/tests/unittests/test_datasource/test_azure_helper.py
+@@ -67,12 +67,17 @@ class TestFindEndpoint(CiTestCase):
+         self.networkd_leases.return_value = None
+ 
+     def test_missing_file(self):
+-        self.assertRaises(ValueError, wa_shim.find_endpoint)
++        """wa_shim find_endpoint uses default endpoint if leasefile not found
++        """
++        self.assertEqual(wa_shim.find_endpoint(), "168.63.129.16")
+ 
+     def test_missing_special_azure_line(self):
++        """wa_shim find_endpoint uses default endpoint if leasefile is found
++        but does not contain DHCP Option 245 (whose value is the endpoint)
++        """
+         self.load_file.return_value = ''
+         self.dhcp_options.return_value = {'eth0': {'key': 'value'}}
+-        self.assertRaises(ValueError, wa_shim.find_endpoint)
++        self.assertEqual(wa_shim.find_endpoint(), "168.63.129.16")
+ 
+     @staticmethod
+     def _build_lease_content(encoded_address):
+-- 
+1.8.3.1
+
diff --git a/SOURCES/ci-Fix-for-network-configuration-not-persisting-after-r.patch b/SOURCES/ci-Fix-for-network-configuration-not-persisting-after-r.patch
new file mode 100644
index 0000000..41e27ff
--- /dev/null
+++ b/SOURCES/ci-Fix-for-network-configuration-not-persisting-after-r.patch
@@ -0,0 +1,107 @@
+From 4ab5a61c0f8378889d2a6b78710f49b0fb71d3c9 Mon Sep 17 00:00:00 2001
+From: Miroslav Rezanina <mrezanin@redhat.com>
+Date: Fri, 22 Nov 2019 07:46:38 +0100
+Subject: [PATCH 1/2] Fix for network configuration not persisting after reboot
+
+RH-Author: Eduardo Otubo <otubo@redhat.com>
+Message-id: <20190906121211.23172-1-otubo@redhat.com>
+Patchwork-id: 90300
+O-Subject: [RHEL-7.8/RHEL-8.1.0 cloud-init PATCH] Fix for network configuration not persisting after reboot
+Bugzilla: 1706482
+RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
+RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
+RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+
+The reasons the configuration does not persist after reboot includes
+different aspects and they're all fixed on this patch:
+
+  1) The rpm package doesn't include the systemd-generator and
+ds-identify. The systemd-generator is called early in the boot process
+that calls ds-identify to check if there's any Data Source available in
+the current boot. In the current use case, the Data Source is removed
+from the VM on the second boot, this means cloud-init should disable
+itself in order to keep the configuration it did in the first boot.
+
+  2) Even after adding those scripts, cloud-init was still being
+executed and the configurations were being lost. The reason for this is
+that the cloud-init systemd units had a wrong dependency
+
+     WantedBy: multi-user.target
+
+     Which would start them every time no matter the return of
+ds-identify. The fix is to replace the dependency by the systemd unit to
+cloud-init.target, which is the main cloud-init target enabled - or in
+this case, disabled by ds-identify. The file cloud-init.target was also
+missing on rpm package.
+
+After adding both scripts, the main cloud-init systemd target and
+adjusting the systemd dependencies the configuration persists after
+reboots and shutdowns.
+
+Signed-off-by: Eduardo Otubo <otubo@redhat.com>
+---
+ redhat/cloud-init.spec.template       | 15 +++++++++++++++
+ rhel/systemd/cloud-config.service     |  2 +-
+ rhel/systemd/cloud-final.service      |  2 +-
+ rhel/systemd/cloud-init-local.service |  2 +-
+ rhel/systemd/cloud-init.service       |  2 +-
+ rhel/systemd/cloud-init.target        |  7 +++++++
+ 6 files changed, 26 insertions(+), 4 deletions(-)
+ create mode 100644 rhel/systemd/cloud-init.target
+
+diff --git a/rhel/systemd/cloud-config.service b/rhel/systemd/cloud-config.service
+index 12ca9df..f3dcd4b 100644
+--- a/rhel/systemd/cloud-config.service
++++ b/rhel/systemd/cloud-config.service
+@@ -15,4 +15,4 @@ TimeoutSec=0
+ StandardOutput=journal+console
+ 
+ [Install]
+-WantedBy=multi-user.target
++WantedBy=cloud-init.target
+diff --git a/rhel/systemd/cloud-final.service b/rhel/systemd/cloud-final.service
+index 32a83d8..739b7e3 100644
+--- a/rhel/systemd/cloud-final.service
++++ b/rhel/systemd/cloud-final.service
+@@ -16,4 +16,4 @@ KillMode=process
+ StandardOutput=journal+console
+ 
+ [Install]
+-WantedBy=multi-user.target
++WantedBy=cloud-init.target
+diff --git a/rhel/systemd/cloud-init-local.service b/rhel/systemd/cloud-init-local.service
+index 656eddb..8f9f6c9 100644
+--- a/rhel/systemd/cloud-init-local.service
++++ b/rhel/systemd/cloud-init-local.service
+@@ -28,4 +28,4 @@ TimeoutSec=0
+ StandardOutput=journal+console
+ 
+ [Install]
+-WantedBy=multi-user.target
++WantedBy=cloud-init.target
+diff --git a/rhel/systemd/cloud-init.service b/rhel/systemd/cloud-init.service
+index 68fc5f1..d0023a0 100644
+--- a/rhel/systemd/cloud-init.service
++++ b/rhel/systemd/cloud-init.service
+@@ -22,4 +22,4 @@ TimeoutSec=0
+ StandardOutput=journal+console
+ 
+ [Install]
+-WantedBy=multi-user.target
++WantedBy=cloud-init.target
+diff --git a/rhel/systemd/cloud-init.target b/rhel/systemd/cloud-init.target
+new file mode 100644
+index 0000000..083c3b6
+--- /dev/null
++++ b/rhel/systemd/cloud-init.target
+@@ -0,0 +1,7 @@
++# cloud-init target is enabled by cloud-init-generator
++# To disable it you can either:
++#  a.) boot with kernel cmdline of 'cloud-init=disabled'
++#  b.) touch a file /etc/cloud/cloud-init.disabled
++[Unit]
++Description=Cloud-init target
++After=multi-user.target
+-- 
+1.8.3.1
+
diff --git a/SOURCES/ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch b/SOURCES/ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch
new file mode 100644
index 0000000..5f1e0ef
--- /dev/null
+++ b/SOURCES/ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch
@@ -0,0 +1,86 @@
+From a00bafbfc54b010d7bbe95536929c678288d4c80 Mon Sep 17 00:00:00 2001
+From: Eduardo Otubo <otubo@redhat.com>
+Date: Mon, 1 Jul 2019 11:22:52 +0200
+Subject: [PATCH 1/2] Revert: azure: ensure that networkmanager hook script
+ runs
+
+RH-Author: Eduardo Otubo <otubo@redhat.com>
+Message-id: <20190701112252.32674-1-otubo@redhat.com>
+Patchwork-id: 89162
+O-Subject: [rhel-8.1.0 cloud-init PATCH] Revert: azure: ensure that networkmanager hook script runs
+Bugzilla: 1692914
+RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
+RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
+
+This patch reverts the commit:
+
+commit c48497435e8195dbd87262c2f00e484e63fe3343
+Author: Lars Kellogg-Stedman <lars@redhat.com>
+Date:   Thu Jun 15 12:20:39 2017 -0400
+
+    azure: ensure that networkmanager hook script runs
+
+    The networkmanager hook script was failing to run due to the changes
+    we made to resolve rhbz#1440831.  This corrects the regression by
+    allowing the NM hook script to run regardless of whether or not
+    cloud-init is "enabled".
+
+    Resolves: rhbz#1460206
+    X-downstream-only: true
+
+Resolves: rhbz#1692914
+X-downstream-only: true
+
+Signed-off-by: Eduardo Otubo <otubo@redhat.com>
+Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
+---
+ tools/hook-dhclient        | 3 ++-
+ tools/hook-network-manager | 3 ++-
+ tools/hook-rhel.sh         | 3 ++-
+ 3 files changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/tools/hook-dhclient b/tools/hook-dhclient
+index 181cd51..02122f3 100755
+--- a/tools/hook-dhclient
++++ b/tools/hook-dhclient
+@@ -13,7 +13,8 @@ is_azure() {
+ }
+ 
+ is_enabled() {
+-    # only execute hooks if cloud-init is running on azure
++    # only execute hooks if cloud-init is enabled and on azure
++    [ -e /run/cloud-init/enabled ] || return 1
+     is_azure
+ }
+ 
+diff --git a/tools/hook-network-manager b/tools/hook-network-manager
+index 1d52cad..67d9044 100755
+--- a/tools/hook-network-manager
++++ b/tools/hook-network-manager
+@@ -13,7 +13,8 @@ is_azure() {
+ }
+ 
+ is_enabled() {
+-    # only execute hooks if cloud-init running on azure
++    # only execute hooks if cloud-init is enabled and on azure
++    [ -e /run/cloud-init/enabled ] || return 1
+     is_azure
+ }
+ 
+diff --git a/tools/hook-rhel.sh b/tools/hook-rhel.sh
+index d75767e..513a551 100755
+--- a/tools/hook-rhel.sh
++++ b/tools/hook-rhel.sh
+@@ -13,7 +13,8 @@ is_azure() {
+ }
+ 
+ is_enabled() {
+-    # only execute hooks if cloud-init is running on azure
++    # only execute hooks if cloud-init is enabled and on azure
++    [ -e /run/cloud-init/enabled ] || return 1
+     is_azure
+ }
+ 
+-- 
+1.8.3.1
+
diff --git a/SOURCES/ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch b/SOURCES/ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch
new file mode 100644
index 0000000..d9cdbcc
--- /dev/null
+++ b/SOURCES/ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch
@@ -0,0 +1,144 @@
+From 4f1c3f5be0306da485135544ced4a676753a9373 Mon Sep 17 00:00:00 2001
+From: Eduardo Otubo <otubo@redhat.com>
+Date: Wed, 16 Oct 2019 12:10:24 +0200
+Subject: [PATCH 2/2] util: json.dumps on python 2.7 will handle
+ UnicodeDecodeError on binary
+
+RH-Author: Eduardo Otubo <otubo@redhat.com>
+Message-id: <20191016121024.23694-1-otubo@redhat.com>
+Patchwork-id: 91812
+O-Subject: [RHEL-7.8/RHEL-8.1.0 cloud-init PATCH] util: json.dumps on python 2.7 will handle UnicodeDecodeError on binary
+Bugzilla: 1744718
+RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
+RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
+
+commit 067516d7bc917e4921b9f1424b7a64e92cae0ad2
+Author: Chad Smith <chad.smith@canonical.com>
+Date:   Fri Sep 27 20:46:00 2019 +0000
+
+    util: json.dumps on python 2.7 will handle UnicodeDecodeError on binary
+
+    Since python 2.7 doesn't handle UnicodeDecodeErrors with the default
+    handler
+
+    LP: #1801364
+
+Signed-off-by: Eduardo Otubo <otubo@redhat.com>
+Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
+---
+ cloudinit/sources/tests/test_init.py | 12 +++++-------
+ cloudinit/tests/test_util.py         | 20 ++++++++++++++++++++
+ cloudinit/util.py                    | 27 +++++++++++++++++++++++++--
+ 3 files changed, 50 insertions(+), 9 deletions(-)
+
+diff --git a/cloudinit/sources/tests/test_init.py b/cloudinit/sources/tests/test_init.py
+index 6378e98..9698261 100644
+--- a/cloudinit/sources/tests/test_init.py
++++ b/cloudinit/sources/tests/test_init.py
+@@ -457,19 +457,17 @@ class TestDataSource(CiTestCase):
+             instance_json['ds']['meta_data'])
+ 
+     @skipIf(not six.PY2, "Only python2 hits UnicodeDecodeErrors on non-utf8")
+-    def test_non_utf8_encoding_logs_warning(self):
+-        """When non-utf-8 values exist in py2 instance-data is not written."""
++    def test_non_utf8_encoding_gets_b64encoded(self):
++        """When non-utf-8 values exist in py2 instance-data is b64encoded."""
+         tmp = self.tmp_dir()
+         datasource = DataSourceTestSubclassNet(
+             self.sys_cfg, self.distro, Paths({'run_dir': tmp}),
+             custom_metadata={'key1': 'val1', 'key2': {'key2.1': b'ab\xaadef'}})
+         self.assertTrue(datasource.get_data())
+         json_file = self.tmp_path(INSTANCE_JSON_FILE, tmp)
+-        self.assertFalse(os.path.exists(json_file))
+-        self.assertIn(
+-            "WARNING: Error persisting instance-data.json: 'utf8' codec can't"
+-            " decode byte 0xaa in position 2: invalid start byte",
+-            self.logs.getvalue())
++        instance_json = util.load_json(util.load_file(json_file))
++        key21_value = instance_json['ds']['meta_data']['key2']['key2.1']
++        self.assertEqual('ci-b64:' + util.b64e(b'ab\xaadef'), key21_value)
+ 
+     def test_get_hostname_subclass_support(self):
+         """Validate get_hostname signature on all subclasses of DataSource."""
+diff --git a/cloudinit/tests/test_util.py b/cloudinit/tests/test_util.py
+index e3d2dba..f4f95e9 100644
+--- a/cloudinit/tests/test_util.py
++++ b/cloudinit/tests/test_util.py
+@@ -2,7 +2,9 @@
+ 
+ """Tests for cloudinit.util"""
+ 
++import base64
+ import logging
++import json
+ import platform
+ 
+ import cloudinit.util as util
+@@ -528,6 +530,24 @@ class TestGetLinuxDistro(CiTestCase):
+         self.assertEqual(('foo', '1.1', 'aarch64'), dist)
+ 
+ 
++class TestJsonDumps(CiTestCase):
++    def test_is_str(self):
++        """json_dumps should return a string."""
++        self.assertTrue(isinstance(util.json_dumps({'abc': '123'}), str))
++
++    def test_utf8(self):
++        smiley = '\\ud83d\\ude03'
++        self.assertEqual(
++            {'smiley': smiley},
++            json.loads(util.json_dumps({'smiley': smiley})))
++
++    def test_non_utf8(self):
++        blob = b'\xba\x03Qx-#y\xea'
++        self.assertEqual(
++            {'blob': 'ci-b64:' + base64.b64encode(blob).decode('utf-8')},
++            json.loads(util.json_dumps({'blob': blob})))
++
++
+ @mock.patch('os.path.exists')
+ class TestIsLXD(CiTestCase):
+ 
+diff --git a/cloudinit/util.py b/cloudinit/util.py
+index a84112a..2c9ac66 100644
+--- a/cloudinit/util.py
++++ b/cloudinit/util.py
+@@ -1590,10 +1590,33 @@ def json_serialize_default(_obj):
+         return 'Warning: redacted unserializable type {0}'.format(type(_obj))
+ 
+ 
++def json_preserialize_binary(data):
++    """Preserialize any discovered binary values to avoid json.dumps issues.
++
++    Used only on python 2.7 where default type handling is not honored for
++    failure to encode binary data. LP: #1801364.
++    TODO(Drop this function when py2.7 support is dropped from cloud-init)
++    """
++    data = obj_copy.deepcopy(data)
++    for key, value in data.items():
++        if isinstance(value, (dict)):
++            data[key] = json_preserialize_binary(value)
++        if isinstance(value, bytes):
++            data[key] = 'ci-b64:{0}'.format(b64e(value))
++    return data
++
++
+ def json_dumps(data):
+     """Return data in nicely formatted json."""
+-    return json.dumps(data, indent=1, sort_keys=True,
+-                      separators=(',', ': '), default=json_serialize_default)
++    try:
++        return json.dumps(
++            data, indent=1, sort_keys=True, separators=(',', ': '),
++            default=json_serialize_default)
++    except UnicodeDecodeError:
++        if sys.version_info[:2] == (2, 7):
++            data = json_preserialize_binary(data)
++            return json.dumps(data)
++        raise
+ 
+ 
+ def yaml_dumps(obj, explicit_start=True, explicit_end=True):
+-- 
+1.8.3.1
+
diff --git a/SPECS/cloud-init.spec b/SPECS/cloud-init.spec
index 56ed546..822f6bf 100644
--- a/SPECS/cloud-init.spec
+++ b/SPECS/cloud-init.spec
@@ -6,7 +6,7 @@
 
 Name:           cloud-init
 Version:        18.5
-Release:        4%{?dist}
+Release:        8%{?dist}
 Summary:        Cloud instance init scripts
 
 Group:          System Environment/Base
@@ -37,6 +37,14 @@ Patch15: ci-Azure-Changes-to-the-Hyper-V-KVP-Reporter.patch
 Patch16: ci-DataSourceAzure-Adjust-timeout-for-polling-IMDS.patch
 # For bz#1691986 - [Azure] [RHEL 8.1] Cloud-init fixes to support fast provisioning for Azure
 Patch17: ci-cc_mounts-check-if-mount-a-on-no-change-fstab-path.patch
+# For bz#1692914 - [8.1] [WALA][cloud] cloud-init dhclient-hook script has some unexpected side-effects on Azure
+Patch18: ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch
+# For bz#1691986 - [Azure] [RHEL 8.1] Cloud-init fixes to support fast provisioning for Azure
+Patch19: ci-Azure-Return-static-fallback-address-as-if-failed-to.patch
+# For bz#1706482 - [cloud-init][RHVM]cloud-init network configuration does not persist reboot [RHEL 8.2.0]
+Patch20: ci-Fix-for-network-configuration-not-persisting-after-r.patch
+# For bz#1744718 - [cloud-init][RHEL8][OpenStack] cloud-init can't persist instance-data.json
+Patch21: ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch
 
 BuildArch:      noarch
 
@@ -131,6 +139,12 @@ mv $RPM_BUILD_ROOT/etc/NetworkManager/dispatcher.d/hook-network-manager \
 mkdir -p $RPM_BUILD_ROOT%{_unitdir}
 cp rhel/systemd/* $RPM_BUILD_ROOT%{_unitdir}/
 
+[ ! -d $RPM_BUILD_ROOT/usr/lib/systemd/system-generators ] && mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system-generators
+cp -p systemd/cloud-init-generator $RPM_BUILD_ROOT/usr/lib/systemd/system-generators
+
+[ ! -d $RPM_BUILD_ROOT/usr/lib/%{name} ] && mkdir -p $RPM_BUILD_ROOT/usr/lib/%{name}
+cp -p tools/ds-identify $RPM_BUILD_ROOT/usr/lib/%{name}/ds-identify
+
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -144,6 +158,7 @@ if [ $1 -eq 1 ] ; then
     /bin/systemctl enable cloud-final.service      >/dev/null 2>&1 || :
     /bin/systemctl enable cloud-init.service       >/dev/null 2>&1 || :
     /bin/systemctl enable cloud-init-local.service >/dev/null 2>&1 || :
+    /bin/systemctl enable cloud-init.target        >/dev/null 2>&1 || :
 elif [ $1 -eq 2 ]; then
     # Upgrade. If the upgrade is from a version older than 0.7.9-8,
     # there will be stale systemd config
@@ -158,6 +173,9 @@ elif [ $1 -eq 2 ]; then
 
     /bin/systemctl is-enabled cloud-init-local.service >/dev/null 2>&1 &&
       /bin/systemctl reenable cloud-init-local.service >/dev/null 2>&1 || :
+
+    /bin/systemctl is-enabled cloud-init.target >/dev/null 2>&1 &&
+      /bin/systemctl reenable cloud-init.target >/dev/null 2>&1 || :
 fi
 
 %preun
@@ -167,6 +185,7 @@ if [ $1 -eq 0 ] ; then
     /bin/systemctl --no-reload disable cloud-final.service  >/dev/null 2>&1 || :
     /bin/systemctl --no-reload disable cloud-init.service   >/dev/null 2>&1 || :
     /bin/systemctl --no-reload disable cloud-init-local.service >/dev/null 2>&1 || :
+    /bin/systemctl --no-reload disable cloud-init.target     >/dev/null 2>&1 || :
     # One-shot services -> no need to stop
 fi
 
@@ -188,22 +207,52 @@ fi
 %{_unitdir}/cloud-final.service
 %{_unitdir}/cloud-init-local.service
 %{_unitdir}/cloud-init.service
+%{_unitdir}/cloud-init.target
 %{_tmpfilesdir}/%{name}.conf
 %{python3_sitelib}/*
 %{_libexecdir}/%{name}
 %{_bindir}/cloud-init*
 %doc %{_datadir}/doc/%{name}
-%dir /run/cloud-init
+%dir %verify(not mode) /run/cloud-init
 %dir /var/lib/cloud
 /etc/NetworkManager/dispatcher.d/cloud-init-azure-hook
 %{_udevrulesdir}/66-azure-ephemeral.rules
 %{_sysconfdir}/bash_completion.d/cloud-init
 %{_bindir}/cloud-id
+/usr/lib/%{name}/ds-identify
+/usr/lib/systemd/system-generators/cloud-init-generator
+
 
 %dir %{_sysconfdir}/rsyslog.d
 %config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf
 
 %changelog
+* Fri Nov 22 2019 Miroslav Rezanina <mrezanin@redhat.com> - 18.5-8.el8
+- ci-Fix-for-network-configuration-not-persisting-after-r.patch [bz#1706482]
+- ci-util-json.dumps-on-python-2.7-will-handle-UnicodeDec.patch [bz#1744718]
+- Resolves: bz#1706482
+  ([cloud-init][RHVM]cloud-init network configuration does not persist reboot [RHEL 8.2.0])
+- Resolves: bz#1744718
+  ([cloud-init][RHEL8][OpenStack] cloud-init can't persist instance-data.json)
+
+* Mon Jul 15 2019 Miroslav Rezanina <mrezanin@redhat.com> - 18.5-7.el8
+- Fixing TPS [bz#1729864]
+- Resolves: bz#1729864
+ (cloud-init tps fail)
+
+* Thu Jul 04 2019 Miroslav Rezanina <mrezanin@redhat.com> - 18.5-6.el8
+- ci-Revert-azure-ensure-that-networkmanager-hook-script-.patch [bz#1692914]
+- ci-Azure-Return-static-fallback-address-as-if-failed-to.patch [bz#1691986]
+- Resolves: bz#1691986
+  ([Azure] [RHEL 8.1] Cloud-init fixes to support fast provisioning for Azure)
+- Resolves: bz#1692914
+  ([8.1] [WALA][cloud] cloud-init dhclient-hook script has some unexpected side-effects on Azure)
+
+* Mon Jun 10 2019 Miroslav Rezanina <mrezanin@redhat.com> - 18.5-5.el8
+- Improved gating testing [bz#1682786]
+- Resolves: bz#1682786
+  (cloud-init changes blocked until gating tests are added)
+
 * Mon Jun 03 2019 Miroslav Rezanina <mrezanin@redhat.com> - 18.5-4.el8
 - ci-Azure-Ensure-platform-random_seed-is-always-serializ.patch [bz#1691986]
 - ci-DatasourceAzure-add-additional-logging-for-azure-dat.patch [bz#1691986]