Follow-up patch of 8e5e69869d
This patch is a follow-up patch of
8e5e69869d
addressing some the remaining
comments after the patch was merged. The changes are:
* Optimize the code by generating the list of reserved words for the
nodes controller only once.
* List the reserved words in the release note.
* Improve the error string when someone tries to name a node using a
reserved word.
* Add a comment for future reference indicating how we should try to
model the API in case a new sub-controller needs to be added to the
nodes controller class.
Change-Id: I43d6d9e2e92cc941a7839c60d9cd361cd94b6208
This commit is contained in:
parent
9996949e8e
commit
6be3448d40
@ -96,6 +96,16 @@ PROVISION_ACTION_STATES = (ir_states.VERBS['manage'],
|
|||||||
ir_states.VERBS['provide'],
|
ir_states.VERBS['provide'],
|
||||||
ir_states.VERBS['abort'])
|
ir_states.VERBS['abort'])
|
||||||
|
|
||||||
|
_NODES_CONTROLLER_RESERVED_WORDS = None
|
||||||
|
|
||||||
|
|
||||||
|
def get_nodes_controller_reserved_names():
|
||||||
|
global _NODES_CONTROLLER_RESERVED_WORDS
|
||||||
|
if _NODES_CONTROLLER_RESERVED_WORDS is None:
|
||||||
|
_NODES_CONTROLLER_RESERVED_WORDS = (
|
||||||
|
api_utils.get_controller_reserved_names(NodesController))
|
||||||
|
return _NODES_CONTROLLER_RESERVED_WORDS
|
||||||
|
|
||||||
|
|
||||||
def hide_fields_in_newer_versions(obj):
|
def hide_fields_in_newer_versions(obj):
|
||||||
# if requested version is < 1.3, hide driver_internal_info
|
# if requested version is < 1.3, hide driver_internal_info
|
||||||
@ -924,6 +934,12 @@ class NodeMaintenanceController(rest.RestController):
|
|||||||
class NodesController(rest.RestController):
|
class NodesController(rest.RestController):
|
||||||
"""REST controller for Nodes."""
|
"""REST controller for Nodes."""
|
||||||
|
|
||||||
|
# NOTE(lucasagomes): For future reference. If we happen
|
||||||
|
# to need to add another sub-controller in this class let's
|
||||||
|
# try to make it a parameter instead of an endpoint due
|
||||||
|
# https://bugs.launchpad.net/ironic/+bug/1572651, e.g, instead of
|
||||||
|
# v1/nodes/(ident)/detail we could have v1/nodes/(ident)?detail=True
|
||||||
|
|
||||||
states = NodeStatesController()
|
states = NodeStatesController()
|
||||||
"""Expose the state controller action as a sub-element of nodes"""
|
"""Expose the state controller action as a sub-element of nodes"""
|
||||||
|
|
||||||
@ -1033,8 +1049,7 @@ class NodesController(rest.RestController):
|
|||||||
if not api_utils.allow_node_logical_names():
|
if not api_utils.allow_node_logical_names():
|
||||||
raise exception.NotAcceptable()
|
raise exception.NotAcceptable()
|
||||||
|
|
||||||
reserved_names = api_utils.get_controller_reserved_names(
|
reserved_names = get_nodes_controller_reserved_names()
|
||||||
NodesController)
|
|
||||||
for name in names:
|
for name in names:
|
||||||
if not api_utils.is_valid_node_name(name):
|
if not api_utils.is_valid_node_name(name):
|
||||||
raise wsme.exc.ClientSideError(
|
raise wsme.exc.ClientSideError(
|
||||||
@ -1043,7 +1058,7 @@ class NodesController(rest.RestController):
|
|||||||
if name in reserved_names:
|
if name in reserved_names:
|
||||||
raise wsme.exc.ClientSideError(
|
raise wsme.exc.ClientSideError(
|
||||||
'The word "%(name)s" is reserved and can not be used as a '
|
'The word "%(name)s" is reserved and can not be used as a '
|
||||||
'node name. Other reserved words are: %(reserved)s' %
|
'node name. Reserved words are: %(reserved)s.' %
|
||||||
{'name': name,
|
{'name': name,
|
||||||
'reserved': ', '.join(reserved_names)},
|
'reserved': ', '.join(reserved_names)},
|
||||||
status_code=http_client.BAD_REQUEST)
|
status_code=http_client.BAD_REQUEST)
|
||||||
|
@ -2,4 +2,5 @@
|
|||||||
fixes:
|
fixes:
|
||||||
- Fixes a problem which allowed nodes to be named with some reserved
|
- Fixes a problem which allowed nodes to be named with some reserved
|
||||||
words that are implicitly not allowed due the way the Ironic API
|
words that are implicitly not allowed due the way the Ironic API
|
||||||
works.
|
works. The reserved words are "maintenance", "management", "ports",
|
||||||
|
"states", "vendor_passthru", "validate" and "detail".
|
||||||
|
Loading…
Reference in New Issue
Block a user