<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    This RFC is to illustrate how attach disk to vm works and what the
    API looks like.<br>
    <br>
    Use case:<br>
    &nbsp;&nbsp;&nbsp; 1. Guest wants to attach a volume which contains data.<br>
    &nbsp;&nbsp;&nbsp; 2. Guest is running out of storage space, attach an empty volume
    to extend storage space.<br>
    <br>
    Flow:<br>
    &nbsp;&nbsp;&nbsp; 1. Create a *<b>float</b>* volume in a storage pool.(float means
    this volume will not be deleted when vm's deleted, it is independent
    from vm)<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Only *<b>float</b>* volume can be attached to vm.(to solve
    volume ref count problem), All volumes created from storage tab is
    float ones,<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; because embedded storage is created when vm's created.<br>
    &nbsp;<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POST /storagepools/pool-1/storagevolumes/ <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {'float': True, 'size':10G, 'name': 'a-float-volume'}<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GET /storagepools/pool-1/storagevolumes/a-float-volume<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {'float': True, 'ref_count':0, ...}<br>
    <br>
    &nbsp;&nbsp;&nbsp; 2. On vm tab, list all availabe float volumes, currently only
    support ref_count=0 volumes, select one and attach it to vm.<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GET
    /storagepools/pool-1/storagevolumes?float=True&amp;ref_count=0<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GET
    /storagepools/pool-2/storagevolumes?float=True&amp;ref_count=0<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; POST /vms/vm-1/storages/<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {'storagepool': 'pool-1', 'storagevolume':'a-float-volume',
    'dev': 'hda', 'type':'disk'}<br>
    <br>
    &nbsp;&nbsp;&nbsp; 3. Detaching a disk from a vm, NOTE: this will make no change to
    content in the volume, just make it isolated from vm, if you want to
    delete storage, go to storage tab.<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DELETE /vms/vm-1/storages/hda<br>
    <br>
    NOTE:<br>
    &nbsp;&nbsp;&nbsp; This means we support disks from different storagepool, <br>
    &nbsp;&nbsp;&nbsp; Temporarily we don't support share disk (in the future it will
    be handled in a single feature). <br>
    &nbsp;&nbsp;&nbsp; VM deletion will not involve float disk.<br>
    &nbsp;&nbsp;&nbsp; As PCI hotplug already supported, we can add disk to a running
    vm.<br>
    <br>
    Thanks to Mark Wu to contribute idea of float to solve volume life
    cycle problem. Part of the inner implementation already be done by
    Rodrigo and Daniel, I will try to extend their implementation for
    hard disk.<br>
  </body>
</html>