ironic-specs/specs/approved/ownership-field.rst
Julia Kreger 2ba77c9aa9 Follow-up to owner field specificaiton
Change-Id: Ib8c1387d88c8b77fbc66fd8924c5b283a40b5d19
2018-08-02 19:14:01 +00:00

192 lines
4.3 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=============================
Ownership Information Storage
=============================
https://storyboard.openstack.org/#!/story/2001814
In many large businesses with hardware fleets, there may be a variety of
ownership of the underlying hardware for tracking purposes. A good example
of this is in a hybrid service provider scenario where an operator may
directly own a portion of the hardware, may have the hardware on lease,
and may ultimately have customer owned hardware.
We simply cannot model this with existing node fields, since there may
be resource sharing agreements also in place between the owners of the
hardware. And as such, we need some way to store and represent the end
owner of the hardware for tracking and logistical purposes.
Problem description
===================
While scenarios differ, ultimately there is a need to be able to store
information in a top level fashion about who owns a given piece of hardware.
Information of this sort can be vital when it comes time for tax asset
inventories, or just simple tracking of where the hardware came from.
Providing the ability to search and return the hardware that is known
to be owned by a particular group allows for faster correlation of the
disposition of the hardware for auditing and accounting purposes.
Proposed change
===============
Proposing to add a new informational field to the node object that can be
queried via the REST API, and stored in the database. No other initial use
of this field is expected.
Future use could also be automatic in the scenario if there is a driver
that is aggregating a number of management systems, however that is out of
scope.
Alternatives
------------
An operator could potentially store this information in extra, however then
they would still need to dump all of the nodes out to obtain a list of nodes
with the specific information that is needed. The operator would begin to
hit limits with the number of responses from the API, and would need to
likely create their own tooling around list processing.
Data model impact
-----------------
A ``owner`` field would be added to the nodes table as a ``VARCHAR(255)``
and will have a default value of ``null`` in the database.
State Machine Impact
--------------------
None
REST API impact
---------------
An ``owner`` field will be returned as part of the node. The API shall be
updated to allow a user to set and unset the value via the API.
Additionally the GET syntax for the nodes list will be updated to allow a
list of matching nodes to be returned.
POST/PATCH operations to the field will be guarded by a new microversion.
The field shall not be returned unless the sufficient microversion is supplied
for GET operations.
Client (CLI) impact
-------------------
"ironic" CLI
~~~~~~~~~~~~
None
"openstack baremetal" CLI
~~~~~~~~~~~~~~~~~~~~~~~~~
A corresponding change will be necessary to enable the ability for a user
to set/unset the value from a command line.
RPC API impact
--------------
None
Driver API impact
-----------------
None
Nova driver impact
------------------
None
Ramdisk impact
--------------
None
Security impact
---------------
None
Other end user impact
---------------------
None
Scalability impact
------------------
None
Performance Impact
------------------
None
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
TheJulia - juliaashleykreger@gmail.com
Other contributors:
None
Work Items
----------
* Add database field.
* Add object field.
* Add REST API functionality and microversion.
* Update REST API documentation.
* Update python-ironicclient.
Dependencies
============
None
Testing
=======
Basic API CRUD testing will be added. There is no need for additional testing
as this is an informational field for the API user/baremetal operator.
Upgrades and Backwards Compatibility
====================================
Field will be created as part of the upgrade process with a default value in
the database schema.
Documentation Impact
====================
REST API documentation will need to be updated.
References
==========
None