Пример #1
0
 def test_no_ec2(self):
     _register_uris(self.VERSION, {}, {}, OS_FILES)
     f = ds.read_metadata_service(BASE_URL, version=self.VERSION)
     self.assertEquals(VENDOR_DATA, f.get('vendordata'))
     self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg'])
     self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg'])
     self.assertEquals(USER_DATA, f.get('userdata'))
     self.assertEquals({}, f.get('ec2-metadata'))
     self.assertEquals(2, f.get('version'))
Пример #2
0
 def test_vendordata_empty(self):
     os_files = copy.deepcopy(OS_FILES)
     for k in list(os_files.keys()):
         if k.endswith('vendor_data.json'):
             os_files.pop(k, None)
     _register_uris(self.VERSION, {}, {}, os_files)
     f = ds.read_metadata_service(BASE_URL, version=self.VERSION)
     self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg'])
     self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg'])
     self.assertFalse(f.get('vendordata'))
Пример #3
0
    def test_detect_openstack_oraclecloud_chassis_asset_tag(self, m_dmi,
                                                            m_is_x86):
        """Return True on OpenStack reporting Oracle cloud asset-tag."""
        m_is_x86.return_value = True

        def fake_dmi_read(dmi_key):
            if dmi_key == 'system-product-name':
                return 'Standard PC (i440FX + PIIX, 1996)'  # No match
            if dmi_key == 'chassis-asset-tag':
                return 'OracleCloud.com'
            assert False, 'Unexpected dmi read of %s' % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertTrue(
            ds.detect_openstack(accept_oracle=True),
            'Expected detect_openstack == True on OracleCloud.com')
        self.assertFalse(
            ds.detect_openstack(accept_oracle=False),
            'Expected detect_openstack == False.')
Пример #4
0
    def test_detect_openstack_intel_product_name_compute(self, m_dmi,
                                                         m_is_x86):
        """Return True on OpenStack compute and nova instances."""
        m_is_x86.return_value = True
        openstack_product_names = ['OpenStack Nova', 'OpenStack Compute']

        for product_name in openstack_product_names:
            m_dmi.return_value = product_name
            self.assertTrue(
                ds.detect_openstack(), 'Failed to detect_openstack')
Пример #5
0
    def test_detect_openstack_opentelekomcloud_chassis_asset_tag(self, m_dmi,
                                                                 m_is_x86):
        """Return True on OpenStack reporting OpenTelekomCloud asset-tag."""
        m_is_x86.return_value = True

        def fake_dmi_read(dmi_key):
            if dmi_key == 'system-product-name':
                return 'HVM domU'  # Nothing 'openstackish' on OpenTelekomCloud
            if dmi_key == 'chassis-asset-tag':
                return 'OpenTelekomCloud'
            assert False, 'Unexpected dmi read of %s' % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertTrue(
            ds.detect_openstack(),
            'Expected detect_openstack == True on OpenTelekomCloud')
Пример #6
0
    def test_not_detect_openstack_intel_x86_ec2(self, m_dmi, m_proc_env,
                                                m_is_x86):
        """Return False on EC2 platforms."""
        m_is_x86.return_value = True
        # No product_name in proc/1/environ
        m_proc_env.return_value = {'HOME': '/'}

        def fake_dmi_read(dmi_key):
            if dmi_key == 'system-product-name':
                return 'HVM domU'  # Nothing 'openstackish' on EC2
            if dmi_key == 'chassis-asset-tag':
                return ''  # Empty string on EC2
            assert False, 'Unexpected dmi read of %s' % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertFalse(
            ds.detect_openstack(), 'Expected detect_openstack == False on EC2')
        m_proc_env.assert_called_with(1)
Пример #7
0
 def test_successful(self):
     _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
     f = ds.read_metadata_service(BASE_URL, version=self.VERSION)
     self.assertEquals(VENDOR_DATA, f.get('vendordata'))
     self.assertEquals(CONTENT_0, f['files']['/etc/foo.cfg'])
     self.assertEquals(CONTENT_1, f['files']['/etc/bar/bar.cfg'])
     self.assertEquals(2, len(f['files']))
     self.assertEquals(USER_DATA, f.get('userdata'))
     self.assertEquals(EC2_META, f.get('ec2-metadata'))
     self.assertEquals(2, f.get('version'))
     metadata = f['metadata']
     self.assertEquals('nova', metadata.get('availability_zone'))
     self.assertEquals('sm-foo-test.novalocal', metadata.get('hostname'))
     self.assertEquals('sm-foo-test.novalocal',
                       metadata.get('local-hostname'))
     self.assertEquals('sm-foo-test', metadata.get('name'))
     self.assertEquals('b0fa911b-69d4-4476-bbe2-1c92bff6535c',
                       metadata.get('uuid'))
     self.assertEquals('b0fa911b-69d4-4476-bbe2-1c92bff6535c',
                       metadata.get('instance-id'))
Пример #8
0
    def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env,
                                                m_is_x86):
        """Return True when nova product_name specified in /proc/1/environ."""
        m_is_x86.return_value = True
        # Nova product_name in proc/1/environ
        m_proc_env.return_value = {
            'HOME': '/', 'product_name': 'OpenStack Nova'}

        def fake_dmi_read(dmi_key):
            if dmi_key == 'system-product-name':
                return 'HVM domU'  # Nothing 'openstackish'
            if dmi_key == 'chassis-asset-tag':
                return ''  # Nothin 'openstackish'
            assert False, 'Unexpected dmi read of %s' % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertTrue(
            ds.detect_openstack(),
            'Expected detect_openstack == True on OpenTelekomCloud')
        m_proc_env.assert_called_with(1)
Пример #9
0
 def test_disabled_datasource(self):
     os_files = copy.deepcopy(OS_FILES)
     os_meta = copy.deepcopy(OSTACK_META)
     os_meta['meta'] = {
         'dsmode': 'disabled',
     }
     for k in list(os_files.keys()):
         if k.endswith('meta_data.json'):
             os_files[k] = json.dumps(os_meta)
     _register_uris(self.VERSION, {}, {}, os_files)
     ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN,
                                    None,
                                    helpers.Paths({'run_dir': self.tmp}))
     ds_os.ds_cfg = {
         'max_wait': 0,
         'timeout': 0,
     }
     self.assertIsNone(ds_os.version)
     found = ds_os.get_data()
     self.assertFalse(found)
     self.assertIsNone(ds_os.version)
Пример #10
0
 def test_bad_datasource_meta(self):
     os_files = copy.deepcopy(OS_FILES)
     for k in list(os_files.keys()):
         if k.endswith("meta_data.json"):
             os_files[k] = "{"  # some invalid json
     _register_uris(self.VERSION, {}, {}, os_files)
     ds_os = ds.DataSourceOpenStack(
         settings.CFG_BUILTIN, None, helpers.Paths({"run_dir": self.tmp})
     )
     self.assertIsNone(ds_os.version)
     mock_path = MOCK_PATH + "detect_openstack"
     with test_helpers.mock.patch(mock_path) as m_detect_os:
         m_detect_os.return_value = True
         found = ds_os.get_data()
     self.assertFalse(found)
     self.assertIsNone(ds_os.version)
     self.assertIn(
         "InvalidMetaDataException: Broken metadata address"
         " http://169.254.169.25",
         self.logs.getvalue(),
     )
Пример #11
0
 def test_network_config_from_network_json(self):
     """The datasource gets network_config from network_data.json."""
     mock_path = MOCK_PATH + 'openstack.convert_net_json'
     example_cfg = {'version': 1, 'config': []}
     ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None,
                                    helpers.Paths({'run_dir': self.tmp}))
     sample_json = {
         'links': [{
             'ethernet_mac_address': 'mymac'
         }],
         'networks': [],
         'services': []
     }
     ds_os.ds_cfg = {'apply_network_config': True}  # Default is False
     ds_os.network_json = sample_json
     with test_helpers.mock.patch(mock_path) as m_convert_json:
         m_convert_json.return_value = example_cfg
         self.assertEqual(example_cfg, ds_os.network_config)
     self.assertIn('network config provided via network_json',
                   self.logs.getvalue())
     m_convert_json.assert_called_with(sample_json, known_macs=None)
Пример #12
0
 def test_datasource(self, m_dhcp):
     _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
     ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None,
                                    helpers.Paths({'run_dir': self.tmp}))
     self.assertIsNone(ds_os.version)
     mock_path = MOCK_PATH + 'detect_openstack'
     with test_helpers.mock.patch(mock_path) as m_detect_os:
         m_detect_os.return_value = True
         found = ds_os.get_data()
     self.assertTrue(found)
     self.assertEqual(2, ds_os.version)
     md = dict(ds_os.metadata)
     md.pop('instance-id', None)
     md.pop('local-hostname', None)
     self.assertEqual(OSTACK_META, md)
     self.assertEqual(EC2_META, ds_os.ec2_metadata)
     self.assertEqual(USER_DATA, ds_os.userdata_raw)
     self.assertEqual(2, len(ds_os.files))
     self.assertEqual(VENDOR_DATA, ds_os.vendordata_pure)
     self.assertIsNone(ds_os.vendordata_raw)
     m_dhcp.assert_not_called()
Пример #13
0
 def test_wb__crawl_metadata_does_not_persist(self):
     """_crawl_metadata returns current metadata and does not cache."""
     _register_uris(self.VERSION, EC2_FILES, EC2_META, OS_FILES)
     ds_os = ds.DataSourceOpenStack(
         settings.CFG_BUILTIN, None, helpers.Paths({"run_dir": self.tmp})
     )
     crawled_data = ds_os._crawl_metadata()
     self.assertEqual(UNSET, ds_os.ec2_metadata)
     self.assertIsNone(ds_os.userdata_raw)
     self.assertEqual(0, len(ds_os.files))
     self.assertIsNone(ds_os.vendordata_raw)
     self.assertEqual(
         [
             "dsmode",
             "ec2-metadata",
             "files",
             "metadata",
             "networkdata",
             "userdata",
             "vendordata",
             "vendordata2",
             "version",
         ],
         sorted(crawled_data.keys()),
     )
     self.assertEqual("local", crawled_data["dsmode"])
     self.assertEqual(EC2_META, crawled_data["ec2-metadata"])
     self.assertEqual(2, len(crawled_data["files"]))
     md = copy.deepcopy(crawled_data["metadata"])
     md.pop("instance-id")
     md.pop("local-hostname")
     self.assertEqual(OSTACK_META, md)
     self.assertEqual(
         json.loads(OS_FILES["openstack/latest/network_data.json"]),
         crawled_data["networkdata"],
     )
     self.assertEqual(USER_DATA, crawled_data["userdata"])
     self.assertEqual(VENDOR_DATA, crawled_data["vendordata"])
     self.assertEqual(VENDOR_DATA2, crawled_data["vendordata2"])
     self.assertEqual(2, crawled_data["version"])
Пример #14
0
    def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env,
                                                m_is_x86):
        """Return True when nova product_name specified in /proc/1/environ."""
        m_is_x86.return_value = True
        # Nova product_name in proc/1/environ
        m_proc_env.return_value = {
            'HOME': '/',
            'product_name': 'OpenStack Nova'
        }

        def fake_dmi_read(dmi_key):
            if dmi_key == 'system-product-name':
                return 'HVM domU'  # Nothing 'openstackish'
            if dmi_key == 'chassis-asset-tag':
                return ''  # Nothin 'openstackish'
            assert False, 'Unexpected dmi read of %s' % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertTrue(
            ds.detect_openstack(),
            'Expected detect_openstack == True on OpenTelekomCloud')
        m_proc_env.assert_called_with(1)
Пример #15
0
 def test_disabled_datasource(self):
     os_files = copy.deepcopy(OS_FILES)
     os_meta = copy.deepcopy(OSTACK_META)
     os_meta["meta"] = {
         "dsmode": "disabled",
     }
     for k in list(os_files.keys()):
         if k.endswith("meta_data.json"):
             os_files[k] = json.dumps(os_meta)
     _register_uris(self.VERSION, {}, {}, os_files)
     ds_os = ds.DataSourceOpenStack(settings.CFG_BUILTIN, None,
                                    helpers.Paths({"run_dir": self.tmp}))
     ds_os.ds_cfg = {
         "max_wait": 0,
         "timeout": 0,
     }
     self.assertIsNone(ds_os.version)
     mock_path = MOCK_PATH + "detect_openstack"
     with test_helpers.mock.patch(mock_path) as m_detect_os:
         m_detect_os.return_value = True
         found = ds_os.get_data()
     self.assertFalse(found)
     self.assertIsNone(ds_os.version)
Пример #16
0
    def test_detect_openstack_by_proc_1_environ(self, m_dmi, m_proc_env,
                                                m_is_x86):
        """Return True when nova product_name specified in /proc/1/environ."""
        m_is_x86.return_value = True
        # Nova product_name in proc/1/environ
        m_proc_env.return_value = {
            "HOME": "/",
            "product_name": "OpenStack Nova",
        }

        def fake_dmi_read(dmi_key):
            if dmi_key == "system-product-name":
                return "HVM domU"  # Nothing 'openstackish'
            if dmi_key == "chassis-asset-tag":
                return ""  # Nothin 'openstackish'
            assert False, "Unexpected dmi read of %s" % dmi_key

        m_dmi.side_effect = fake_dmi_read
        self.assertTrue(
            ds.detect_openstack(),
            "Expected detect_openstack == True on OpenTelekomCloud",
        )
        m_proc_env.assert_called_with(1)
Пример #17
0
 def test_detect_openstack_non_intel_x86(self, m_is_x86):
     """Return True on non-intel platforms because dmi isn't conclusive."""
     m_is_x86.return_value = False
     self.assertTrue(
         ds.detect_openstack(), 'Expected detect_openstack == True')
Пример #18
0
def _read_metadata_service():
    return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
Пример #19
0
def _read_metadata_service():
    return ds.read_metadata_service(BASE_URL, retries=0, timeout=0.1)
Пример #20
0
 def test_detect_openstack_non_intel_x86(self, m_is_x86):
     """Return True on non-intel platforms because dmi isn't conclusive."""
     m_is_x86.return_value = False
     self.assertTrue(
         ds.detect_openstack(), 'Expected detect_openstack == True')