[openstack-dev] [Ironic] [Nova] How to pass additional information from Flavor to an Ironic driver
sinval at lsd.ufcg.edu.br
Wed Jun 17 18:38:16 UTC 2015
we are developing an Ironic driver for OneView , an Infrastructure
Management System (IMS) by HP and, in order to deploy the node
correctly, the driver needs to know some specific information about the
configuration of the physical hardware.
In OneView, there is the concept of a "Server Profile", which contains
information about the hardware configuration, like boot order, bios
settings, network connections, firmware version, storage information
etc. There are 150+ parameters. A Server Profile has to be assigned to
the physical hardware before it is powered on. In this way we can make
sure that a node is provisioned, connected to the correct network and
using the correct storage, for example.
Therefore, to make a deployment, the driver needs to know which Server
Profile to use as different Server Profiles can be applied to the same
Our first thought was to abstract these options (the possible Server
Profiles) into different flavors, since it contains configurations that
can be used even to change the ammount of disk a server has (using SAN
volumes), or the power configuration it will use. Nova flavors do have a
'capabilities' namespace on the extra_specs field which can be used to
pass additional information to be used by the driver, but the data in
this namespace is mandatorily used on node matching by the Nova
scheduler when the capability filter is used (which is default and
In our case, the driver requires additional information regarding the
Server Profile that is contained on the flavor, but that should *not* be
used in scheduling (since a single node could accept a number of
We suggested to use a 'passthrough' namespace (note that no changes are
required on Nova to do that) in the flavor extra_specs and update the
Ironic's patcher (here we have a simple change in Ironic Virt Driver,
only) to include this information in the instance_info field for the
node, but, according to some team members of Nova, this is directly in
conflict their goals of abstracting the compute resources that Nova
Another option, suggested by dansmith, is to solve this problem in
Ironic using a "reservation" concept (created on Ironic to abstract such
information) and pass the type of reservation on "nova boot", avoiding
changes that could hurt the flavor concept. We think the footprint of
such a change, not only to Ironic, but on Nova, python-novaclient and
Horizon would be huge.
Nisha sent a spec about modify the nova-ironic-virt-driver to accept the
json lists and dictionaries as valid values for the ironic
node.properties['capabilities'] . But, in this case the idea is not a
solution to our scenario, because we need to pass information that
should not be matched during the scheduling task.
Do you see another way to approach this problem? We hope that, with your
help, we'll find out an solution that will solve our problem without
contradicting any principle the nova team has set.
Thank you in advance!
More information about the OpenStack-dev