Validated device_name value in block device map

1. Checked value of device_name parameter provided in block device
mapping section of Create server API.
2. Added unit test coverage.

Fixes LP: #1087165

Change-Id: I32ed59a577167d9bf42cb3667bfb1ba3963d6c71
Fix nova.availability_zones docstring

Change-Id: I66fe5cd5ab688bd4d3bedcdb79823497c65912e9
sync latest log and lockutils from oslo

Change-Id: I2aa0e63a7e9c3b7bea829fddf42a00d3318c6d6f
Clean up get_instance_id_by_floating_address

Reduce number of nova.db calls in get_instance_id_by_floating_address
to 1, fixed_ip_get_by_floating_address (A new nova.db.api function)

Change-Id: Ie1313ea73290ae11dce03d3726d5c23e4d73cb00
Reduce number of iptable-save restore loops

Instead of running iptables-save and iptables-restore per table,
run iptables save and restore on all tables at once.

Change-Id: If610d07c22ddaeb03ab37ee64d3d3a55d5e5b34f
Make nova-api logs more useful

The current logs make it hard to identify what API command is actually
being called, especially for POST, where the action is in the body.

* Whenever there is body, log it (info level)
* Log what function the API command maps to (debug level)

Change-Id: Ief14186b94e321d97575ee25e3507d3fc0178de6
Create ports in quantum matching hypervisor MAC addresses.

When hypervisors supply a set of MAC addresses for instances, the
network driver is responsible for matching up the requested MACs and
the available (or requested) networks.

The simplest case, which this patch addresses, is to create ports in
quantum on the desired networks, rather than having quantum create
them dynamically with dynamically created MAC addresses.

Change-Id: I84cd96671b76b8beaa31436c8a438f7818ef622f
Pull NovaWebSocketProxy class out of nova-novncproxy binary

To allow sharing of proxy code between nova-novncproxy and
nova-spicehtml5proxy, pull the NovaWebSocketProxy class
out of nova-novncproxy into a new nova/console/websocketproxy.py
file

Adds previously missing websockify dep to pip-requires.

Blueprint: libvirt-spice
Change-Id: If1334256680e7075598f00ce153cf6f021cc720f
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Add nova-spicehtml5proxy helper

Add nova-spicehtml5proxy which provides a websockets proxy,
equivalent to nova-novncproxy

Blueprint: libvirt-spice
Change-Id: I48be78c97bb7dd6635fd4bba476ef22701418ba1
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Add a get_spice_console method to nova.virt.ComputeDriver API

To mirror the existing get_vnc_console method, add a new
get_spice_console method to nova.virt.ComputeDriver API.

No attempt is made to wire this up to the RPC API, since at
this time there is no equivalent of novnc or xvpvncproxy to
use with SPICE.

Blueprint: libvirt-spice
Change-Id: I4cf12074b240d6882e46a81783cf20a3d97d4b2a
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Expose a get_spice_console RPC API method

To mirror the existing get_vnc_console RPC API method, expose a
new get_spice_console RPC API method. The only console type
supported currently is 'spice-html5' which is equivalent to
'novnc'

Blueprint: libvirt-spice
Change-Id: Iab9d3dfc3564a122a8cd2b53d34fdcc725bfa29b
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Add encryption method using an ssh public key.

This is a prerequisite for adding support to xenapi with
a guest agent to support the get-password command.

Related to blueprint get-password

Change-Id: I226ea5ee4fd6e326ccbb39cdf9098925d3f45312
Move compute node operations to conductor

This adds the following operations to conductor:

  compute_node_create()
  compute_node_update()

It also makes resource_tracker use them instead of making direct
calls to the database.

Further, it introduces a convert_datetimes() helper to the db api,
which can be used internally to convert ISO time strings back to
datetimes, so that we're getting them over the RPC wire. This
should be used in other places in the future to fix similar
situations and avoid one-off conversions in random places.

This removes the last direct database call from resource tracker,
and thus the db import.

Related to blueprint no-db-compute

Change-Id: I49c0bb30e7dd46d6f68550ebb644381961a0867f
Fix fallback when Quantum doesn't provide a 'vif_type'

In

  commit 4babf7d7e12f35c137148727842f7af28312e858
  Author: Daniel P. Berrange <berrange@redhat.com>
  Date:   Fri Jan 4 12:22:20 2013 +0000

    Make Quantum plugin fill in the 'bridge' name

We changed libvirt VIF driver to pull 'bridge' out of the
VIF model. This only worked for new Quantum drivers that
provide the 'vif_type' portbinding metadata though. This
patch effectively reverts part of that patch, so we have
a combination of the new & old method for determining
bridge names. The libvirt VIF driver will look at the
network['bridge'] field first, and if missing will fallback
to its previous logic which hardcoded bridge names.

Bug: 1100199
Change-Id: I5fd66b0303159c42bd227e97ddab381b2b67670c
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
enforce server_id can only be uuid or int

the get() function takes an arbitrary id coming from the rest url
for the server. In our current code it checks if this is a proper uuid
and sends it down the uuid path, everything else gets dispatched to
the version that selects by integer id. This means that arbitrary
garbage fuzzed server ids will get sent down the int path, all the way
to the database.

In postgresql, where the db is strongly typed, this causes a type error.
This error was found by tempest nightly runs where we send some 35 and 37
character strings in.

This patch creates and equivalent is_int_like function. If the server_id
is neither uuid_like nor int_like, we throw the InstanceNotFound exception
early. This also saves us a trip to the database in these cases.

Make the is_int_like a little more robust, and don't succeed on floats

Once more with feeling, to let us actually use is_int_like on ints, not
just strings.

Fixes bug #1100253

Change-Id: If4ae8005fd33a23ac50a6408ecd5933a2ff6425c
libvirt: Optimize test_connection and capabilities

The getCapabilities call can be very slow so it is not a good choice
for testing the libvirt connection. This patch switches to
getLibVersion and also caches the result of getCapabilities so it
doesn't need to be requested every time. Note that this means that
nova-compute will need to be restarted if the capaabilities of the
host changes. This is an acceptable risk because capabilities
changes should be very rare and nova-compute should be restarted
if libvirt is restarted or reinstalled.

This simple change lowers boot time in my devstack install from
22 seconds down to 8 seconds!

Fixes bug 1100446

Change-Id: I1b5072a906b19c6130957cf255e8d35b20990828
Better instance fault message when rescheduling.

The old code would use exc_info[0] which is the type of exception, not
the exception itself. This would result in the `message` attribute
always being 'type' and the first-line of details being useless.

The solution is to pass the actual exception object so that `message`
becomes the class-name and the first-line of details becomes the `repr`
of the exception object.

Fixes bug 1100559

Change-Id: Ibaeb5dc5af419de6c98b44aec07bff225b2f9956
Merge "Fix fallback when Quantum doesn't provide a 'vif_type'"
Merge "Pull NovaWebSocketProxy class out of nova-novncproxy binary"
Merge "Add nova-spicehtml5proxy helper"