24465791 Update Ironic for the Mitaka release
authorLaszlo Peter <laszlo.peter@oracle.com>
Wed, 07 Sep 2016 14:48:42 -0700
changeset 6855 ea44e7e0ca98
parent 6854 52081f923019
child 6856 356aeea98c39
24465791 Update Ironic for the Mitaka release
components/openstack/ironic/Makefile
components/openstack/ironic/files/drivers/modules/solaris_ipmitool.py
components/openstack/ironic/files/drivers/solaris.py
components/openstack/ironic/files/ironic-upgrade
components/openstack/ironic/files/ironic.conf
components/openstack/ironic/ironic.license
components/openstack/ironic/ironic.p5m
components/openstack/ironic/patches/01-requirements.patch
components/openstack/ironic/patches/02-driver-entry.patch
components/openstack/ironic/patches/03-boot-device.patch
components/openstack/ironic/patches/04-generate_sample.patch
components/openstack/ironic/patches/05-mysql_cluster_support.patch
--- a/components/openstack/ironic/Makefile	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/Makefile	Wed Sep 07 14:48:42 2016 -0700
@@ -26,19 +26,20 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		ironic
-COMPONENT_CODENAME=	kilo
-COMPONENT_VERSION=	2015.1.2
-COMPONENT_BE_VERSION=	2015.1
+COMPONENT_CODENAME=	mitaka
+COMPONENT_VERSION=	5.1.2
+COMPONENT_BE_VERSION=	2016.1
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:fd85246f7c9b0976a27b863de328f1240d43d4633511cd832e8d6904f6f4b06c
-COMPONENT_ARCHIVE_URL=	http://launchpad.net/$(COMPONENT_NAME)/$(COMPONENT_CODENAME)/$(COMPONENT_VERSION)/+download/$(COMPONENT_ARCHIVE)
+    sha256:d2f2dcc3ff21abc4c8d03f309dfe3f441e482c403f4991bef2f9236bf1f6188b
+COMPONENT_ARCHIVE_URL=	https://tarballs.openstack.org/$(COMPONENT_NAME)/$(COMPONENT_ARCHIVE)
+COMPONENT_SIG_URL=	$(COMPONENT_ARCHIVE_URL).asc
+
 COMPONENT_PROJECT_URL=	http://www.openstack.org/
 COMPONENT_BUGDB=	service/ironic
-IPS_COMPONENT_VERSION=	0.$(COMPONENT_VERSION)
 
-TPNO=			25789
+TPNO=			30357
 
 PKG_VARS +=		COMPONENT_BE_VERSION
 
@@ -91,7 +92,6 @@
 #
 test:		$(NO_TESTS)
 
-
 REQUIRED_PACKAGES += cloud/openstack/openstack-common
 REQUIRED_PACKAGES += install/installadm
 REQUIRED_PACKAGES += library/python/sqlalchemy-27
--- a/components/openstack/ironic/files/drivers/modules/solaris_ipmitool.py	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/files/drivers/modules/solaris_ipmitool.py	Wed Sep 07 14:48:42 2016 -0700
@@ -38,9 +38,12 @@
 
 from lockfile import LockFile, LockTimeout
 from oslo_concurrency import processutils
-from oslo.config import cfg
-from oslo_utils import excutils
+from oslo_config import cfg
+from oslo_log import log as logging
+from oslo_service import loopingcall
+from oslo_utils import excutils, strutils
 from scp import SCPClient
+import six
 
 from ironic.common import boot_devices, exception, images, keystone, states, \
     utils
@@ -51,8 +54,7 @@
 from ironic.drivers import base
 from ironic.drivers.modules import ipmitool
 from ironic.drivers import utils as driver_utils
-from ironic.openstack.common import log as logging
-from ironic.openstack.common import loopingcall
+from ironic import objects
 
 PLATFORM = platform.system()
 if PLATFORM != "SunOS":
@@ -90,12 +92,6 @@
                help='Actual SSH Key contents to use.')
     ]
 
-AUTH_OPTS = [
-    cfg.StrOpt('auth_strategy',
-               default='keystone',
-               help='Method to use for authentication: noauth or keystone.')
-    ]
-
 SOLARIS_IPMI_OPTS = [
     cfg.StrOpt('imagecache_dirname',
                default='/var/lib/ironic/images',
@@ -109,10 +105,9 @@
 
 CONF = cfg.CONF
 OPT_GROUP = cfg.OptGroup(name='ai',
-                         title='Options for the Automated Install driver')
+                         title='Options for the Solaris driver')
 CONF.register_group(OPT_GROUP)
 CONF.register_opts(AI_OPTS, OPT_GROUP)
-CONF.register_opts(AUTH_OPTS)
 SOLARIS_IPMI_GROUP = cfg.OptGroup(
     name="solaris_ipmi",
     title="Options defined in ironic.drivers.modules.solaris_ipmi")
@@ -144,28 +139,38 @@
     'install_profiles': _("List of configuration profiles to be applied "
                           "to the installation environment during an install. "
                           "Optional."),
-    'ipmi_bridging': _("bridging_type; default is \"no\". One of \"single\", "
-                       "\"dual\", \"no\". Optional."),
-    'ipmi_local_address': _("local IPMB address for bridged requests. "
-                            "Used only if ipmi_bridging is set "
-                            "to \"single\" or \"dual\". Optional."),
+    'publishers': _("List of IPS publishers to install from, in the format "
+                    "name@origin. Required if fmri property is set."),
+    'sc_profiles': _("List of system configuration profiles to be applied "
+                     "to an installed system. Optional."),
+
+    'ipmi_port': _("remote IPMI RMCP port. Optional."),
     'ipmi_priv_level':
         _("privilege level; default is ADMINISTRATOR. "
           "One of %s. Optional.") % '. '.join(ipmitool.VALID_PRIV_LEVELS),
+    'ipmi_bridging': _("bridging_type; default is \"no\". One of \"single\", "
+                       "\"dual\", \"no\". Optional."),
+    'ipmi_transit_channel': _("transit channel for bridged request. Required "
+                              "only if ipmi_bridging is set to \"dual\"."),
+    'ipmi_transit_address': _("transit address for bridged request. Required "
+                              "only if ipmi_bridging is set to \"dual\"."),
+    'ipmi_target_channel': _("destination channel for bridged request. "
+                             "Required only if ipmi_bridging is set to "
+                             "\"single\" or \"dual\"."),
     'ipmi_target_address': _("destination address for bridged request. "
                              "Required only if ipmi_bridging is set "
                              "to \"single\" or \"dual\"."),
-    'ipmi_target_channel': _("destination channel for bridged request. "
-                             "Required only if ipmi_bridging is set to "
-                             "\"single\" or \"dual\"."),
-    'ipmi_transit_address': _("transit address for bridged request. Required "
-                              "only if ipmi_bridging is set to \"dual\"."),
-    'ipmi_transit_channel': _("transit channel for bridged request. Required "
-                              "only if ipmi_bridging is set to \"dual\"."),
-    'publishers': _("List of IPS publishers to install from, in the format "
-                    "name@origin. Required if fmri property is set."),
-    'sc_profiles': _("List of system configuration profiles to be applied "
-                     "to an installed system. Optional.")
+    'ipmi_local_address': _("local IPMB address for bridged requests. "
+                            "Used only if ipmi_bridging is set "
+                            "to \"single\" or \"dual\". Optional."),
+    'ipmi_protocol_version': _('the version of the IPMI protocol; default '
+                               'is "2.0". One of "1.5", "2.0". Optional.'),
+    'ipmi_force_boot_device': _("Whether Ironic should specify the boot "
+                                "device to the BMC each time the server "
+                                "is turned on, eg. because the BMC is not "
+                                "capable of remembering the selected boot "
+                                "device across power cycles; default value "
+                                "is False. Optional.")
 }
 
 COMMON_PROPERTIES = REQUIRED_PROPERTIES.copy()
@@ -186,9 +191,6 @@
 CPU_LOCATION = '/System/Processors/CPUs/CPU_%d/total_cores'
 
 LAST_CMD_TIME = {}
-TIMING_SUPPORT = None
-SINGLE_BRIDGE_SUPPORT = None
-DUAL_BRIDGE_SUPPORT = None
 
 
 def _ssh_execute(ssh_obj, ssh_cmd, raise_exception=True, err_msg=None):
@@ -208,7 +210,7 @@
     try:
         stdout = processutils.ssh_execute(ssh_obj, ssh_cmd)[0]
     except Exception as err:
-        LOG.debug(_("Cannot execute SSH cmd %(cmd)s. Reason: %(err)s.") %
+        LOG.error(_LE("Cannot execute SSH cmd %(cmd)s. Reason: %(err)s.") %
                   {'cmd': ssh_cmd, 'err': err})
         returncode = 1
         if raise_exception:
@@ -237,13 +239,14 @@
     bridging_types = ['single', 'dual']
     missing_info = [key for key in REQUIRED_PROPERTIES if not info.get(key)]
     if missing_info:
-        raise exception.MissingParameterValue(
-            _("The following IPMI credentials are not supplied"
-              " to IPMI driver: %s.") % missing_info)
+        raise exception.MissingParameterValue(_(
+            "Missing the following IPMI credentials in node's"
+            " driver_info: %s.") % missing_info)
 
     address = info.get('ipmi_address')
     username = info.get('ipmi_username')
-    password = info.get('ipmi_password')
+    password = six.text_type(info.get('ipmi_password', ''))
+    dest_port = info.get('ipmi_port')
     port = info.get('ipmi_terminal_port')
     priv_level = info.get('ipmi_priv_level', 'ADMINISTRATOR')
     bridging_type = info.get('ipmi_bridging', 'no')
@@ -252,19 +255,34 @@
     transit_address = info.get('ipmi_transit_address')
     target_channel = info.get('ipmi_target_channel')
     target_address = info.get('ipmi_target_address')
-
-    if port:
-        try:
-            port = int(port)
-        except ValueError:
-            raise exception.InvalidParameterValue(_(
-                "IPMI terminal port is not an integer."))
+    protocol_version = str(info.get('ipmi_protocol_version', '2.0'))
+    force_boot_device = info.get('ipmi_force_boot_device', False)
+
+    if not username:
+        LOG.warning(_LW('ipmi_username is not defined or empty for node %s: '
+                        'NULL user will be utilized.') % node.uuid)
+    if not password:
+        LOG.warning(_LW('ipmi_password is not defined or empty for node %s: '
+                        'NULL password will be utilized.') % node.uuid)
+
+    if protocol_version not in ipmitool.VALID_PROTO_VERSIONS:
+        valid_versions = ', '.join(ipmitool.VALID_PROTO_VERSIONS)
+        raise exception.InvalidParameterValue(_(
+            "Invalid IPMI protocol version value %(version)s, the valid "
+            "value can be one of %(valid_versions)s") %
+            {'version': protocol_version, 'valid_versions': valid_versions})
+
+    if port is not None:
+        port = utils.validate_network_port(port, 'ipmi_terminal_port')
+
+    if dest_port is not None:
+        dest_port = utils.validate_network_port(dest_port, 'ipmi_port')
 
     # check if ipmi_bridging has proper value
     if bridging_type == 'no':
         # if bridging is not selected, then set all bridging params to None
-        local_address = transit_channel = transit_address = \
-            target_channel = target_address = None
+        (local_address, transit_channel, transit_address, target_channel,
+         target_address) = (None,) * 5
     elif bridging_type in bridging_types:
         # check if the particular bridging option is supported on host
         if not ipmitool._is_option_supported('%s_bridge' % bridging_type):
@@ -309,6 +327,7 @@
 
     return {
         'address': address,
+        'dest_port': dest_port,
         'username': username,
         'password': password,
         'port': port,
@@ -318,8 +337,10 @@
         'transit_channel': transit_channel,
         'transit_address': transit_address,
         'target_channel': target_channel,
-        'target_address': target_address
-        }
+        'target_address': target_address,
+        'protocol_version': protocol_version,
+        'force_boot_device': force_boot_device
+    }
 
 
 def _exec_ipmitool(driver_info, command):
@@ -344,13 +365,21 @@
     """
     LOG.debug("SolarisDeploy._exec_ipmitool:driver_info: '%s', "
               "command: '%s'" % (driver_info, command))
+    ipmi_version = ('lanplus'
+                    if driver_info['protocol_version'] == '2.0'
+                    else 'lan')
     args = ['/usr/sbin/ipmitool',
             '-I',
-            'lanplus',
+            ipmi_version,
             '-H',
             driver_info['address'],
             '-L', driver_info['priv_level']
             ]
+
+    if driver_info['dest_port']:
+        args.append('-p')
+        args.append(driver_info['dest_port'])
+
     if driver_info['username']:
         args.append('-U')
         args.append(driver_info['username'])
@@ -378,7 +407,7 @@
         # NOTE(deva): ensure that no communications are sent to a BMC more
         #             often than once every min_command_interval seconds.
         time_till_next_poll = CONF.ipmi.min_command_interval - (
-                time.time() - LAST_CMD_TIME.get(driver_info['address'], 0))
+            time.time() - LAST_CMD_TIME.get(driver_info['address'], 0))
         if time_till_next_poll > 0:
             time.sleep(time_till_next_poll)
         # Resetting the list that will be utilized so the password arguments
@@ -399,7 +428,7 @@
             except processutils.ProcessExecutionError as e:
                 with excutils.save_and_reraise_exception() as ctxt:
                     err_list = [x for x in ipmitool.IPMITOOL_RETRYABLE_FAILURES
-                                if x in e.message]
+                                if x in six.text_type(e)]
                     if ((time.time() > end_time) or
                         (num_tries == 0) or
                             not err_list):
@@ -443,7 +472,7 @@
             cpu_arch, _err = _exec_ipmitool(driver_info, ipmi_cmd_args)
         except Exception as err:
             LOG.error(_LE("Failed to get node architecture from IPMI : %s" %
-                          (err)))
+                      (err)))
             raise exception.IPMIFailure(cmd=err)
 
         propdict = {'cpu_arch': cpu_arch}
@@ -484,14 +513,12 @@
     LOG.debug("_check_deploy_state() deploy_thread_state: %s" %
               (deploy_thread.state))
 
-    # Get DB instance
-    mydbapi = dbapi.get_instance()
     try:
         # Get current DB copy of node
-        cur_node = mydbapi.get_node_by_uuid(node_uuid)
+        cur_node = objects.Node.get_by_uuid(task.context, node_uuid)
     except exception.NodeNotFound:
-        LOG.info(_("During check_deploy_state, node %(node)s was not "
-                   "found and presumed deleted by another process.") %
+        LOG.info(_LI("During check_deploy_state, node %(node)s was not "
+                     "found and presumed deleted by another process.") %
                  {'node': node_uuid})
         # Thread should have stopped already, but let's make sure.
         deploy_thread.stop()
@@ -506,8 +533,8 @@
                 task.node.save()
         raise loopingcall.LoopingCallDone()
     except Exception as err:
-        LOG.info(_("During check_deploy_state, node %(node)s could "
-                   "not be retrieved: %(err)s") %
+        LOG.info(_LI("During check_deploy_state, node %(node)s could "
+                     "not be retrieved: %(err)s") %
                  {'node': node_uuid, 'err': err})
         # Thread should have stopped already, but lets make sure.
         deploy_thread.stop()
@@ -538,8 +565,11 @@
         if deploy_thread.state == states.DEPLOYDONE:
             cur_node.provision_state = states.ACTIVE
         elif deploy_thread.state == states.DEPLOYFAIL:
-            cur_node.last_error = "Install failed; check install.log for " + \
-                                  "more details."
+            if deploy_thread.error is not None:
+                cur_node.last_error = deploy_thread.error
+            else:
+                cur_node.last_error = "Install failed; check install.log " + \
+                                      "for more details."
             cur_node.provision_state = deploy_thread.state
         else:
             cur_node.provision_state = deploy_thread.state
@@ -566,7 +596,7 @@
         raise loopingcall.LoopingCallDone()
 
     elif cur_node.provision_state == states.DEPLOYFAIL:
-        # Node deployment as for some reason failed already, exist thread
+        # Node deployment has for some reason failed already, exit thread
         LOG.debug("_check_deploy_state().deploy_failed: %s" %
                   (cur_node.provision_state))
         deploy_thread.stop()
@@ -637,8 +667,8 @@
 
     if count == 0:
         # Adjusting by zero makes no sense just return
-        err_msg = _("Zero reference count adjustment attempted "
-                    "on file: %s") % (image_path)
+        err_msg = _LE("Zero reference count adjustment attempted "
+                      "on file: %s") % (image_path)
         LOG.error(err_msg)
         raise SolarisIPMIError(msg=err_msg)
 
@@ -647,8 +677,8 @@
     if not os.path.exists(ref_filename):
         if count < 0:
             # Cannot decrement reference on non-existent file
-            err_msg = _("Negative reference count adjustment attempted on "
-                        "non-existent file: %s") % (image_path)
+            err_msg = _LE("Negative reference count adjustment attempted on "
+                          "non-existent file: %s") % (image_path)
             LOG.error(err_msg)
             raise SolarisIPMIError(msg=err_msg)
 
@@ -659,7 +689,7 @@
     # Acquire lock on refcount file
     lock = _image_refcount_acquire_lock(image_path)
     if lock is None:
-        err_msg = _("Failed to acquire lock on image: %s") % (image_path)
+        err_msg = _LE("Failed to acquire lock on image: %s") % (image_path)
         LOG.error(err_msg)
         raise SolarisIPMIError(msg=err_msg)
 
@@ -723,7 +753,7 @@
                     lock.release()
 
                 except Exception as err:
-                    LOG.error(_("Unable to fetch Glance image: id %s: %s")
+                    LOG.error(_LE("Unable to fetch Glance image: id %s: %s")
                               % (url.netloc, err))
                     raise
             else:
@@ -763,7 +793,7 @@
                         lock.release()
 
                     except Exception as err:
-                        LOG.error(_("Unable to fetch image: id %s: %s")
+                        LOG.error(_LE("Unable to fetch image: id %s: %s")
                                   % (url.netloc, err))
                         raise
                 else:
@@ -772,7 +802,7 @@
     except Exception as err:
         # Only remove the temporary file if exception occurs
         # as noted above Caller is responsible for its removal
-        LOG.error(_("Unable to fetch image: uri %s: %s") % (uri, err))
+        LOG.error(_LE("Unable to fetch image: uri %s: %s") % (uri, err))
         if url.scheme == "glance":
             _image_refcount_adjust(temp_uri, -1)
         else:
@@ -1241,7 +1271,7 @@
         remote_file = os.path.join("/tmp", obj_name) + ".xml"
         aiservice.copy_remote_file(temp_file, remote_file)
     except Exception as err:
-        LOG.error(_("Fetch and create failed for %s: name: %s: %s") %
+        LOG.error(_LE("Fetch and create failed for %s: name: %s: %s") %
                   (obj_type, obj_uri, err))
         if url.scheme == "glance":
             _image_refcount_adjust(temp_file, -1)
@@ -1284,6 +1314,7 @@
         self.task = task
         self.node = task.node
         self._state = states.DEPLOYWAIT
+        self._error = None
         self.ssh_connection = None
         self.running = True
 
@@ -1292,10 +1323,36 @@
         """Deployment state property"""
         return self._state
 
+    @property
+    def error(self):
+        """Deployment error property"""
+        return self._error
+
     def run(self):
         """Start the thread """
         LOG.debug("DeployStateChecker.run(): Connecting...")
-        client = utils.ssh_connect(self._get_ssh_dict())
+        # Occasionally SSH connection fails, make three attempts
+        # before returning failure.
+        connection_attempt = 0
+        while (connection_attempt < 3):
+            try:
+                connection_attempt += 1
+                client = utils.ssh_connect(self._get_ssh_dict())
+                break
+            except SSHException as err:
+                if connection_attempt < 3:
+                    continue
+                else:
+                    self._state = states.DEPLOYFAIL
+                    self._error = str(err)
+                    self.stop()
+                    return
+        else:
+            self._state = states.DEPLOYFAIL
+            self._error = "Failed to establish SSH Connection with node."
+            self.stop()
+            return
+
         channel = client.invoke_shell()
         channel.settimeout(0.0)
         channel.set_combine_stderr(True)
@@ -1825,7 +1882,7 @@
         # Check if AI Service exists, log message if already removed
         if not aiservice.exists:
             # There is nothing to clean up as service removed
-            LOG.info(_("AI Service %s already removed.") % (aiservice.name))
+            LOG.info(_LI("AI Service %s already removed.") % (aiservice.name))
         else:
             for mac in driver_utils.get_node_mac_addresses(task):
                 # 1. Delete AI Client for this MAC Address
@@ -1879,6 +1936,7 @@
                 driver=self.__class__.__name__,
                 reason=_("Unable to locate usable ipmitool command in "
                          "the system path when checking ipmitool version"))
+        ipmitool._check_temp_dir()
 
     def validate(self, task):
         """Check that 'driver_info' contains IPMI credentials.
@@ -1913,7 +1971,7 @@
                         boot_devices.CDROM, boot_devices.BIOS,
                         boot_devices.SAFE]
             elif cpu_arch == 'SPARC':
-                return [boot_devices.DISK, 'wanboot']
+                return [boot_devices.DISK, boot_devices.WANBOOT]
             else:
                 raise exception.InvalidParameterValue(
                     _("Invalid node architecture of '%s'.") % (cpu_arch))
@@ -1942,6 +2000,14 @@
         publishers = task.node.driver_info.get('publishers')
         fmri = task.node.driver_info.get('fmri')
 
+        if task.node.driver_info.get('ipmi_force_boot_device', False):
+            driver_utils.force_persistent_boot(task,
+                                               device,
+                                               persistent)
+            # Reset persistent to False, in case of BMC does not support
+            # persistent or we do not have admin rights.
+            persistent = False
+
         if cpu_arch == 'x86':
             if device not in self.get_supported_boot_devices(task=task):
                 raise exception.InvalidParameterValue(_(
@@ -1951,7 +2017,7 @@
                 cmd.append("options=persistent")
         elif cpu_arch == 'SPARC':
             # Set bootmode script to network DHCP or disk
-            if device == 'wanboot':
+            if device == boot_devices.WANBOOT:
                 boot_cmd = 'set /HOST/bootmode script="'
                 script_str = 'boot net:dhcp - install'
                 if archive_uri:
@@ -2025,6 +2091,17 @@
 
         """
         LOG.debug("SolarisManagement.get_boot_device")
+        driver_info = task.node.driver_info
+        driver_internal_info = task.node.driver_internal_info
+
+        if (driver_info.get('ipmi_force_boot_device', False) and
+                driver_internal_info.get('persistent_boot_device') and
+                driver_internal_info.get('is_next_boot_persistent', True)):
+            return {
+                'boot_device': driver_internal_info['persistent_boot_device'],
+                'persistent': True
+            }
+
         cpu_arch = _get_node_architecture(task.node)
         driver_info = _parse_driver_info(task.node)
         response = {'boot_device': None, 'persistent': None}
@@ -2067,7 +2144,7 @@
             response['persistent'] = 'Options apply to all future boots' in out
         elif cpu_arch == 'SPARC':
             if "net:dhcp" in out:
-                response['boot_device'] = 'wanboot'
+                response['boot_device'] = boot_devices.WANBOOT
             else:
                 response['boot_device'] = boot_devices.DISK
         LOG.debug(response)
@@ -2141,11 +2218,26 @@
 
         # Installed memory size is returned in GB, Nova assumes this is MB
         # so convert if returned in GB
-        memsize, memtype = propdict['memory_mb'].split(' ')
-        if memtype == 'GB':
-            propdict['memory_mb'] = int(memsize) * 1024
+        try:
+            size_bytes = strutils.string_to_bytes(
+                propdict['memory_mb'].replace(' ', ''))
+            propdict['memory_mb'] = int(size_bytes / float(1 << 20))
+        except ValueError:
+            # Size conversion failed, just ensure value is an int
+            propdict['memory_mb'] = int(propdict['memory_mb'])
+
+        if propdict['local_gb'] == 'Not Available':
+            del propdict['local_gb']
         else:
-            propdict['memory_mb'] = int(memsize)
+            # Local disk size can be returned with size type identifier
+            # remove identifier as this needs to be an int value
+            try:
+                size_bytes = strutils.string_to_bytes(
+                    propdict['local_gb'].replace(' ', ''))
+                propdict['local_gb'] = int(size_bytes / float(1 << 30))
+            except ValueError:
+                # Size conversion failed, just ensure value is an int
+                propdict['local_gb'] = int(propdict['local_gb'])
 
         cpu_props = self._get_cpu_cores(task, propdict['cpus'])
 
--- a/components/openstack/ironic/files/drivers/solaris.py	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/files/drivers/solaris.py	Wed Sep 07 14:48:42 2016 -0700
@@ -16,11 +16,11 @@
 """
 Solaris Driver and supporting meta-classes.
 """
+from oslo_log import log as logging
 
 from ironic.drivers import base
 from ironic.drivers.modules import ipmitool
 from ironic.drivers.modules import solaris_ipmitool
-from ironic.openstack.common import log as logging
 
 LOG = logging.getLogger(__name__)
 
--- a/components/openstack/ironic/files/ironic-upgrade	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/files/ironic-upgrade	Wed Sep 07 14:48:42 2016 -0700
@@ -26,84 +26,39 @@
 from openstack_common import alter_mysql_tables, create_backups, modify_conf
 
 IRONIC_CONF_MAPPINGS = {
-    # Deprecated group/name
-    ('DEFAULT', 'amqp_durable_queues'):
-        ('oslo_messaging_qpid', 'amqp_durable_queues'),
-    ('DEFAULT', 'amqp_auto_delete'):
-        ('oslo_messaging_qpid', 'amqp_auto_delete'),
-    ('DEFAULT', 'rpc_conn_pool_size'):
-        ('oslo_messaging_qpid', 'rpc_conn_pool_size'),
-    ('DEFAULT', 'qpid_hostname'):
-        ('oslo_messaging_qpid', 'qpid_hostname'),
-    ('DEFAULT', 'qpid_port'):
-        ('oslo_messaging_qpid', 'qpid_port'),
-    ('DEFAULT', 'qpid_hosts'):
-        ('oslo_messaging_qpid', 'qpid_hosts'),
-    ('DEFAULT', 'qpid_username'):
-        ('oslo_messaging_qpid', 'qpid_username'),
-    ('DEFAULT', 'qpid_password'):
-        ('oslo_messaging_qpid', 'qpid_password'),
-    ('DEFAULT', 'qpid_sasl_mechanisms'):
-        ('oslo_messaging_qpid', 'qpid_sasl_mechanisms'),
-    ('DEFAULT', 'qpid_tcp_nodelay'):
-        ('oslo_messaging_qpid', 'qpid_tcp_nodelay'),
-    ('DEFAULT', 'qpid_heartbeat'):
-        ('oslo_messaging_qpid', 'qpid_heartbeat'),
-    ('DEFAULT', 'qpid_protocol'):
-        ('oslo_messaging_qpid', 'qpid_protocol'),
-    ('DEFAULT', 'qpid_receiver_capacity'):
-        ('oslo_messaging_qpid', 'qpid_receiver_capacity'),
-    ('DEFAULT', 'qpid_topology_version'):
-        ('oslo_messaging_qpid', 'qpid_topology_version'),
-    ('DEFAULT', 'kombu_ssl_version'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_version'),
-    ('DEFAULT', 'kombu_ssl_keyfile'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_keyfile'),
-    ('DEFAULT', 'kombu_ssl_certfile'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_certfile'),
-    ('DEFAULT', 'kombu_ssl_ca_certs'):
-        ('oslo_messaging_rabbit', 'kombu_ssl_ca_certs'),
-    ('DEFAULT', 'kombu_reconnect_delay'):
-        ('oslo_messaging_rabbit', 'kombu_reconnect_delay'),
-    ('DEFAULT', 'rabbit_host'):
-        ('oslo_messaging_rabbit', 'rabbit_host'),
-    ('DEFAULT', 'rabbit_port'):
-        ('oslo_messaging_rabbit', 'rabbit_port'),
-    ('DEFAULT', 'rabbit_hosts'):
-        ('oslo_messaging_rabbit', 'rabbit_hosts'),
-    ('DEFAULT', 'rabbit_use_ssl'):
-        ('oslo_messaging_rabbit', 'rabbit_use_ssl'),
-    ('DEFAULT', 'rabbit_userid'):
-        ('oslo_messaging_rabbit', 'rabbit_userid'),
-    ('DEFAULT', 'rabbit_password'):
-        ('oslo_messaging_rabbit', 'rabbit_password'),
-    ('DEFAULT', 'rabbit_login_method'):
-        ('oslo_messaging_rabbit', 'rabbit_login_method'),
-    ('DEFAULT', 'rabbit_virtual_host'):
-        ('oslo_messaging_rabbit', 'rabbit_virtual_host'),
-    ('DEFAULT', 'rabbit_retry_interval'):
-        ('oslo_messaging_rabbit', 'rabbit_retry_interval'),
-    ('DEFAULT', 'rabbit_retry_backoff'):
-        ('oslo_messaging_rabbit', 'rabbit_retry_backoff'),
-    ('DEFAULT', 'rabbit_max_retries'):
-        ('oslo_messaging_rabbit', 'rabbit_max_retries'),
-    ('DEFAULT', 'rabbit_ha_queues'):
-        ('oslo_messaging_rabbit', 'rabbit_ha_queues'),
-    ('DEFAULT', 'fake_rabbit'):
-        ('oslo_messaging_rabbit', 'fake_rabbit'),
-    ('keystone_authtoken', 'admin_token'): (None, None),
-    ('keystone_authtoken', 'auth_admin_prefix'): (None, None),
+    # Deprecated group/name LIBERTY
+    ('DEFAULT', 'rpc_thread_pool_size'):
+        ('DEFAULT', 'executor_thread_pool_size'),
     ('DEFAULT', 'log_format'): (None, None),
-    ('DEFAULT', 'fake_rabbit'): (None, None),
+    ('DEFAULT', 'use_syslog'): (None, None),
+    ('agent', 'agent_pxe_append_params'): (None, None),
+    ('agent', 'agent_erase_devices_priority'):
+        ('deploy', 'erase_devices_priority'),
+    ('agent', 'agent_pxe_config_template'): (None, None),
+    ('agent', 'manage_tftp'): ('agent', 'manage_agent_boot'),
+    # Deprecated group/name MITAKA
+    ('profiler', 'profiler_enabled'): ('profiler', 'enabled'),
 }
 
 IRONIC_CONF_EXCEPTIONS = [
+    ('DEFAULT', 'auth_strategy'),
+    ('DEFAULT', 'enabled_drivers'),
+    ('DEFAULT', 'pybasedir'),
+    ('DEFAULT', 'bindir'),
+    ('DEFAULT', 'state_path'),
+    ('ai', 'server'),
+    ('ai', 'username'),
+    ('api', 'api_workers'),
+    ('database', 'connection'),
     ('keystone_authtoken', 'admin_tenant_name'),
     ('keystone_authtoken', 'admin_user'),
     ('keystone_authtoken', 'admin_password'),
+    ('keystone_authtoken', 'auth_host'),
+    ('keystone_authtoken', 'auth_uri'),
+    ('keystone_authtoken', 'identity_uri'),
     ('keystone_authtoken', 'signing_dir'),
-    ('ai', 'server'),
-    ('ai', 'username'),
+    ('solaris_ipmi', 'imagecache_dirname'),
+    ('solaris_ipmi', 'imagecache_lock_timeout'),
 ]
 
 
--- a/components/openstack/ironic/files/ironic.conf	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/files/ironic.conf	Wed Sep 07 14:48:42 2016 -0700
@@ -1,92 +1,23 @@
 [DEFAULT]
 
 #
-# Options defined in oslo.messaging
-#
-
-# ZeroMQ bind address. Should be a wildcard (*), an ethernet
-# interface, or IP. The "host" option should point or resolve
-# to this address. (string value)
-#rpc_zmq_bind_address=*
-
-# MatchMaker driver. (string value)
-#rpc_zmq_matchmaker=local
-
-# ZeroMQ receiver listening port. (integer value)
-#rpc_zmq_port=9501
-
-# Number of ZeroMQ contexts, defaults to 1. (integer value)
-#rpc_zmq_contexts=1
-
-# Maximum number of ingress messages to locally buffer per
-# topic. Default is unlimited. (integer value)
-#rpc_zmq_topic_backlog=<None>
-
-# Directory for holding IPC sockets. (string value)
-#rpc_zmq_ipc_dir=/var/run/openstack
-
-# Name of this node. Must be a valid hostname, FQDN, or IP
-# address. Must match "host" option, if running Nova. (string
-# value)
-#rpc_zmq_host=ironic
-
-# Seconds to wait before a cast expires (TTL). Only supported
-# by impl_zmq. (integer value)
-#rpc_cast_timeout=30
-
-# Heartbeat frequency. (integer value)
-#matchmaker_heartbeat_freq=300
-
-# Heartbeat time-to-live. (integer value)
-#matchmaker_heartbeat_ttl=600
-
-# Size of RPC thread pool. (integer value)
-#rpc_thread_pool_size=64
-
-# Driver or drivers to handle sending notifications. (multi
-# valued)
-#notification_driver=
-
-# AMQP topic used for OpenStack notifications. (list value)
-# Deprecated group/name - [rpc_notifier2]/topics
-#notification_topics=notifications
-
-# Seconds to wait for a response from a call. (integer value)
-#rpc_response_timeout=60
-
-# A URL representing the messaging driver to use and its full
-# configuration. If not set, we fall back to the rpc_backend
-# option and driver specific configuration. (string value)
-#transport_url=<None>
-
-# The messaging driver to use, defaults to rabbit. Other
-# drivers include qpid and zmq. (string value)
-#rpc_backend=rabbit
-
-# The default exchange under which topics are scoped. May be
-# overridden by an exchange name specified in the
-# transport_url option. (string value)
-#control_exchange=openstack
-
-
-#
-# Options defined in ironic.netconf
-#
-
-# IP address of this host. (string value)
-#my_ip=10.0.0.1
-
-
-#
 # Options defined in ironic.api.app
 #
 
-# Method to use for authentication: noauth or keystone.
-# (string value)
+# Authentication strategy used by ironic-api. "noauth" should
+# not be used in a production environment because all
+# authentication will be disabled. (string value)
+# Possible values: noauth, keystone
 #auth_strategy=keystone
 
+# Return server tracebacks in the API response for any error
+# responses. WARNING: this is insecure and should not be used
+# in a production environment. (boolean value)
+#debug_tracebacks_in_api=false
+
 # Enable pecan debug mode. WARNING: this is insecure and
-# should not be used in production. (boolean value)
+# should not be used in a production environment. (boolean
+# value)
 #pecan_debug=false
 
 
@@ -109,7 +40,10 @@
 # Options defined in ironic.common.exception
 #
 
-# Make exception message format errors fatal. (boolean value)
+# Used if there is a formatting error when generating an
+# exception message (a programming error). If True, raise an
+# exception; if False, use the unformatted message. (boolean
+# value)
 #fatal_exception_format_errors=false
 
 
@@ -138,12 +72,17 @@
 # (integer value)
 #hash_distribution_replicas=1
 
+# Interval (in seconds) between hash ring resets. (integer
+# value)
+#hash_ring_reset_interval=180
+
 
 #
 # Options defined in ironic.common.images
 #
 
-# Force backing images to raw format. (boolean value)
+# If True, convert backing images to "raw" disk image format.
+# (boolean value)
 #force_raw_images=true
 
 # Path to isolinux binary file. (string value)
@@ -178,15 +117,17 @@
 # Options defined in ironic.common.service
 #
 
-# Seconds between running periodic tasks. (integer value)
+# Default interval (in seconds) for running driver periodic
+# tasks. (integer value)
+# This option is deprecated and planned for removal in a future release.
 #periodic_interval=60
 
-# Name of this node.  This can be an opaque identifier.  It is
+# Name of this node. This can be an opaque identifier. It is
 # not necessarily a hostname, FQDN, or IP address. However,
 # the node name must be valid within an AMQP key, and if using
 # ZeroMQ, a valid hostname, FQDN, or IP address. (string
 # value)
-#host=ironic
+#host=localhost
 
 
 #
@@ -197,9 +138,9 @@
 # commands as root. (string value)
 #rootwrap_config=/etc/ironic/rootwrap.conf
 
-# Explicitly specify the temporary working directory. (string
-# value)
-#tempdir=<None>
+# Temporary working directory, default is Python temp dir.
+# (string value)
+#tempdir=/tmp
 
 
 #
@@ -212,16 +153,220 @@
 
 
 #
-# Options defined in ironic.drivers.modules.solaris_ipmitool
+# Options defined in ironic.netconf
 #
 
-# Method to use for authentication: noauth or keystone.
+# IP address of this host. If unset, will determine the IP
+# programmatically. If unable to do so, will use "127.0.0.1".
 # (string value)
-#auth_strategy=keystone
+#my_ip=10.0.0.1
 
 
 #
-# Options defined in ironic.openstack.common.eventlet_backdoor
+# Options defined in oslo.log
+#
+
+# If set to true, the logging level will be set to DEBUG
+# instead of the default INFO level. (boolean value)
+#debug=false
+
+# If set to false, the logging level will be set to WARNING
+# instead of the default INFO level. (boolean value)
+# This option is deprecated and planned for removal in a future release.
+#verbose=true
+
+# The name of a logging configuration file. This file is
+# appended to any existing logging configuration files. For
+# details about logging configuration files, see the Python
+# logging module documentation. Note that when logging
+# configuration files are used then all logging configuration
+# is set in the configuration file and other logging
+# configuration options are ignored (for example,
+# logging_context_format_string). (string value)
+# Deprecated group/name - [DEFAULT]/log_config
+#log_config_append=<None>
+
+# Defines the format string for %%(asctime)s in log records.
+# Default: %(default)s . This option is ignored if
+# log_config_append is set. (string value)
+#log_date_format=%Y-%m-%d %H:%M:%S
+
+# (Optional) Name of log file to send logging output to. If no
+# default is set, logging will go to stderr as defined by
+# use_stderr. This option is ignored if log_config_append is
+# set. (string value)
+# Deprecated group/name - [DEFAULT]/logfile
+#log_file=<None>
+
+# (Optional) The base directory used for relative log_file
+# paths. This option is ignored if log_config_append is set.
+# (string value)
+# Deprecated group/name - [DEFAULT]/logdir
+#log_dir=<None>
+
+# Uses logging handler designed to watch file system. When log
+# file is moved or removed this handler will open a new log
+# file with specified path instantaneously. It makes sense
+# only if log_file option is specified and Linux platform is
+# used. This option is ignored if log_config_append is set.
+# (boolean value)
+#watch_log_file=false
+
+# Use syslog for logging. Existing syslog format is DEPRECATED
+# and will be changed later to honor RFC5424. This option is
+# ignored if log_config_append is set. (boolean value)
+#use_syslog=false
+
+# Syslog facility to receive log lines. This option is ignored
+# if log_config_append is set. (string value)
+#syslog_log_facility=LOG_USER
+
+# Log output to standard error. This option is ignored if
+# log_config_append is set. (boolean value)
+#use_stderr=true
+
+# Format string to use for log messages with context. (string
+# value)
+#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
+
+# Format string to use for log messages when context is
+# undefined. (string value)
+#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
+
+# Additional data to append to log message when logging level
+# for the message is DEBUG. (string value)
+#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
+
+# Prefix each line of exception output with this format.
+# (string value)
+#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d ERROR %(name)s %(instance)s
+
+# Defines the format string for %(user_identity)s that is used
+# in logging_context_format_string. (string value)
+#logging_user_identity_format=%(user)s %(tenant)s %(domain)s %(user_domain)s %(project_domain)s
+
+# List of package logging levels in logger=LEVEL pairs. This
+# option is ignored if log_config_append is set. (list value)
+#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,requests.packages.urllib3.util.retry=WARN,urllib3.util.retry=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN,taskflow=WARN,keystoneauth=WARN,oslo.cache=INFO,dogpile.core.dogpile=INFO
+
+# Enables or disables publication of error events. (boolean
+# value)
+#publish_errors=false
+
+# The format for an instance that is passed with the log
+# message. (string value)
+#instance_format="[instance: %(uuid)s] "
+
+# The format for an instance UUID that is passed with the log
+# message. (string value)
+#instance_uuid_format="[instance: %(uuid)s] "
+
+# Enables or disables fatal status of deprecations. (boolean
+# value)
+#fatal_deprecations=false
+
+
+#
+# Options defined in oslo.messaging
+#
+
+# Size of RPC connection pool. (integer value)
+# Deprecated group/name - [DEFAULT]/rpc_conn_pool_size
+#rpc_conn_pool_size=30
+
+# ZeroMQ bind address. Should be a wildcard (*), an ethernet
+# interface, or IP. The "host" option should point or resolve
+# to this address. (string value)
+#rpc_zmq_bind_address=*
+
+# MatchMaker driver. (string value)
+# Possible values: redis, dummy
+#rpc_zmq_matchmaker=redis
+
+# Type of concurrency used. Either "native" or "eventlet"
+# (string value)
+#rpc_zmq_concurrency=eventlet
+
+# Number of ZeroMQ contexts, defaults to 1. (integer value)
+#rpc_zmq_contexts=1
+
+# Maximum number of ingress messages to locally buffer per
+# topic. Default is unlimited. (integer value)
+#rpc_zmq_topic_backlog=<None>
+
+# Directory for holding IPC sockets. (string value)
+#rpc_zmq_ipc_dir=/var/run/openstack
+
+# Name of this node. Must be a valid hostname, FQDN, or IP
+# address. Must match "host" option, if running Nova. (string
+# value)
+#rpc_zmq_host=localhost
+
+# Seconds to wait before a cast expires (TTL). The default
+# value of -1 specifies an infinite linger period. The value
+# of 0 specifies no linger period. Pending messages shall be
+# discarded immediately when the socket is closed. Only
+# supported by impl_zmq. (integer value)
+#rpc_cast_timeout=-1
+
+# The default number of seconds that poll should wait. Poll
+# raises timeout exception when timeout expired. (integer
+# value)
+#rpc_poll_timeout=1
+
+# Expiration timeout in seconds of a name service record about
+# existing target ( < 0 means no timeout). (integer value)
+#zmq_target_expire=120
+
+# Use PUB/SUB pattern for fanout methods. PUB/SUB always uses
+# proxy. (boolean value)
+#use_pub_sub=true
+
+# Minimal port number for random ports range. (port value)
+# Possible values: 0-65535
+#rpc_zmq_min_port=49152
+
+# Maximal port number for random ports range. (integer value)
+# Possible values: 1-65536
+#rpc_zmq_max_port=65536
+
+# Number of retries to find free port number before fail with
+# ZMQBindError. (integer value)
+#rpc_zmq_bind_port_retries=100
+
+# Size of executor thread pool. (integer value)
+# Deprecated group/name - [DEFAULT]/rpc_thread_pool_size
+#executor_thread_pool_size=64
+
+# Seconds to wait for a response from a call. (integer value)
+#rpc_response_timeout=60
+
+# A URL representing the messaging driver to use and its full
+# configuration. If not set, we fall back to the rpc_backend
+# option and driver specific configuration. (string value)
+#transport_url=<None>
+
+# The messaging driver to use, defaults to rabbit. Other
+# drivers include amqp and zmq. (string value)
+#rpc_backend=rabbit
+
+# The default exchange under which topics are scoped. May be
+# overridden by an exchange name specified in the
+# transport_url option. (string value)
+#control_exchange=openstack
+
+
+#
+# Options defined in oslo.service.periodic_task
+#
+
+# Some periodic tasks can be run in a separate process. Should
+# we run them here? (boolean value)
+#run_external_periodic_tasks=true
+
+
+#
+# Options defined in oslo.service.service
 #
 
 # Enable eventlet backdoor.  Acceptable values are 0, <port>,
@@ -234,117 +379,60 @@
 # service's log file. (string value)
 #backdoor_port=<None>
 
-
-#
-# Options defined in ironic.openstack.common.log
-#
-
-# Print debugging output (set logging level to DEBUG instead
-# of default WARNING level). (boolean value)
-#debug=false
-
-# Print more verbose output (set logging level to INFO instead
-# of default WARNING level). (boolean value)
-#verbose=false
-
-# Log output to standard error. (boolean value)
-#use_stderr=true
-
-# Format string to use for log messages with context. (string
-# value)
-#logging_context_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s
-
-# Format string to use for log messages without context.
-# (string value)
-#logging_default_format_string=%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s
-
-# Data to append to log format when level is DEBUG. (string
-# value)
-#logging_debug_format_suffix=%(funcName)s %(pathname)s:%(lineno)d
-
-# Prefix each line of exception output with this format.
-# (string value)
-#logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s
-
-# List of logger=LEVEL pairs. (list value)
-#default_log_levels=amqp=WARN,amqplib=WARN,boto=WARN,qpid=WARN,sqlalchemy=WARN,suds=INFO,oslo.messaging=INFO,iso8601=WARN,requests.packages.urllib3.connectionpool=WARN,urllib3.connectionpool=WARN,websocket=WARN,keystonemiddleware=WARN,routes.middleware=WARN,stevedore=WARN
-
-# Enables or disables publication of error events. (boolean
-# value)
-#publish_errors=false
-
-# Enables or disables fatal status of deprecations. (boolean
-# value)
-#fatal_deprecations=false
-
-# The format for an instance that is passed with the log
-# message. (string value)
-#instance_format="[instance: %(uuid)s] "
-
-# The format for an instance UUID that is passed with the log
-# message. (string value)
-#instance_uuid_format="[instance: %(uuid)s] "
-
-# The name of a logging configuration file. This file is
-# appended to any existing logging configuration files. For
-# details about logging configuration files, see the Python
-# logging module documentation. (string value)
-# Deprecated group/name - [DEFAULT]/log_config
-#log_config_append=<None>
-
-# DEPRECATED. A logging.Formatter log message format string
-# which may use any of the available logging.LogRecord
-# attributes. This option is deprecated.  Please use
-# logging_context_format_string and
-# logging_default_format_string instead. (string value)
-#log_format=<None>
-
-# Format string for %%(asctime)s in log records. Default:
-# %(default)s . (string value)
-#log_date_format=%Y-%m-%d %H:%M:%S
-
-# (Optional) Name of log file to output to. If no default is
-# set, logging will go to stdout. (string value)
-# Deprecated group/name - [DEFAULT]/logfile
-#log_file=<None>
-
-# (Optional) The base directory used for relative --log-file
-# paths. (string value)
-# Deprecated group/name - [DEFAULT]/logdir
-#log_dir=<None>
-
-# Use syslog for logging. Existing syslog format is DEPRECATED
-# during I, and will change in J to honor RFC5424. (boolean
-# value)
-#use_syslog=false
-
-# (Optional) Enables or disables syslog rfc5424 format for
-# logging. If enabled, prefixes the MSG part of the syslog
-# message with APP-NAME (RFC5424). The format without the APP-
-# NAME is deprecated in I, and will be removed in J. (boolean
-# value)
-#use_syslog_rfc_format=false
-
-# Syslog facility to receive log lines. (string value)
-#syslog_log_facility=LOG_USER
+# Enable eventlet backdoor, using the provided path as a unix
+# socket that can receive connections. This option is mutually
+# exclusive with 'backdoor_port' in that only one should be
+# provided. If both are provided then the existence of this
+# option overrides the usage of that option. (string value)
+#backdoor_socket=<None>
+
+# Enables or disables logging values of all registered options
+# when starting a service (at DEBUG level). (boolean value)
+#log_options=true
+
+# Specify a timeout after which a gracefully shutdown server
+# will exit. Zero value means endless wait. (integer value)
+#graceful_shutdown_timeout=60
 
 
 #
-# Options defined in ironic.openstack.common.periodic_task
+# Options defined in oslo.service.wsgi
 #
 
-# Some periodic tasks can be run in a separate process. Should
-# we run them here? (boolean value)
-#run_external_periodic_tasks=true
-
-
-#
-# Options defined in ironic.openstack.common.versionutils
-#
-
-# Enables or disables fatal status of deprecations. (boolean
+# File name for the paste.deploy config for api service
+# (string value)
+#api_paste_config=api-paste.ini
+
+# A python format string that is used as the template to
+# generate log lines. The following values can beformatted
+# into it: client_ip, date_time, request_line, status_code,
+# body_length, wall_seconds. (string value)
+#wsgi_log_format=%(client_ip)s "%(request_line)s" status: %(status_code)s  len: %(body_length)s time: %(wall_seconds).7f
+
+# Sets the value of TCP_KEEPIDLE in seconds for each server
+# socket. Not supported on OS X. (integer value)
+#tcp_keepidle=600
+
+# Size of the pool of greenthreads used by wsgi (integer
 # value)
-#fatal_deprecations=false
+#wsgi_default_pool_size=100
+
+# Maximum line size of message headers to be accepted.
+# max_header_line may need to be increased when using large
+# tokens (typically those generated when keystone is
+# configured to use PKI tokens with big service catalogs).
+# (integer value)
+#max_header_line=16384
+
+# If False, closes the client socket connection explicitly.
+# (boolean value)
+#wsgi_keep_alive=true
+
+# Timeout for client connections' socket operations. If an
+# incoming connection is idle for this number of seconds it
+# will be closed. A value of '0' means wait forever. (integer
+# value)
+#client_socket_timeout=900
 
 
 [agent]
@@ -353,27 +441,38 @@
 # Options defined in ironic.drivers.modules.agent
 #
 
-# Additional append parameters for baremetal PXE boot. (string
-# value)
+# DEPRECATED. Additional append parameters for baremetal PXE
+# boot. This option is deprecated and will be removed in
+# Mitaka release. Please use [pxe]pxe_append_params instead.
+# (string value)
 #agent_pxe_append_params=nofb nomodeset vga=normal
 
-# Template file for PXE configuration. (string value)
+# DEPRECATED. Template file for PXE configuration. This option
+# is deprecated and will be removed in Mitaka release. Please
+# use [pxe]pxe_config_template instead. (string value)
 #agent_pxe_config_template=$pybasedir/drivers/modules/agent_config.template
 
-# Neutron bootfile DHCP parameter. (string value)
-#agent_pxe_bootfile_name=pxelinux.0
-
-# Priority to run in-band erase devices via the Ironic Python
-# Agent ramdisk. If unset, will use the priority set in the
-# ramdisk (defaults to 10 for the GenericHardwareManager). If
-# set to 0, will not run during cleaning. (integer value)
-#agent_erase_devices_priority=<None>
-
-# Whether Ironic will manage TFTP files for the deploy
-# ramdisks. If set to False, you will need to configure your
-# own TFTP server that allows booting the deploy ramdisks.
-# (boolean value)
-#manage_tftp=true
+# Whether Ironic will manage booting of the agent ramdisk. If
+# set to False, you will need to configure your mechanism to
+# allow booting the agent ramdisk. (boolean value)
+# Deprecated group/name - [agent]/manage_tftp
+#manage_agent_boot=true
+
+# The memory size in MiB consumed by agent when it is booted
+# on a bare metal node. This is used for checking if the image
+# can be downloaded and deployed on the bare metal node after
+# booting agent ramdisk. This may be set according to the
+# memory consumed by the agent ramdisk image. (integer value)
+#memory_consumed_by_agent=0
+
+# Whether the agent ramdisk should stream raw images directly
+# onto the disk or not. By streaming raw images directly onto
+# the disk the agent ramdisk will not spend time copying the
+# image to a tmpfs partition (therefore consuming less memory)
+# prior to writing it to the disk. Unless the disk where the
+# image will be copied to is really slow, this option should
+# be set to True. Defaults to True. (boolean value)
+#stream_raw_images=true
 
 
 #
@@ -384,6 +483,15 @@
 # value)
 #heartbeat_timeout=300
 
+# Number of times to retry getting power state to check if
+# bare metal node has been powered off after a soft power off.
+# (integer value)
+#post_deploy_get_power_state_retries=6
+
+# Amount of time (in seconds) to wait between polling power
+# state after trigger soft poweroff. (integer value)
+#post_deploy_get_power_state_retry_interval=5
+
 
 #
 # Options defined in ironic.drivers.modules.agent_client
@@ -438,10 +546,19 @@
 # Options defined in ironic.drivers.modules.amt.common
 #
 
-# Protocol used for AMT endpoint, support http/https (string
-# value)
+# Protocol used for AMT endpoint (string value)
+# Possible values: http, https
 #protocol=http
 
+# Time interval (in seconds) for successive awake call to AMT
+# interface, this depends on the IdleTimeout setting on AMT
+# interface. AMT Interface will go to sleep after 60 seconds
+# of inactivity by default. IdleTimeout=0 means AMT will not
+# go to sleep at all. Setting awake_interval=0 will disable
+# awake call. (integer value)
+# Minimum value: 0
+#awake_interval=60
+
 
 #
 # Options defined in ironic.drivers.modules.amt.power
@@ -462,20 +579,87 @@
 # Options defined in ironic.api
 #
 
-# The listen IP for the Ironic API server. (string value)
+# The IP address on which ironic-api listens. (string value)
 #host_ip=0.0.0.0
 
-# The port for the Ironic API server. (integer value)
+# The TCP port on which ironic-api listens. (port value)
+# Possible values: 0-65535
 #port=6385
 
 # The maximum number of items returned in a single response
 # from a collection resource. (integer value)
 #max_limit=1000
 
+# Public URL to use when building the links to the API
+# resources (for example, "https://ironic.rocks:6384"). If
+# None the links will be built using the request's host URL.
+# If the API is operating behind a proxy, you will want to
+# change this to represent the proxy's URL. Defaults to None.
+# (string value)
+#public_endpoint=<None>
+
+# Number of workers for OpenStack Ironic API service. The
+# default is equal to the number of CPUs available if that can
+# be determined, else a default worker count of 1 is returned.
+# (integer value)
+api_workers=1
+
+# Enable the integrated stand-alone API to service requests
+# via HTTPS instead of HTTP. If there is a front-end service
+# performing HTTPS offloading from the service, this option
+# should be False; note, you will want to change public API
+# endpoint to represent SSL termination URL with
+# 'public_endpoint' option. (boolean value)
+#enable_ssl_api=false
+
+
+[cimc]
+
+#
+# Options defined in ironic.drivers.modules.cimc.power
+#
+
+# Number of times a power operation needs to be retried
+# (integer value)
+#max_retry=6
+
+# Amount of time in seconds to wait in between power
+# operations (integer value)
+#action_interval=10
+
+
+[cisco_ucs]
+
+#
+# Options defined in ironic.drivers.modules.ucs.power
+#
+
+# Number of times a power operation needs to be retried
+# (integer value)
+#max_retry=6
+
+# Amount of time in seconds to wait in between power
+# operations (integer value)
+#action_interval=5
+
 
 [conductor]
 
 #
+# Options defined in ironic.conductor.base_manager
+#
+
+# The size of the workers greenthread pool. Note that 2
+# threads will be reserved by the conductor itself for
+# handling heart beats and periodic tasks. (integer value)
+# Minimum value: 3
+#workers_pool_size=100
+
+# Seconds between conductor heart beats. (integer value)
+#heartbeat_interval=10
+
+
+#
 # Options defined in ironic.conductor.manager
 #
 
@@ -484,11 +668,9 @@
 # value)
 #api_url=<None>
 
-# Seconds between conductor heart beats. (integer value)
-#heartbeat_interval=10
-
 # Maximum time (in seconds) since the last check-in of a
-# conductor. (integer value)
+# conductor. A conductor is considered inactive when this time
+# has been exceeded. (integer value)
 #heartbeat_timeout=60
 
 # Interval between syncing the node power state to the
@@ -499,8 +681,8 @@
 # (integer value)
 #check_provision_state_interval=60
 
-# Timeout (seconds) for waiting callback from deploy ramdisk.
-# 0 - unlimited. (integer value)
+# Timeout (seconds) to wait for a callback from a deploy
+# ramdisk. Set to 0 to disable timeout. (integer value)
 #deploy_callback_timeout=1800
 
 # During sync_power_state, should the hardware power state be
@@ -519,9 +701,6 @@
 # thread pool size. (integer value)
 #periodic_max_workers=8
 
-# The size of the workers greenthread pool. (integer value)
-#workers_pool_size=100
-
 # Number of attempts to grab a node lock. (integer value)
 #node_locked_retry_attempts=3
 
@@ -536,8 +715,8 @@
 # ceilometer via the notification bus. (integer value)
 #send_sensor_data_interval=600
 
-# List of comma separated metric types which need to be sent
-# to Ceilometer. The default value, "ALL", is a special value
+# List of comma separated meter types which need to be sent to
+# Ceilometer. The default value, "ALL", is a special value
 # meaning send all the sensor data. (list value)
 #send_sensor_data_types=ALL
 
@@ -560,11 +739,12 @@
 # unlimited. (integer value)
 #inspect_timeout=1800
 
-# Cleaning is a configurable set of steps, such as erasing
-# disk drives, that are performed on the node to ensure it is
-# in a baseline state and ready to be deployed to. This is
-# done after instance deletion, and during the transition from
-# a "managed" to "available" state. When enabled, the
+# Enables or disables automated cleaning. Automated cleaning
+# is a configurable set of steps, such as erasing disk drives,
+# that are performed on the node to ensure it is in a baseline
+# state and ready to be deployed to. This is done after
+# instance deletion as well as during the transition from a
+# "manageable" to "available" state. When enabled, the
 # particular steps performed to clean a node depend on which
 # driver that node is managed by; see the individual driver's
 # documentation for details. NOTE: The introduction of the
@@ -572,7 +752,14 @@
 # significantly longer. In an environment where all tenants
 # are trusted (eg, because there is only one tenant), this
 # option could be safely disabled. (boolean value)
-#clean_nodes=true
+# Deprecated group/name - [conductor]/clean_nodes
+#automated_clean=true
+
+# Timeout (seconds) to wait for a callback from the ramdisk
+# doing the cleaning. If the timeout is reached the node will
+# be put in the "clean failed" provision state. Set to 0 to
+# disable timeout. (integer value)
+#clean_callback_timeout=1800
 
 
 [console]
@@ -601,16 +788,88 @@
 #subprocess_timeout=10
 
 
+[cors]
+
+#
+# Options defined in oslo.middleware
+#
+
+# Indicate whether this resource may be shared with the domain
+# received in the requests "origin" header. (list value)
+#allowed_origin=<None>
+
+# Indicate that the actual request can include user
+# credentials (boolean value)
+#allow_credentials=true
+
+# Indicate which headers are safe to expose to the API.
+# Defaults to HTTP Simple Headers. (list value)
+#expose_headers=Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+
+# Maximum cache age of CORS preflight requests. (integer
+# value)
+#max_age=3600
+
+# Indicate which methods can be used during the actual
+# request. (list value)
+#allow_methods=GET,POST,PUT,DELETE,OPTIONS
+
+# Indicate which header field names may be used during the
+# actual request. (list value)
+#allow_headers=Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+
+
+[cors.subdomain]
+
+#
+# Options defined in oslo.middleware
+#
+
+# Indicate whether this resource may be shared with the domain
+# received in the requests "origin" header. (list value)
+#allowed_origin=<None>
+
+# Indicate that the actual request can include user
+# credentials (boolean value)
+#allow_credentials=true
+
+# Indicate which headers are safe to expose to the API.
+# Defaults to HTTP Simple Headers. (list value)
+#expose_headers=Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+
+# Maximum cache age of CORS preflight requests. (integer
+# value)
+#max_age=3600
+
+# Indicate which methods can be used during the actual
+# request. (list value)
+#allow_methods=GET,POST,PUT,DELETE,OPTIONS
+
+# Indicate which header field names may be used during the
+# actual request. (list value)
+#allow_headers=Content-Type,Cache-Control,Content-Language,Expires,Last-Modified,Pragma
+
+
 [database]
 
 #
+# Options defined in ironic.db.sqlalchemy.models
+#
+
+# MySQL engine to use. (string value)
+#mysql_engine=InnoDB
+
+
+#
 # Options defined in oslo.db
 #
 
 # The file name to use with SQLite. (string value)
+# Deprecated group/name - [DEFAULT]/sqlite_db
 #sqlite_db=oslo.sqlite
 
 # If True, SQLite uses synchronous mode. (boolean value)
+# Deprecated group/name - [DEFAULT]/sqlite_synchronous
 #sqlite_synchronous=true
 
 # The back end to use for the database. (string value)
@@ -622,7 +881,7 @@
 # Deprecated group/name - [DEFAULT]/sql_connection
 # Deprecated group/name - [DATABASE]/sql_connection
 # Deprecated group/name - [sql]/connection
-#connection=<None>
+connection=mysql://%SERVICE_USER%:%SERVICE_PASSWORD%@localhost/ironic
 
 # The SQLAlchemy connection string to use to connect to the
 # slave database. (string value)
@@ -635,12 +894,6 @@
 # value)
 #mysql_sql_mode=TRADITIONAL
 
-# This configures the MySQL storage engine. This allows for OpenStack to
-# support different storage engines such as InnoDB, NDB, etc. By Default,
-# this value will be set to InnoDB. For MySQL Cluster, set to NDBCLUSTER.
-# Example: mysql_storage_engine=(string value)
-#mysql_storage_engine = InnoDB
-
 # Timeout before idle SQL connections are reaped. (integer
 # value)
 # Deprecated group/name - [DEFAULT]/sql_idle_timeout
@@ -677,7 +930,7 @@
 # (integer value)
 # Deprecated group/name - [DEFAULT]/sql_max_overflow
 # Deprecated group/name - [DATABASE]/sqlalchemy_max_overflow
-#max_overflow=<None>
+#max_overflow=50
 
 # Verbosity of SQL debugging information: 0=None,
 # 100=Everything. (integer value)
@@ -717,31 +970,32 @@
 #db_max_retries=20
 
 
-#
-# Options defined in ironic.db.sqlalchemy.models
-#
-
-# MySQL engine to use. (string value)
-#mysql_engine=InnoDB
-
-
 [deploy]
 
 #
 # Options defined in ironic.drivers.modules.deploy_utils
 #
 
-# Size of EFI system partition in MiB when configuring UEFI
-# systems for local boot. (integer value)
-#efi_system_partition_size=200
-
-# Block size to use when writing to the nodes disk. (string
+# ironic-conductor node's HTTP server URL. Example:
+# http://192.1.2.3:8080 (string value)
+# Deprecated group/name - [pxe]/http_url
+#http_url=<None>
+
+# ironic-conductor node's HTTP root path. (string value)
+# Deprecated group/name - [pxe]/http_root
+#http_root=/httpboot
+
+# Priority to run in-band erase devices via the Ironic Python
+# Agent ramdisk. If unset, will use the priority set in the
+# ramdisk (defaults to 10 for the GenericHardwareManager). If
+# set to 0, will not run during cleaning. (integer value)
+# Deprecated group/name - [agent]/agent_erase_devices_priority
+#erase_devices_priority=<None>
+
+# Number of iterations to be run for erasing devices. (integer
 # value)
-#dd_block_size=1M
-
-# Maximum attempts to verify an iSCSI connection is active,
-# sleeping 1 second between attempts. (integer value)
-#iscsi_verify_attempts=3
+# Deprecated group/name - [agent]/agent_erase_devices_iterations
+#erase_devices_iterations=1
 
 
 [dhcp]
@@ -755,30 +1009,10 @@
 #dhcp_provider=neutron
 
 
-[discoverd]
-
-#
-# Options defined in ironic.drivers.modules.discoverd
-#
-
-# whether to enable inspection using ironic-discoverd (boolean
-# value)
-#enabled=false
-
-# ironic-discoverd HTTP endpoint. If this is not set, the
-# ironic-discoverd client default (http://127.0.0.1:5050) will
-# be used. (string value)
-#service_url=<None>
-
-# period (in seconds) to check status of nodes on inspection
-# (integer value)
-#status_check_period=60
-
-
 [disk_partitioner]
 
 #
-# Options defined in ironic.common.disk_partitioner
+# Options defined in ironic_lib.disk_partitioner
 #
 
 # After Ironic has completed creating the partition table, it
@@ -794,6 +1028,28 @@
 #check_device_max_retries=20
 
 
+[disk_utils]
+
+#
+# Options defined in ironic_lib.disk_utils
+#
+
+# Size of EFI system partition in MiB when configuring UEFI
+# systems for local boot. (integer value)
+# Deprecated group/name - [deploy]/efi_system_partition_size
+#efi_system_partition_size=200
+
+# Block size to use when writing to the nodes disk. (string
+# value)
+# Deprecated group/name - [deploy]/dd_block_size
+#dd_block_size=1M
+
+# Maximum attempts to verify an iSCSI connection is active,
+# sleeping 1 second between attempts. (integer value)
+# Deprecated group/name - [deploy]/iscsi_verify_attempts
+#iscsi_verify_attempts=3
+
+
 [glance]
 
 #
@@ -812,37 +1068,59 @@
 # The length of time in seconds that the temporary URL will be
 # valid for. Defaults to 20 minutes. If some deploys get a 401
 # response code when trying to download from the temporary
-# URL, try raising this duration. (integer value)
+# URL, try raising this duration. This value must be greater
+# than or equal to the value for
+# swift_temp_url_expected_download_start_delay (integer value)
 #swift_temp_url_duration=1200
 
+# Whether to cache generated Swift temporary URLs. Setting it
+# to true is only useful when an image caching proxy is used.
+# Defaults to False. (boolean value)
+#swift_temp_url_cache_enabled=false
+
+# This is the delay (in seconds) from the time of the deploy
+# request (when the Swift temporary URL is generated) to when
+# the IPA ramdisk starts up and URL is used for the image
+# download. This value is used to check if the Swift temporary
+# URL duration is large enough to let the image download
+# begin. Also if temporary URL caching is enabled this will
+# determine if a cached entry will still be valid when the
+# download starts. swift_temp_url_duration value must be
+# greater than or equal to this option's value. Defaults to 0.
+# (integer value)
+# Minimum value: 0
+#swift_temp_url_expected_download_start_delay=0
+
 # The "endpoint" (scheme, hostname, optional port) for the
 # Swift URL of the form
-# "endpoint_url/api_version/account/container/object_id". Do
+# "endpoint_url/api_version/[account/]container/object_id". Do
 # not include trailing "/". For example, use
-# "https://swift.example.com". Required for temporary URLs.
-# (string value)
+# "https://swift.example.com". If using RADOS Gateway,
+# endpoint may also contain /swift path; if it does not, it
+# will be appended. Required for temporary URLs. (string
+# value)
 #swift_endpoint_url=<None>
 
 # The Swift API version to create a temporary URL for.
 # Defaults to "v1". Swift temporary URL format:
-# "endpoint_url/api_version/account/container/object_id"
+# "endpoint_url/api_version/[account/]container/object_id"
 # (string value)
 #swift_api_version=v1
 
 # The account that Glance uses to communicate with Swift. The
 # format is "AUTH_uuid". "uuid" is the UUID for the account
 # configured in the glance-api.conf. Required for temporary
-# URLs. For example:
+# URLs when Glance backend is Swift. For example:
 # "AUTH_a422b2-91f3-2f46-74b7-d7c9e8958f5d30". Swift temporary
 # URL format:
-# "endpoint_url/api_version/account/container/object_id"
+# "endpoint_url/api_version/[account/]container/object_id"
 # (string value)
 #swift_account=<None>
 
 # The Swift container Glance is configured to store its images
 # in. Defaults to "glance", which is the default in glance-
 # api.conf. Swift temporary URL format:
-# "endpoint_url/api_version/account/container/object_id"
+# "endpoint_url/api_version/[account/]container/object_id"
 # (string value)
 #swift_container=glance
 
@@ -855,6 +1133,12 @@
 # value)
 #swift_store_multiple_containers_seed=0
 
+# Type of endpoint to use for temporary URLs. If the Glance
+# backend is Swift, use "swift"; if it is CEPH with RADOS
+# gateway, use "radosgw". (string value)
+# Possible values: swift, radosgw
+#temp_url_endpoint_type=swift
+
 
 #
 # Options defined in ironic.common.image_service
@@ -863,11 +1147,13 @@
 # Default glance hostname or IP address. (string value)
 #glance_host=$my_ip
 
-# Default glance port. (integer value)
+# Default glance port. (port value)
+# Possible values: 0-65535
 #glance_port=9292
 
 # Default protocol to use when connecting to glance. Set to
 # https for SSL. (string value)
+# Possible values: http, https
 #glance_protocol=http
 
 # A list of the glance api servers available to ironic. Prefix
@@ -884,10 +1170,34 @@
 #glance_num_retries=0
 
 # Authentication strategy to use when connecting to glance.
-# Only "keystone" and "noauth" are currently supported by
-# ironic. (string value)
+# (string value)
+# Possible values: keystone, noauth
 #auth_strategy=keystone
 
+# Optional path to a CA certificate bundle to be used to
+# validate the SSL certificate served by glance. It is used
+# when glance_api_insecure is set to False. (string value)
+#glance_cafile=<None>
+
+
+[iboot]
+
+#
+# Options defined in ironic.drivers.modules.iboot
+#
+
+# Maximum retries for iBoot operations (integer value)
+#max_retry=3
+
+# Time (in seconds) between retry attempts for iBoot
+# operations (integer value)
+#retry_interval=1
+
+# Time (in seconds) to sleep between when rebooting (powering
+# off and on again). (integer value)
+# Minimum value: 0
+#reboot_delay=5
+
 
 [ilo]
 
@@ -898,7 +1208,8 @@
 # Timeout (in seconds) for iLO operations (integer value)
 #client_timeout=60
 
-# Port to be used for iLO operations (integer value)
+# Port to be used for iLO operations (port value)
+# Possible values: 0-65535
 #client_port=443
 
 # The Swift iLO container to store data. (string value)
@@ -908,6 +1219,14 @@
 # (integer value)
 #swift_object_expiry_timeout=900
 
+# Set this to True to use http web server to host floppy
+# images and generated boot ISO. This requires http_root and
+# http_url to be configured in the [deploy] section of the
+# config file. If this is set to False, then Ironic will use
+# Swift to host the floppy images and generated boot_iso.
+# (boolean value)
+#use_web_server_for_images=false
+
 
 #
 # Options defined in ironic.drivers.modules.ilo.deploy
@@ -924,19 +1243,19 @@
 #
 
 # Priority for reset_ilo clean step. (integer value)
-#clean_priority_reset_ilo=1
+#clean_priority_reset_ilo=0
 
 # Priority for reset_bios_to_default clean step. (integer
 # value)
 #clean_priority_reset_bios_to_default=10
 
 # Priority for reset_secure_boot_keys clean step. This step
-# will reset the secure boot keys to manufacturing  defaults.
+# will reset the secure boot keys to manufacturing defaults.
 # (integer value)
 #clean_priority_reset_secure_boot_keys_to_default=20
 
 # Priority for clear_secure_boot_keys clean step. This step is
-# not enabled by default. It can be enabled to to clear all
+# not enabled by default. It can be enabled to clear all
 # secure boot keys enrolled with iLO. (integer value)
 #clean_priority_clear_secure_boot_keys=0
 
@@ -959,6 +1278,29 @@
 #power_wait=2
 
 
+[inspector]
+
+#
+# Options defined in ironic.drivers.modules.inspector
+#
+
+# whether to enable inspection using ironic-inspector (boolean
+# value)
+# Deprecated group/name - [discoverd]/enabled
+#enabled=false
+
+# ironic-inspector HTTP endpoint. If this is not set, the
+# ironic-inspector client default (http://127.0.0.1:5050) will
+# be used. (string value)
+# Deprecated group/name - [discoverd]/service_url
+#service_url=<None>
+
+# period (in seconds) to check status of nodes on inspection
+# (integer value)
+# Deprecated group/name - [discoverd]/status_check_period
+#status_check_period=60
+
+
 [ipmi]
 
 #
@@ -983,24 +1325,80 @@
 [irmc]
 
 #
+# Options defined in ironic.drivers.modules.irmc.boot
+#
+
+# Ironic conductor node's "NFS" or "CIFS" root path (string
+# value)
+#remote_image_share_root=/remote_image_share_root
+
+# IP of remote image server (string value)
+#remote_image_server=<None>
+
+# Share type of virtual media (string value)
+# Possible values: CIFS, NFS
+#remote_image_share_type=CIFS
+
+# share name of remote_image_server (string value)
+#remote_image_share_name=share
+
+# User name of remote_image_server (string value)
+#remote_image_user_name=<None>
+
+# Password of remote_image_user_name (string value)
+#remote_image_user_password=<None>
+
+# Domain name of remote_image_user_name (string value)
+#remote_image_user_domain=
+
+
+#
 # Options defined in ironic.drivers.modules.irmc.common
 #
 
-# Port to be used for iRMC operations, either 80 or 443
-# (integer value)
+# Port to be used for iRMC operations (port value)
+# Possible values: 443, 80
 #port=443
 
-# Authentication method to be used for iRMC operations, either
-# "basic" or "digest" (string value)
+# Authentication method to be used for iRMC operations (string
+# value)
+# Possible values: basic, digest
 #auth_method=basic
 
 # Timeout (in seconds) for iRMC operations (integer value)
 #client_timeout=60
 
-# Sensor data retrieval method, either "ipmitool" or "scci"
-# (string value)
+# Sensor data retrieval method. (string value)
+# Possible values: ipmitool, scci
 #sensor_method=ipmitool
 
+# SNMP protocol version (string value)
+# Possible values: v1, v2c, v3
+#snmp_version=v2c
+
+# SNMP port (port value)
+# Possible values: 0-65535
+#snmp_port=161
+
+# SNMP community. Required for versions "v1" and "v2c" (string
+# value)
+#snmp_community=public
+
+# SNMP security name. Required for version "v3" (string value)
+#snmp_security=<None>
+
+
+[ironic_lib]
+
+#
+# Options defined in ironic_lib.utils
+#
+
+# Command that is prefixed to commands that are run as root.
+# If not specified, no commands are run as root. (string
+# value)
+#root_helper=sudo ironic-rootwrap /etc/ironic/rootwrap.conf
+
 
 [keystone]
 
@@ -1008,7 +1406,7 @@
 # Options defined in ironic.common.keystone
 #
 
-# The region used for getting endpoints of OpenStackservices.
+# The region used for getting endpoints of OpenStack services.
 # (string value)
 #region_name=<None>
 
@@ -1020,7 +1418,7 @@
 #
 
 # Complete public Identity API endpoint. (string value)
-#auth_uri=<None>
+auth_uri=http://127.0.0.1:5000/v2.0/
 
 # API version of the admin Identity API endpoint. (string
 # value)
@@ -1057,6 +1455,10 @@
 # Verify HTTPS connections. (boolean value)
 #insecure=false
 
+# The region in which the identity server can be found.
+# (string value)
+#region_name=<None>
+
 # Directory used to cache files related to PKI tokens. (string
 # value)
 signing_dir=$state_path/keystone-signing
@@ -1064,7 +1466,7 @@
 # Optionally specify a list of memcached server(s) to use for
 # caching. If left undefined, tokens will instead be cached
 # in-process. (list value)
-# Deprecated group/name - [DEFAULT]/memcache_servers
+# Deprecated group/name - [keystone_authtoken]/memcache_servers
 #memcached_servers=<None>
 
 # In order to prevent excessive effort spent validating
@@ -1081,13 +1483,13 @@
 #revocation_cache_time=10
 
 # (Optional) If defined, indicate whether token data should be
-# authenticated or authenticated and encrypted. Acceptable
-# values are MAC or ENCRYPT.  If MAC, token data is
-# authenticated (with HMAC) in the cache. If ENCRYPT, token
-# data is encrypted and authenticated in the cache. If the
-# value is not one of these options or empty, auth_token will
-# raise an exception on initialization. (string value)
-#memcache_security_strategy=<None>
+# authenticated or authenticated and encrypted. If MAC, token
+# data is authenticated (with HMAC) in the cache. If ENCRYPT,
+# token data is encrypted and authenticated in the cache. If
+# the value is not one of these options or empty, auth_token
+# will raise an exception on initialization. (string value)
+# Possible values: None, MAC, ENCRYPT
+#memcache_security_strategy=None
 
 # (Optional, mandatory if memcache_security_strategy is
 # defined) This string is used for key derivation. (string
@@ -1103,7 +1505,7 @@
 #memcache_pool_maxsize=10
 
 # (Optional) Socket timeout in seconds for communicating with
-# a memcache server. (integer value)
+# a memcached server. (integer value)
 #memcache_pool_socket_timeout=3
 
 # (Optional) Number of seconds a connection to memcached is
@@ -1111,11 +1513,11 @@
 #memcache_pool_unused_timeout=60
 
 # (Optional) Number of seconds that an operation will wait to
-# get a memcache client connection from the pool. (integer
+# get a memcached client connection from the pool. (integer
 # value)
 #memcache_pool_conn_get_timeout=10
 
-# (Optional) Use the advanced (eventlet safe) memcache client
+# (Optional) Use the advanced (eventlet safe) memcached client
 # pool. The advanced pool will only work under python 2.x.
 # (boolean value)
 #memcache_use_advanced_pool=false
@@ -1154,50 +1556,26 @@
 # (list value)
 #hash_algorithms=md5
 
-# Prefix to prepend at the beginning of the path. Deprecated,
-# use identity_uri. (string value)
-#auth_admin_prefix=
-
-# Host providing the admin Identity API endpoint. Deprecated,
-# use identity_uri. (string value)
-#auth_host=127.0.0.1
-
-# Port of the admin Identity API endpoint. Deprecated, use
-# identity_uri. (integer value)
-#auth_port=35357
-
-# Protocol of the admin Identity API endpoint (http or https).
-# Deprecated, use identity_uri. (string value)
-#auth_protocol=https
-
-# Complete admin Identity API endpoint. This should specify
-# the unversioned root endpoint e.g. https://localhost:35357/
-# (string value)
-#identity_uri=<None>
-
-# This option is deprecated and may be removed in a future
-# release. Single shared secret with the Keystone
-# configuration used for bootstrapping a Keystone
-# installation, or otherwise bypassing the normal
-# authentication process. This option should not be used, use
-# `admin_user` and `admin_password` instead. (string value)
-#admin_token=<None>
+# Authentication type to load (type of value is unknown)
+# Deprecated group/name - [keystone_authtoken]/auth_plugin
+#auth_type=<None>
+
+# Config Section from which to load plugin specific options
+# (type of value is unknown)
+#auth_section=<None>
+
+# Complete admin Identity API endpoint. This should specify the unversioned
+# root endpoint e.g. https://localhost:35357/ (string value)
+identity_uri = http://127.0.0.1:35357/
 
 # Service username. (string value)
-admin_user=%SERVICE_USER%
+admin_user = %SERVICE_USER%
 
 # Service user password. (string value)
-admin_password=%SERVICE_PASSWORD%
+admin_password = %SERVICE_PASSWORD%
 
 # Service tenant name. (string value)
-admin_tenant_name=%SERVICE_TENANT_NAME%
-
-# Name of the plugin to load (string value)
-#auth_plugin=<None>
-
-# Config Section from which to load plugin specific options
-# (string value)
-#auth_section=<None>
+admin_tenant_name = %SERVICE_TENANT_NAME%
 
 
 [matchmaker_redis]
@@ -1209,22 +1587,30 @@
 # Host to locate redis. (string value)
 #host=127.0.0.1
 
-# Use this port to connect to redis host. (integer value)
+# Use this port to connect to redis host. (port value)
+# Possible values: 0-65535
 #port=6379
 
 # Password for Redis server (optional). (string value)
-#password=<None>
-
-
-[matchmaker_ring]
-
-#
-# Options defined in oslo.messaging
-#
-
-# Matchmaker ring file (JSON). (string value)
-# Deprecated group/name - [DEFAULT]/matchmaker_ringfile
-#ringfile=/etc/oslo/matchmaker_ring.json
+#password=
+
+# List of Redis Sentinel hosts (fault tolerance mode) e.g.
+# [host:port, host1:port ... ] (list value)
+#sentinel_hosts=
+
+# Redis replica set name. (string value)
+#sentinel_group_name=oslo-messaging-zeromq
+
+# Time in ms to wait between connection attempts. (integer
+# value)
+#wait_timeout=500
+
+# Time in ms to wait before the transaction is killed.
+# (integer value)
+#check_timeout=20000
+
+# Timeout in ms on blocking socket operations (integer value)
+#socket_timeout=1000
 
 
 [neutron]
@@ -1245,16 +1631,42 @@
 #retries=3
 
 # Default authentication strategy to use when connecting to
-# neutron. Can be either "keystone" or "noauth". Running
-# neutron in noauth mode (related to but not affected by this
-# setting) is insecure and should only be used for testing.
-# (string value)
+# neutron. Running neutron in noauth mode (related to but not
+# affected by this setting) is insecure and should only be
+# used for testing. (string value)
+# Possible values: keystone, noauth
 #auth_strategy=keystone
 
-# UUID of the network to create Neutron ports on when booting
-# to a ramdisk for cleaning/zapping using Neutron DHCP (string
+# UUID of the network to create Neutron ports on, when booting
+# to a ramdisk for cleaning using Neutron DHCP. (string value)
+#cleaning_network_uuid=<None>
+
+
+[oneview]
+
+#
+# Options defined in ironic.drivers.modules.oneview.common
+#
+
+# URL where OneView is available (string value)
+#manager_url=<None>
+
+# OneView username to be used (string value)
+#username=<None>
+
+# OneView password to be used (string value)
+#password=<None>
+
+# Option to allow insecure connection with OneView (boolean
 # value)
-#cleaning_network_uuid=<None>
+#allow_insecure_connections=false
+
+# Path to CA certificate (string value)
+#tls_cacert_file=<None>
+
+# Max connection retries to check changes on OneView (integer
+# value)
+#max_polling_attempts=12
 
 
 [oslo_concurrency]
@@ -1264,6 +1676,7 @@
 #
 
 # Enables or disables inter-process locks. (boolean value)
+# Deprecated group/name - [DEFAULT]/disable_process_locking
 #disable_process_locking=false
 
 # Directory to use for lock files.  For security, the
@@ -1271,7 +1684,8 @@
 # running the processes that need locking. Defaults to
 # environment variable OSLO_LOCK_PATH. If external locks are
 # used, a lock path must be set. (string value)
-#lock_path=<None>
+# Deprecated group/name - [DEFAULT]/lock_path
+lock_path=$state_path/lock
 
 
 [oslo_messaging_amqp]
@@ -1282,102 +1696,102 @@
 
 # address prefix used when sending to a specific server
 # (string value)
+# Deprecated group/name - [amqp1]/server_request_prefix
 #server_request_prefix=exclusive
 
 # address prefix used when broadcasting to all servers (string
 # value)
+# Deprecated group/name - [amqp1]/broadcast_prefix
 #broadcast_prefix=broadcast
 
 # address prefix when sending to any server in group (string
 # value)
+# Deprecated group/name - [amqp1]/group_request_prefix
 #group_request_prefix=unicast
 
 # Name for the AMQP container (string value)
+# Deprecated group/name - [amqp1]/container_name
 #container_name=<None>
 
 # Timeout for inactive connections (in seconds) (integer
 # value)
+# Deprecated group/name - [amqp1]/idle_timeout
 #idle_timeout=0
 
 # Debug: dump AMQP frames to stdout (boolean value)
+# Deprecated group/name - [amqp1]/trace
 #trace=false
 
-# CA certificate PEM file for verifing server certificate
-# (string value)
+# CA certificate PEM file to verify server certificate (string
+# value)
+# Deprecated group/name - [amqp1]/ssl_ca_file
 #ssl_ca_file=
 
 # Identifying certificate PEM file to present to clients
 # (string value)
+# Deprecated group/name - [amqp1]/ssl_cert_file
 #ssl_cert_file=
 
 # Private key PEM file used to sign cert_file certificate
 # (string value)
+# Deprecated group/name - [amqp1]/ssl_key_file
 #ssl_key_file=
 
 # Password for decrypting ssl_key_file (if encrypted) (string
 # value)
+# Deprecated group/name - [amqp1]/ssl_key_password
 #ssl_key_password=<None>
 
 # Accept clients using either SSL or plain TCP (boolean value)
+# Deprecated group/name - [amqp1]/allow_insecure_clients
 #allow_insecure_clients=false
 
-
-[oslo_messaging_qpid]
+# Space separated list of acceptable SASL mechanisms (string
+# value)
+# Deprecated group/name - [amqp1]/sasl_mechanisms
+#sasl_mechanisms=
+
+# Path to directory that contains the SASL configuration
+# (string value)
+# Deprecated group/name - [amqp1]/sasl_config_dir
+#sasl_config_dir=
+
+# Name of configuration file (without .conf suffix) (string
+# value)
+# Deprecated group/name - [amqp1]/sasl_config_name
+#sasl_config_name=
+
+# User name for message broker authentication (string value)
+# Deprecated group/name - [amqp1]/username
+#username=
+
+# Password for message broker authentication (string value)
+# Deprecated group/name - [amqp1]/password
+#password=
+
+
+[oslo_messaging_notifications]
 
 #
 # Options defined in oslo.messaging
 #
 
-# Use durable queues in AMQP. (boolean value)
-# Deprecated group/name - [DEFAULT]/rabbit_durable_queues
-#amqp_durable_queues=false
-
-# Auto-delete queues in AMQP. (boolean value)
-#amqp_auto_delete=false
-
-# Size of RPC connection pool. (integer value)
-#rpc_conn_pool_size=30
-
-# Qpid broker hostname. (string value)
-#qpid_hostname=localhost
-
-# Qpid broker port. (integer value)
-#qpid_port=5672
-
-# Qpid HA cluster host:port pairs. (list value)
-#qpid_hosts=$qpid_hostname:$qpid_port
-
-# Username for Qpid connection. (string value)
-#qpid_username=
-
-# Password for Qpid connection. (string value)
-#qpid_password=
-
-# Space separated list of SASL mechanisms to use for auth.
-# (string value)
-#qpid_sasl_mechanisms=
-
-# Seconds between connection keepalive heartbeats. (integer
-# value)
-#qpid_heartbeat=60
-
-# Transport to use, either 'tcp' or 'ssl'. (string value)
-#qpid_protocol=tcp
-
-# Whether to disable the Nagle algorithm. (boolean value)
-#qpid_tcp_nodelay=true
-
-# The number of prefetched messages held by receiver. (integer
-# value)
-#qpid_receiver_capacity=1
-
-# The qpid topology version to use.  Version 1 is what was
-# originally used by impl_qpid.  Version 2 includes some
-# backwards-incompatible changes that allow broker federation
-# to work.  Users should update to version 2 when they are
-# able to take everything down, as it requires a clean break.
-# (integer value)
-#qpid_topology_version=1
+# The Drivers(s) to handle sending notifications. Possible
+# values are messaging, messagingv2, routing, log, test, noop
+# (multi valued)
+# Deprecated group/name - [DEFAULT]/notification_driver
+#driver=
+
+# A URL representing the messaging driver to use for
+# notifications. If not set, we fall back to the same
+# configuration used for RPC. (string value)
+# Deprecated group/name - [DEFAULT]/notification_transport_url
+#transport_url=<None>
+
+# AMQP topic used for OpenStack notifications. (list value)
+# Deprecated group/name - [rpc_notifier2]/topics
+# Deprecated group/name - [DEFAULT]/notification_topics
+#topics=notifications
 
 
 [oslo_messaging_rabbit]
@@ -1387,58 +1801,89 @@
 #
 
 # Use durable queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/amqp_durable_queues
 # Deprecated group/name - [DEFAULT]/rabbit_durable_queues
 #amqp_durable_queues=false
 
 # Auto-delete queues in AMQP. (boolean value)
+# Deprecated group/name - [DEFAULT]/amqp_auto_delete
 #amqp_auto_delete=false
 
-# Size of RPC connection pool. (integer value)
-#rpc_conn_pool_size=30
-
 # SSL version to use (valid only if SSL enabled). Valid values
 # are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may
 # be available on some distributions. (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_version
 #kombu_ssl_version=
 
 # SSL key file (valid only if SSL enabled). (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_keyfile
 #kombu_ssl_keyfile=
 
 # SSL cert file (valid only if SSL enabled). (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_certfile
 #kombu_ssl_certfile=
 
 # SSL certification authority file (valid only if SSL
 # enabled). (string value)
+# Deprecated group/name - [DEFAULT]/kombu_ssl_ca_certs
 #kombu_ssl_ca_certs=
 
 # How long to wait before reconnecting in response to an AMQP
 # consumer cancel notification. (floating point value)
+# Deprecated group/name - [DEFAULT]/kombu_reconnect_delay
 #kombu_reconnect_delay=1.0
 
+# EXPERIMENTAL: Possible values are: gzip, bz2. If not set
+# compression will not be used. This option may notbe
+# available in future versions. (string value)
+#kombu_compression=<None>
+
+# How long to wait a missing client beforce abandoning to send
+# it its replies. This value should not be longer than
+# rpc_response_timeout. (integer value)
+# Deprecated group/name - [oslo_messaging_rabbit]/kombu_reconnect_timeout
+#kombu_missing_consumer_retry_timeout=60
+
+# Determines how the next RabbitMQ node is chosen in case the
+# one we are currently connected to becomes unavailable. Takes
+# effect only if more than one RabbitMQ node is provided in
+# config. (string value)
+# Possible values: round-robin, shuffle
+#kombu_failover_strategy=round-robin
+
 # The RabbitMQ broker address where a single node is used.
 # (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_host
 #rabbit_host=localhost
 
-# The RabbitMQ broker port where a single node is used.
-# (integer value)
+# The RabbitMQ broker port where a single node is used. (port
+# value)
+# Possible values: 0-65535
+# Deprecated group/name - [DEFAULT]/rabbit_port
 #rabbit_port=5672
 
 # RabbitMQ HA cluster host:port pairs. (list value)
+# Deprecated group/name - [DEFAULT]/rabbit_hosts
 #rabbit_hosts=$rabbit_host:$rabbit_port
 
 # Connect over SSL for RabbitMQ. (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_use_ssl
 #rabbit_use_ssl=false
 
 # The RabbitMQ userid. (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_userid
 #rabbit_userid=guest
 
 # The RabbitMQ password. (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_password
 #rabbit_password=guest
 
 # The RabbitMQ login method. (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_login_method
 #rabbit_login_method=AMQPLAIN
 
 # The RabbitMQ virtual host. (string value)
+# Deprecated group/name - [DEFAULT]/rabbit_virtual_host
 #rabbit_virtual_host=/
 
 # How frequently to retry connecting with RabbitMQ. (integer
@@ -1447,22 +1892,44 @@
 
 # How long to backoff for between retries when connecting to
 # RabbitMQ. (integer value)
+# Deprecated group/name - [DEFAULT]/rabbit_retry_backoff
 #rabbit_retry_backoff=2
 
+# Maximum interval of RabbitMQ connection retries. Default is
+# 30 seconds. (integer value)
+#rabbit_interval_max=30
+
 # Maximum number of RabbitMQ connection retries. Default is 0
 # (infinite retry count). (integer value)
+# Deprecated group/name - [DEFAULT]/rabbit_max_retries
 #rabbit_max_retries=0
 
-# Use HA queues in RabbitMQ (x-ha-policy: all). If you change
-# this option, you must wipe the RabbitMQ database. (boolean
-# value)
+# Try to use HA queues in RabbitMQ (x-ha-policy: all). If you
+# change this option, you must wipe the RabbitMQ database. In
+# RabbitMQ 3.0, queue mirroring is no longer controlled by the
+# x-ha-policy argument when declaring a queue. If you just
+# want to make sure that all queues (except  those with auto-
+# generated names) are mirrored across all nodes, run:
+# "rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode":
+# "all"}' " (boolean value)
+# Deprecated group/name - [DEFAULT]/rabbit_ha_queues
 #rabbit_ha_queues=false
 
+# Positive integer representing duration in seconds for queue
+# TTL (x-expires). Queues which are unused for the duration of
+# the TTL are automatically deleted. The parameter affects
+# only reply and fanout queues. (integer value)
+# Minimum value: 1
+#rabbit_transient_queues_ttl=1800
+
+# Specifies the number of messages to prefetch. Setting to
+# zero allows unlimited messages. (integer value)
+#rabbit_qos_prefetch_count=0
+
 # Number of seconds after which the Rabbit broker is
-# considered down if heartbeat's keep-alive fails (0 disables
-# the heartbeat, >0 enables it. Enabling heartbeats requires
-# kombu>=3.0.7 and amqp>=1.4.0). EXPERIMENTAL (integer value)
-#heartbeat_timeout_threshold=0
+# considered down if heartbeat's keep-alive fails (0 disable
+# the heartbeat). EXPERIMENTAL (integer value)
+#heartbeat_timeout_threshold=60
 
 # How often times during the heartbeat_timeout_threshold we
 # check the heartbeat. (integer value)
@@ -1470,8 +1937,139 @@
 
 # Deprecated, use rpc_backend=kombu+memory or rpc_backend=fake
 # (boolean value)
+# Deprecated group/name - [DEFAULT]/fake_rabbit
 #fake_rabbit=false
 
+# Maximum number of channels to allow (integer value)
+#channel_max=<None>
+
+# The maximum byte size for an AMQP frame (integer value)
+#frame_max=<None>
+
+# How often to send heartbeats for consumer's connections
+# (integer value)
+#heartbeat_interval=1
+
+# Enable SSL (boolean value)
+#ssl=<None>
+
+# Arguments passed to ssl.wrap_socket (dict value)
+#ssl_options=<None>
+
+# Set socket timeout in seconds for connection's socket
+# (floating point value)
+#socket_timeout=0.25
+
+# Set TCP_USER_TIMEOUT in seconds for connection's socket
+# (floating point value)
+#tcp_user_timeout=0.25
+
+# Set delay for reconnection to some host which has connection
+# error (floating point value)
+#host_connection_reconnect_delay=0.25
+
+# Maximum number of connections to keep queued. (integer
+# value)
+#pool_max_size=10
+
+# Maximum number of connections to create above
+# `pool_max_size`. (integer value)
+#pool_max_overflow=0
+
+# Default number of seconds to wait for a connections to
+# available (integer value)
+#pool_timeout=30
+
+# Lifetime of a connection (since creation) in seconds or None
+# for no recycling. Expired connections are closed on acquire.
+# (integer value)
+#pool_recycle=600
+
+# Threshold at which inactive (since release) connections are
+# considered stale in seconds or None for no staleness. Stale
+# connections are closed on acquire. (integer value)
+#pool_stale=60
+
+# Persist notification messages. (boolean value)
+#notification_persistence=false
+
+# Exchange name for for sending notifications (string value)
+#default_notification_exchange=${control_exchange}_notification
+
+# Max number of not acknowledged message which RabbitMQ can
+# send to notification listener. (integer value)
+#notification_listener_prefetch_count=100
+
+# Reconnecting retry count in case of connectivity problem
+# during sending notification, -1 means infinite retry.
+# (integer value)
+#default_notification_retry_attempts=-1
+
+# Reconnecting retry delay in case of connectivity problem
+# during sending notification message (floating point value)
+#notification_retry_delay=0.25
+
+# Time to live for rpc queues without consumers in seconds.
+# (integer value)
+#rpc_queue_expiration=60
+
+# Exchange name for sending RPC messages (string value)
+#default_rpc_exchange=${control_exchange}_rpc
+
+# Exchange name for receiving RPC replies (string value)
+#rpc_reply_exchange=${control_exchange}_rpc_reply
+
+# Max number of not acknowledged message which RabbitMQ can
+# send to rpc listener. (integer value)
+#rpc_listener_prefetch_count=100
+
+# Max number of not acknowledged message which RabbitMQ can
+# send to rpc reply listener. (integer value)
+#rpc_reply_listener_prefetch_count=100
+
+# Reconnecting retry count in case of connectivity problem
+# during sending reply. -1 means infinite retry during
+# rpc_timeout (integer value)
+#rpc_reply_retry_attempts=-1
+
+# Reconnecting retry delay in case of connectivity problem
+# during sending reply. (floating point value)
+#rpc_reply_retry_delay=0.25
+
+# Reconnecting retry count in case of connectivity problem
+# during sending RPC message, -1 means infinite retry. If
+# actual retry attempts in not 0 the rpc request could be
+# processed more then one time (integer value)
+#default_rpc_retry_attempts=-1
+
+# Reconnecting retry delay in case of connectivity problem
+# during sending RPC message (floating point value)
+#rpc_retry_delay=0.25
+
+
+[oslo_middleware]
+
+#
+# Options defined in oslo.middleware
+#
+
+# The maximum body size for each  request, in bytes. (integer
+# value)
+# Deprecated group/name - [DEFAULT]/osapi_max_request_body_size
+# Deprecated group/name - [DEFAULT]/max_request_body_size
+#max_request_body_size=114688
+
+
+#
+# Options defined in oslo.middleware
+#
+
+# The HTTP Header that will be used to determine what the
+# original request protocol scheme was, even if it was hidden
+# by an SSL termination proxy. (string value)
+# This option is deprecated and planned for removal in a future release.
+#secure_proxy_ssl_header=X-Forwarded-Proto
+
 
 [oslo_policy]
 
@@ -1480,10 +2078,12 @@
 #
 
 # The JSON file that defines policies. (string value)
+# Deprecated group/name - [DEFAULT]/policy_file
 #policy_file=policy.json
 
 # Default rule. Enforced when a requested rule is not found.
 # (string value)
+# Deprecated group/name - [DEFAULT]/policy_default_rule
 #policy_default_rule=default
 
 # Directories where policy configuration files are stored.
@@ -1492,9 +2092,20 @@
 # file defined by policy_file must exist for these directories
 # to be searched.  Missing or empty directories are ignored.
 # (multi valued)
+# Deprecated group/name - [DEFAULT]/policy_dirs
 #policy_dirs=policy.d
 
 
+[oslo_versionedobjects]
+
+#
+# Options defined in oslo.versionedobjects
+#
+
+# Make exception message format errors fatal (boolean value)
+#fatal_exception_format_errors=false
+
+
 [pxe]
 
 #
@@ -1509,11 +2120,13 @@
 # is created. (string value)
 #default_ephemeral_format=ext4
 
-# Directory where images are stored on disk. (string value)
+# On the ironic-conductor node, directory where images are
+# stored on disk. (string value)
 #images_path=/var/lib/ironic/images/
 
-# Directory where master instance images are stored on disk.
-# (string value)
+# On the ironic-conductor node, directory where master
+# instance images are stored on disk. Setting to <None>
+# disables image caching. (string value)
 #instance_master_path=/var/lib/ironic/master_images
 
 # Maximum size (in MiB) of cache for master images, including
@@ -1533,22 +2146,25 @@
 # Options defined in ironic.drivers.modules.pxe
 #
 
-# Template file for PXE configuration. (string value)
+# On ironic-conductor node, template file for PXE
+# configuration. (string value)
 #pxe_config_template=$pybasedir/drivers/modules/pxe_config.template
 
-# Template file for PXE configuration for UEFI boot loader.
-# (string value)
+# On ironic-conductor node, template file for PXE
+# configuration for UEFI boot loader. (string value)
 #uefi_pxe_config_template=$pybasedir/drivers/modules/elilo_efi_pxe_config.template
 
-# IP address of Ironic compute node's tftp server. (string
+# IP address of ironic-conductor node's TFTP server. (string
 # value)
 #tftp_server=$my_ip
 
-# Ironic compute node's tftp root path. (string value)
+# ironic-conductor node's TFTP root path. The ironic-conductor
+# must have read/write access to this path. (string value)
 #tftp_root=/tftpboot
 
-# Directory where master tftp images are stored on disk.
-# (string value)
+# On ironic-conductor node, directory where master TFTP images
+# are stored on disk. Setting to <None> disables image
+# caching. (string value)
 #tftp_master_path=/tftpboot/master_images
 
 # Bootfile DHCP parameter. (string value)
@@ -1557,19 +2173,22 @@
 # Bootfile DHCP parameter for UEFI boot mode. (string value)
 #uefi_pxe_bootfile_name=elilo.efi
 
-# Ironic compute node's HTTP server URL. Example:
-# http://192.1.2.3:8080 (string value)
-#http_url=<None>
-
-# Ironic compute node's HTTP root path. (string value)
-#http_root=/httpboot
-
 # Enable iPXE boot. (boolean value)
 #ipxe_enabled=false
 
-# The path to the main iPXE script file. (string value)
+# On ironic-conductor node, the path to the main iPXE script
+# file. (string value)
 #ipxe_boot_script=$pybasedir/drivers/modules/boot.ipxe
 
+# Timeout value (in seconds) for downloading an image via
+# iPXE. Defaults to 0 (no timeout) (integer value)
+#ipxe_timeout=0
+
+# The IP version that will be used for PXE booting. Defaults
+# to 4. EXPERIMENTAL (string value)
+# Possible values: 4, 6
+#ip_version=4
+
 
 [seamicro]
 
@@ -1595,6 +2214,11 @@
 # value)
 #power_timeout=10
 
+# Time (in seconds) to sleep between when rebooting (powering
+# off and on again) (integer value)
+# Minimum value: 0
+#reboot_delay=0
+
 
 [solaris_ipmi]
 
@@ -1616,9 +2240,49 @@
 # Options defined in ironic.drivers.modules.ssh
 #
 
-# libvirt uri (string value)
+# libvirt URI. (string value)
 #libvirt_uri=qemu:///system
 
+# Number of attempts to try to get VM name used by the host
+# that corresponds to a node's MAC address. (integer value)
+#get_vm_name_attempts=3
+
+# Number of seconds to wait between attempts to get VM name
+# used by the host that corresponds to a node's MAC address.
+# (integer value)
+#get_vm_name_retry_interval=3
+
+
+[ssl]
+
+#
+# Options defined in oslo.service.sslutils
+#
+
+# CA certificate file to use to verify connecting clients.
+# (string value)
+# Deprecated group/name - [DEFAULT]/ssl_ca_file
+#ca_file=<None>
+
+# Certificate file to use when starting the server securely.
+# (string value)
+# Deprecated group/name - [DEFAULT]/ssl_cert_file
+#cert_file=<None>
+
+# Private key file to use when starting the server securely.
+# (string value)
+# Deprecated group/name - [DEFAULT]/ssl_key_file
+#key_file=<None>
+
+# SSL version to use (valid only if SSL enabled). Valid values
+# are TLSv1 and SSLv23. SSLv2, SSLv3, TLSv1_1, and TLSv1_2 may
+# be available on some distributions. (string value)
+#version=<None>
+
+# Sets the list of available ciphers. value should be a string
+# in the OpenSSL cipher list format. (string value)
+#ciphers=<None>
+
 
 [swift]
 
@@ -1637,8 +2301,9 @@
 # Options defined in ironic.drivers.modules.virtualbox
 #
 
-# Port on which VirtualBox web service is listening. (integer
+# Port on which VirtualBox web service is listening. (port
 # value)
+# Possible values: 0-65535
 #port=18083
 
 
--- a/components/openstack/ironic/ironic.license	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/ironic.license	Wed Sep 07 14:48:42 2016 -0700
@@ -1,5 +1,4 @@
-The following applies to all products licensed under the Apache 2.0 License:
-LICENSE:
+The following attribution text was taken from Component ironic Version 5.1.2
 
                                  Apache License
                            Version 2.0, January 2004
@@ -175,1080 +174,3 @@
       defend, and hold each Contributor harmless for any liability
       incurred by, or claims asserted against, such Contributor by reason
       of your accepting any such warranty or additional liability.
-============================================================
-ironic/conductor/utils.py
-ironic/objects/node.py
-ironic/objects/port.py
-ironic/objects/chassis.py
-ironic/api/controllers/v1/__init__.py
-ironic/api/controllers/base.py
-ironic/api/config.py
-ironic/api/middleware/auth_token.py
-ironic/api/middleware/__init__.py
-ironic/api/app.wsgi
-ironic/db/sqlalchemy/alembic/env.py
-ironic/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py
-ironic/db/sqlalchemy/alembic/versions/31baaf680d2b_add_node_instance_info.py
-ironic/db/sqlalchemy/alembic/versions/3cb628139ea4_nodes_add_console_enabled.py
-ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py
-ironic/db/sqlalchemy/alembic/versions/21b331f883ef_add_provision_updated_at.py
-ironic/drivers/drac.py
-ironic/drivers/modules/drac/resource_uris.py
-ironic/drivers/modules/drac/power.py
-ironic/drivers/modules/drac/common.py
-ironic/drivers/modules/drac/client.py
-ironic/drivers/modules/seamicro.py
-ironic/tests/test_driver_factory.py
-ironic/tests/objects/test_chassis.py
-ironic/tests/objects/test_node.py
-ironic/tests/objects/test_port.py
-ironic/tests/db/sqlalchemy/test_types.py
-ironic/tests/test_keystone.py
-ironic/tests/drivers/test_seamicro.py
-ironic/tests/drivers/drac/test_client.py
-ironic/tests/drivers/drac/test_common.py
-ironic/tests/drivers/drac/test_power.py
-ironic/tests/conductor/test_conductor_utils.py
-ironic/tests/api/v1/test_ports.py
-ironic/tests/api/v1/test_chassis.py
-ironic/tests/api/v1/test_nodes.py
-ironic/tests/api/test_acl.py
-ironic/tests/api/test_hooks.py
-ironic/tests/api/utils.py
-ironic/common/keystone.py
-ironic/migrate_nova/migrate_db.py
-ironic/common/context.py
-ironic/openstack/common/periodic_task.py
-etc/apache2/ironic
-
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/exception.py
-ironic/db/sqlalchemy/migration.py
-ironic/db/migration.py
-ironic/tests/base.py
-ironic/tests/__init__.py
-ironic/tests/conf_fixture.py
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/images.py
-ironic/openstack/common/imageutils.py
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-# Copyright (c) 2010 Citrix Systems, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/safe_utils.py
-ironic/openstack/common/loopingcall.py
-ironic/openstack/common/service.py
-ironic/openstack/common/jsonutils.py
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# Copyright 2011 Justin Santa Barbara
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/utils.py
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# Copyright 2011 Justin Santa Barbara
-# Copyright (c) 2012 NTT DOCOMO, INC.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/config.py
-ironic/common/paths.py
-ironic/netconf.py
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-# Copyright 2012 Red Hat, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/matchers.py
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# Copyright 2012 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-============================================================
-ironic/common/glance_service/base_image_service.py
-ironic/common/image_service.py
-
-# Copyright 2010 OpenStack Foundation
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/apiclient/base.py
-
-# Copyright 2010 Jacob Kaplan-Moss
-# Copyright 2011 OpenStack Foundation
-# Copyright 2012 Grid Dynamics
-# Copyright 2013 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/apiclient/exceptions.py
-
-# Copyright 2010 Jacob Kaplan-Moss
-# Copyright 2011 Nebula, Inc.
-# Copyright 2013 Alessio Ababilov
-# Copyright 2013 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/db/sqlalchemy/test_migrations.py
-
-# Copyright 2010-2011 OpenStack Foundation
-# Copyright 2012-2013 IBM Corp.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/version.py
-ironic/common/policy.py
-ironic/openstack/common/fileutils.py
-ironic/openstack/common/lockutils.py
-ironic/openstack/common/strutils.py
-ironic/openstack/common/context.py
-ironic/openstack/common/local.py
-ironic/openstack/common/importutils.py
-ironic/openstack/common/processutils.py
-ironic/openstack/common/timeutils.py
-
-# Copyright 2011 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/stubs.py
-
-# Copyright (c) 2011 Citrix Systems, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/excutils.py
-
-# Copyright 2011 OpenStack Foundation.
-# Copyright 2012, Red Hat, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/log.py
-# Copyright 2011 OpenStack Foundation.
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/test_utils.py
-
-# Copyright 2011 Justin Santa Barbara
-# Copyright 2012 Hewlett-Packard Development Company, L.P.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/network_utils.py
-ironic/openstack/common/policy.py
-ironic/tests/fake_policy.py
-
-# Copyright (c) 2012 OpenStack Foundation.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/policy_fixture.py
-
-# Copyright 2012 Hewlett-Packard Development Company, L.P.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-============================================================
-ironic/openstack/common/threadgroup.py
-ironic/openstack/common/cliutils.py
-
-# Copyright 2012 Red Hat, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/uuidutils.py
-
-# Copyright (c) 2012 Intel Corporation.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/service.py
-
-# Copyright © 2012 eNovance <[email protected]>
-#
-# Author: Julien Danjou <[email protected]>
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-============================================================
-ironic/api/controllers/root.py
-ironic/api/acl.py
-ironic/api/hooks.py
-ironic/api/middleware/parsable_error.py
-ironic/api/app.py
-
-# Copyright © 2012 New Dream Network, LLC (DreamHost)
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-============================================================
-ironic/tests/db/base.py
-ironic/tests/db/__init__.py
-ironic/migrate_nova/nova_models.py
-ironic/drivers/modules/deploy_utils.py
-
-# Copyright (c) 2012 NTT DOCOMO, INC.
-# All Rights Reserved.
-# flake8: noqa
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/eventlet_backdoor.py
-
-# Copyright (c) 2012 OpenStack Foundation.
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/config/generator.py
-
-# Copyright 2012 SINA Corporation
-# Copyright 2014 Cisco Systems, Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/states.py
-ironic/migrate_nova/nova_baremetal_states.py
-
-# Copyright (c) 2012 NTT DOCOMO, INC.
-# Copyright 2010 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/nova/scheduler/ironic_host_manager.py
-
-# Copyright (c) 2012 NTT DOCOMO, INC.
-# Copyright (c) 2011-2014 OpenStack Foundation
-# Copyright 2014 Red Hat, Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/drivers/test_deploy_utils.py
-
-#    Copyright (c) 2012 NTT DOCOMO, INC.
-#    Copyright 2011 OpenStack Foundation
-#    Copyright 2011 Ilya Alekseyev
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/glance_service/service_utils.py
-
-# Copyright 2012 OpenStack Foundation
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/drivers/modules/ipmitool.py
-ironic/tests/drivers/test_ipmitool.py
-
-# Copyright 2012 Hewlett-Packard Development Company, L.P.
-# Copyright (c) 2012 NTT DOCOMO, INC.
-# Copyright 2014 International Business Machines Corporation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/gettextutils.py
-
-# Copyright 2012 Red Hat, Inc.
-# Copyright 2013 IBM Corp.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/systemd.py
-
-# Copyright 2012-2014 Red Hat, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/conductor/task_manager.py
-ironic/conductor/rpcapi.py
-ironic/cmd/api.py
-ironic/cmd/conductor.py
-ironic/cmd/dbsync.py
-ironic/cmd/__init__.py
-ironic/objects/conductor.py
-ironic/common/glance_service/service.py
-ironic/common/glance_service/v2/image_service.py
-ironic/common/glance_service/v1/image_service.py
-ironic/common/hash_ring.py
-ironic/drivers/fake.py
-ironic/drivers/pxe.py
-ironic/drivers/base.py
-ironic/drivers/modules/iscsi_deploy.py
-ironic/drivers/modules/pxe.py
-ironic/drivers/modules/fake.py
-ironic/drivers/modules/ssh.py
-ironic/api/__init__.py
-ironic/api/controllers/v1/node.py
-ironic/db/api.py
-ironic/db/sqlalchemy/models.py
-ironic/db/sqlalchemy/api.py
-ironic/nova/virt/ironic/__init__.py
-ironic/tests/test_images.py
-ironic/tests/objects/test_conductor.py
-ironic/tests/db/utils.py
-ironic/tests/db/test_chassis.py
-ironic/tests/db/test_conductor.py
-ironic/tests/db/test_nodes.py
-ironic/tests/db/test_ports.py
-ironic/tests/test_glance_service.py
-ironic/tests/test_swift.py
-ironic/tests/test_hash_ring.py
-ironic/tests/drivers/test_iscsi_deploy.py
-ironic/tests/drivers/test_pxe.py
-ironic/tests/drivers/test_fake.py
-ironic/tests/drivers/test_utils.py
-ironic/tests/drivers/test_ssh.py
-ironic/tests/conductor/test_utils.py
-ironic/tests/conductor/test_task_manager.py
-ironic/tests/conductor/utils.py
-ironic/tests/conductor/test_rpcapi.py
-ironic/tests/api/base.py
-ironic/tests/api/test_base.py
-ironic/tests/test_dbsync.py
-ironic/openstack/common/__init__.py
-setup.py
-
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/objects/__init__.py
-ironic/objects/base.py
-ironic/objects/utils.py
-ironic/drivers/modules/ipminative.py
-ironic/tests/objects/test_objects.py
-ironic/tests/drivers/test_ipminative.py
-
-#    Copyright 2013 IBM Corp.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/driver_factory.py
-ironic/api/controllers/v1/collection.py
-ironic/api/controllers/v1/state.py
-ironic/api/controllers/v1/types.py
-ironic/api/controllers/v1/utils.py
-ironic/api/controllers/v1/chassis.py
-ironic/api/controllers/v1/driver.py
-ironic/api/controllers/link.py
-ironic/tests/test_policy.py
-ironic/tests/api/v1/test_types.py
-ironic/tests/api/v1/test_drivers.py
-ironic/tests/api/v1/test_utils.py
-ironic/tests/api/test_root.py
-
-# Copyright 2013 Red Hat, Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/versionutils.py
-ironic/openstack/common/apiclient/fake_client.py
-
-# Copyright (c) 2013 OpenStack Foundation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/api/controllers/v1/port.py
-
-# Copyright 2013 UnitedStack Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/drivers/modules/snmp.py
-ironic/tests/drivers/test_snmp.py
-
-# Copyright 2013,2014 Cray Inc
-#
-# Authors: David Hewson <[email protected]>
-#          Stig Telfer <[email protected]>
-#          Mark Goddard <[email protected]>
-#
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/conductor/manager.py
-ironic/tests/conductor/test_manager.py
-
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-# Copyright 2013 International Business Machines Corporation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/openstack/common/apiclient/auth.py
-
-# Copyright 2013 OpenStack Foundation
-# Copyright 2013 Spanish National Research Council.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-tools/install_venv_common.py
-
-# Copyright 2013 OpenStack Foundation
-# Copyright 2013 IBM Corp.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/swift.py
-ironic/tests/dhcp/test_neutron.py
-ironic/dhcp/neutron.py
-
-# Copyright 2014 OpenStack Foundation
-# All Rights Reserved
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/common/network.py
-ironic/common/pxe_utils.py
-ironic/common/dhcp_factory.py
-ironic/drivers/modules/agent_client.py
-ironic/drivers/modules/agent.py
-ironic/drivers/agent.py
-ironic/tests/dhcp/test_factory.py
-ironic/tests/objects/utils.py
-ironic/tests/test_network.py
-ironic/tests/test_pxe_utils.py
-ironic/tests/drivers/test_agent_client.py
-ironic/tests/drivers/test_agent.py
-ironic/dhcp/base.py
-ironic/dhcp/none.py
-
-# Copyright 2014 Rackspace, Inc.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/__init__.py
-ironic/common/i18n.py
-ironic/drivers/utils.py
-ironic/drivers/modules/ilo/power.py
-ironic/drivers/modules/ilo/deploy.py
-ironic/drivers/modules/ilo/common.py
-ironic/drivers/ilo.py
-ironic/tests/drivers/third_party_driver_mocks.py
-ironic/tests/drivers/__init__.py
-ironic/tests/drivers/ilo/test_common.py
-ironic/tests/drivers/ilo/test_deploy.py
-ironic/tests/drivers/ilo/test_power.py
-
-# Copyright (c) 2014 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-============================================================
-ironic/common/disk_partitioner.py
-ironic/common/boot_devices.py
-ironic/common/rpc.py
-ironic/drivers/modules/iboot.py
-ironic/drivers/modules/drac/management.py
-ironic/db/sqlalchemy/alembic/versions/3bea56f25597_add_unique_constraint_to_instance_uuid.py
-ironic/tests/test_disk_partitioner.py
-ironic/tests/drivers/test_image_cache.py
-ironic/tests/drivers/test_iboot.py
-ironic/tests/drivers/drac/utils.py
-ironic/tests/drivers/drac/test_management.py
-
-# Copyright 2014 Red Hat, Inc.
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/tests/drivers/test_console_utils.py
-ironic/drivers/modules/console_utils.py
-
-# Copyright 2014 International Business Machines Corporation
-# All Rights Reserved.
-#
-#    Licensed under the Apache License, Version 2.0 (the "License"); you may
-#    not use this file except in compliance with the License. You may obtain
-#    a copy of the License at
-#
-#         http://www.apache.org/licenses/LICENSE-2.0
-#
-#    Unless required by applicable law or agreed to in writing, software
-#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-#    License for the specific language governing permissions and limitations
-#    under the License.
-
-============================================================
-ironic/drivers/modules/image_cache.py
-ironic/nova/virt/ironic/driver.py
-ironic/nova/compute/manager.py
-
-# Copyright 2014 Red Hat, Inc.
-# Copyright 2013 Hewlett-Packard Development Company, L.P.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-============================================================
-ironic/locale/ironic-log-error.pot
-ironic/locale/ironic-log-critical.pot
-ironic/locale/ironic-log-info.pot
-ironic/locale/ironic-log-warning.pot
-
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the ironic project.
-# FIRST AUTHOR <EMAIL@ADDRESS>, 2014.
-
-============================================================
-ironic/locale/fr/LC_MESSAGES/ironic-log-critical.po
-
-# Copyright (C) 2014 ORGANIZATION
-# This file is distributed under the same license as the ironic project.
-#
-# Translators:
-# Maxime COQUEREL <[email protected]>, 2014
-# Andrew_Melim <[email protected]>, 2014
-
-============================================================
--- a/components/openstack/ironic/ironic.p5m	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/ironic.p5m	Wed Sep 07 14:48:42 2016 -0700
@@ -28,7 +28,7 @@
 set name=pkg.summary value="OpenStack Ironic (Bare Metal Service)"
 set name=pkg.description \
     value="OpenStack Ironic provides a service to provision bare metal machines instead of virtual machines. By default, it will use PXE and IPMI in concert to provision and turn on/off machines, but also supports vendor-specific plugins which may implement additional functionality."
-set name=pkg.human-version value="Kilo $(COMPONENT_VERSION)"
+set name=pkg.human-version value="Mitaka $(COMPONENT_VERSION)"
 set name=com.oracle.info.description \
     value="Ironic, the OpenStack bare metal provisioning service"
 set name=com.oracle.info.tpno value=$(TPNO)
@@ -42,7 +42,7 @@
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=openstack.upgrade-id reboot-needed=true value=$(COMPONENT_BE_VERSION)
 set name=org.opensolaris.arc-caseid value=PSARC/2013/350 value=PSARC/2015/172 \
-    value=PSARC/2015/535
+    value=PSARC/2015/535 value=PSARC/2016/455
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 #
 dir  path=etc/ironic owner=ironic group=ironic mode=0700
@@ -97,6 +97,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/controllers/v1/state.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/controllers/v1/types.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/controllers/v1/utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/controllers/v1/versions.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/expose.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/hooks.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/api/middleware/__init__.py
@@ -109,9 +110,10 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/boot_devices.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/config_generator/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/config_generator/generator.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/context.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/dhcp_factory.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/disk_partitioner.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/driver_factory.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/exception.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/fsm.py
@@ -134,6 +136,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/paths.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/policy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/pxe_utils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/raid.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/rpc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/safe_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/service.py
@@ -141,6 +144,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/swift.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/common/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/conductor/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/conductor/base_manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/conductor/manager.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/conductor/rpcapi.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/conductor/task_manager.py
@@ -163,9 +167,14 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/3bea56f25597_add_unique_constraint_to_instance_uuid.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/3cb628139ea4_nodes_add_console_enabled.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/48d6c242bb9b_add_node_tags.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/4f399b21ae71_add_node_clean_step.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/516faf1bb9b1_resizing_column_nodes_driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/5674c57409b9_replace_nostate_with_available.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/5ea1b0d310e_added_port_group_table_and_altered_ports.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/789acc877671_add_raid_config.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/bb59b63f55a_add_node_driver_internal_info.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/alembic/versions/f6fdb920c182_set_pxe_enabled_true.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/migration.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/db/sqlalchemy/models.py
@@ -179,6 +188,7 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/drac.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/fake.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/ilo.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/irmc.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/agent.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/agent_base_vendor.py
@@ -191,78 +201,99 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/amt/resource_uris.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/amt/vendor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/boot.ipxe
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/cimc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/cimc/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/cimc/management.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/cimc/power.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/console_utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/deploy_utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/discoverd.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/client.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/bios.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/job.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/management.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/power.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/resource_uris.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/drac/vendor_passthru.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/elilo_efi_pxe_config.template
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/fake.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/iboot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/boot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/console.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/deploy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/firmware_processor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/inspect.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/management.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/power.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ilo/vendor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/image_cache.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/inspector.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ipminative.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ipmitool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ipxe_config.template
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/boot.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/inspect.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/management.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/irmc/power.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/iscsi_deploy.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/master_grub_cfg.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/msftocs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/msftocs/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/msftocs/management.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/msftocs/msftocsclient.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/msftocs/power.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/oneview/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/oneview/common.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/oneview/management.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/oneview/power.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/oneview/vendor.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/pxe.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/pxe_config.template
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/pxe_grub_config.template
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/seamicro.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/snmp.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/solaris_ipmitool.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ssh.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ucs/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ucs/helper.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ucs/management.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/ucs/power.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/virtualbox.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/modules/wol.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/oneview.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/pxe.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/raid_config_schema.json
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/solaris.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/drivers/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/netconf.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/compute/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/compute/manager.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/scheduler/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/scheduler/ironic_host_manager.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/virt/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/virt/ironic/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/nova/virt/ironic/driver.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/base.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/chassis.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/conductor.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/fields.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/node.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/port.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/_i18n.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/config/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/config/generator.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/eventlet_backdoor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/fileutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/gettextutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/imageutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/importutils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/local.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/log.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/loopingcall.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/periodic_task.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/service.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/systemd.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/threadgroup.py
-file path=usr/lib/python$(PYVER)/vendor-packages/ironic/openstack/common/versionutils.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic/objects/portgroup.py
 file path=usr/lib/python$(PYVER)/vendor-packages/ironic/version.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/README.rst
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/clients.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/common/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/common/waiters.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/config.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/plugin.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/baremetal/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/baremetal/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/baremetal/v1/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/baremetal/v1/json/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py
 dir  path=var/lib/ironic owner=ironic group=ironic mode=0700
 #
 group groupname=ironic gid=91
@@ -271,6 +302,10 @@
 #
 license ironic.license license="Apache 2.0"
 
+# To upgrade to the Mitaka version, the Kilo version of the package
+# must be on the system
+depend type=origin fmri=cloud/openstack/[email protected] root-image=true
+
 # force a dependency on package delivering aimanifest(1M)
 depend type=require fmri=__TBD pkg.debug.depend.file=usr/bin/aimanifest
 
@@ -295,21 +330,21 @@
 # force a dependency on alembic; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/alembic-$(PYV)
 
-# force a dependency on babel; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/babel-$(PYV)
+# force a dependency on automaton; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/automaton-$(PYV)
 
 # force a dependency on eventlet; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/eventlet-$(PYV)
 
+# force a dependency on futurist; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/futurist-$(PYV)
+
 # force a dependency on glanceclient; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/glanceclient-$(PYV)
 
-# force a dependency on greenlet; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/greenlet-$(PYV)
-
-# force a dependency on iso8601; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/iso8601-$(PYV)
+# force a dependency on ironic-lib; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/ironic-lib-$(PYV)
 
 # force a dependency on jinja2; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/jinja2-$(PYV)
@@ -317,6 +352,9 @@
 # force a dependency on jsonpatch; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/jsonpatch-$(PYV)
 
+# force a dependency on jsonschema; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/jsonschema-$(PYV)
+
 # force a dependency on keystoneclient; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/keystoneclient-$(PYV)
@@ -352,10 +390,17 @@
 # force a dependency on oslo.i18n; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/oslo.i18n-$(PYV)
 
+# force a dependency on oslo.log; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/oslo.log-$(PYV)
+
 # force a dependency on oslo.messaging; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/oslo.messaging-$(PYV)
 
+# force a dependency on oslo.middleware; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.middleware-$(PYV)
+
 # force a dependency on oslo.policy; pkgdepend work is needed to flush this
 # out.
 depend type=require fmri=library/python/oslo.policy-$(PYV)
@@ -364,9 +409,17 @@
 # this out.
 depend type=require fmri=library/python/oslo.serialization-$(PYV)
 
+# force a dependency on oslo.service; pkgdepend work is needed to flush this
+# out.
+depend type=require fmri=library/python/oslo.service-$(PYV)
+
 # force a dependency on oslo.utils; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/oslo.utils-$(PYV)
 
+# force a dependency on oslo.versionedobjects; pkgdepend work is needed to flush
+# this out.
+depend type=require fmri=library/python/oslo.versionedobjects-$(PYV)
+
 # force a dependency on paramiko; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/paramiko-$(PYV)
 
@@ -376,9 +429,15 @@
 # force a dependency on pecan; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pecan-$(PYV)
 
+# force a dependency on psutil; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/psutil-$(PYV)
+
 # force a dependency on pysendfile; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pysendfile-$(PYV)
 
+# force a dependency on pytz; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/pytz-$(PYV)
+
 # force a dependency on requests; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/requests-$(PYV)
 
@@ -388,9 +447,6 @@
 # force a dependency on scp; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/scp-$(PYV)
 
-# force a dependency on setuptools; pkgdepend work is needed to flush this out.
-depend type=require fmri=library/python/setuptools-$(PYV)
-
 # force a dependency on six; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/six-$(PYV)
 
--- a/components/openstack/ironic/patches/01-requirements.patch	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/patches/01-requirements.patch	Wed Sep 07 14:48:42 2016 -0700
@@ -1,75 +1,22 @@
 In-house patch to remove unnecessary dependencies from Ironic's
 requirements files. The specific reasons are as follows:
 
-lxml			Not applicable
-
-oslo.rootwrap		Not applicable to Solaris
+websockify  Not applicable
 
-posix-ipc		Not applicable
-
-sqlalchemy-migrate	Not applicable
-
-websockify		Not applicable
+oslo.rootwrap Not applicable to Solaris
 
---- ironic-2015.1.2/ironic.egg-info/requires.txt.~1~	2015-10-13 10:59:16.000000000 -0700
-+++ ironic-2015.1.2/ironic.egg-info/requires.txt	2016-02-01 20:03:06.190153642 -0800
-@@ -2,10 +2,8 @@ pbr!=0.7,<1.0,>=0.6
- SQLAlchemy<=0.9.99,>=0.9.7
- alembic<0.8.1,>=0.7.2
- eventlet!=0.17.0,>=0.16.1
--lxml>=2.3
- WebOb>=1.2.3
- greenlet>=0.3.2
--sqlalchemy-migrate!=0.9.8,<0.10.0,>=0.9.5
- netaddr>=0.7.12
- paramiko>=1.13.0
- iso8601>=0.1.9
-@@ -15,12 +13,10 @@ python-keystoneclient<1.4.0,>=1.2.0
- python-swiftclient<2.5.0,>=2.2.0
- stevedore<1.4.0,>=1.3.0 # Apache-2.0
- pysendfile==2.0.0
--websockify<0.7,>=0.6.0
- oslo.concurrency<1.9.0,>=1.8.2 # Apache-2.0
- oslo.config<1.10.0,>=1.9.3 # Apache-2.0
- oslo.context<0.3.0,>=0.2.0 # Apache-2.0
- oslo.db<1.8.0,>=1.7.0 # Apache-2.0
--oslo.rootwrap<1.7.0,>=1.6.0 # Apache-2.0
- oslo.i18n<1.6.0,>=1.5.0 # Apache-2.0
- oslo.policy<0.4.0,>=0.3.1 # Apache-2.0
- oslo.serialization<1.5.0,>=1.4.0 # Apache-2.0
-@@ -34,4 +30,3 @@ Jinja2>=2.6 # BSD License3 clause
- keystonemiddleware<1.6.0,>=1.5.0
- oslo.messaging<1.9.0,>=1.8.0 # Apache-2.0
- retrying!=1.3.0,>=1.2.3 # Apache-2.0
--posix-ipc
---- ironic-2015.1.2/requirements.txt.~1~	2015-10-13 10:53:40.000000000 -0700
-+++ ironic-2015.1.2/requirements.txt	2016-02-01 20:03:53.251275842 -0800
-@@ -5,10 +5,8 @@ pbr!=0.7,<1.0,>=0.6
- SQLAlchemy<=0.9.99,>=0.9.7
- alembic<0.8.1,>=0.7.2
- eventlet!=0.17.0,>=0.16.1
--lxml>=2.3
- WebOb>=1.2.3
- greenlet>=0.3.2
--sqlalchemy-migrate!=0.9.8,<0.10.0,>=0.9.5
- netaddr>=0.7.12
- paramiko>=1.13.0
- iso8601>=0.1.9
-@@ -18,12 +16,10 @@ python-keystoneclient<1.4.0,>=1.2.0
- python-swiftclient<2.5.0,>=2.2.0
- stevedore<1.4.0,>=1.3.0 # Apache-2.0
- pysendfile==2.0.0
--websockify<0.7,>=0.6.0
- oslo.concurrency<1.9.0,>=1.8.2 # Apache-2.0
- oslo.config<1.10.0,>=1.9.3 # Apache-2.0
- oslo.context<0.3.0,>=0.2.0 # Apache-2.0
- oslo.db<1.8.0,>=1.7.0 # Apache-2.0
--oslo.rootwrap<1.7.0,>=1.6.0 # Apache-2.0
- oslo.i18n<1.6.0,>=1.5.0 # Apache-2.0
- oslo.policy<0.4.0,>=0.3.1 # Apache-2.0
- oslo.serialization<1.5.0,>=1.4.0 # Apache-2.0
-@@ -37,4 +33,3 @@ Jinja2>=2.6 # BSD License (3 clause)
- keystonemiddleware<1.6.0,>=1.5.0
- oslo.messaging<1.9.0,>=1.8.0 # Apache-2.0
- retrying!=1.3.0,>=1.2.3 # Apache-2.0
--posix-ipc
+--- ironic-5.1.0/requirements.txt.~1~	2016-03-31 01:16:58.699655912 -0800
++++ ironic-5.1.0/requirements.txt	2016-03-31 01:17:28.642059472 -0800
+@@ -18,12 +18,10 @@ python-swiftclient>=2.2.0 # Apache-2.0
+ pytz>=2013.6 # MIT
+ stevedore>=1.5.0 # Apache-2.0
+ pysendfile>=2.0.0 # MIT
+-websockify>=0.6.1 # LGPLv3
+ oslo.concurrency>=3.5.0 # Apache-2.0
+ oslo.config>=3.7.0 # Apache-2.0
+ oslo.context>=0.2.0 # Apache-2.0
+ oslo.db>=4.1.0 # Apache-2.0
+-oslo.rootwrap>=2.0.0 # Apache-2.0
+ oslo.i18n>=2.1.0 # Apache-2.0
+ oslo.log>=1.14.0 # Apache-2.0
+ oslo.middleware>=3.0.0 # Apache-2.0
--- a/components/openstack/ironic/patches/02-driver-entry.patch	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/patches/02-driver-entry.patch	Wed Sep 07 14:48:42 2016 -0700
@@ -1,12 +1,12 @@
 Add solaris driver to list of available drivers
 
---- ORIGINAL/setup.cfg	2015-06-02 17:45:44.579172327 +0100
-+++ ironic-2015.1.0/setup.cfg	2015-06-02 17:48:37.552116117 +0100
-@@ -63,6 +63,7 @@
- 	pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
- 	pxe_irmc = ironic.drivers.pxe:PXEAndIRMCDriver
- 	pxe_amt = ironic.drivers.pxe:PXEAndAMTDriver
+--- ironic-5.1.0/setup.cfg.~2~	2016-03-31 01:17:58.933550758 -0800
++++ ironic-5.1.0/setup.cfg	2016-03-31 01:19:08.019805547 -0800
+@@ -81,6 +81,7 @@ ironic.drivers =
+ 	pxe_wol = ironic.drivers.pxe:PXEAndWakeOnLanDriver
+ 	pxe_iscsi_cimc = ironic.drivers.pxe:PXEAndCIMCDriver
+ 	pxe_agent_cimc = ironic.drivers.agent:AgentAndCIMCDriver
 +	solaris = ironic.drivers.solaris:SolarisAndIPMIToolDriver
  ironic.database.migration_backend = 
  	sqlalchemy = ironic.db.sqlalchemy.migration
- 
+ tempest.test_plugins = 
--- a/components/openstack/ironic/patches/03-boot-device.patch	Wed Sep 07 14:48:42 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-Ironic is very "Linux" centric, so for all nodes regardless of architecture it
-reports the same list of supported boot devices.
-
-This is not correct for SPARC, e.g. PXE is not supported.
-
-This patch simply passes the task into the driver implemented method for 
-getting the boot device so that architecture specific information can be
-returned.
-
-Upstream bug logged against trunk:
-  https://bugs.launchpad.net/ironic/+bug/1391598
-
---- ORIGINAL/ironic/conductor/manager.py	2015-05-05 22:41:35.764613395 +0100
-+++ ironic-2015.1.0/ironic/conductor/manager.py	2015-05-05 22:47:23.046291559 +0100
-@@ -1615,7 +1615,7 @@
-             if not getattr(task.driver, 'management', None):
-                 raise exception.UnsupportedDriverExtension(
-                             driver=task.node.driver, extension='management')
--            return task.driver.management.get_supported_boot_devices()
-+            return task.driver.management.get_supported_boot_devices(task)
- 
-     @messaging.expected_exceptions(exception.NoFreeConductorWorker,
-                                    exception.NodeLocked,
---- ORIGINAL/ironic/drivers/base.py	2015-05-05 22:41:35.780975517 +0100
-+++ ironic-2015.1.0/ironic/drivers/base.py	2015-05-05 22:48:01.342155003 +0100
-@@ -629,9 +629,10 @@
-         """
- 
-     @abc.abstractmethod
--    def get_supported_boot_devices(self):
-+    def get_supported_boot_devices(self, task=None):
-         """Get a list of the supported boot devices.
- 
-+        :param task: a task from TaskManager.
-         :returns: A list with the supported boot devices defined
-                   in :mod:`ironic.common.boot_devices`.
-         """
--- a/components/openstack/ironic/patches/04-generate_sample.patch	Wed Sep 07 14:48:42 2016 -0700
+++ b/components/openstack/ironic/patches/04-generate_sample.patch	Wed Sep 07 14:48:42 2016 -0700
@@ -1,8 +1,8 @@
 In-house patch to update the generate_sample script and related data
 files for use with Solaris.
 
---- ironic-2015.1.2/tools/config/generate_sample.sh.orig	2015-10-13 10:53:40.000000000 -0700
-+++ ironic-2015.1.2/tools/config/generate_sample.sh	2016-02-01 21:01:28.356560160 -0800
+--- ironic-5.1.2/tools/config/generate_sample.sh.~1~	2016-06-21 12:57:28.000000000 -0700
++++ ironic-5.1.2/tools/config/generate_sample.sh	2016-07-19 14:17:02.813964380 -0700
 @@ -1,5 +1,7 @@
  #!/usr/bin/env bash
  
@@ -11,3 +11,22 @@
  # Generate sample configuration for your project.
  #
  # Aside from the command line flags, it also respects a config file which
+--- ironic-5.1.2/tools/config/oslo.config.generator.rc.~1~	2016-06-21 12:57:28.000000000 -0700
++++ ironic-5.1.2/tools/config/oslo.config.generator.rc	2016-07-19 14:27:38.284860215 -0700
+@@ -1,2 +1,15 @@
+-export IRONIC_CONFIG_GENERATOR_EXTRA_LIBRARIES='oslo.db oslo.messaging oslo.middleware.cors keystonemiddleware.auth_token oslo.concurrency oslo.policy oslo.log oslo.service.service oslo.service.periodic_task oslo.service.sslutils'
++export IRONIC_CONFIG_GENERATOR_EXTRA_LIBRARIES='
++    oslo.db
++    oslo.messaging
++    oslo.middleware
++    keystonemiddleware.auth_token
++    oslo.concurrency
++    oslo.policy
++    oslo.log
++    oslo.service.service
++    oslo.service.periodic_task
++    oslo.service.sslutils
++    oslo.service.wsgi
++    oslo.versionedobjects
++'
+ export IRONIC_CONFIG_GENERATOR_EXTRA_MODULES='ironic_lib.disk_utils ironic_lib.disk_partitioner ironic_lib.utils'
--- a/components/openstack/ironic/patches/05-mysql_cluster_support.patch	Wed Sep 07 14:48:42 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-This patchset is for bug:
-
-22726240 - Ironic needs to support MySQL Cluster
-
-This fixes the following aspects of Ironic:
-1. Implementation of an oslo.db configuration parameter to specify the MySQL
-   storage engine (mysql_storage_engine).
-2. Replacement of hardcoded SQL statements that set the engine to "InnoDB"
-   to the above configuration value.
-3. Logic to handle SQL differences between MySQL InnoDB and MySQL Cluster (NDB).
-   This includes column lengths, constraints, foreign keys, and indexes.
-4. Changes the conductor table column "online" to "online_status" to make it
-   more portable. "online" is a reserved word in MySQL and other databases.
-
-This has not been committed upstream, but has been filed in launchpad:
-
-https://bugs.launchpad.net/ironic/+bug/1564110
-
-
---- ironic-2015.1.2/ironic/db/sqlalchemy/models.py.orig	2016-07-29 12:25:49.797916170 -0600
-+++ ironic-2015.1.2/ironic/db/sqlalchemy/models.py	2016-07-28 14:06:28.682668208 -0600
-@@ -49,8 +49,12 @@ db_options.set_defaults(cfg.CONF, _DEFAU
- def table_args():
-     engine_name = urlparse.urlparse(cfg.CONF.database.connection).scheme
-     if engine_name == 'mysql':
--        return {'mysql_engine': cfg.CONF.database.mysql_engine,
--                'mysql_charset': "utf8"}
-+        if cfg.CONF.database.mysql_storage_engine == "NDBCLUSTER":
-+            return {'mysql_engine': cfg.CONF.database.mysql_storage_engine,
-+                    'mysql_charset': "utf8"}
-+        else:
-+            return {'mysql_engine': cfg.CONF.database.mysql_engine,
-+                    'mysql_charset': "utf8"}
-     return None
- 
- 
-@@ -135,7 +139,7 @@ class Conductor(Base):
-     id = Column(Integer, primary_key=True)
-     hostname = Column(String(255), nullable=False)
-     drivers = Column(JSONEncodedList)
--    online = Column(Boolean, default=True)
-+    online = Column('online', Boolean, default=True, quote=True)
- 
- 
- class Node(Base):
---- ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py.orig	2016-07-29 12:25:57.319572657 -0600
-+++ ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py	2016-07-29 12:27:49.354646151 -0600
-@@ -24,8 +24,10 @@ revision = '2581ebaf0cb2'
- down_revision = None
- 
- from alembic import op
-+from oslo_config import cfg
- import sqlalchemy as sa
- 
-+CONF = cfg.CONF
- 
- def upgrade():
-     # commands auto generated by Alembic - please adjust!
-@@ -38,7 +40,7 @@ def upgrade():
-         sa.Column('drivers', sa.Text(), nullable=True),
-         sa.PrimaryKeyConstraint('id'),
-         sa.UniqueConstraint('hostname', name='uniq_conductors0hostname'),
--        mysql_ENGINE='InnoDB',
-+        mysql_ENGINE=CONF.database.mysql_storage_engine,
-         mysql_DEFAULT_CHARSET='UTF8'
-     )
-     op.create_table(
-@@ -51,7 +53,7 @@ def upgrade():
-         sa.Column('description', sa.String(length=255), nullable=True),
-         sa.PrimaryKeyConstraint('id'),
-         sa.UniqueConstraint('uuid', name='uniq_chassis0uuid'),
--        mysql_ENGINE='InnoDB',
-+        mysql_ENGINE=CONF.database.mysql_storage_engine,
-         mysql_DEFAULT_CHARSET='UTF8'
-     )
-     op.create_table(
-@@ -77,7 +79,7 @@ def upgrade():
-         sa.ForeignKeyConstraint(['chassis_id'], ['chassis.id'], ),
-         sa.PrimaryKeyConstraint('id'),
-         sa.UniqueConstraint('uuid', name='uniq_nodes0uuid'),
--        mysql_ENGINE='InnoDB',
-+        mysql_ENGINE=CONF.database.mysql_storage_engine,
-         mysql_DEFAULT_CHARSET='UTF8'
-     )
-     op.create_index('node_instance_uuid', 'nodes', ['instance_uuid'],
-@@ -95,7 +97,7 @@ def upgrade():
-         sa.PrimaryKeyConstraint('id'),
-         sa.UniqueConstraint('address', name='uniq_ports0address'),
-         sa.UniqueConstraint('uuid', name='uniq_ports0uuid'),
--        mysql_ENGINE='InnoDB',
-+        mysql_ENGINE=CONF.database.mysql_storage_engine,
-         mysql_DEFAULT_CHARSET='UTF8'
-     )
-     # end Alembic commands
---- ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py.orig	2016-07-29 12:26:04.346647881 -0600
-+++ ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py	2016-07-28 14:06:28.683182607 -0600
-@@ -29,7 +29,7 @@ import sqlalchemy as sa
- def upgrade():
-     op.add_column(
-         'conductors',
--        sa.Column('online', sa.Boolean(), default=True))
-+        sa.Column('online', sa.Boolean(), default=True, quote=True))
-     op.add_column(
-         'nodes',
-         sa.Column('conductor_affinity', sa.Integer(),
-@@ -42,4 +42,4 @@ def downgrade():
-     op.drop_constraint('nodes_conductor_affinity_fk', 'nodes',
-             type_='foreignkey')
-     op.drop_column('nodes', 'conductor_affinity')
--    op.drop_column('conductors', 'online')
-+    op.drop_column('conductors', 'online', quote=True)