Added Operator API spec for Octavia v0.5
Change-Id: If5195f188524291cc9e6e2d85b78b8c32deeb1e9
This commit is contained in:
parent
33859efeb5
commit
b2468cfe55
464
specs/version0.5/operator-api.rst
Normal file
464
specs/version0.5/operator-api.rst
Normal file
@ -0,0 +1,464 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==========================================
|
||||
Octavia Operator API Foundation
|
||||
==========================================
|
||||
|
||||
https://blueprints.launchpad.net/octavia/+spec/operator-api
|
||||
|
||||
Octavia needs the foundation of the Operator API created. This spec is not
|
||||
meant to address every functionality needed in the operator API, only to
|
||||
create a solid foundation to iterate on in the future.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
This is needed because this will be the mechanism to actually communicate with
|
||||
Octavia. Doing CRUD operations on all entities will be needed ASAP so that the
|
||||
system can be thoroughly tested.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
Expose Pecan resources
|
||||
- Defined explicitly below in the REST API Impact
|
||||
|
||||
Create WSME types
|
||||
- These will be responsible for request validation and deserialization, and
|
||||
also response serialization
|
||||
|
||||
Setup paste deploy
|
||||
- This will be used in the future to interact with keystone and other
|
||||
middleware, however at first this will not have any authentication so
|
||||
tenant_ids will just have to be made up uuids.
|
||||
|
||||
Create a handler interface and a noop logging implementation
|
||||
- A handler interface will be created. This abstraction layer is needed
|
||||
because calling the controller in the resource layer will work for 0.5 but 1.0
|
||||
will be sending it off to a queue. With this abstraction layer we can easily
|
||||
swap out a 0.5 controller with a 1.0 controller.
|
||||
|
||||
Call database repositories
|
||||
- Most if not all resources will make a call to the database
|
||||
|
||||
Call handler
|
||||
- Only create, update, and delete operations should call the handler
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
None
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
Will need to add some methods to the database repository
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
Exposed Resources and Methods
|
||||
|
||||
POST /loadbalancers
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** vip - another JSON object with one required attribute from the following
|
||||
*** net_port_id - uuid
|
||||
*** subnet_id - uuid
|
||||
*** floating_ip_id - uuid
|
||||
*** floating_ip_network_id - uuid
|
||||
** tenant_id - string - optional - default "0" * 36 (for now)
|
||||
** name - string - optional - default null
|
||||
** description - string - optional - default null
|
||||
** enabled - boolean - optional - default true
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** vip - another JSON object
|
||||
*** net_port_id - uuid
|
||||
*** subnet_id - uuid
|
||||
*** floating_ip_id - uuid
|
||||
*** floating_ip_network_id - uuid
|
||||
** tenant_id - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
PUT /loadbalancers/{lb_id}
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** vip - another JSON object
|
||||
*** net_port_id - uuid
|
||||
*** subnet_id - uuid
|
||||
*** floating_ip_id - uuid
|
||||
*** floating_ip_network_id - uuid
|
||||
** tenant_id - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
DELETE /loadbalancers/{lb_id}
|
||||
* Successful Status Code - 202
|
||||
* No response or request body
|
||||
|
||||
GET /loadbalancers/{lb_id}
|
||||
* Successful Status Code - 200
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** vip - another JSON object
|
||||
*** net_port_id - uuid
|
||||
*** subnet_id - uuid
|
||||
*** floating_ip_id - uuid
|
||||
*** floating_ip_network_id - uuid
|
||||
** tenant_id - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
GET /loadbalancers?tenant_id
|
||||
* Successful Status Code - 200
|
||||
* tenant_id is an optional query parameter to filter by tenant_id
|
||||
* returns a list of load balancers
|
||||
|
||||
|
||||
POST /loadbalancers/{lb_id}/listeners
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS) - required
|
||||
** protocol_port - integer - required
|
||||
** connection_limit - integer - optional
|
||||
** default_tls_container_id - uuid - optional
|
||||
** tenant_id - string - optional - default "0" * 36 (for now)
|
||||
** name - string - optional - default null
|
||||
** description - string - optional - default null
|
||||
** enabled - boolean - optional - default true
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** protocol_port - integer
|
||||
** connection_limit - integer
|
||||
** default_tls_container_id - uuid
|
||||
** tenant_id - string - optional
|
||||
** name - string - optional
|
||||
** description - string - optional
|
||||
** enabled - boolean - optional
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
PUT /loadbalancers/{lb_id}/listeners/{listener_id}
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** protocol - string enum
|
||||
** protocol_port - integer
|
||||
** connection_limit - integer
|
||||
** default_tls_container_id - uuid
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** protocol_port - integer
|
||||
** connection_limit - integer
|
||||
** default_tls_container_id - uuid
|
||||
** tenant_id - string - optional
|
||||
** name - string - optional
|
||||
** description - string - optional
|
||||
** enabled - boolean - optional
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
DELETE /loadbalancers/{lb_id}/listeners/{listener_id}
|
||||
* Successful Status Code - 202
|
||||
* No response or request body
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}
|
||||
* Successful Status Code - 200
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** protocol_port - integer
|
||||
** connection_limit - integer
|
||||
** default_tls_container_id - uuid
|
||||
** tenant_id - string - optional
|
||||
** name - string - optional
|
||||
** description - string - optional
|
||||
** enabled - boolean - optional
|
||||
** provisioning_status - string enum - (ACTIVE, PENDING_CREATE, PENDING_UPDATE,
|
||||
PENDING_DELETE, DELETED, ERROR)
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners
|
||||
* Successful Status Code - 200
|
||||
* A list of listeners on load balancer lb_id
|
||||
|
||||
|
||||
POST /loadbalancers/{lb_id}/listeners/{listener_id}/pools
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS) - required
|
||||
** lb_algorithm - string enum - (ROUND_ROBIN, LEAST_CONNECTIONS,
|
||||
RANDOM) - required
|
||||
** session_persistence - JSON object - optional
|
||||
*** type - string enum - (SOURCE_IP, HTTP_COOKIE) - required
|
||||
*** cookie_name - string - required for HTTP_COOKIE type
|
||||
** tenant_id - string - optional - default "0" * 36 (for now)
|
||||
** name - string - optional - default null
|
||||
** description - string - optional - default null
|
||||
** enabled - boolean - optional - default true
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** lb_algorithm - string enum - (ROUND_ROBIN, LEAST_CONNECTIONS, RANDOM)
|
||||
** session_persistence - JSON object
|
||||
*** type - string enum - (SOURCE_IP, HTTP_COOKIE)
|
||||
*** cookie_name - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
PUT /loadbalancers/{lb_id}/listeners/{listener_id}/pools/{pool_id}
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** lb_algorithm - string enum - (ROUND_ROBIN, LEAST_CONNECTIONS, RANDOM)
|
||||
** session_persistence - JSON object
|
||||
*** type - string enum - (SOURCE_IP, HTTP_COOKIE)
|
||||
*** cookie_name - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** lb_algorithm - string enum - (ROUND_ROBIN, LEAST_CONNECTIONS, RANDOM)
|
||||
** session_persistence - JSON object
|
||||
*** type - string enum - (SOURCE_IP, HTTP_COOKIE)
|
||||
*** cookie_name - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
DELETE /loadbalancers/{lb_id}/listeners/{listener_id}/pools/{pool_id}
|
||||
* Successful Status Code - 202
|
||||
No request or response body
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}/pools/{pool_id}
|
||||
* Successful Status Code - 200
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** protocol - string enum - (TCP, HTTP, HTTPS)
|
||||
** lb_algorithm - string enum - (ROUND_ROBIN, LEAST_CONNECTIONS, RANDOM)
|
||||
** session_persistence - JSON object
|
||||
*** type - string enum - (SOURCE_IP, HTTP_COOKIE)
|
||||
*** cookie_name - string
|
||||
** name - string
|
||||
** description - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}/pools
|
||||
* Successful Status Code - 200
|
||||
* Returns a list of pools
|
||||
|
||||
|
||||
POST /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/healthmonitor
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** type - string enum - (HTTP, HTTPS, TCP) - required
|
||||
** delay - integer - required
|
||||
** timeout - integer - required
|
||||
** fall_threshold - integer - required
|
||||
** rise_threshold - integer - required
|
||||
** http_method - string enum - (GET, POST, PUT, DELETE) - required for HTTP(S)
|
||||
** url_path - string - required for HTTP(S)
|
||||
** expected_codes - comma delimited string - required for HTTP(S)
|
||||
** enabled - boolean - required - default true
|
||||
* JSON Response Body Attributes
|
||||
** type - string enum - (HTTP, HTTPS, TCP)
|
||||
** delay - integer
|
||||
** timeout - integer
|
||||
** fall_threshold - integer
|
||||
** rise_threshold - integer
|
||||
** http_method - string enum - (GET, POST, PUT, DELETE)
|
||||
** url_path - string
|
||||
** expected_codes - comma delimited string
|
||||
** enabled - boolean
|
||||
|
||||
PUT /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/healthmonitor
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** type - string enum - (HTTP, HTTPS, TCP)
|
||||
** delay - integer
|
||||
** timeout - integer
|
||||
** fall_threshold - integer
|
||||
** rise_threshold - integer
|
||||
** http_method - string enum - (GET, POST, PUT, DELETE)
|
||||
** url_path - string
|
||||
** expected_codes - comma delimited string
|
||||
** enabled - boolean
|
||||
* JSON Response Body Attributes
|
||||
** type - string enum - (HTTP, HTTPS, TCP)
|
||||
** delay - integer
|
||||
** timeout - integer
|
||||
** fall_threshold - integer
|
||||
** rise_threshold - integer
|
||||
** http_method - string enum - (GET, POST, PUT, DELETE)
|
||||
** url_path - string
|
||||
** expected_codes - comma delimited string
|
||||
** enabled - boolean
|
||||
|
||||
DELETE /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/healthmonitor
|
||||
* Successful Status Code - 202
|
||||
No request or response body
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/healthmonitor
|
||||
* Successful Status Code - 200
|
||||
* JSON Response Body Attributes
|
||||
** type - string enum - (HTTP, HTTPS, TCP)
|
||||
** delay - integer
|
||||
** timeout - integer
|
||||
** fall_threshold - integer
|
||||
** rise_threshold - integer
|
||||
** http_method - string enum - (GET, POST, PUT, DELETE)
|
||||
** url_path - string
|
||||
** expected_codes - comma delimited string
|
||||
** enabled - boolean
|
||||
|
||||
|
||||
POST /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/members
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** ip_address - IP Address - required
|
||||
** protocol_port - integer - required
|
||||
** weight - integer - optional
|
||||
** subnet_id - uuid - optional
|
||||
** tenant_id - string - optional - default "0" * 36 (for now)
|
||||
** enabled - boolean - optional - default true
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** ip_address - IP Address
|
||||
** protocol_port - integer
|
||||
** weight - integer
|
||||
** subnet_id - uuid
|
||||
** tenant_id - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
PUT /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/members/{member_id}
|
||||
* Successful Status Code - 202
|
||||
* JSON Request Body Attributes
|
||||
** protocol_port - integer - required
|
||||
** weight - integer - optional
|
||||
** enabled - boolean - optional - default true
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** ip_address - IP Address
|
||||
** protocol_port - integer
|
||||
** weight - integer
|
||||
** subnet_id - uuid
|
||||
** tenant_id - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
DELETE /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/members/{member_id}
|
||||
* Successful Status Code - 202
|
||||
No request or response body
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/members/{member_id}
|
||||
* Successful Status Code - 200
|
||||
* JSON Response Body Attributes
|
||||
** id - uuid
|
||||
** ip_address - IP Address
|
||||
** protocol_port - integer
|
||||
** weight - integer
|
||||
** subnet_id - uuid
|
||||
** tenant_id - string
|
||||
** enabled - boolean
|
||||
** operating_status - string enum - (ONLINE, OFFLINE, DEGRADED, ERROR)
|
||||
|
||||
GET /loadbalancers/{lb_id}/listeners/{listener_id}/
|
||||
pools/{pool_id}/members
|
||||
* Successful Status Code - 200
|
||||
Returns a list of members
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
No authentication with keystone
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
Not ready for end user
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
None
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
brandon-logan
|
||||
|
||||
Work Items
|
||||
----------
|
||||
Expose Pecan resources
|
||||
Create WSME types
|
||||
Setup paste deploy
|
||||
Create a handler interface and a noop logging implementation
|
||||
Call database repositories
|
||||
Call handler
|
||||
|
||||
Dependencies
|
||||
============
|
||||
db-repositories
|
||||
|
||||
Testing
|
||||
=======
|
||||
Unit tests
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
None
|
||||
|
||||
References
|
||||
==========
|
||||
None
|
||||
|
Loading…
Reference in New Issue
Block a user