Public bug reported:

Nova's requirements.txt does not list python-ironicclient, meaning a
stable/juno nova deployment (at least in our gate) will be running with
the most recent release of python-ironicclient.

Many new features have been added to Ironic since juno and have been
introduced incrementally via API micro-versions.   The client library
released at the time of stable/juno did not send any API version header.
The current (kilo) server recognizes this and defaults to the lowest API
version (v1.1) it supports. The desired behavior of python-ironicclient
is for it to request the greatest API version it understands (presently
1.6) [3].

The nova.virt.ironic driver in juno/stable depends on node states only
available in the corresponding version [1] of Ironic.  These have
changed since then and the new node states are exposed via new API
micro-versions [2]. Using a new client library with a new server release
will result in the new states being returned to Nova. In particular, the
state of a node that is available for use, as returned by the v1.1 API
is "NOSTATE", and as returned by the current Kilo API,  is "AVAILABLE".

The goal is to make the client transparently negotiate which version to
use with the Ironic server if the latest version is not supported.  This
is a feature that would be introduced in a future python-ironicclient
release.

However, since Nova is not listing python-ironicclient in its
requirements, during upgrades we can end up with a stable/juno Nova
using this new client version to speak to a Kilo Ironic server via the
most recent API micro versions. This would result in nova driver errors
as the Ironic server would be returning node states that stable/juno
driver [1] does not understand [2].

We either need to introduce python-ironicclient as a listed requirement
of Nova (at least in stable), or explicitly declare that the driver use
the older API version in its client interactions, or require that
operators upgrade Nova (and python-ironicclient) to Kilo before
upgrading Ironic.

[1] 
https://git.openstack.org/cgit/openstack/nova/tree/nova/virt/ironic/ironic_states.py?h=stable%2Fjuno
[2] 
https://git.openstack.org/cgit/openstack/nova/tree/nova/virt/ironic/ironic_states.py
[3] 
http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html

** Affects: ironic
     Importance: Undecided
         Status: New

** Affects: nova
     Importance: Undecided
         Status: New

** Affects: nova/juno
     Importance: Undecided
         Status: New

** Also affects: nova
   Importance: Undecided
       Status: New

** Also affects: nova/juno
   Importance: Undecided
       Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1433805

Title:
  Absence of python-ironicclient in nova requirements.txt making
  upgrades awkward, python-ironicclient features diffucult

Status in OpenStack Bare Metal Provisioning Service (Ironic):
  New
Status in OpenStack Compute (Nova):
  New
Status in OpenStack Compute (nova) juno series:
  New

Bug description:
  Nova's requirements.txt does not list python-ironicclient, meaning a
  stable/juno nova deployment (at least in our gate) will be running
  with the most recent release of python-ironicclient.

  Many new features have been added to Ironic since juno and have been
  introduced incrementally via API micro-versions.   The client library
  released at the time of stable/juno did not send any API version
  header. The current (kilo) server recognizes this and defaults to the
  lowest API version (v1.1) it supports. The desired behavior of python-
  ironicclient is for it to request the greatest API version it
  understands (presently 1.6) [3].

  The nova.virt.ironic driver in juno/stable depends on node states only
  available in the corresponding version [1] of Ironic.  These have
  changed since then and the new node states are exposed via new API
  micro-versions [2]. Using a new client library with a new server
  release will result in the new states being returned to Nova. In
  particular, the state of a node that is available for use, as returned
  by the v1.1 API is "NOSTATE", and as returned by the current Kilo API,
  is "AVAILABLE".

  The goal is to make the client transparently negotiate which version
  to use with the Ironic server if the latest version is not supported.
  This is a feature that would be introduced in a future python-
  ironicclient release.

  However, since Nova is not listing python-ironicclient in its
  requirements, during upgrades we can end up with a stable/juno Nova
  using this new client version to speak to a Kilo Ironic server via the
  most recent API micro versions. This would result in nova driver
  errors as the Ironic server would be returning node states that
  stable/juno driver [1] does not understand [2].

  We either need to introduce python-ironicclient as a listed
  requirement of Nova (at least in stable), or explicitly declare that
  the driver use the older API version in its client interactions, or
  require that operators upgrade Nova (and python-ironicclient) to Kilo
  before upgrading Ironic.

  [1] 
https://git.openstack.org/cgit/openstack/nova/tree/nova/virt/ironic/ironic_states.py?h=stable%2Fjuno
  [2] 
https://git.openstack.org/cgit/openstack/nova/tree/nova/virt/ironic/ironic_states.py
  [3] 
http://specs.openstack.org/openstack/ironic-specs/specs/kilo/api-microversions.html

To manage notifications about this bug go to:
https://bugs.launchpad.net/ironic/+bug/1433805/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : yahoo-eng-team@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to