diff --git a/lib/fog/aws/requests/ec2/delete_volume.rb b/lib/fog/aws/requests/ec2/delete_volume.rb index c4c836024..962667664 100644 --- a/lib/fog/aws/requests/ec2/delete_volume.rb +++ b/lib/fog/aws/requests/ec2/delete_volume.rb @@ -29,6 +29,10 @@ module Fog def delete_volume(volume_id) response = Excon::Response.new if volume = @data[:volumes][volume_id] + if volume["attachmentSet"].any? + attach = volume["attachmentSet"].first + raise Fog::AWS::EC2::Error.new("Client.VolumeInUse => Volume #{volume_id} is currently attached to #{attach["instanceId"]}") + end @data[:deleted_at][volume_id] = Time.now volume['status'] = 'deleting' response.status = 200 diff --git a/spec/aws/models/ec2/volume_spec.rb b/spec/aws/models/ec2/volume_spec.rb index 2b21c4f73..edcf7ab6c 100644 --- a/spec/aws/models/ec2/volume_spec.rb +++ b/spec/aws/models/ec2/volume_spec.rb @@ -43,6 +43,14 @@ describe 'Fog::AWS::EC2::Volume' do volume.destroy.should be_true end + it 'should fail if the volume is attached to an instance' do + server = AWS[:ec2].servers.create(:image_id => GENTOO_AMI) + server.wait_for { ready? } + volume = AWS[:ec2].volumes.create(:availability_zone => server.availability_zone, :size => 1, :device => '/dev/sdz1') + volume.server = server + lambda { volume.destroy }.should raise_error + end + end describe "#server=" do