Expose the rebuild preserve-ephemeral extension

This new extension permits preserving the ephemeral partition if the
Nova hypervisor supports that. This is primarily useful when Cinder is
not available to provide preservation of state while replacing the
image in use. One common situation for that is Nova Baremetal.

DocImpact
Blueprint: baremetal-preserve-ephemeral
Partial-Bug: #1174154
Co-Authored-By: Robert Collins <rbtcollins@hp.com>
Change-Id: Ib1511653904d4f95ab03fb471669175127004582
Adds certificates support for Nova V3 API

Adds support and tests for the os-certificates extension
for the Nova V3 API

Partially implements blueprint v3-api

Change-Id: I9a75bf04a7047af6c501af2df72de4b8ce3462b0
Adds keypairs support for the Nova V3 API

Adds support and tests for the keypairs extension for
the Nova V3 API. The V3 version of the keypair extension
has been made part of the core V3 API and as a result no longer
has the "os-" prefix in the url.

Differences between the V2 and V3 API are described here:
https://wiki.openstack.org/wiki/NovaAPIv2tov3

Partially implements blueprint v3-api

Change-Id: Id4a77e1e4565f63ecdf7753d3c224975519fc07c
Adds simple tenant usage support for the Nova V3 API

Adds support and tests for the os-simple-tenant-usage
extension for the Nova V3 API. There are no
differences between the V2 and V3 API and this change
adds the client code to enable the usage command. Note
that with nomenclature change from tenant to project
occuring in Nova there will be a difference between
the V2 and V3 API in the future.

Differences between the V2 and V3 API are described here:
https://wiki.openstack.org/wiki/NovaAPIv2tov3

Partially implements blueprint v3-api

Change-Id: Iddf6211c9c87cbb191d9a5d5a65710b343c30e67
Fix "device" as the optional para on volume-attach

Attach a volume to a server without device name, the client returned the
error msg: "error: too few arguments". But for server, we can attach a
volume to a server without the device name.

Change-Id: Ia2743c6e3956cae6591ecd414baf89b0dbcf532b
Closes-Bug: #1257137
Removed duplicated import

sys is imported twice so removed the second import.

Change-Id: I50531edf856d42ec9b10732eff18a97d0cb3e9cc
Merge "Adds certificates support for Nova V3 API"
Merge "Adds keypairs support for the Nova V3 API"
Merge "Removed duplicated import"
Nova aggregate-details should be more human friendly

'nova aggregate-details' shows Hosts, Availability Zone
and Metadata in the python unicode notation.

+ Adds some tests about aggregates ported from v1 to the
  v3 shell

Change-Id: I69d80b2e76833d78248dee782ae5e53f42a4f4a9
Closes-Bug: #1132961
Allow empty response in service-list

If a user runs 'nova service-list --binary something-weird', where
something-weird is a binary that is not listed the result is a confusing
IndexError. That is because the result is expected to always have at
least one result.

Part of the reason for that is that the fake client does not make it
easy to simulate an empty response in tests. That is why there is no
regression test associated with this bug-fix. That is also why I am
marking thas as Partial-Bug, as this corrects the symptom, but it does
not prevent it from regressing.

Change-Id: I3e6798d63a662c245196b3bf95bb7e1b0ea9c3a4
Partial-Bug: #1260504
Merge "Fix "device" as the optional para on volume-attach"
Replace some utils.bool_from_str with strutils

Instead of using novaclient.utils' bool_from_str, use bool_from_string
from the oslo incubating strutils

Notes:
 0. utils.bool_from_str was strict, only accepted a small set of
    values, while strutils.bool_from_string is not strict by default,
    anything not true is false
 1. bool_from_string accepts on/off, which bool_from_str did not

Change-Id: I04744844b55697819289def081d3c9117ed0713f
Merge "Expose the rebuild preserve-ephemeral extension"
Merge "Nova aggregate-details should be more human friendly"
Merge "Replace some utils.bool_from_str with strutils"
Code cleanup: use oslo's to_slug() instead of slugify()

The bash completion code is the sole user of the slugify() function
in utils, which is substantially similar to to_slug() provided in
strutils from oslo.

Change-Id: Ib4eb7e4c0fa0e9bc5c4a0856f6391911d8f8fd3b
Closes-bug: #1266118
Merge "Allow empty response in service-list"
Merge "Adds simple tenant usage support for the Nova V3 API"
Remove class_name parameter from quota_class

class_name parameter is not used in both Nova v1.1/v3 API.
Nova considers the part of url as class_name.
For example, bar is considered as class_name in the following case:
 curl -i 'http://localhost:8774/v3/os-quota-class-sets/bar' -X PUT ..

This patch removes this unused paramter from quota_class.

Change-Id: Id4eba5b2a17506bc04ea23ef1097ef9cdb9caf8a