Allow the user to update a volume's metadata

The fix mainly involves updating the VolumeController's update method
to allow the 'metadata' key to be a valid key in a request body.

The _translate_volume_summary_view method is updated to check for a
'metadata' key in the vol parameter after checking first for
'volume_metadata'.  This is to avoid making a third call to the
database after updating the volume model.  This solution introduces
the least amount of new code.

Change-Id: I41256d03f9c4c7a0866ff0f2d35fce8e4fd26b11
Fixes: bug #1046382
Rollback for resources during volume creation failure

Fixes bug #1070258

Add a single QUOTAS.rollback for all exceptions. Ensure that no stale
"reservations" are left in place after a failed volume creation.

Change-Id: Iedb193b213b8ee700a5765278ac4d00dac66d53a
Fix typo so setting volume_tmp_dir works

This can be controlled by environment variables without setting
volume_tmp_dir as well, so there's an easy workaround for
Folsom.

Fixes LP bug #1071536
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>

Change-Id: I50996c7c7a870d8e2bab1d3f44fd4d15b8ced6a6
Add default volume type flag

Where using volume type scheduler, 'volume type' is an essential input for
scheduler to perform sophysticated scheduling.  This patch adds a new
flag 'default_volume_type to allow admin to set one volume type as the
default type for volume creation if user doesn't specify any.

Also add more clear 404 message to API if create request provided non-existing
volume type.

Note: Setting the 'default_volume_type' flag to non-existing volume type
is problematic and should be avoided, and the outcome of such behavior is
equivlant to setting default volume type to None.

This is part of patch set implementing 'volume-type-scheduler'.

Change-Id: Ib2b2bbdc9bc96ab097cca2821c9aef04c65c2857
Add VolumeHostAttribute API extension

Expose the host on which a volume resides through a new API
extension. This is only presented to Admins by default. This
can be controlled with the 'volume_host_attribute' policy
rule.

Fixes bug 1035350.

Change-Id: I0a74a0dfbd78e853219150fbe0d3fba77c6f9bb6
Split out drivers in san.py

The SolarisISCSIDriver and HpSanISCSIDriver have been removed from
san.py and placed in their own files. The default SanISCSIDriver
implementing some common methods still resides in san.py. These
san drivers have now been grouped in the san module.

Implements bp driver-cleanup

Change-Id: I68802f01a4a8c7e93e097777d305fbee0d15128a
Detect and fix issues caused by vol ID migration

The migration from volume ID to UUID neglected to update the provider_location
field on the volume.  As a result the iqn and volume name no long match and
existing volumes are no longer able to be attached after an upgrade
(essex -> folsom and then nova-vol->cinder).

This patch adds a method to the volume driver that will check for the
mismatch of volume name in the iqn during service start up.  If
detected it will update the provider_location field in the database
to include the new ID.  Also it will create a symlink to the device backing
file that also has the correct naming convention.

Note: We don't disturb an connections that are currently attached.
For this case we add a check in manager.detach and do any provider_location
cleanup that's needed at that time.  This ensures that connections
persist on restarts of tgtd and reboot.

Change-Id: I8224824b793c98a9767c5d8dd741d892be720c4f
Fixes: bug 1065702
Log the body of an /action

The inability to deduce an /action request from the logs
makes diagnosing integration with nova difficult. This change
logs the action method and arguments

Change-Id: Iea4f46c7da9c61e07aa23e897b60992b8fdb6663
Merge "Split out drivers in san.py"
Add VolumeTenantAttribute API extension

Expose the ID of the project to which a volume belongs through a
new API extension. This is only presented to Admins by default.
Visibility can be controlled with the 'volume_tenant_attribute'
policy rule.

Change-Id: If85d9759af6a9457bf3230375cc64af9efe4a088
pin sqlalchemy to the 0.7 series

sqlalchemy 0.8 beta has hit mirrors, and changes dependencies, thus
breaking jenkins. This pins it to 0.7 series until all the projects
agree to move forward to 0.8.

Fixes bug #1073569

Change-Id: If11f39d311ba9ef5cb2b198c9649a8997b2a52b5
Merge "Add VolumeTenantAttribute API extension"
Merge "Detect and fix issues caused by vol ID migration"
Merge "Log the body of an /action"
Merge "Allow the user to update a volume's metadata"