Prevent updating UUID of Node, Port and Chassis on DB API level

UUID is seen as something similar to pkey and is not expected
to be updated after creation.
This patch makes update_{node,chassis,port} raise InvalidParameterValue,
if 'uuid' field is passed in.

Closes-Bug: #1333683
Change-Id: I7312036a5144cebe3da7f033f73e881e79e8a2ca
ManagementInterface {set, get}_boot_device() to support 'persistent'

It's common for drivers to be able to set the boot device only for the
next boot (that's the default behavior for the IPMITool for example)
but it's also possible to set a boot device as persistent so that the
configuration will persist across multiple boots. This patch is making
the 'persistent' parameter to be part of the method signature of the
set_boot_device() method and also making the get_boot_device() method
to return whether the device is set as persistent or not as part of
the response.

Implements: blueprint new-management-interface
Change-Id: Ia1f9c5449612871a379377d11fb0fe91b0958026
Make ComputeCapabilitiesFilter work with Ironic

It is not currently possible to selectively associate a Nova flavor
with certain nodes in Ironic, beyond variances in the cpu/ram/disk.

The ComputeCapabilitiesFilter exists in Nova for just this purpose,
but the nova.virt.ironic driver is not propagating the correct
data up to the scheduler.

This patch parses the node.properties['capabilities'] as a series of
comma-separated k:v pairs and passes them up to Nova so that it can
be matched against flavor.extra_specs['capabilities'] by the
scheduler filter.

Co-Author: Matthew Gilliard <matthew.gilliard@hp.com>
DocImpact: adds the ability to specify multiple capabilities
           to a node for scheduling purposes
Closes-bug: 1339816
Change-Id: Ide39f4a2796b169025bf0083e021166ae35f30f8
Merge "Prevent updating UUID of Node, Port and Chassis on DB API level"
Fix wrong test fixture for Node.properties

Currently db.utils.get_test_node() generate Node.properties with
wrong keys. This patch fixes it.

Change-Id: I17ea664528c121d643a55df6266ee2bb1027b171
Set a more generous default image cache size

Master images of non-trivial filesystems will run 3+G (even though
the qcow2 might be < 1G) so we need to make it big enough to be useful
:). Ideally we'd autotune this based on free space or something, but
for now, this is large enough to cache e.g. TripleO cluster workloads
but small enough to fit in test VMs. This patch sets the default cache
to 20G.

Change-Id: I11ca629589e8a90f727abcc5b1c7e72dbd9e4b0f
Merge "Set a more generous default image cache size"
Merge "Make ComputeCapabilitiesFilter work with Ironic"
Merge "Fix wrong test fixture for Node.properties"
Import a few more fixes from the Nova driver

Import a few fixes based on comments on rev 4 of
https://review.openstack.org/#/c/103167/

Change-Id: Ic7f6b54e9b4b94b4cb3108dd7d4ea808a99fa382
oslo.i18n migration

Switch ironic to use oslo.i18n. A new i18n module has been
added under ironic with translation globals and imports the
necessary functions from oslo.i18n.

gettextutils module is still needed in the nova ironic driver.

Change-Id: I682228e158132c628166e4d1e334c4003249d112
Use oslo.db library

oslo.db library has been graduated from oslo-incubator,
so now we can use it instead of ironic.openstack.common.db.* code.

Co-Authored-By: Ghe Rivero <ghe.rivero@hp.com>

Implements: blueprint oslo.db

Change-Id: I250050a7dbd8735ba3af954223b54eabae793f59
Use opportunistic approach for migration testing

Refactored migration tests due to use OpportunisticTestCase, removed
unused code and ``test_migrations.conf`` file.

This change allows tests use database ``openstack_citest`` only
for connection to the database backend. The main feature of this
approach is - for each migration test will be created new database
with random name. This will avoid migration tests of race conditions
and reduce tests intersection.

``test_migrations.conf`` file was removed, because we create test
database for migration test, so we no longer need test database credentials.

Closes-Bug: #1327397
Closes-Bug: #1328997

Change-Id: I95ad140ba5f483cd3dc36e2b78f140826d57624f
Add methods to ipmitool driver

This commit adds two methods to the vendor interface for the
ipmitool driver:

* send_raw: this is used to send arbitrary bytes to a BMC. One
  example of a use case for this is: many BMCs fail in strange ways
  when 'chassis bootdev disk' is sent without first sending a
  certain sequence of bytes. This is common enough that pyghmi
  even does this by default. Takes one parameter, 'raw_bytes',
  which is the string representation of which bytes should be
  sent. For example: '0x00 0x01'.

* bmc_reset: used to reset a BMC. A cold or warm reset can be
  selected by setting the warm parameter to False (cold) or True
  (warm). Defaults to warm.

Closes-Bug: 1340199
Change-Id: I508eabae7428daea29d749bb2aa9fc9c5a357e8c
Add IloDriver and its IloPower module

Add a new ironic driver for managing HP Proliant Gen8 servers
using iLO4. This commit introduces the power module for
IloDriver.

Implements: blueprint ironic-ilo-power-driver
Change-Id: I8d521f67fb14a6132626782b05cd490cd42ba476
Co-Authors: Anusha Ramineni<anusha.iiitm@gmail.com>
Merge "ManagementInterface {set, get}_boot_device() to support 'persistent'"
Raise appropriate errors on duplicate Node, Port and Chassis creation

This patch introduces NodeAlreadyExists, ChassisAlreadyExists,
PortAlreadyExists and InstanceAssociated exceptions for
appropriate cases.

Partial-Bug: #1277555

Change-Id: Iec2a7cd09022b6a12afacec9b9b51f8197817ded
Merge "oslo.i18n migration"
Merge "Add methods to ipmitool driver"
Merge "Add IloDriver and its IloPower module"