summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanwent@gmail.com <>2011-08-28 17:37:07 -0700
committerdanwent@gmail.com <>2011-08-28 17:37:07 -0700
commit431cd5d17780aa7ea9d03b028a78ec4e20b22440 (patch)
treefa8561bb2871bcd64d46e58ea706d3d250182d3c
parent56891283f117997042363aee2e3ce00a5a12d9e0 (diff)
always set network_id in virtual_interfaces table, otherwise API commands that show IP addresses get confused
-rw-r--r--nova/network/quantum/manager.py24
-rw-r--r--nova/network/quantum/melange_ipam_lib.py11
-rw-r--r--nova/network/quantum/nova_ipam_lib.py2
3 files changed, 28 insertions, 9 deletions
diff --git a/nova/network/quantum/manager.py b/nova/network/quantum/manager.py
index 932bdd82f..fb13a8496 100644
--- a/nova/network/quantum/manager.py
+++ b/nova/network/quantum/manager.py
@@ -105,14 +105,28 @@ class QuantumManager(manager.FlatManager):
project_id)
# Create a port via quantum and attach the vif
- for (net_id, project_id) in net_proj_pairs:
+ for (quantum_net_id, project_id) in net_proj_pairs:
+
+ # FIXME: (danwent). We'd like to have the manager be completely
+ # decoupled from the nova networks table.
+ # However, other parts of nova sometimes go behind
+ # our back and access network data directly from the DB. So
+ # for now, the quantum manager knows that there is a nova
+ # networks DB table and accesses it here.
+ # updating the virtual_interfaces table to use UUIDs would
+ # be one solution, but this would require significant work
+ # elsewhere.
+ network_ref = db.network_get_by_uuid(context, quantum_net_id)
+
vif_rec = manager.FlatManager.add_virtual_interface(self,
- context, instance_id, None)
+ context, instance_id, network_ref['id'])
+ # talk to Quantum API to create and attach port.
q_tenant_id = project_id or FLAGS.quantum_default_tenant_id
- self.q_conn.create_and_attach_port(q_tenant_id, net_id,
+ self.q_conn.create_and_attach_port(q_tenant_id, quantum_net_id,
vif_rec['uuid'])
- self.ipam.allocate_fixed_ip(context, project_id, net_id, vif_rec)
+ self.ipam.allocate_fixed_ip(context, project_id, quantum_net_id,
+ vif_rec)
return self.get_instance_nw_info(context, instance_id,
instance_type_id, host)
@@ -173,7 +187,7 @@ class QuantumManager(manager.FlatManager):
if v6_subnet['cidr']:
network_dict['cidr_v6'] = v6_subnet['cidr']
info['ip6s'] = [ip_dict(ip, v6_subnet) for ip in v6_ips]
- # TODO(tr3buchet): handle ip6 routes here as well
+
if v6_subnet['gateway']:
info['gateway6'] = v6_subnet['gateway']
diff --git a/nova/network/quantum/melange_ipam_lib.py b/nova/network/quantum/melange_ipam_lib.py
index cfdcde045..e2e09f139 100644
--- a/nova/network/quantum/melange_ipam_lib.py
+++ b/nova/network/quantum/melange_ipam_lib.py
@@ -50,11 +50,16 @@ class QuantumMelangeIPAMLib:
project_id=tenant_id,
dns1=dns1, dns2=dns2)
- # create a entry in the network table just to store
- # the priority order for this network
+ # create a entry in the network table, even though
+ # most data is stored in melange. This is used to
+ # store data not kept by melange (e.g., priority)
+ # and to 'fake' other parts of nova (e.g., the API)
+ # until we get get all accesses to be via the
+ # network manager API.
net = {"uuid": quantum_net_id,
"project_id": project_id,
- "priority": priority}
+ "priority": priority,
+ "label": label}
network = self.db.network_create_safe(context, net)
def allocate_fixed_ip(self, context, project_id, quantum_net_id, vif_ref):
diff --git a/nova/network/quantum/nova_ipam_lib.py b/nova/network/quantum/nova_ipam_lib.py
index 5bca9d024..6e7e5d244 100644
--- a/nova/network/quantum/nova_ipam_lib.py
+++ b/nova/network/quantum/nova_ipam_lib.py
@@ -55,7 +55,7 @@ class QuantumNovaIPAMLib:
if len(networks) != 1:
raise Exception("Error creating network entry")
- # now grab the network and update uuid, project_id, priority
+ # now grab the network and update additional fields
network = networks[0]
net = {"project_id": tenant_id,
"priority": priority,