From f536fb57eaf504b06c77b9436937c345b240921f Mon Sep 17 00:00:00 2001 From: Eduardo Otubo Date: Mon, 7 Sep 2020 15:06:28 +0200 Subject: [PATCH] Scaleway: Fix DatasourceScaleway to avoid backtrace (#128) BZ: 1869757 commit 9e3ac98097ed1c7f49ec8975a40aec7229231aae Author: Louis Bouchard Date: Wed Jan 29 16:55:09 2020 +0100 Scaleway: Fix DatasourceScaleway to avoid backtrace (#128) Make sure network_config is created when self._network_config is unset. Co-authored-by: Scott Moser Signed-off-by: Eduardo Otubo --- ...asourceScaleway-to-avoid-backtrace-1.patch | 107 ++++++++++++++++++ cloud-init.spec | 8 +- 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 cloud-init-19.4-Scaleway-Fix-DatasourceScaleway-to-avoid-backtrace-1.patch diff --git a/cloud-init-19.4-Scaleway-Fix-DatasourceScaleway-to-avoid-backtrace-1.patch b/cloud-init-19.4-Scaleway-Fix-DatasourceScaleway-to-avoid-backtrace-1.patch new file mode 100644 index 0000000..d002980 --- /dev/null +++ b/cloud-init-19.4-Scaleway-Fix-DatasourceScaleway-to-avoid-backtrace-1.patch @@ -0,0 +1,107 @@ +From 9e3ac98097ed1c7f49ec8975a40aec7229231aae Mon Sep 17 00:00:00 2001 +From: Louis Bouchard +Date: Wed, 29 Jan 2020 16:55:09 +0100 +Subject: [PATCH] Scaleway: Fix DatasourceScaleway to avoid backtrace (#128) + +Make sure network_config is created when self._network_config is unset. + +Co-authored-by: Scott Moser +--- + cloudinit/sources/DataSourceScaleway.py | 9 +++- + .../test_datasource/test_scaleway.py | 49 +++++++++++++++++++ + 2 files changed, 56 insertions(+), 2 deletions(-) + +diff --git a/cloudinit/sources/DataSourceScaleway.py b/cloudinit/sources/DataSourceScaleway.py +index b573b382..83c2bf65 100644 +--- a/cloudinit/sources/DataSourceScaleway.py ++++ b/cloudinit/sources/DataSourceScaleway.py +@@ -188,7 +188,7 @@ class DataSourceScaleway(sources.DataSource): + self.retries = int(self.ds_cfg.get('retries', DEF_MD_RETRIES)) + self.timeout = int(self.ds_cfg.get('timeout', DEF_MD_TIMEOUT)) + self._fallback_interface = None +- self._network_config = None ++ self._network_config = sources.UNSET + + def _crawl_metadata(self): + resp = url_helper.readurl(self.metadata_address, +@@ -227,7 +227,12 @@ class DataSourceScaleway(sources.DataSource): + Configure networking according to data received from the + metadata API. + """ +- if self._network_config: ++ if self._network_config is None: ++ LOG.warning('Found None as cached _network_config. ' ++ 'Resetting to %s', sources.UNSET) ++ self._network_config = sources.UNSET ++ ++ if self._network_config != sources.UNSET: + return self._network_config + + if self._fallback_interface is None: +diff --git a/tests/unittests/test_datasource/test_scaleway.py b/tests/unittests/test_datasource/test_scaleway.py +index f96bf0a2..1b4dd0ad 100644 +--- a/tests/unittests/test_datasource/test_scaleway.py ++++ b/tests/unittests/test_datasource/test_scaleway.py +@@ -7,6 +7,7 @@ import requests + + from cloudinit import helpers + from cloudinit import settings ++from cloudinit import sources + from cloudinit.sources import DataSourceScaleway + + from cloudinit.tests.helpers import mock, HttprettyTestCase, CiTestCase +@@ -403,3 +404,51 @@ class TestDataSourceScaleway(HttprettyTestCase): + + netcfg = self.datasource.network_config + self.assertEqual(netcfg, '0xdeadbeef') ++ ++ @mock.patch('cloudinit.sources.DataSourceScaleway.net.find_fallback_nic') ++ @mock.patch('cloudinit.util.get_cmdline') ++ def test_network_config_unset(self, m_get_cmdline, fallback_nic): ++ """ ++ _network_config will be set to sources.UNSET after the first boot. ++ Make sure it behave correctly. ++ """ ++ m_get_cmdline.return_value = 'scaleway' ++ fallback_nic.return_value = 'ens2' ++ self.datasource.metadata['ipv6'] = None ++ self.datasource._network_config = sources.UNSET ++ ++ resp = {'version': 1, ++ 'config': [{ ++ 'type': 'physical', ++ 'name': 'ens2', ++ 'subnets': [{'type': 'dhcp4'}]}] ++ } ++ ++ netcfg = self.datasource.network_config ++ self.assertEqual(netcfg, resp) ++ ++ @mock.patch('cloudinit.sources.DataSourceScaleway.LOG.warning') ++ @mock.patch('cloudinit.sources.DataSourceScaleway.net.find_fallback_nic') ++ @mock.patch('cloudinit.util.get_cmdline') ++ def test_network_config_cached_none(self, m_get_cmdline, fallback_nic, ++ logwarning): ++ """ ++ network_config() should return config data if cached data is None ++ rather than sources.UNSET ++ """ ++ m_get_cmdline.return_value = 'scaleway' ++ fallback_nic.return_value = 'ens2' ++ self.datasource.metadata['ipv6'] = None ++ self.datasource._network_config = None ++ ++ resp = {'version': 1, ++ 'config': [{ ++ 'type': 'physical', ++ 'name': 'ens2', ++ 'subnets': [{'type': 'dhcp4'}]}] ++ } ++ ++ netcfg = self.datasource.network_config ++ self.assertEqual(netcfg, resp) ++ logwarning.assert_called_with('Found None as cached _network_config. ' ++ 'Resetting to %s', sources.UNSET) +-- +2.18.1 + diff --git a/cloud-init.spec b/cloud-init.spec index b2789af..18fd44c 100644 --- a/cloud-init.spec +++ b/cloud-init.spec @@ -1,6 +1,6 @@ Name: cloud-init Version: 19.4 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Cloud instance init scripts License: ASL 2.0 or GPLv3 URL: http://launchpad.net/cloud-init @@ -25,6 +25,9 @@ Patch3: cloud-init-19.4-no-override-default-network.patch Patch4: cloud-init-19.4-cc_set_password-increase-random-pwlength-from-9-to-2.patch Patch5: cloud-init-19.4-utils-use-SystemRandom-when-generating-random-passwo.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1869757 +Patch6: cloud-init-19.4-Scaleway-Fix-DatasourceScaleway-to-avoid-backtrace-1.patch + BuildArch: noarch BuildRequires: pkgconfig(systemd) @@ -167,6 +170,9 @@ nosetests-%{python3_version} tests/unittests/ %changelog +* Mon Sep 07 2020 Eduardo Otubo - 19.4-7 +- Fix execution fail with backtrace + * Mon Sep 07 2020 Eduardo Otubo - 19.4-6 - Adding missing patches to spec file