From 04986f2f0c4a570c1cb786aa69a5608620108e50 Mon Sep 17 00:00:00 2001 From: Andrew Bogott Date: Thu, 12 Jan 2012 20:01:15 +0000 Subject: Create an instance DNS record based on instance UUID. Previously we created one based on instance name only. Since name is not guaranteed to be unique, best to have one based on uuid as well. Both point to the same address, of course. For blueprint public-and-private-dns. Change-Id: Ibb17f2a49f00b4522205d6b4508f432f6f5b0c5d --- nova/network/manager.py | 5 ++++- nova/network/minidns.py | 4 ++++ nova/tests/test_network.py | 30 ++++++++++++++++++++++-------- 3 files changed, 30 insertions(+), 9 deletions(-) (limited to 'nova') diff --git a/nova/network/manager.py b/nova/network/manager.py index 038b1d964..3a9003a78 100644 --- a/nova/network/manager.py +++ b/nova/network/manager.py @@ -1008,8 +1008,11 @@ class NetworkManager(manager.SchedulerDependentManager): instance_ref = self.db.instance_get(context, instance_id) name = instance_ref['display_name'] + uuid = instance_ref['uuid'] self.instance_dns_manager.create_entry(name, address, - "type", FLAGS.instance_dns_zone) + "A", FLAGS.instance_dns_zone) + self.instance_dns_manager.create_entry(uuid, address, + "A", FLAGS.instance_dns_zone) self._setup_network(context, network) return address diff --git a/nova/network/minidns.py b/nova/network/minidns.py index 448924553..81305c8c4 100644 --- a/nova/network/minidns.py +++ b/nova/network/minidns.py @@ -54,6 +54,10 @@ class MiniDNS(object): def create_entry(self, name, address, type, dnszone): + if type.lower() != 'a': + raise exception.InvalidInput(_("This driver only supports " + "type 'a'")) + if self.get_entries_by_name(name, dnszone): raise exception.FloatingIpDNSExists(name=name, zone=dnszone) diff --git a/nova/tests/test_network.py b/nova/tests/test_network.py index bf4c60427..ffc53cf1f 100644 --- a/nova/tests/test_network.py +++ b/nova/tests/test_network.py @@ -285,7 +285,8 @@ class FlatNetworkTestCase(test.TestCase): mox.IgnoreArg()).AndReturn({'security_groups': [{'id': 0}]}) db.instance_get(self.context, - 1).AndReturn({'display_name': HOST}) + 1).AndReturn({'display_name': HOST, + 'uuid': 'test-00001'}) db.fixed_ip_associate_pool(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn('192.168.0.101') @@ -300,11 +301,11 @@ class FlatNetworkTestCase(test.TestCase): zone1 = "example.org" zone2 = "example.com" driver = self.network.instance_dns_manager - driver.create_entry("hostone", "10.0.0.1", 0, zone1) - driver.create_entry("hosttwo", "10.0.0.2", 0, zone1) - driver.create_entry("hostthree", "10.0.0.3", 0, zone1) - driver.create_entry("hostfour", "10.0.0.4", 0, zone1) - driver.create_entry("hostfive", "10.0.0.5", 0, zone2) + driver.create_entry("hostone", "10.0.0.1", "A", zone1) + driver.create_entry("hosttwo", "10.0.0.2", "A", zone1) + driver.create_entry("hostthree", "10.0.0.3", "A", zone1) + driver.create_entry("hostfour", "10.0.0.4", "A", zone1) + driver.create_entry("hostfive", "10.0.0.5", "A", zone2) driver.delete_entry("hostone", zone1) driver.modify_address("hostfour", "10.0.0.1", zone1) @@ -322,6 +323,13 @@ class FlatNetworkTestCase(test.TestCase): self.assertEqual(len(addresses), 1) self.assertIn('10.0.0.2', addresses) + self.assertRaises(exception.InvalidInput, + driver.create_entry, + "hostname", + "10.10.10.10", + "invalidtype", + zone1) + def test_instance_dns(self): fixedip = '192.168.0.101' self.mox.StubOutWithMock(db, 'network_get') @@ -343,17 +351,23 @@ class FlatNetworkTestCase(test.TestCase): [{'id': 0}]}) db.instance_get(self.context, - 1).AndReturn({'display_name': HOST}) + 1).AndReturn({'display_name': HOST, + 'uuid': 'test-00001'}) db.fixed_ip_associate_pool(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(fixedip) db.network_get(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(networks[0]) db.network_update(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()) + self.mox.ReplayAll() self.network.add_fixed_ip_to_instance(self.context, 1, HOST, networks[0]['id']) - addresses = self.network.instance_dns_manager.get_entries_by_name(HOST) + instance_manager = self.network.instance_dns_manager + addresses = instance_manager.get_entries_by_name(HOST) + self.assertEqual(len(addresses), 1) + self.assertEqual(addresses[0], fixedip) + addresses = instance_manager.get_entries_by_name('test-00001') self.assertEqual(len(addresses), 1) self.assertEqual(addresses[0], fixedip) -- cgit