b2468cfe55
Change-Id: If5195f188524291cc9e6e2d85b78b8c32deeb1e9
465 lines
14 KiB
ReStructuredText
465 lines
14 KiB
ReStructuredText
..
|
|
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
|
|
|