summaryrefslogtreecommitdiff
path: root/ironic/db/sqlalchemy/api.py
diff options
context:
space:
mode:
authorTzu-Mainn Chen <tzumainn@redhat.com>2020-01-07 22:25:08 +0000
committerTzu-Mainn Chen <tzumainn@redhat.com>2020-04-07 15:33:42 +0000
commit602a467a04a0cae3a2d65ba45bfd70eabd4c105a (patch)
tree0ea7dc920b01415d1c2588ccdfcff6b1f8c8e89e /ironic/db/sqlalchemy/api.py
parentb148cabdb2cc6810b09e8bfbc500d15969c0f164 (diff)
downloadironic-602a467a04a0cae3a2d65ba45bfd70eabd4c105a.tar.gz
Add node lessee field
This change adds a `lessee` field to nodes, and exposes it to policy. It also updates the non-admin node list API to match for both owner and lessee; and updates the allocation conductor to match owner allocations with nodes with the appropriate lessee. Change-Id: Ib31b49c7143ec8fd6cb486fc24038215b197c418 Story: 2006506 Task: 37930
Diffstat (limited to 'ironic/db/sqlalchemy/api.py')
-rw-r--r--ironic/db/sqlalchemy/api.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/ironic/db/sqlalchemy/api.py b/ironic/db/sqlalchemy/api.py
index 95baf75fd..e3f62335f 100644
--- a/ironic/db/sqlalchemy/api.py
+++ b/ironic/db/sqlalchemy/api.py
@@ -288,7 +288,7 @@ class Connection(api.Connection):
_NODE_QUERY_FIELDS = {'console_enabled', 'maintenance', 'retired',
'driver', 'resource_class', 'provision_state',
'uuid', 'id', 'fault', 'conductor_group',
- 'owner'}
+ 'owner', 'lessee'}
_NODE_IN_QUERY_FIELDS = {'%s_in' % field: field
for field in ('uuid', 'provision_state')}
_NODE_NON_NULL_FILTERS = {'associated': 'instance_uuid',
@@ -296,7 +296,7 @@ class Connection(api.Connection):
'with_power_state': 'power_state'}
_NODE_FILTERS = ({'chassis_uuid', 'reserved_by_any_of',
'provisioned_before', 'inspection_started_before',
- 'description_contains'}
+ 'description_contains', 'project'}
| _NODE_QUERY_FIELDS
| set(_NODE_IN_QUERY_FIELDS)
| set(_NODE_NON_NULL_FILTERS))
@@ -354,6 +354,10 @@ class Connection(api.Connection):
if keyword is not None:
query = query.filter(
models.Node.description.like(r'%{}%'.format(keyword)))
+ if 'project' in filters:
+ project = filters['project']
+ query = query.filter((models.Node.owner == project)
+ | (models.Node.lessee == project))
return query