Add a format_message method to the Exceptions

This patch adds a format_message method to the NovaException class that
will almost always do what a user wants, when they want to print out the
message of the exception.

Exceptions that are received through RPC are turned into an actual
exception classes by the deserialize_remote_exception function of the
nova.openstack.common.rpc.common module. This function then overrides
__str__ and __unicode__ methods of a new class to print the whole trace.
We still want to preserve this functionality (for logging) but do not
want to leak the trace back to the user in the HTTP response.

Based on the above, This patch attempts to establish a convention that
states: if you need to get the message of a NovaException subclass -
always use the format_message method. Only use str(e) or unicode(e) when
you suspect that they were overriden.

Initially this was attempted through adding a custom metaclass to the
NovaException class so that format_message cannot be overridden in
subclasses, however due to a bug in testtools - many tests were failing.
A patch was proposed to testtols to remedy this
(https://github.com/testing-cabal/testtools/pull/34) however until it is
merged, we cannot use metaclasses with our exception classes as they
cause tests to fail.

(cherry picked from commit b936df8c1ec47300540403ebb6833f0fbf5f195f)

Conflicts:

	nova/tests/test_exception.py

Change-Id: I0a399b9ab3227bad644b031c9b689fe0ce64586e
Use format_message on exceptions instead of str()

This patch changes all usages of unicode() and str() in the API layer
(and most other reasonable places) into a new format_message method.
This is done in order to avoid leaking the stack trace back to the
user through the Remote excepitons.

This patch deliberately avoids the EC2 api as the way how the EC2 API
handles responses is being worked on as part of another blueprint.

Fixes bug 1159755

(cherry picked from commit 86031940b313532606449c400bca64707be1797a)

Conflicts:

	nova/api/openstack/compute/contrib/admin_actions.py
	nova/api/openstack/compute/contrib/agents.py
	nova/api/openstack/compute/contrib/console_output.py
	nova/api/openstack/compute/contrib/consoles.py
	nova/api/openstack/compute/contrib/deferred_delete.py
	nova/api/openstack/compute/contrib/fixed_ips.py
	nova/api/openstack/compute/contrib/flavorextraspecs.py
	nova/api/openstack/compute/contrib/flavormanage.py
	nova/api/openstack/compute/contrib/floating_ips_bulk.py
	nova/api/openstack/compute/contrib/hosts.py
	nova/api/openstack/compute/contrib/rescue.py
	nova/api/openstack/compute/contrib/server_password.py
	nova/api/openstack/compute/contrib/server_start_stop.py
	nova/api/openstack/compute/servers.py

Change-Id: I04a74682c4fac9a66ba25b52fd5c7af5e10e81e8
Merge "Add a format_message method to the Exceptions" into stable/folsom
Merge "Use format_message on exceptions instead of str()" into stable/folsom
Fix Network object encoding issue when using qpid

When creating network via REST API will throw the exception
"CodecException: no encoding for
<nova.db.sqlalchemy.models.Network object at 0x4a8ea10>".
It only occurs when using qpid.
Fix this issue through using jsonutils.to_primitive method.

Fix bug 1143584.

Change-Id: I833aef451f8e3d5eaa246c19d67b2474a9d36910
(cherry picked from commit b4d43b0d0c890ccb940862719c6b88a24029d44a)
Final versioning for 2012.2.4

Change-Id: Ic9ee9a7336c8f5f64ad4700c0322653e331c10bb
Bump version to 2012.2.5

Change-Id: Ibf237525fc86d5ba2129620f58d574685a713782
Integrate nova-network into Piston networking model.
Create util for root device path retrieval

blueprint snapshots-for-everyone

Create libvirt.utils.find_disk(virt_dom) function.
This function will retrieve disk path from instance configuration.
Will return path both for file and device backed instance root devices.
Will throw error in case, when device can't be found.

Change-Id: I612a19221c6ff78079ab53a8d77295c555514c77
Add util for disk type retrieval

blueprint snapshots-for-everyone

Add libvirt.utils.get_disk_type that retrieves format
for given file. Format can be raw, qcow2, or lvm.

Change-Id: I33898983cfa15db6b2654648ce32f72b6dd920cb
Add util for image conversion

blueprint snapshots-for-everyone

Add nova.virt.images.convert_image(source, dest, format)
that converts image to other format using qemu-img convert

Change-Id: I2c92cb31114c42717d0ddd011645dc7c661c82c6
Fixes bug Snapshotting LXC instance fails

Fixes bug 1058273.

The path of the disk for snapshotting LXC instance is debugged.
Also, virt_dom.managedSave(0) and self._create_domain(domain=virt_dom)
are not called for LXC instance, because they are supported by libvirt.

Change-Id: Idf8275a0222b2eb289e16dd245f7721e17fce21d
(cherry picked from commit b60646965de26974f8a8b81f6e43b72a6c8d44f5)
Implement snapshots for raw backend

blueprint snapshots-for-everyone

Use simple qemu-img convert for raw snapshots.
Polymorphically select snapshot behavior for
raw and qcow2.
Allow images to be constructed from actual device/file path.

Change-Id: I6a57e43c6775c144c41a53382dcc7504ce6d4c43
Simplify libvirt snapshot code path

The "cold" snapshot code path was unnecessarily complex. We were
traversing 3 layers of abstraction to reach 3 lines of code. I've
completely eliminated snapshot.py by moving all "cold" snapshot
functions into imagebackend.py and adjusting the libvirt driver
accordingly. This is the first pass of several I intend to make
against imagebackend.py, as it is far too difficult to read given
how basic the basic level of functionality it is intended to
provide.

Change-Id: Idfacffb7210ae61193ee4f2360d4b38f330a177c
Properly write non-raw LVM images on creation

Fixes bug 1075333

When force_raw_images=False and libvirt_images_type=lvm were set
together, selecting anything other than a RAW image would result in
an unbootable instance. This is because the downloaded image was
being directly dd'd onto the new LVM root, which will obviously not
work for any format other than RAW.

Simple change to use qemu-img to read from the image (letting it
decide the format) and write to the LVM root as raw.

Change-Id: I36494e6d0671c07f7511c10ef886c8cf84c18df7
Libvirt: Implement snapshots for LVM-backed roots

Uses the built-in LVM snapshotting mechanism to create a new
snapshot, use qemu-img to extract the full root into an image file,
then delete the snapshot volume. Although we typically zero deleted
LVM volumes manually, this is not necessary for snapshots, as LVM
handles it for us (per the documentation).

Change-Id: I82f21488671ffa3be3d0feba73ff631fa2a51ec0
Fixes: Bug 1120809
Flags: DocImpact
Libvirt: Add support for live snapshots

blueprint libvirt-live-snapshots

Implements support for live snapshots when QEMU 1.3 and Libvirt
1.0.0 are available. This implementation may function with other
hypervisors, at which point _check_use_live_snapshots can be
adjusted accordingly.

At a high level, the process is as follows. First we create a
destination file for the snapshot. This file uses the same backing
file as the origin disk and is of the same virtual size. We do this
since the combination of blockRebase and "shallow" copies are the
only bug-free method available as of QEMU 1.3 (Vish has submitted
patches upstream). This process ultimately produces a CoW file,
representing only the current delta between the root disk and
backing file. The final step converts the CoW delta to a backless
image matching the format of the origin disk.

Flags: DocImpact
Change-Id: Icba53336556295722c3f8b7345e6cd09d8ccfed9
Folsom uses FLAGS.
Remove lingering update_task_state.
Added fileutils requirement.