summaryrefslogtreecommitdiff
path: root/debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if')
-rw-r--r--debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if230
1 files changed, 0 insertions, 230 deletions
diff --git a/debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if b/debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if
deleted file mode 100644
index 83aca30c..00000000
--- a/debian/patches/cpick-11172924-IBMCloud-Disable-config-drive-and-nocloud-only-if
+++ /dev/null
@@ -1,230 +0,0 @@
-From 11172924a48a47a7231d19d9cefe628dfddda8bf Mon Sep 17 00:00:00 2001
-From: Scott Moser <smoser@ubuntu.com>
-Date: Mon, 30 Apr 2018 13:21:51 -0600
-Subject: [PATCH] IBMCloud: Disable config-drive and nocloud only if IBMCloud
- is enabled.
-
-Ubuntu images on IBMCloud for 16.04 have some seed data in
-/var/lib/cloud/data/seed/nocloud-net. In order to have systems with
-IBMCloud enabled, we modified ds-identify detection to skip that seed
-if the system was on IBMCloud. That change did not consider the
-fact that IBMCloud might not be in the datasource list.
-
-There was similar logic in the ConfigDrive datasource in ds-identify
-and the datasource itself.
-
-Config drive is now updated to only check and avoid IBMCloud if IBMCloud
-is enabled. The check in ds-identify for nocloud was dropped. If a
-user provides a nocloud seed on IBMCloud, then that can be used.
-
-This means that systems running Xenial will continue to get their
-old datasources.
-
-LP: #1766401
----
- cloudinit/sources/DataSourceConfigDrive.py | 11 +++-
- tests/unittests/test_ds_identify.py | 77 ++++++++++++++++++++--
- tools/ds-identify | 17 +++--
- 3 files changed, 91 insertions(+), 14 deletions(-)
-
---- a/cloudinit/sources/DataSourceConfigDrive.py
-+++ b/cloudinit/sources/DataSourceConfigDrive.py
-@@ -69,7 +69,8 @@ class DataSourceConfigDrive(openstack.So
- util.logexc(LOG, "Failed reading config drive from %s", sdir)
-
- if not found:
-- for dev in find_candidate_devs():
-+ dslist = self.sys_cfg.get('datasource_list')
-+ for dev in find_candidate_devs(dslist=dslist):
- try:
- # Set mtype if freebsd and turn off sync
- if dev.startswith("/dev/cd"):
-@@ -211,7 +212,7 @@ def write_injected_files(files):
- util.logexc(LOG, "Failed writing file: %s", filename)
-
-
--def find_candidate_devs(probe_optical=True):
-+def find_candidate_devs(probe_optical=True, dslist=None):
- """Return a list of devices that may contain the config drive.
-
- The returned list is sorted by search order where the first item has
-@@ -227,6 +228,9 @@ def find_candidate_devs(probe_optical=Tr
- * either vfat or iso9660 formated
- * labeled with 'config-2' or 'CONFIG-2'
- """
-+ if dslist is None:
-+ dslist = []
-+
- # query optical drive to get it in blkid cache for 2.6 kernels
- if probe_optical:
- for device in OPTICAL_DEVICES:
-@@ -257,7 +261,8 @@ def find_candidate_devs(probe_optical=Tr
- devices = [d for d in candidates
- if d in by_label or not util.is_partition(d)]
-
-- if devices:
-+ LOG.debug("devices=%s dslist=%s", devices, dslist)
-+ if devices and "IBMCloud" in dslist:
- # IBMCloud uses config-2 label, but limited to a single UUID.
- ibm_platform, ibm_path = get_ibm_platform()
- if ibm_path in devices:
---- a/tests/unittests/test_ds_identify.py
-+++ b/tests/unittests/test_ds_identify.py
-@@ -184,17 +184,18 @@ class DsIdentifyBase(CiTestCase):
- data, RC_FOUND, dslist=[data.get('ds'), DS_NONE])
-
- def _check_via_dict(self, data, rc, dslist=None, **kwargs):
-- found_rc, out, err, cfg, files = self._call_via_dict(data, **kwargs)
-+ ret = self._call_via_dict(data, **kwargs)
- good = False
- try:
-- self.assertEqual(rc, found_rc)
-+ self.assertEqual(rc, ret.rc)
- if dslist is not None:
-- self.assertEqual(dslist, cfg['datasource_list'])
-+ self.assertEqual(dslist, ret.cfg['datasource_list'])
- good = True
- finally:
- if not good:
-- _print_run_output(rc, out, err, cfg, files)
-- return rc, out, err, cfg, files
-+ _print_run_output(ret.rc, ret.stdout, ret.stderr, ret.cfg,
-+ ret.files)
-+ return ret
-
-
- class TestDsIdentify(DsIdentifyBase):
-@@ -245,13 +246,40 @@ class TestDsIdentify(DsIdentifyBase):
- def test_config_drive(self):
- """ConfigDrive datasource has a disk with LABEL=config-2."""
- self._test_ds_found('ConfigDrive')
-- return
-
- def test_config_drive_upper(self):
- """ConfigDrive datasource has a disk with LABEL=CONFIG-2."""
- self._test_ds_found('ConfigDriveUpper')
- return
-
-+ def test_config_drive_seed(self):
-+ """Config Drive seed directory."""
-+ self._test_ds_found('ConfigDrive-seed')
-+
-+ def test_config_drive_interacts_with_ibmcloud_config_disk(self):
-+ """Verify ConfigDrive interaction with IBMCloud.
-+
-+ If ConfigDrive is enabled and not IBMCloud, then ConfigDrive
-+ should claim the ibmcloud 'config-2' disk.
-+ If IBMCloud is enabled, then ConfigDrive should skip."""
-+ data = copy.deepcopy(VALID_CFG['IBMCloud-config-2'])
-+ files = data.get('files', {})
-+ if not files:
-+ data['files'] = files
-+ cfgpath = 'etc/cloud/cloud.cfg.d/99_networklayer_common.cfg'
-+
-+ # with list including IBMCloud, config drive should be not found.
-+ files[cfgpath] = 'datasource_list: [ ConfigDrive, IBMCloud ]\n'
-+ ret = self._check_via_dict(data, shell_true)
-+ self.assertEqual(
-+ ret.cfg.get('datasource_list'), ['IBMCloud', 'None'])
-+
-+ # But if IBMCloud is not enabled, config drive should claim this.
-+ files[cfgpath] = 'datasource_list: [ ConfigDrive, NoCloud ]\n'
-+ ret = self._check_via_dict(data, shell_true)
-+ self.assertEqual(
-+ ret.cfg.get('datasource_list'), ['ConfigDrive', 'None'])
-+
- def test_ibmcloud_template_userdata_in_provisioning(self):
- """Template provisioned with user-data during provisioning stage.
-
-@@ -307,6 +335,37 @@ class TestDsIdentify(DsIdentifyBase):
- self._check_via_dict(
- data, rc=RC_FOUND, dslist=['ConfigDrive', DS_NONE])
-
-+ def test_ibmcloud_with_nocloud_seed(self):
-+ """NoCloud seed should be preferred over IBMCloud.
-+
-+ A nocloud seed should be preferred over IBMCloud even if enabled.
-+ Ubuntu 16.04 images have <vlc>/seed/nocloud-net. LP: #1766401."""
-+ data = copy.deepcopy(VALID_CFG['IBMCloud-config-2'])
-+ files = data.get('files', {})
-+ if not files:
-+ data['files'] = files
-+ files.update(VALID_CFG['NoCloud-seed']['files'])
-+ ret = self._check_via_dict(data, shell_true)
-+ self.assertEqual(
-+ ['NoCloud', 'IBMCloud', 'None'],
-+ ret.cfg.get('datasource_list'))
-+
-+ def test_ibmcloud_with_configdrive_seed(self):
-+ """ConfigDrive seed should be preferred over IBMCloud.
-+
-+ A ConfigDrive seed should be preferred over IBMCloud even if enabled.
-+ Ubuntu 16.04 images have a fstab entry that mounts the
-+ METADATA disk into <vlc>/seed/config_drive. LP: ##1766401."""
-+ data = copy.deepcopy(VALID_CFG['IBMCloud-config-2'])
-+ files = data.get('files', {})
-+ if not files:
-+ data['files'] = files
-+ files.update(VALID_CFG['ConfigDrive-seed']['files'])
-+ ret = self._check_via_dict(data, shell_true)
-+ self.assertEqual(
-+ ['ConfigDrive', 'IBMCloud', 'None'],
-+ ret.cfg.get('datasource_list'))
-+
- def test_policy_disabled(self):
- """A Builtin policy of 'disabled' should return not found.
-
-@@ -684,6 +743,12 @@ VALID_CFG = {
- },
- ],
- },
-+ 'ConfigDrive-seed': {
-+ 'ds': 'ConfigDrive',
-+ 'files': {
-+ os.path.join(P_SEED_DIR, 'config_drive', 'openstack',
-+ 'latest', 'meta_data.json'): 'md\n'},
-+ },
- 'Hetzner': {
- 'ds': 'Hetzner',
- 'files': {P_SYS_VENDOR: 'Hetzner\n'},
---- a/tools/ds-identify
-+++ b/tools/ds-identify
-@@ -601,7 +601,6 @@ dscheck_NoCloud() {
- *\ ds=nocloud*) return ${DS_FOUND};;
- esac
-
-- is_ibm_cloud && return ${DS_NOT_FOUND}
- for d in nocloud nocloud-net; do
- check_seed_dir "$d" meta-data user-data && return ${DS_FOUND}
- check_writable_seed_dir "$d" meta-data user-data && return ${DS_FOUND}
-@@ -612,11 +611,12 @@ dscheck_NoCloud() {
- return ${DS_NOT_FOUND}
- }
-
-+is_ds_enabled() {
-+ local name="$1" pad=" ${DI_DSLIST} "
-+ [ "${pad#* $name }" != "${pad}" ]
-+}
-+
- check_configdrive_v2() {
-- is_ibm_cloud && return ${DS_NOT_FOUND}
-- if has_fs_with_label CONFIG-2 config-2; then
-- return ${DS_FOUND}
-- fi
- # look in /config-drive <vlc>/seed/config_drive for a directory
- # openstack/YYYY-MM-DD format with a file meta_data.json
- local d=""
-@@ -631,6 +631,13 @@ check_configdrive_v2() {
- debug 1 "config drive seeded directory had only 'latest'"
- return ${DS_FOUND}
- fi
-+
-+ is_ds_enabled "IBMCloud"
-+ debug 1 "is_ds_enabled returned $?: $DI_DSLIST"
-+ is_ds_enabled "IBMCloud" && is_ibm_cloud && return ${DS_NOT_FOUND}
-+ if has_fs_with_label CONFIG-2 config-2; then
-+ return ${DS_FOUND}
-+ fi
- return ${DS_NOT_FOUND}
- }
-