From f4464ac3058309c8710201c479d5d7f954df5c81 Mon Sep 17 00:00:00 2001 From: Andrey Pavlov Date: Sat, 13 Feb 2016 11:05:53 +0300 Subject: [PATCH] add 'stop instance' operation before volume detach to prevent volume stuck in busy state. From AWS: Make sure to unmount any file systems on the device within your operating system before detaching the volume. Failure to do so results in the volume being stuck in a busy state while detaching. Change-Id: I6e96c0125a07c09b5f36a9e086d58075cc47e98b --- api/test_volumes.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/api/test_volumes.py b/api/test_volumes.py index 779f4f0..f949eb6 100644 --- a/api/test_volumes.py +++ b/api/test_volumes.py @@ -189,6 +189,11 @@ class VolumeTest(base.EC2TestCase): self.assertIn('DeviceName', bdms[0]) self.assertIn('Ebs', bdms[0]) + # stop instance to prevent 'busy' state of detached volume + data = self.client.stop_instances(InstanceIds=[instance_id]) + self.get_instance_waiter().wait_available(instance_id, + final_set=('stopped')) + self.client.detach_volume(VolumeId=volume_id) self.get_volume_attachment_waiter().wait_delete(volume_id) self.cancelResourceCleanUp(clean_vi) @@ -244,6 +249,11 @@ class VolumeTest(base.EC2TestCase): clean_i = self.addResourceCleanUp(self.client.terminate_instances, InstanceIds=[instance_id]) + # stop instance to prevent 'busy' state of detached volume + data = self.client.stop_instances(InstanceIds=[instance_id]) + self.get_instance_waiter().wait_available(instance_id, + final_set=('stopped')) + self.client.detach_volume(VolumeId=volume_id) self.get_volume_attachment_waiter().wait_delete(volume_id) self.cancelResourceCleanUp(clean_vi) @@ -296,6 +306,11 @@ class VolumeTest(base.EC2TestCase): self.client.delete_volume, VolumeId=volume_id) + # stop instance to prevent 'busy' state of detached volume + data = self.client.stop_instances(InstanceIds=[instance_id]) + self.get_instance_waiter().wait_available(instance_id, + final_set=('stopped')) + self.client.detach_volume(VolumeId=volume_id) self.cancelResourceCleanUp(clean_vi) self.get_volume_attachment_waiter().wait_delete(volume_id)