Add ability to create local volumes

Registered by Boris Filippov

Rationale
-------------
In some use cases data, holded in VM, can grow in size with time. To handle this situation it is possible put growing data on a volume and grow it as needed. But volumes are accessible only through network. If we need local disk speed and latency or, for some reasons, can’t have a network accessible volume, then this can’t be resolved. Other example is when an application requires more disk space, the biggest available flavour provides.

Proposal
------------
An API and compute extension with functionality similar to volumes but operates only on local for compute and VM storage.

Nova should use same type of local storage (raw/qcow/lvm - LVM was proposed by this https://blueprints.launchpad.net/nova/+spec/lvm-disk-images blueprint) as for main disk storage.

Operations on a local disk:

* create and attach - it should be one operation, because it is not possible to attach this local disk to a VM on other HW node and it is hard to determine on which HW node VM is running, optionally glance image can be specified for data initialization
* delete - simple destroy local disk
* resize - resize (grow) local volume with given id, this operation will only affect local raw block device, FS resizing should be done in VM itself.
* snapshot - snapshot the data and store it into glance

This functionality can brake live migration possibility so it should be possible to switch it off. We propose add a new flag `--enable_local_volumes` with the `False` value by default.

Blueprint information

Status:
Complete
Approver:
None
Priority:
Undefined
Drafter:
Boris Filippov
Direction:
Needs approval
Assignee:
Pavel Shkitin
Definition:
Obsolete
Series goal:
None
Implementation:
Started
Milestone target:
None
Started by
Boris Filippov
Completed by
Vish Ishaya

Related branches

Sprints

Whiteboard

I think this addition is marginally useful and complicates the system quite a bit. Volumes are moving to a separate service as well, so there isn't really a clear place for this to go.

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.