From 90ffe4eb93c9a95d2439d41f615bfc2c2d8361b2 Mon Sep 17 00:00:00 2001 From: Marco Voelz Date: Mon, 11 May 2015 17:33:20 +0200 Subject: [PATCH] Explicitly choose the network to release reservations The network on the current resource pool might be different, therefore receive the network from the deployment_plan Signed-off-by: Krum Tsvetkov --- .../bosh/director/deployment_plan/assembler.rb | 2 +- .../unit/deployment_plan/assembler_spec.rb | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/bosh-director/lib/bosh/director/deployment_plan/assembler.rb b/bosh-director/lib/bosh/director/deployment_plan/assembler.rb index a24388d7627..4df1dab1306 100644 --- a/bosh-director/lib/bosh/director/deployment_plan/assembler.rb +++ b/bosh-director/lib/bosh/director/deployment_plan/assembler.rb @@ -77,7 +77,7 @@ def bind_idle_vm(vm_model, resource_pool, state, reservations) @logger.debug("Releasing all network reservations for VM `#{vm_model.cid}'") reservations.each do |network_name, reservation| @logger.debug("Releasing #{reservation.type} network reservation `#{network_name}' for VM `#{vm_model.cid}'") - resource_pool.network.release(reservation) + @deployment_plan.network(network_name).release(reservation) end @logger.debug("Deleting VM `#{vm_model.cid}' with static network reservation") diff --git a/bosh-director/spec/unit/deployment_plan/assembler_spec.rb b/bosh-director/spec/unit/deployment_plan/assembler_spec.rb index 949442fe663..84a534916f6 100644 --- a/bosh-director/spec/unit/deployment_plan/assembler_spec.rb +++ b/bosh-director/spec/unit/deployment_plan/assembler_spec.rb @@ -180,7 +180,9 @@ module Bosh::Director let(:deployment_model) { Models::Deployment.make(manifest: Psych.dump(manifest_hash)) } let(:manifest_hash) { Bosh::Spec::Deployments.simple_manifest } let(:state) { { 'state' => 'foo' } } - let(:network) { DeploymentPlan::Network.new(deployment_plan, {'name' => resource_pool_manifest['network']}) } + let(:network_fake) { DeploymentPlan::Network.new(deployment_plan, {'name' => resource_pool_manifest['network']}) } + let(:network_bar) { DeploymentPlan::Network.new(deployment_plan, {'name' => 'bar'}) } + let(:network_baz) { DeploymentPlan::Network.new(deployment_plan, {'name' => 'baz'}) } let(:resource_pool) { DeploymentPlan::ResourcePool.new(deployment_plan, resource_pool_manifest, logger) } let(:vm_model) { Models::Vm.make } let(:idle_vm) { DeploymentPlan::Vm.new(resource_pool) } @@ -199,10 +201,14 @@ module Bosh::Director before do # add mock network - deployment_plan.add_network(network) + deployment_plan.add_network(network_fake) + deployment_plan.add_network(network_bar) + deployment_plan.add_network(network_baz) # release is not implemented in the base Network object - allow(network).to receive(:release) + allow(network_fake).to receive(:release) + allow(network_bar).to receive(:release) + allow(network_baz).to receive(:release) # return mock idle vm allow(resource_pool).to receive(:add_idle_vm).and_return(idle_vm) @@ -225,7 +231,7 @@ module Bosh::Director it 'releases all network reservations' do reservations.each do |network_name, reservation| - expect(network).to receive(:release).with(reservation) + expect(deployment_plan.network(network_name)).to receive(:release).with(reservation) end assembler.bind_idle_vm(vm_model, resource_pool, state, reservations) @@ -257,13 +263,13 @@ module Bosh::Director end it 'reuses dynamic network reservations' do - expect(idle_vm).to receive(:use_reservation).with(reservations[network.name]) + expect(idle_vm).to receive(:use_reservation).with(reservations[network_fake.name]) assembler.bind_idle_vm(vm_model, resource_pool, state, reservations) end it 'does not release any network reservations' do - expect(network).not_to receive(:release) + expect(network_fake).not_to receive(:release) assembler.bind_idle_vm(vm_model, resource_pool, state, reservations) end