summaryrefslogtreecommitdiff
path: root/ironic/api/controllers/v1/node.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic/api/controllers/v1/node.py')
-rw-r--r--ironic/api/controllers/v1/node.py30
1 files changed, 21 insertions, 9 deletions
diff --git a/ironic/api/controllers/v1/node.py b/ironic/api/controllers/v1/node.py
index 022b5f66a..d21b075c8 100644
--- a/ironic/api/controllers/v1/node.py
+++ b/ironic/api/controllers/v1/node.py
@@ -2072,7 +2072,8 @@ class NodesController(rest.RestController):
fields=None, fault=None, conductor_group=None,
detail=None, conductor=None, owner=None,
lessee=None, project=None,
- description_contains=None, shard=None):
+ description_contains=None, shard=None,
+ sharded=None):
if self.from_chassis and not chassis_uuid:
raise exception.MissingParameterValue(
_("Chassis id not specified."))
@@ -2113,7 +2114,8 @@ class NodesController(rest.RestController):
'project': project,
'description_contains': description_contains,
'retired': retired,
- 'instance_uuid': instance_uuid
+ 'instance_uuid': instance_uuid,
+ 'sharded': sharded
}
filters = {}
for key, value in possible_filters.items():
@@ -2258,14 +2260,14 @@ class NodesController(rest.RestController):
detail=args.boolean, conductor=args.string,
owner=args.string, description_contains=args.string,
lessee=args.string, project=args.string,
- shard=args.string_list)
+ shard=args.string_list, sharded=args.boolean)
def get_all(self, chassis_uuid=None, instance_uuid=None, associated=None,
maintenance=None, retired=None, provision_state=None,
marker=None, limit=None, sort_key='id', sort_dir='asc',
driver=None, fields=None, resource_class=None, fault=None,
conductor_group=None, detail=None, conductor=None,
owner=None, description_contains=None, lessee=None,
- project=None, shard=None):
+ project=None, shard=None, sharded=None):
"""Retrieve a list of nodes.
:param chassis_uuid: Optional UUID of a chassis, to get only nodes for
@@ -2311,6 +2313,9 @@ class NodesController(rest.RestController):
:param description_contains: Optional string value to get only nodes
with description field contains matching
value.
+ :param sharded: Optional boolean whether to return a list of
+ nodes with or without a shard set. May be combined
+ with other parameters.
"""
project = api_utils.check_list_policy('node', project)
@@ -2326,6 +2331,8 @@ class NodesController(rest.RestController):
api_utils.check_allow_filter_by_owner(owner)
api_utils.check_allow_filter_by_lessee(lessee)
api_utils.check_allow_filter_by_shard(shard)
+ # Sharded is guarded by the same API version as shard
+ api_utils.check_allow_filter_by_shard(sharded)
fields = api_utils.get_request_return_fields(fields, detail,
_DEFAULT_RETURN_FIELDS)
@@ -2342,8 +2349,8 @@ class NodesController(rest.RestController):
detail=detail,
conductor=conductor,
owner=owner, lessee=lessee,
- shard=shard, project=project,
- **extra_args)
+ shard=shard, sharded=sharded,
+ project=project, **extra_args)
@METRICS.timer('NodesController.detail')
@method.expose()
@@ -2356,14 +2363,14 @@ class NodesController(rest.RestController):
conductor_group=args.string, conductor=args.string,
owner=args.string, description_contains=args.string,
lessee=args.string, project=args.string,
- shard=args.string_list)
+ shard=args.string_list, sharded=args.boolean)
def detail(self, chassis_uuid=None, instance_uuid=None, associated=None,
maintenance=None, retired=None, provision_state=None,
marker=None, limit=None, sort_key='id', sort_dir='asc',
driver=None, resource_class=None, fault=None,
conductor_group=None, conductor=None, owner=None,
description_contains=None, lessee=None, project=None,
- shard=None):
+ shard=None, sharded=None):
"""Retrieve a list of nodes with detail.
:param chassis_uuid: Optional UUID of a chassis, to get only nodes for
@@ -2404,6 +2411,9 @@ class NodesController(rest.RestController):
:param description_contains: Optional string value to get only nodes
with description field contains matching
value.
+ :param sharded: Optional boolean whether to return a list of
+ nodes with or without a shard set. May be combined
+ with other parameters.
"""
project = api_utils.check_list_policy('node', project)
@@ -2422,6 +2432,8 @@ class NodesController(rest.RestController):
api_utils.check_allow_filter_by_conductor(conductor)
api_utils.check_allow_filter_by_shard(shard)
+ # Sharded is guarded by the same API version as shard
+ api_utils.check_allow_filter_by_shard(sharded)
extra_args = {'description_contains': description_contains}
return self._get_nodes_collection(chassis_uuid, instance_uuid,
@@ -2436,7 +2448,7 @@ class NodesController(rest.RestController):
conductor=conductor,
owner=owner, lessee=lessee,
project=project, shard=shard,
- **extra_args)
+ sharded=sharded, **extra_args)
@METRICS.timer('NodesController.validate')
@method.expose()