[Engine-devel] Floating Disks implementation in REST-API
Geert Jansen
gjansen at redhat.com
Tue Apr 10 11:35:09 UTC 2012
On 04/09/2012 05:14 PM, Ori Liel wrote:
> The "Floating Disks" feature makes disks into stand-alone entities: a given disk may be attached to a VM (as all disks are today), or it may be not attached to any VM, which makes it a floating disk (http://www.ovirt.org/wiki/Features/FloatingDisk)
>
> To implement attach/detach of disk to/from VM in REST-API, we intend to introduce two new actions:
>
> POST .../api/vms/{vm:id}/disks/{disk:id}/attach
> POST .../api/vms/{vm:id}/disks/{disk:id}/detach
>
> Since we try not to add new actions unless we have to, I want to explain why I believe that these actions are necessary.
> The other implementation would use existing add/remove flows:
>
> POST .../api/vms/{vm:id}/disks - if the disk was passed with an ID, attach it to this VM. If no id - create a new disk.
> DELETE .../api/vms/{vm:id}/disks/{disk:id} - *ambiguity problem, need to add a flag*
>
> We can't break existing API, so regular DELETE must remove the disk, as it does today. To detach a disk using DELETE we'd have to add a flag to the DETELE command. This is quite risky, because if the user forgets to pass this flag, the disk which he wanted to detach will actually be deleted.
>
> Theoretically, if we could break the API, the following modelling would resolve the ambiguity and perhaps be ideal:
> - POST/DELETE disk in root context means create or delete it.
> - POST/DELETE disk in VM context means attach or detach it.
> But we don't have the privilege of breaking the API.
>
> Considering all of the above - and the fact that attach/detach nics to/from host is also implemented using actions - I believe that the new actions are justifiable.
>
> Any comments?
I assume that a floating disk can be attached to 0 VMs as well, right?
So i would assume we get a top-level /disks collection correct?? And I
assume that collection would only list floating disks?
In my view, backwards compatible DELETE semantics for a floating disk
aren't that bad:
DELETE /vms/{vm:id}/disks/{disk:id}
=> Accept a <detach>true|false</detach> argument.
=> Defaults to "false" for compatibility.
This means that DELETE will by default really DELETE any non-floating
disk. That is compatibility with today. For safety, implement this:
=> When deleting a disk that is floating, fail unless <force> is also
set to "true". And always fail if one of the other VMs is running
(obviously).
To attach a disk and make it float, use POST and you and Eoghan described.
To detach a disk, use DELETE with <detach>true</detach>.
To delete a non-attached, floating disks, use:
DELETE /disks/{disk:id}
To delete an attached, floating disk, use:
DELETE /vm/{vm:id}/disks/{disk:id} with <force>true</force>; OR
DELETE /disks/{disk:id}
To create a non-attached, floating, disk, use:
POST /disks
Regards,
Geert
More information about the Engine-devel
mailing list