From ff274c04e4393e8f73e1d7e885a55924321a4130 Mon Sep 17 00:00:00 2001
From: Madhuri Kumari <madhuri.rai07@gmail.com>
Date: Thu, 23 Mar 2017 09:09:38 +0000
Subject: [PATCH] Add spec for Ironic Valence Integration

This spec explains the idea of adding a new
nodes register API to Valence that can be used
to register a composed node to Ironic to be
consumed.

Change-Id: I662415a357a745be7dc6933f23b9e442f824b9b5
---
 doc/source/index.rst                          |   1 +
 .../approved/valence-ironic-integration.rst   | 123 ++++++++++++++++++
 2 files changed, 124 insertions(+)
 create mode 100644 specs/pike/approved/valence-ironic-integration.rst

diff --git a/doc/source/index.rst b/doc/source/index.rst
index dbd998f..0e732ad 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -11,6 +11,7 @@ Ocata specs:
    :maxdepth: 1
 
    specs/ocata/approved/*
+   specs/pike/approved/*
 
 ==================
 Indices and tables
diff --git a/specs/pike/approved/valence-ironic-integration.rst b/specs/pike/approved/valence-ironic-integration.rst
new file mode 100644
index 0000000..aeca97d
--- /dev/null
+++ b/specs/pike/approved/valence-ironic-integration.rst
@@ -0,0 +1,123 @@
+
+==========================
+Valence Ironic Integration
+==========================
+This proposal describes the integration of projects Valence and
+OpenStack Baremetal Service, Ironic.
+
+Problem description
+===================
+Valence allows to compose nodes out of a pool of disaggregated hardware.
+And Ironic allows to provision bare metal machines. Once the node is
+composed by Valence that can be registered to Ironic to be consumed.
+So this feature aims on providing a way to integrate Valence and Ironic,
+so that users will be able to provision bare metal machines on the composed
+nodes by Ironic.
+
+Proposed change
+===============
+To enable Valence to be able to register its composed node to Ironic, we
+will add a new API endpoint /v1/nodes/{ID}/register. The detailed explanation
+of this API is as below:
+
+1. Add a new Valence /v1/nodes/{ID}/register API
+This introduces a new nodes API in valence that will be used to register a
+composed node in Ironic. Below steps explains a detailed flow of registering
+a node from Valence to Ironic.
+
+Step 1: User calls Valence APIs to register a node.
+
+    $ valence node-register test-node
+    This API will register the test-node to Ironic.
+
+NOTE: Once the node is registered to Ironic, no further actions like deleting
+the node, changing the boot device will be supported by Valence. Admin can use
+the Ironic APIs to perform these actions.
+
+Step 2: Valence calls Ironic API internally to register this node which is equivalent to:
+
+    $ ironic node-create –d redfish –i redfish_root_uri <Redfish URL> -i refish_username <username> ...
+    This will create a new node in Ironic with all the required details related
+    to Redfish. It will also create a port in Ironic with the node's MAC address.
+
+After the node is succesfully registered to Ironic, users can use the Ironic or
+Nova to install an OS on the node.
+
+Also we will add another API endpoint /v1/nodes/{ID}/unregister to delete the node from Ironic.
+
+
+Alternatives
+------------
+None
+
+
+Data model impact
+-----------------
+Add a new field 'managed_by' in Nodes DB.
+
+
+REST API impact
+---------------
+1. Add a new API endpoint /v1/node/{ID}/register
+1. Add a new API endpoint /v1/node/{ID}/unregister
+
+Driver API impact
+-----------------
+1. Add a new driver that can be used to interact with ironic.
+
+
+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:
+  Madhuri Kumari
+
+Work Items
+----------
+* Add a driver in Valence to interact with Ironic.
+* Add a new field 'managed_by' in Nodes DB.
+* Add new API endpoint /v1/node/{ID}/register.
+* Add new API endpoint /v1/node/{ID}/unregister.
+* Update api-ref to include the new API.
+
+Dependencies
+============
+Depends on Ironic project. python-ironicclient needs to be
+added to the project's requirement.
+
+Testing
+=======
+* Each patch will be accompanied with unit testcases.
+
+Documentation Impact
+====================
+Update document to include the details of new node register API.
+
+References
+==========
+None