Fix ignore_provider_quota in statemachine drivers
The statemachine driver copied the quota handling from OpenStack, which also included a check for the presence of the ignore_provider_quota configuration attribute. This attribute does not exist in any of the statemachine drivers, and due to the way the check was constructed, it meant that we defaulted to ignoring the provider quota rather than actually checking it. We should perform this check so that providers can exclude themselves if there is no possibility of satisfying a request. This corrects the check. Change-Id: I7ced3f749a1646ecbb2b80f93b26e61a4e8cd69a
This commit is contained in:
parent
d5b0dee642
commit
4aaacc7919
@ -861,6 +861,7 @@ class ConfigPool(ConfigValue, metaclass=abc.ABCMeta):
|
||||
self.max_servers = math.inf
|
||||
self.node_attributes = None
|
||||
self.priority = None
|
||||
self.ignore_provider_quota = False
|
||||
|
||||
@classmethod
|
||||
def getCommonSchemaDict(self):
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Copyright 2019 Red Hat
|
||||
# Copyright 2021 Acme Gating, LLC
|
||||
# Copyright 2021-2022 Acme Gating, LLC
|
||||
#
|
||||
# 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
|
||||
@ -374,13 +374,15 @@ class StateMachineHandler(NodeRequestHandler):
|
||||
needed_quota.add(
|
||||
self.manager.quotaNeededByLabel(ntype, self.pool))
|
||||
|
||||
ignore = False
|
||||
if hasattr(self.pool, 'ignore_provider_quota'):
|
||||
if not self.pool.ignore_provider_quota:
|
||||
cloud_quota = self.manager.estimatedNodepoolQuota()
|
||||
cloud_quota.subtract(needed_quota)
|
||||
ignore = self.pool.ignore_provider_quota
|
||||
if not ignore:
|
||||
cloud_quota = self.manager.estimatedNodepoolQuota()
|
||||
cloud_quota.subtract(needed_quota)
|
||||
|
||||
if not cloud_quota.non_negative():
|
||||
return False
|
||||
if not cloud_quota.non_negative():
|
||||
return False
|
||||
|
||||
# Now calculate pool specific quota. Values indicating no quota default
|
||||
# to math.inf representing infinity that can be calculated with.
|
||||
|
@ -296,14 +296,15 @@ class QuotaSupport:
|
||||
|
||||
def estimatedNodepoolQuota(self):
|
||||
'''
|
||||
Determine how much quota is available for nodepool managed resources.
|
||||
This needs to take into account the quota of the tenant, resources
|
||||
used outside of nodepool and the currently used resources by nodepool,
|
||||
max settings in nodepool config. This is cached for MAX_QUOTA_AGE
|
||||
Determine how much quota is available for nodepool managed
|
||||
resources. This needs to take into account the quota of the
|
||||
tenant, resources used outside of nodepool, and the max
|
||||
settings in nodepool config. This is cached for MAX_QUOTA_AGE
|
||||
seconds.
|
||||
|
||||
:return: Total amount of resources available which is currently
|
||||
available to nodepool including currently existing nodes.
|
||||
|
||||
'''
|
||||
|
||||
if self._current_nodepool_quota:
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
The AWS, Azure, and IBMVPC drivers now check provider quota before
|
||||
accepting requests. This allows them to decline requests which
|
||||
can not possibly be satisfied given provider quota constraints.
|
Loading…
Reference in New Issue
Block a user