diff --git a/lib/fog/aws/requests/ec2/attach_volume.rb b/lib/fog/aws/requests/ec2/attach_volume.rb index a026bcdd1..658f147b4 100644 --- a/lib/fog/aws/requests/ec2/attach_volume.rb +++ b/lib/fog/aws/requests/ec2/attach_volume.rb @@ -50,6 +50,7 @@ module Fog 'volumeId' => volume_id } volume['attachmentSet'] = [data] + volume['status'] = 'attaching' response.status = 200 response.body = { 'requestId' => Fog::AWS::Mock.request_id diff --git a/lib/fog/aws/requests/ec2/describe_instances.rb b/lib/fog/aws/requests/ec2/describe_instances.rb index 937514120..c4991a67a 100644 --- a/lib/fog/aws/requests/ec2/describe_instances.rb +++ b/lib/fog/aws/requests/ec2/describe_instances.rb @@ -80,24 +80,23 @@ module Fog when 'rebooting' instance['instanceState'] = { 'code' => 16, 'name' => 'running' } when 'shutting-down' - if Time.now - @data[:deleted_at][instance['instanceId']] > 1 - instance['instanceState'] = { 'code' => 16, 'name' => 'terminating' } - elsif Time.now - @data[:deleted_at][instance['instanceId']] > 2 + if Time.now - @data[:deleted_at][instance['instanceId']] > 2 @data[:deleted_at].delete(instance['instanceId']) @data[:instances].delete(instance['instanceId']) + elsif Time.now - @data[:deleted_at][instance['instanceId']] > 1 + instance['instanceState'] = { 'code' => 16, 'name' => 'terminating' } end when 'terminating' if Time.now - @data[:deleted_at][instance['instanceId']] > 1 @data[:deleted_at].delete(instance['instanceId']) @data[:instances].delete(instance['instanceId']) - instance_set.delete(instance) end end end if instance_id.length == 0 || instance_id.length == instance_set.length + instance_set = instance_set.reject {|instance| !@data[:instances][instance['instanceId']]} response.status = 200 - reservation_set = {} instance_set.each do |instance| reservation_set[instance['reservationId']] ||= { diff --git a/lib/fog/aws/requests/ec2/describe_volumes.rb b/lib/fog/aws/requests/ec2/describe_volumes.rb index 67f6e3b98..2176380a2 100644 --- a/lib/fog/aws/requests/ec2/describe_volumes.rb +++ b/lib/fog/aws/requests/ec2/describe_volumes.rb @@ -51,6 +51,7 @@ module Fog case volume['status'] when 'attaching' if Time.now - volume['attachmentSet'].first['attachTime'] > 1 + volume['attachmentSet'].first['status'] = 'attached' volume['status'] = 'attached' end when 'creating' @@ -61,12 +62,12 @@ module Fog if Time.now - @data[:deleted_at][volume['volumeId']] > 1 @data[:deleted_at].delete(volume['volumeId']) @data[:volumes].delete(volume['volumeId']) - volume_set.delete(volume) end end end if volume_id.length == 0 || volume_id.length == volume_set.length + volume_set = volume_set.reject {|volume| !@data[:volumes][volume['volumeId']]} response.status = 200 response.body = { 'requestId' => Fog::AWS::Mock.request_id, diff --git a/lib/fog/aws/requests/ec2/terminate_instances.rb b/lib/fog/aws/requests/ec2/terminate_instances.rb index 4bb055a40..e7a09c5ca 100644 --- a/lib/fog/aws/requests/ec2/terminate_instances.rb +++ b/lib/fog/aws/requests/ec2/terminate_instances.rb @@ -74,11 +74,10 @@ module Fog end describe_volumes.body['volumeSet'].each do |volume| - if volume['instanceId'] == instance_id + if volume['attachmentSet'].first && volume['attachmentSet'].first['instanceId'] == instance_id detach_volume(volume['volumeId']) end end - end else response.status = 400