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
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
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"