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 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 "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"
Merge "Allow empty response in service-list"
Merge "Adds simple tenant usage support for the Nova V3 API"