From 2e72a708200c3630ab18f8d3ec4e2a6163724b8d Mon Sep 17 00:00:00 2001
From: Graham Hayes <graham.hayes@hp.com>
Date: Wed, 26 Aug 2015 15:26:38 -0700
Subject: [PATCH] Inital Spec - API

Change-Id: I10257d311a7218bd2d9cca3a5d8ca3f0b4c3105c
---
 specs/liberty/api.rst         | 279 ++++++++++++++++++++++++++++++++++
 specs/liberty/placeholder.rst | 163 --------------------
 2 files changed, 279 insertions(+), 163 deletions(-)
 create mode 100644 specs/liberty/api.rst
 delete mode 100644 specs/liberty/placeholder.rst

diff --git a/specs/liberty/api.rst b/specs/liberty/api.rst
new file mode 100644
index 0000000..e5aa148
--- /dev/null
+++ b/specs/liberty/api.rst
@@ -0,0 +1,279 @@
+..
+
+This work is licensed under a Creative Commons Attribution 3.0 Unported License.
+http://creativecommons.org/licenses/by/3.0/legalcode
+
+..
+  This template should be in ReSTructured text. The filename in the git
+  repository should match the launchpad URL, for example a URL of
+  https://blueprints.launchpad.net/gslb/+spec/awesome-thing should be named
+  awesome-thing.rst .  Please do not delete any of the sections in this
+  template.  If you have nothing to say for a whole section, just write: None
+  For help with syntax, see http://sphinx-doc.org/rest.html
+  To test out your formatting, see http://www.tele3.cz/jbar/rest/rest.html
+
+=====
+ API
+=====
+
+https://blueprints.launchpad.net/kosmos/+spec/api
+
+We need an API, so defining it is a good start.
+
+Example JSON Snippets
+=====================
+
+Load Balancer JSON Snippet
+--------------------------
+
+ .. code-block:: json
+
+    {
+      "id": "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "name": "Main Website",
+      "fqdn": "www.gslb.example.com.",
+      "domain_name": "example.com.",
+      "flavor": "example_1",
+      "status": "ACTIVE",
+      "links": {
+        "self": "http://example.gslb.openstack.org/v0.1/gslbs/f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+        "pools": "http://example.gslb.openstack.org/v0.1/gslbs/f9fc6210-8efa-4492-9b4f-d87ba98f35b8/pools",
+        "status": "http://example.gslb.openstack.org/v0.1/gslbs/f9fc6210-8efa-4492-9b4f-d87ba98f35b8/status"
+      }
+    }
+
+
+Pool JSON Snippet
+-----------------
+
+ .. code-block:: json
+
+    {
+      "id": "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "name": "Main Website Pool",
+      "flavor": "example_1",
+      "status": "ACTIVE",
+      "members":["SEE MEMBER SNIPPETS BELOW"],
+      "links": {
+        "self": "http://example.gslb.openstack.org/v0.1/pools/f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+        "pool_members": "http://example.gslb.openstack.org/v0.1/pools/f9fc6210-8efa-4492-9b4f-d87ba98f35b8/pool_members",
+        "status": "http://example.gslb.openstack.org/v0.1/pools/f9fc6210-8efa-4492-9b4f-d87ba98f35b8/status"
+      }
+    }
+
+Pool Member JSON Snippet - Neutron LBaaS
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id": "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "name": "Main Website",
+      "type": "neutron_lbaas_v2",
+      "region": "RegionTwo",
+      "neutron_id": "df40954c-982a-4778-a1b2-32b93cf75af9",
+      "status": "ACTIVE",
+      "endpoints": [
+        "10.10.0.1"
+      ]
+    }
+
+
+Pool Member JSON Snippet - Neutron Port
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id": "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "name": "Main Website",
+      "type": "neutron_port",
+      "region": "RegionTwo",
+      "neutron_id": "78fa9c7f-f200-49df-912b-ae4679fd21e9",
+      "status": "ACTIVE",
+      "endpoints": [
+        "10.10.0.1"
+      ]
+    }
+
+Pool Member JSON Snippet - IP
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id": "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "name": "Main Website",
+      "type": "IP",
+      "status": "ACTIVE",
+      "endpoints": [
+        "10.10.0.1"
+      ]
+    }
+
+
+Monitor JSON Snippet - TCP Basic
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id" : "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "type" : "TCP",
+      "delay" : 20,
+      "timeout": 10,
+      "max_retries": 3,
+      "port" : 22,
+      "name": "ssh_generic"
+    }
+
+Monitor JSON Snippet - Ping Basic
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id" : "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "type" : "PING",
+      "delay" : 20,
+      "timeout": 10,
+      "max_retries": 3,
+      "name": "ping_generic"
+    }
+
+Monitor JSON Snippet - HTTP
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id" : "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "delay": 20,
+      "timeout": 10,
+      "max_retries": 3,
+      "type": "HTTP",
+      "http_method": "GET",
+      "url_path": "/healthchecks",
+      "receive_string": "SUCCESS",
+      "expected_codes": [
+        200,
+        202
+      ],
+      "name": "http-generic",
+      "port" : 80
+    }
+
+Monitor JSON Snippet - HTTPS
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ .. code-block:: json
+
+    {
+      "id" : "f9fc6210-8efa-4492-9b4f-d87ba98f35b8",
+      "delay": 20,
+      "timeout": 10,
+      "max_retries": 3,
+      "type": "HTTPS",
+      "insecure": false,
+      "http_method": "POST",
+      "payload": {
+        "content_type" : "application/json",
+        "content": "{'demo': 'JSON', 'Blob': 'of data'}"
+      },
+      "ca_cert": "<CA_CERT_BLOB>",
+      "url_path": "/healthchecks",
+      "receive_string" "SUCCESS",
+      "expected_codes": [
+        200,
+        202
+      ],
+      "name": "https-generic",
+      "port" : 443
+    }
+
+Endpoints
+=========
+
+All of these endpoints will have the usual CRUD methods available
+
+/v0.1/gslbs
+-----------
+
+Returns a list of GLSBs
+
+/v0.1/gslbs/<uuid>
+------------------
+
+Returns a GLSB
+
+/v0.1/gslbs/<uuid>/pools
+------------------------
+
+Returns GLSB's list of pools
+
+/v0.1/gslbs/<uuid>/history
+--------------------------
+
+Returns GLSB's history (up/down/degraded etc)
+
+.. note:: This may or may not make MVP. This should only be a limited history, and for MVP my just be a "last updated" field
+
+/v0.1/pools
+-----------
+
+Returns a list of Pools
+
+/v0.1/pools/<uuid>
+------------------
+
+Returns a pool
+
+/v0.1/pools/<uuid>/monitors
+---------------------------
+
+Returns a pool's list of monitors
+
+/v0.1/pools/<uuid>/pool_members
+-------------------------------
+
+Returns a pool's list of members
+
+/v0.1/pools/<uuid>/pool_members/<uuid>
+--------------------------------------
+
+Returns a pool member
+
+/v0.1/pools/<uuid>/pool_members/<uuid>/status
+---------------------------------------------
+
+Returns a pool members status (Up/Down etc)
+
+/v0.1/pools/<uuid>/pool_members/<uuid>/monitors
+-----------------------------------------------
+
+Returns a members list of monitors
+
+/v0.1/pools/<uuid>/status
+-------------------------
+
+Returns the status of a pool
+
+/v0.1/monitors
+--------------
+
+Returns a list of health monitors
+
+/v0.1/monitors/<uuid>
+---------------------
+
+Returns a monitor
+
+Implementation
+==============
+
+Assignee(s)
+-----------
+
+
+Primary assignee:
+  gslb-core
diff --git a/specs/liberty/placeholder.rst b/specs/liberty/placeholder.rst
deleted file mode 100644
index e8e7649..0000000
--- a/specs/liberty/placeholder.rst
+++ /dev/null
@@ -1,163 +0,0 @@
-..
-
-This work is licensed under a Creative Commons Attribution 3.0 Unported License.
-http://creativecommons.org/licenses/by/3.0/legalcode
-
-..
-  This template should be in ReSTructured text. The filename in the git
-  repository should match the launchpad URL, for example a URL of
-  https://blueprints.launchpad.net/gslb/+spec/awesome-thing should be named
-  awesome-thing.rst .  Please do not delete any of the sections in this
-  template.  If you have nothing to say for a whole section, just write: None
-  For help with syntax, see http://sphinx-doc.org/rest.html
-  To test out your formatting, see http://www.tele3.cz/jbar/rest/rest.html
-
-=============================
- The title of your blueprint
-=============================
-
-Include the URL of your launchpad blueprint:
-
-https://blueprints.launchpad.net/kosmos/+spec/example
-
-Introduction paragraph -- why are we doing anything?
-
-
-Problem description
-===================
-
-A detailed description of the problem.
-
-Proposed change
-===============
-
-Here is where you cover the change you propose to make in detail. How do you
-propose to solve this problem?
-
-If this is one part of a larger effort make it clear where this piece ends. In
-other words, what's the scope of this effort?
-
-Include where in the designate tree hierarchy this will reside.
-
-API Changes
------------
-
-Include API Changes here. If you are adding endpoints / add major modifications
-please ensure you have examples for calls / results - eg:
-
-POST /v2/doohickey
-^^^^^^^^^^^^^^^^^^
-
-This creates a doohicky.
-
-It returns an ID and the doohickey
-
-.. code-block:: http
-
-    POST /v2/doohickey HTTP/1.1
-    Accept: application/json
-    Content-Type: application/json
-
-    {
-        "doohickey":{
-            "foo":"bar"
-        }
-    }
-
-    HTTP/1.1 201 Created
-    Content-Type: application/json; charset=UTF-8
-    Location: /v2/doohickey/cddda8f0-f558-11e3-a3ac-0800200c9a66
-
-    {
-        "doohickey":{
-            "id":"cddda8f0-f558-11e3-a3ac-0800200c9a66",
-            "foo":"bar",
-            "links":{
-                "self" : "/v2/doohickey/cddda8f0-f558-11e3-a3ac-0800200c9a66"
-            }
-        }
-    }
-
-It may be usefull to add a table with the parameters, and a info about them
-
-+-----------+--------------------------------+----------+
-| Parameter | Description                    | Required |
-+===========+================================+==========+
-| foo       | the foo value for the doohicky | Yes      |
-+-----------+--------------------------------+----------+
-
-Central Changes
----------------
-
-Any changes to the central service
-
-Storage Changes
----------------
-
-Any changes to the DB. This should be a table (if creating a new table)
-eg:
-
-
-New Table - DooHickey
-^^^^^^^^^^^^^^^^^^^^^
-
-+-----+---------+-----------+---------+
-| Row | Type    | Nullable? | Unique? |
-+=====+=========+===========+=========+
-| id  | uuid    | No        | Yes     |
-+-----+---------+-----------+---------+
-| foo | VARCHAR | No        | No      |
-+-----+---------+-----------+---------+
-
-Other Changes
--------------
-
-Any other changes to Designate, broken down by which sub system is being
-changed
-
-Alternatives
-------------
-
-This is an optional section, where it does apply we'd just like a demonstration
-that some thought has been put into why the proposed approach is the best one.
-
-Implementation
-==============
-
-Assignee(s)
------------
-
-Who is leading the writing of the code? Or is this a blueprint where you're
-throwing it out there to see who picks it up?
-
-If more than one person is working on the implementation, please designate the
-primary author and contact.
-
-Primary assignee:
-  <launchpad-id or None>
-
-Can optionally can list additional ids if they intend on doing
-substantial implementation work on this blueprint.
-
-Milestones
-----------
-
-Target Milestone for completion:
-  Juno-1
-
-Work Items
-----------
-
-Work items or tasks -- break the feature up into the things that need to be
-done to implement it. Those parts might end up being done by different people,
-but we're mostly trying to understand the timeline for implementation.
-
-
-Dependencies
-============
-
-- Include specific references to specs and/or blueprints in designate, or in other
-  projects, that this one either depends on or is related to.
-
-- Does this feature require any new library dependencies or code otherwise not
-  included in OpenStack? Or does it depend on a specific version of library?