driver/openstack: order flavor results

I hit a situation in a new cloud where I had defined two flavors with
the same amount of RAM "opendev-control" and "opendev".  The config
had min-ram set [1] with a flavor-name of "opendev" -- I expected it
to match the exact name first, but nodepool was choosing
"opendev-control".

I guess the default order returned by the cloud is flavorid [2].  I'd
propose that sorting on a tuple of (ram, name) -- so that we match
names in alphabetical order -- is a more intuitive way to run the
match.

Documentation is updated, and a release note added.

[1] which actually we didn't want, really, because we wanted to
    exactly match the flavor:
     https://review.opendev.org/c/openstack/project-config/+/870677
[2] https://docs.openstack.org/api-ref/compute/?expanded=list-flavors-detail#list-flavors

Change-Id: I268dd598ca9f1b617c5062b41ad27d0305df60b9
This commit is contained in:
Ian Wienand 2023-01-17 11:19:08 +11:00
parent 13792b3b3b
commit 46f44b8669
No known key found for this signature in database
3 changed files with 20 additions and 5 deletions

View File

@ -575,11 +575,16 @@ Selecting the OpenStack driver adds the following options to the
Name or id of the flavor to use. If
:attr:`providers.[openstack].pools.labels.min-ram` is
omitted, it must be an exact match. If
:attr:`providers.[openstack].pools.labels.min-ram` is given,
``flavor-name`` will be used to find flavor names that meet
omitted, it must be an exact match.
If :attr:`providers.[openstack].pools.labels.min-ram` is
given, ``flavor-name`` will be used to find flavor names
that meet
:attr:`providers.[openstack].pools.labels.min-ram` and also
contain ``flavor-name``.
contain ``flavor-name``. Flavors that match the RAM
requirements will be examined in standard alphabetical
order; the first to contain the ``flavor-name`` string will
be chosen.
One of :attr:`providers.[openstack].pools.labels.min-ram` or
:attr:`providers.[openstack].pools.labels.flavor-name` must

View File

@ -589,7 +589,7 @@ class OpenStackAdapter(statemachine.Adapter):
def _getFlavors(self):
flavors = self._listFlavors()
flavors.sort(key=operator.itemgetter('ram'))
flavors.sort(key=operator.itemgetter('ram', 'name'))
return flavors
def _findFlavorByName(self, flavor_name):

View File

@ -0,0 +1,10 @@
---
upgrade:
- |
In the OpenStack driver, when using ```min-ram``` in combination
with a ```flavor-name```, the first flavor to be found that
satisfied the ```min-ram``` requirements and contained the
substring ``flavor-name``` would be used. The order of the
flavors to be searched was dependent on what the cloud returned.
From this release, the available flavors are now alphabetically
sorted before matching ```flavor-name```.