summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Bogott <abogott@wikimedia.org>2012-01-12 20:01:15 +0000
committerAndrew Bogott <abogott@wikimedia.org>2012-01-13 18:33:59 +0000
commit04986f2f0c4a570c1cb786aa69a5608620108e50 (patch)
treeba42bc1f99b89309e13037ea79f41e3e60ef594c
parentf3cae729b71cdd5f0abf00a81d76539127bb0f48 (diff)
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
-rw-r--r--nova/network/manager.py5
-rw-r--r--nova/network/minidns.py4
-rw-r--r--nova/tests/test_network.py30
3 files changed, 30 insertions, 9 deletions
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)