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