summaryrefslogtreecommitdiff
path: root/ironic/objects
diff options
context:
space:
mode:
authorTzu-Mainn Chen <tzumainn@redhat.com>2019-11-19 00:08:54 +0000
committerTzu-Mainn Chen <tzumainn@redhat.com>2020-01-02 15:12:43 +0000
commit6f16a2268ce9c7e17c09a3ebd5f48c544e93c808 (patch)
tree5efd12ffda6abdb91a323ef1cc259e32ee993879 /ironic/objects
parent2a43e371f17e78ea749bb0d17c98df24652aeb0c (diff)
downloadironic-6f16a2268ce9c7e17c09a3ebd5f48c544e93c808.tar.gz
Allow node owners to administer associated ports
Expose a port's node's owner to policy, giving Ironic admins the option of modifying the policy file to allow users specified by a node's owner field to perform API actions on that node's associated ports. Change-Id: I47ecbad9729f18dacc703e2a625ef3e92bfb00ed Story: #2006506 Task: #37539
Diffstat (limited to 'ironic/objects')
-rw-r--r--ironic/objects/port.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/ironic/objects/port.py b/ironic/objects/port.py
index 7bc829dfa..6c75c8c21 100644
--- a/ironic/objects/port.py
+++ b/ironic/objects/port.py
@@ -203,17 +203,18 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
# Implications of calling new remote procedures should be thought through.
# @object_base.remotable_classmethod
@classmethod
- def get_by_address(cls, context, address):
+ def get_by_address(cls, context, address, owner=None):
"""Find a port based on address and return a :class:`Port` object.
:param cls: the :class:`Port`
:param context: Security context
:param address: the address of a port.
+ :param owner: a node owner to match against
:returns: a :class:`Port` object.
:raises: PortNotFound
"""
- db_port = cls.dbapi.get_port_by_address(address)
+ db_port = cls.dbapi.get_port_by_address(address, owner=owner)
port = cls._from_db_object(context, cls(), db_port)
return port
@@ -223,7 +224,7 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
# @object_base.remotable_classmethod
@classmethod
def list(cls, context, limit=None, marker=None,
- sort_key=None, sort_dir=None):
+ sort_key=None, sort_dir=None, owner=None):
"""Return a list of Port objects.
:param context: Security context.
@@ -231,6 +232,7 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
:param marker: pagination marker for large data sets.
:param sort_key: column to sort results by.
:param sort_dir: direction to sort. "asc" or "desc".
+ :param owner: a node owner to match against
:returns: a list of :class:`Port` object.
:raises: InvalidParameterValue
@@ -238,7 +240,8 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
db_ports = cls.dbapi.get_port_list(limit=limit,
marker=marker,
sort_key=sort_key,
- sort_dir=sort_dir)
+ sort_dir=sort_dir,
+ owner=owner)
return cls._from_db_object_list(context, db_ports)
# NOTE(xek): We don't want to enable RPC on this call just yet. Remotable
@@ -247,7 +250,7 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
# @object_base.remotable_classmethod
@classmethod
def list_by_node_id(cls, context, node_id, limit=None, marker=None,
- sort_key=None, sort_dir=None):
+ sort_key=None, sort_dir=None, owner=None):
"""Return a list of Port objects associated with a given node ID.
:param context: Security context.
@@ -256,13 +259,15 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
:param marker: pagination marker for large data sets.
:param sort_key: column to sort results by.
:param sort_dir: direction to sort. "asc" or "desc".
+ :param owner: a node owner to match against
:returns: a list of :class:`Port` object.
"""
db_ports = cls.dbapi.get_ports_by_node_id(node_id, limit=limit,
marker=marker,
sort_key=sort_key,
- sort_dir=sort_dir)
+ sort_dir=sort_dir,
+ owner=owner)
return cls._from_db_object_list(context, db_ports)
# NOTE(xek): We don't want to enable RPC on this call just yet. Remotable
@@ -271,7 +276,8 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
# @object_base.remotable_classmethod
@classmethod
def list_by_portgroup_id(cls, context, portgroup_id, limit=None,
- marker=None, sort_key=None, sort_dir=None):
+ marker=None, sort_key=None, sort_dir=None,
+ owner=None):
"""Return a list of Port objects associated with a given portgroup ID.
:param context: Security context.
@@ -280,6 +286,7 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
:param marker: pagination marker for large data sets.
:param sort_key: column to sort results by.
:param sort_dir: direction to sort. "asc" or "desc".
+ :param owner: a node owner to match against
:returns: a list of :class:`Port` object.
"""
@@ -287,7 +294,8 @@ class Port(base.IronicObject, object_base.VersionedObjectDictCompat):
limit=limit,
marker=marker,
sort_key=sort_key,
- sort_dir=sort_dir)
+ sort_dir=sort_dir,
+ owner=owner)
return cls._from_db_object_list(context, db_ports)
# NOTE(xek): We don't want to enable RPC on this call just yet. Remotable