Skip to content

Commit 97549a2

Browse files
stephenfinmriedem
authored andcommitted
Handle unsetting '[DEFAULT] dhcp_domain'
Fix a long-standing issue whereby setting 'dhcp_domain' to 'None' would result in a hostname of '${hostname}None' instead of '${hostname}'. Change-Id: Ic9aa74f5344ba469b61a87de1ebd27e6f49c3318 Closes-Bug: #1824813
1 parent 03322bb commit 97549a2

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

nova/api/metadata/base.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,9 +528,10 @@ def _check_os_version(self, required, requested):
528528
return self._check_version(required, requested, OPENSTACK_VERSIONS)
529529

530530
def _get_hostname(self):
531-
return "%s%s%s" % (self.instance.hostname,
532-
'.' if CONF.dhcp_domain else '',
533-
CONF.dhcp_domain)
531+
if CONF.dhcp_domain:
532+
return '.'.join([self.instance.hostname, CONF.dhcp_domain])
533+
534+
return self.instance.hostname
534535

535536
def lookup(self, path):
536537
if path == "" or path[0] != "/":

nova/tests/functional/test_metadata.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def setUp(self):
5959
projects=[])
6060
instance = objects.Instance(ctxt, flavor=flavor, vcpus=1,
6161
memory_mb=256, root_gb=0, ephemeral_gb=0,
62-
project_id='fake')
62+
project_id='fake', hostname='test')
6363
instance.create()
6464

6565
# NOTE(mikal): We could create a network and a fixed IP here, but it
@@ -100,6 +100,9 @@ def test_lookup_metadata_data_url(self):
100100
url = '%sopenstack/latest/meta_data.json' % self.md_url
101101
res = requests.request('GET', url, timeout=5)
102102
self.assertEqual(200, res.status_code)
103+
j = jsonutils.loads(res.text)
104+
self.assertIn('hostname', j)
105+
self.assertEqual('test.novalocal', j['hostname'])
103106

104107
def test_lookup_external_service(self):
105108
self.flags(

nova/tests/unit/test_metadata.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def fake_inst_obj(context):
8585
vcpus=1,
8686
fixed_ips=[],
8787
root_device_name='/dev/sda1',
88-
hostname='test.novadomain',
88+
hostname='test',
8989
display_name='my_displayname',
9090
metadata={},
9191
device_metadata=fake_metadata_objects(),
@@ -310,11 +310,19 @@ def test_neutron_security_groups(self):
310310
self.flags(use_neutron=True)
311311
self._test_security_groups()
312312

313-
def test_local_hostname_fqdn(self):
313+
def test_local_hostname(self):
314+
self.flags(dhcp_domain=None)
314315
md = fake_InstanceMetadata(self, self.instance.obj_clone())
315316
data = md.get_ec2_metadata(version='2009-04-04')
316317
self.assertEqual(data['meta-data']['local-hostname'],
317-
"%s.%s" % (self.instance['hostname'], CONF.dhcp_domain))
318+
self.instance['hostname'])
319+
320+
def test_local_hostname_fqdn(self):
321+
self.flags(dhcp_domain='fakedomain')
322+
md = fake_InstanceMetadata(self, self.instance.obj_clone())
323+
data = md.get_ec2_metadata(version='2009-04-04')
324+
self.assertEqual('%s.fakedomain' % self.instance['hostname'],
325+
data['meta-data']['local-hostname'])
318326

319327
def test_format_instance_mapping(self):
320328
# Make sure that _format_instance_mappings works.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
fixes:
3+
- |
4+
Unsetting '[DEFAULT] dhcp_domain' will now correctly result in the metadata
5+
service/config drive providing an instance hostname of '${hostname}' instead
6+
of '${hostname}None', as was previously seen.

0 commit comments

Comments
 (0)