[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-9349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15247675#comment-15247675
 ] 

ASF GitHub Bot commented on CLOUDSTACK-9349:
--------------------------------------------

Github user dmabry commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1500#discussion_r60222679
  
    --- Diff: test/integration/component/test_volumes.py ---
    @@ -603,7 +603,134 @@ def test_01_volume_attach_detach(self):
                     "Check the state of VM"
                 )
             except Exception as e:
    -            self.fail("Exception occuered: %s" % e)
    +            self.fail("Exception occurred: %s" % e)
    +        return
    +    
    +    @attr(tags=["advanced", "advancedns"])
    +    def test_02_root_volume_attach_detach(self):
    +        """Test Root Volume attach/detach to VM
    +        """
    +
    +        # Validate the following
    +        # 1. Deploy a VM
    +        # 2. Check for root volume
    +        # 3. Stop VM
    +        # 4. Detach root volume
    +        # 5. Verify root volume detached
    +        # 6. Attach root volume
    +        # 7. Start VM
    +        
    +        try:
    +            # Check for root volume
    +            root_volume_response = Volume.list(
    +                self.apiclient,
    +                virtualmachineid=self.virtual_machine.id,
    +                type='ROOT',
    +                listall=True
    +            )
    +            self.assertNotEqual(
    +                root_volume_response,
    +                None,
    +                "Check if root volume exists in ListVolumes"
    +            )
    +            self.assertEqual(
    +                isinstance(root_volume_response, list),
    +                True,
    +                "Check list volumes response for valid list"
    +            )
    +            # Grab the root volume for later use
    +            root_volume = root_volume_response[0]
    +            
    +            # Stop VM
    +            self.debug("Stopping the VM: %s" % self.virtual_machine.id)
    +            self.virtual_machine.stop(self.apiclient)
    +            
    +            # Ensure VM is stopped before detaching the root volume
    +            time.sleep(self.services["sleep"])
    +
    +            vm_response = VirtualMachine.list(
    +                self.apiclient,
    +                id=self.virtual_machine.id,
    +            )
    +            vm = vm_response[0]
    +            self.assertEqual(
    +                vm.state,
    +                'Stopped',
    +                "Check the state of VM"
    +            )
    +            
    +            # Detach root volume from VM
    +            self.virtual_machine.detach_volume(
    +                self.apiclient,
    +                root_volume
    +            )
    +            
    +            # Verify that root disk is gone
    +            no_root_volume_response = Volume.list(
    +                self.apiclient,
    +                virtualmachineid=self.virtual_machine.id,
    +                type='ROOT',
    +                listall=True
    +            )
    +            self.assertEqual(
    +                no_root_volume_response,
    +                None,
    +                "Check if root volume exists in ListVolumes"
    +            )
    +            
    +            # Attach root volume to VM
    +            self.virtual_machine.attach_volume(
    +                self.apiclient,
    +                root_volume,
    +                0
    +            )
    +            
    +            # Check for root volume
    +            new_root_volume_response = Volume.list(
    +                self.apiclient,
    +                virtualmachineid=self.virtual_machine.id,
    +                type='ROOT',
    +                listall=True
    +            )
    +            self.assertNotEqual(
    +                new_root_volume_response,
    +                None,
    +                "Check if root volume exists in ListVolumes"
    +            )
    +            self.assertEqual(
    +                isinstance(new_root_volume_response, list),
    +                True,
    +                "Check list volumes response for valid list"
    +            )
    +            
    +            # Start VM
    +            self.virtual_machine.start(self.apiclient)
    +            # Sleep to ensure that VM is in ready state
    +            time.sleep(self.services["sleep"])
    +
    +            vm_response = VirtualMachine.list(
    +                self.apiclient,
    +                id=self.virtual_machine.id,
    +            )
    +            # Verify VM response to check whether VM deployment was 
successful
    +            self.assertEqual(
    +                isinstance(vm_response, list),
    +                True,
    +                "Check list VM response for valid list"
    +            )
    +            self.assertNotEqual(
    +                len(vm_response),
    +                0,
    +                "Check VMs available in List VMs response"
    +            )
    --- End diff --
    
    @shwetaag Agreed.  I thought this was redundant as well, but I was merely 
following the pattern that I saw previously established earlier in 
test_volumes.py.  I assumed, perhaps incorrectly, that there was a reason for 
testing this twice.  It didn't make sense to me that a VM would be an instance, 
the len of the array returned would be zero.  I will remove the array length 
assertion.


> Unable to detach root volume when using Hypervisor Type KVM
> -----------------------------------------------------------
>
>                 Key: CLOUDSTACK-9349
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9349
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: Volumes
>    Affects Versions: 4.5.1, 4.6.2, 4.7.1, 4.8.0, 4.9.0
>         Environment: Centos 7
>            Reporter: Simon Weller
>            Priority: Minor
>             Fix For: 4.7.2
>
>
> Back in 4.5, support was added in CLOUDSTACK-6284 for detaching root volumes. 
> The original support was meant to work with Xen, VMware and KVM.
> After chatting with fuflo in the Cloudstack irc channel, it was pointed out 
> that a constraint was not correctly modified in VolumeApiServiceImpl.java to 
> allow the detach to occur when vm.getHypervisorType() == HypervisorType.KVM.
> This is a very useful feature, as it allows us to simulate a snapshot revert 
> with Ceph by using createVolume sourced from a snapshot, then detaching and 
> reattaching the root volume (new root volume needs to be attached as 
> device=0).
> I'm going to propose a PR for this shortly



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to