From 9af40c167879096a8f0f209bde4e6c5cc9295b86 Mon Sep 17 00:00:00 2001 From: Alessio Ababilov Date: Mon, 16 Jul 2012 18:27:58 +0300 Subject: Implement network association in OS API Networks are associated with projects automatically during launch of an instance. The network is chosen rather randomly. This commit adds support for association of given network and project. DocImpact - when this lands, need to update openstack-manuals repo: doc/src/docbkx/openstack-api-site/src/wadls/compute-api/src/ext/os-networks.wadl Implements: blueprint os-api-network-associate Change-Id: Iafaf4a5ae3d3e16a6c649f1d7850fceba732efab --- nova/db/api.py | 4 ++-- nova/db/sqlalchemy/api.py | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'nova/db') diff --git a/nova/db/api.py b/nova/db/api.py index 48b9fba1e..aa3548c7e 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -779,9 +779,9 @@ def key_pair_count_by_user(context, user_id): #################### -def network_associate(context, project_id, force=False): +def network_associate(context, project_id, network_id=None, force=False): """Associate a free network to a project.""" - return IMPL.network_associate(context, project_id, force) + return IMPL.network_associate(context, project_id, network_id, force) def network_count(context): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 2b5b9f993..a9d324da5 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1996,7 +1996,7 @@ def key_pair_count_by_user(context, user_id): @require_admin_context -def network_associate(context, project_id, force=False): +def network_associate(context, project_id, network_id=None, force=False): """Associate a project with a network. called by project_get_networks under certain conditions @@ -2014,10 +2014,13 @@ def network_associate(context, project_id, force=False): session = get_session() with session.begin(): - def network_query(project_filter): + def network_query(project_filter, id=None): + filter_kwargs = {'project_id': project_filter} + if id is not None: + filter_kwargs['id'] = id return model_query(context, models.Network, session=session, read_deleted="no").\ - filter_by(project_id=project_filter).\ + filter_by(**filter_kwargs).\ with_lockmode('update').\ first() @@ -2030,7 +2033,7 @@ def network_associate(context, project_id, force=False): # with a new network # get new network - network_ref = network_query(None) + network_ref = network_query(None, network_id) if not network_ref: raise db.NoMoreNetworks() -- cgit