diff options
-rw-r--r-- | tests/unittests/test_ds_identify.py | 45 | ||||
-rwxr-xr-x | tools/ds-identify | 6 |
2 files changed, 48 insertions, 3 deletions
diff --git a/tests/unittests/test_ds_identify.py b/tests/unittests/test_ds_identify.py index 1a81a89e..92454d7c 100644 --- a/tests/unittests/test_ds_identify.py +++ b/tests/unittests/test_ds_identify.py @@ -11,6 +11,10 @@ from cloudinit.tests.helpers import ( UNAME_MYSYS = ("Linux bart 4.4.0-62-generic #83-Ubuntu " "SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 GNU/Linux") +UNAME_PPC64EL = ("Linux diamond 4.4.0-83-generic #106-Ubuntu SMP " + "Mon Jun 26 17:53:54 UTC 2017 " + "ppc64le ppc64le ppc64le GNU/Linux") + BLKID_EFI_ROOT = """ DEVNAME=/dev/sda1 UUID=8B36-5390 @@ -23,6 +27,8 @@ TYPE=ext4 PARTUUID=30c65c77-e07d-4039-b2fb-88b1fb5fa1fc """ +POLICY_FOUND_ONLY = "search,found=all,maybe=none,notfound=disabled" +POLICY_FOUND_OR_MAYBE = "search,found=all,maybe=all,notfound=disabled" DI_DEFAULT_POLICY = "search,found=all,maybe=all,notfound=enabled" DI_DEFAULT_POLICY_NO_DMI = "search,found=all,maybe=all,notfound=disabled" @@ -48,6 +54,7 @@ P_SEED_DIR = "var/lib/cloud/seed" P_DSID_CFG = "etc/cloud/ds-identify.cfg" MOCK_VIRT_IS_KVM = {'name': 'detect_virt', 'RET': 'kvm', 'ret': 0} +MOCK_UNAME_IS_PPC64 = {'name': 'uname', 'out': UNAME_PPC64EL, 'ret': 0} class TestDsIdentify(CiTestCase): @@ -55,7 +62,7 @@ class TestDsIdentify(CiTestCase): def call(self, rootd=None, mocks=None, args=None, files=None, policy_dmi=DI_DEFAULT_POLICY, - policy_nodmi=DI_DEFAULT_POLICY_NO_DMI): + policy_no_dmi=DI_DEFAULT_POLICY_NO_DMI): if args is None: args = [] if mocks is None: @@ -81,7 +88,7 @@ class TestDsIdentify(CiTestCase): "PATH_ROOT='%s'" % rootd, ". " + self.dsid_path, 'DI_DEFAULT_POLICY="%s"' % policy_dmi, - 'DI_DEFAULT_POLICY_NO_DMI="%s"' % policy_nodmi, + 'DI_DEFAULT_POLICY_NO_DMI="%s"' % policy_no_dmi, "" ] @@ -137,7 +144,7 @@ class TestDsIdentify(CiTestCase): def _call_via_dict(self, data, rootd=None, **kwargs): # return output of self.call with a dict input like VALID_CFG[item] xwargs = {'rootd': rootd} - for k in ('mocks', 'args', 'policy_dmi', 'policy_nodmi', 'files'): + for k in ('mocks', 'args', 'policy_dmi', 'policy_no_dmi', 'files'): if k in data: xwargs[k] = data[k] if k in kwargs: @@ -261,6 +268,31 @@ class TestDsIdentify(CiTestCase): self._check_via_dict(mydata, rc=RC_FOUND, dslist=['AliYun', DS_NONE], policy_dmi=policy) + def test_default_openstack_intel_is_found(self): + """On Intel, openstack must be identified.""" + self._test_ds_found('OpenStack') + + def test_openstack_on_non_intel_is_maybe(self): + """On non-Intel, openstack without dmi info is maybe. + + nova does not identify itself on platforms other than intel. + https://bugs.launchpad.net/cloud-init/+bugs?field.tag=dsid-nova""" + + data = VALID_CFG['OpenStack'].copy() + del data['files'][P_PRODUCT_NAME] + data.update({'policy_dmi': POLICY_FOUND_OR_MAYBE, + 'policy_no_dmi': POLICY_FOUND_OR_MAYBE}) + + # this should show not found as default uname in tests is intel. + # and intel openstack requires positive identification. + self._check_via_dict(data, RC_NOT_FOUND, dslist=None) + + # updating the uname to ppc64 though should get a maybe. + data.update({'mocks': [MOCK_VIRT_IS_KVM, MOCK_UNAME_IS_PPC64]}) + (_, _, err, _, _) = self._check_via_dict( + data, RC_FOUND, dslist=['OpenStack', 'None']) + self.assertIn("check for 'OpenStack' returned maybe", err) + def blkid_out(disks=None): """Convert a list of disk dictionaries into blkid content.""" @@ -341,6 +373,13 @@ VALID_CFG = { 'files': {P_PRODUCT_SERIAL: 'GoogleCloud-8f2e88f\n'}, 'mocks': [MOCK_VIRT_IS_KVM], }, + 'OpenStack': { + 'ds': 'OpenStack', + 'files': {P_PRODUCT_NAME: 'OpenStack Nova\n'}, + 'mocks': [MOCK_VIRT_IS_KVM], + 'policy_dmi': POLICY_FOUND_ONLY, + 'policy_no_dmi': POLICY_FOUND_ONLY, + }, 'ConfigDrive': { 'ds': 'ConfigDrive', 'mocks': [ diff --git a/tools/ds-identify b/tools/ds-identify index 33bd2991..ee5e05a4 100755 --- a/tools/ds-identify +++ b/tools/ds-identify @@ -833,6 +833,12 @@ dscheck_OpenStack() { return ${DS_FOUND} fi + # LP: #1715241 : arch other than intel are not identified properly. + case "$DI_UNAME_MACHINE" in + i?86|x86_64) :;; + *) return ${DS_MAYBE};; + esac + return ${DS_NOT_FOUND} } |