Change listen address on libvirt live-migration

Previously, in order for libvirt live migration to work,
the graphics listen addresses (VNC and/or Spice) had to be
set on both machines to be 0.0.0.0 or ::.  This was because libvirt
would try to rebind to the source address on the destination
machine, but would fail due to the source machine already having
that address (this would not happen for 0.0.0.0 or ::, however).

Now, a modified copy of the instance's XML is passed to libvirt's
migrate function, such that the listen addresses are that of the
destination machine.  The addresses are stashed in the pre-migration
data by the destination pre-migration method.

Note that this functionality will only work on versions of libvirt
with the VIR_DOMAIN_XML_MIGRATABLE flag.  If the flag is not detected
(anything vanilla libvirt less than 1.0.0), the live migration code
will fall back to the old method.

Fixes: bug #1279563

Change-Id: I6c9500283027193179c11d18ad4242e165a9ad6e
Fix nova/network direct use of object modules

This replaces all uses of nova.objects.<module>.<object> with
nova.objects.<object> within nova/network and nova/tests/network.

Change-Id: I6438bcf47e06a401323ea708d5a44c69fa00e967
Partial-Blueprint: object-subclassing
Handle over quota exception from Neutron

When using the floating IP in Nova with Neutron, and
a quota limit is exceeded in Neutron, the exception from
the Neutron client results in Nova generating a 500 error.
This is unhelpful to user, and not consistent with nova-networking
Return FloatingIPExceedLimit exception when quota exceeded.

Change I8788993578ac872da9f676fe3e2fb8f98414289d at neutronclient
add OverQuotaClient exception and it is used in this patch

Change-Id: Ieb90521cf231acae8b5a9920acf6c77f2e34ef67
Closes-Bug: #1210598
Closes-Bug: #1301117
Catch InvalidAggregateAction when deleting an aggregate

When an aggregate with 'host' attribute not empty is deleted,
InvalidAggregateAction exception will be raised, but this exception
is not handled.

Closes-Bug: #1303591
Change-Id: I4ef0c4a6008acea7e9769e93de79451cfbc0a0fa
Standardization of nova.image.API.download

Brings the wacky download method into the new nova.image.API object and
removes calls to nova.image.glance throughout the virt drivers that were
using various call signatures of glance.ImageService.download. Since
some of the wrapper objects that fetched image bits from Glance were
using the get and update methods of the former
nova.image.glance.GlanceImageService object, those calls were updated to
instead call the new, standardized nova.image.API methods of the same
name and call signature.

The final patch in this series will refactor the remaining direct use of
the nova.image.glance module, which are calls to
glance.generate_image_url() and glance.generate_glance_url().

Change-Id: Ib3a85d0875c06c4e54e4211bc2fb8ce3fe16161d
Partially-implements blueprint: standardize-nova-image
Improve shared storage checks for live migration

Due to an assumption that libvirt live migrations work only when both
instance path and disk data is shared between source and destination
hosts (e.g. libvirt instances directory is on NFS), instance disks are
removed from shared storage when instance path is not shared (e.g. Ceph
RBD backend is enabled).

Distinguish cases that require shared instance drive and shared libvirt
instance directory. Reflect the fact that RBD backed instances have
shared instance drive (and no shared libvirt instance directory) in the
relevant conditionals.

UpgradeImpact: Live migrations from or to a compute host running a
version of Nova pre-dating this commit are disabled in order to
eliminate possibility of data loss. Upgrade Nova on both the source and
the target node before attempting a live migration.

Closes-bug: 1250751
Closes-bug: 1314526
Co-authored-by: Ryan Moe <rmoe@mirantis.com>
Co-authored-by: Yaguang Tang <yaguang.tang@canonical.com>
Signed-off-by: Dmitry Borodaenko <dborodaenko@mirantis.com>
Change-Id: I2755c59b4db736151000dae351fd776d3c15ca39
Merge "Change listen address on libvirt live-migration"
Merge "Improve shared storage checks for live migration"
Merge "Handle over quota exception from Neutron"
Merge "Catch InvalidAggregateAction when deleting an aggregate"
Merge "Standardization of nova.image.API.download"
Merge "Fix nova/network direct use of object modules"