Allow Leasable Nodes¶
https://storyboard.openstack.org/#!/story/2006506
A large bare metal deployment may consist of hardware owned by multiple
owners who lease their nodes to users - lessees - who gain temporary and
limited access to specific nodes. Ironic understands the concept of a
hardware owner: a node can set its owner
field to a project, and that
project can gain API access to that node through the use of an updated
policy file. However, Ironic does not understand the concept of a node
lessee.
This spec describes a solution that accommodates the notion of a node lessee.
Problem description¶
Ironic currently supports two classes of users: administrators, who control the entire inventory of hardware; and owners, who have policy-limited API access to the nodes that they own. However, Ironic does not support non-administrative users - users who can deploy upon a node, and perhaps have access to an extremely limited subset of the API (such as node power functions).
Proposed change¶
Node lessees can be supported with the following changes:
Add a new
lessee
field to the node object. This field must either be empty or set to a Keystone project id.Update the node controller so that policy checks pass in a node’s
lessee
information. Note that Ironic already does that with node owners [0].Update Ironic’s default generated policy file to include an
is_node_lessee
rule:“is_node_lessee”: “project_id:%(node.lessee)s”
The remainder of the policy file will stay the same, so that there is no change to default API access.
Update the node list function so that projects with access to
baremetal:node:list
are returned nodes with matchingowner
orlessee
fields.Update Ironic allocations so that allocations with owners can match nodes by a node’s
owner
orlessee
.
Note that this work does not add any new scheduling responsibilities in
Ironic. A new Nova filter, such as an updated version of the
proposed NodeOwnerFilter [1], would be desirable; and Blazar could
integrate with the lessee
field as they see fit. However, the
proposed work does integrate well with the existing ability to create
a restricted allocation.
Further down the line when Ironic creates a Deployment API, we can have the new Deployment API actions default to being accessible to node lessees.
Alternatives¶
Lessee information could be stored in a dictionary field such as
properties
or extras
. However this makes updating database queries
far more difficult, and the non-administrative user concept feels distinct
enough to warrant a new field.
Data model impact¶
A lessee
field will be added to the nodes table as a VARCHAR(255)
with a default value of null
.
State Machine Impact¶
None
REST API impact¶
A
lessee
field will be returned with the node object.The REST API will pass in the
lessee
for node policy checks.The API will be updated to allow a user to set/unset the value through the API.
The node list API will be updated to allow filtering by
lessee
.The limited
baremetal:node:list
action will be updated to match nodes by both lessee and owner.A new API microversion will be introduced for the new node
lessee
field.
Client (CLI) impact¶
None
“ironic” CLI¶
None
“openstack baremetal” CLI¶
An update will be needed to enable a user to set/unset lessee
from the
command line.
RPC API impact¶
None
Driver API impact¶
None
Nova driver impact¶
None
Ramdisk impact¶
None
Security impact¶
This change allows functionality to be exposed to additional users. However this access is blocked off by default; it requires an update to the Oslo policy file, and can be adjusted as an administrator desires.
Other end user impact¶
None
Scalability impact¶
None
Performance Impact¶
Some functionality that previously matched nodes by owner
will now
have to match both owner
and lessee
. This should be doable at
the database query level.
Other deployer impact¶
None
Developer impact¶
None
Implementation¶
Assignee(s)¶
Primary assignees: * tzumainn - tzumainn@redhat.com
Work Items¶
Add database field.
Add object field.
Add REST API functionality and microversion.
Update REST API documentation.
Update python-ironicclient.
Update node controller.
Update allocations conductor.
Write tests.
Write documentation detailing usage.
Dependencies¶
None
Testing¶
We will add unit tests and Tempest tests.
Upgrades and Backwards Compatibility¶
The lessee
node field will be created as part of the upgrade process
with a default value in the database schema. This change has no end-user
impact if the policy file is not updated.
Documentation Impact¶
REST API documentation will be updated.