Octavia API =========== Authentication -------------- Using the version 1 API ----------------------- For the purpose of examples, assume there is an Octavia API server running at the URL ``http://octavia.example.com`` on the default port 80. Note: Requests to update any resource on a load balancer in an immutable state will fail with a response code ``409``. Available Statuses on Entities ------------------------------ +---------------------+--------------------------------+ | Status type | Statuses | +---------------------+--------------------------------+ | Operating Status | ``ONLINE``, ``OFFLINE``, | | | ``DEGRADED``, ``ERROR``, | | | ``NO_MONITOR`` | +---------------------+--------------------------------+ | Provisioning Status | ``ACTIVE``, ``DELETED``, | | | ``ERROR``, ``PENDING_DELETE``, | | | ``PENDING_UPDATE``, | | | ``PENDING_CREATE`` | +---------------------+--------------------------------+ Response Codes -------------- - ``200`` - The synchronous request was successful - ``202`` - The asynchronous request was accepted and is being processed - ``400`` - The request could not be understood - Example: Malformed JSON in request body - ``401`` - Unauthorized: Access is denied due to invalid credentials - ``403`` - The project is over quota for the request - ``404`` - The requested resource does not exist - ``409`` - The request has a conflict with existing resources - Example: Protocol for ``listener`` does not match protocol on ``pool`` - ``500`` - The request encountered an unexpected failure - ``503`` - The project is busy with other requests, try again later Load Balancers -------------- +-----------------------------------------------------------------------+ | **Fully Populated Load Balancer Object** | +---------------------+------------+------------------------------------+ | Parameters | Type | Description | +=====================+============+====================================+ | id | UUID | Load Balancer ID | +---------------------+------------+------------------------------------+ | vip | VIP Object | JSON VIP object below | +---------------------+------------+------------------------------------+ | project_id | UUID | ``UUID`` for project | +---------------------+------------+------------------------------------+ | name | String | String for load balancer name | +---------------------+------------+------------------------------------+ | description | String | String detailing information \ | | | | about the load balancer | +---------------------+------------+------------------------------------+ | enabled | Boolean | Whether or not the load \ | | | | balancer should be online \ | | | | immediately | +---------------------+------------+------------------------------------+ | operating_status | String | Network status of a load balancer | +---------------------+------------+------------------------------------+ | provisioning_status | String | Physical status of a load balancer | +---------------------+------------+------------------------------------+ Virtual IP ********** The following table lists the attributes of a VIP. If only port_id is provided then the network_id will be populated. If only network_id is provided then a port will be created and the port_id will be returned. If an ip_address is provided then that IP will be attempted to be assigned to the VIP as long as port_id or network_id is provided as well. +----------------------------------------------------------------------+ | **Fully Populated VIP Object** | +------------------------+----------+----------------------------------+ | Parameters | Type | Description | +========================+==========+==================================+ | ip_address | IPv(4|6) | Frontend IP of load balancer | +------------------------+----------+----------------------------------+ | port_id | UUID | ``UUID`` for port | | | | (equivalent to neutron port) | +------------------------+----------+----------------------------------+ | network_id | UUID | ``UUID`` for network | | | | (equivalent to neutron subnet) | +------------------------+----------+----------------------------------+ List Load Balancers ******************* Retrieve a list of load balancers. +----------------+-------------------------------+ | Request Type | ``GET`` | +----------------+-------------------------------+ | Endpoint | ``URL/v1/loadbalancers`` | +----------------+---------+---------------------+ | | Success | 200 | | Response Codes +---------+---------------------+ | | Error | 400, 401, 404, 500 | +----------------+---------+---------------------+ **Response Example**:: [ { "id": "bdd6532c-28ff-4ab9-b582-8b10f1ae5551", "vip": { "port_id": "f6c2fd2e-d9c2-404d-9886-759b034c04ad", "network_id": "e1a4880d-6d9f-4784-9a03-5cc7a81990a7", "ip_address": "192.0.2.1" }, "name": "lb_name", "description": "lb_description", "enabled": true, "provisioning_status": "ACTIVE", "operating_status": "ONLINE" } ] List Load Balancer Details ************************** Retrieve details of a load balancer. +----------------+----------------------------------+ | Request Type | ``GET`` | +----------------+----------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}`` | +----------------+---------+------------------------+ | | Success | 200 | | Response Codes +---------+------------------------+ | | Error | 401, 404, 500 | +----------------+---------+------------------------+ **Response Example**:: { "id": "ea200d0d-d3fd-4033-8a3c-e6fcd02bf288", "vip":{ "port_id": "9d4b829b-10f6-4119-8cce-33e59e5016f8", "network_id": "5c124402-fe20-48c6-927f-1c0eda152449", "ip_address": "192.0.2.1" }, "name": "lb_name", "description": "lb_description", "enabled": true, "provisioning_status": "ACTIVE", "operating_status": "ONLINE" } List Load Balancer Statistics ***************************** Retrieve the stats of a load balancer. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/stats`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "loadbalancer": { "bytes_in": 0, "bytes_out": 0, "active_connections": 0, "total_connections": 0, "request_errors": 0, "listeners": [{ "id": "9222e04d-5f40-441b-89ff-fdad75c91d51" "bytes_in": 0, "bytes_out": 0, "active_connections": 0, "total_connections": 0, "request_errors": 0, }] } } Create Load Balancer ******************** Create a load balancer. +----------------+----------------------------------------+ | Request Type | ``POST`` | +----------------+----------------------------------------+ | Endpoint | ``URL/v1/loadbalancers`` | +----------------+---------+------------------------------+ | | Success | 202 | | Response Codes +---------+------------------------------+ | | Error | 400, 401, 403, 404, 500, 503 | +----------------+---------+------------------------------+ | +------------------------+ | Request Parameters | +-------------+----------+ | Parameters | Required | +=============+==========+ | vip | yes | +-------------+----------+ | project_id | no | +-------------+----------+ | name | no | +-------------+----------+ | description | no | +-------------+----------+ | enabled | no | +-------------+----------+ **Request Example**:: { "vip": { "subnet_id": "81c49c61-a655-4aa0-9af5-65bbe8347eb1" }, "name": "lb_name", "description": "lb_description", } **Response Example**:: { "id": "98066b41-f328-412e-b7f5-e8cac8d8974f", "vip":{ "port_id": "1f1716a1-997f-4bfe-a08d-9c895b6f206e", "subnet_id": "81c49c61-a655-4aa0-9af5-65bbe8347eb1", "ip_address": "192.0.2.1" }, "name": "lb_name", "description": "lb_description", "enabled": true, "provisioning_status": "PENDING_CREATE", "operating_status": "OFFLINE" } Create Fully Populated Load Balancer ++++++++++++++++++++++++++++++++++++ Create a load balancer including listeners, sni containers, pools, health monitors, l7 policies, and l7 rules. Refer to the appropriate objects details for available attributes. **Request Example**:: { "vip": { "subnet_id": "d144b932-9566-4871-bfb3-00ecda4816b1" }, "name": "lb_name", "description": "lb_description", "listeners": [{ "protocol": "HTTP", "protocol_port": 80, "connection_limit": 10, "name": "listener_name", "description": "listener_description", "enabled": true, "l7policies": [{ "action": "REDIRECT_TO_POOL", "redirect_pool": { "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "redirect_pool", "description": "redirect_pool_description", "enabled": true } }], "default_pool": { "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "pool_name", "description": "pool_description", "enabled": true, "members": [{ "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "f3894f9d-e034-44bb-a966-dc6609956c6d", "enabled": true }], "health_monitor":{ "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } } }] } **Response Example**:: { "description": "lb_description", "provisioning_status": "PENDING_CREATE", "enabled": true, "listeners": [{ "tls_certificate_id": null, "protocol": "HTTP", "description": "listener_description", "provisioning_status": "PENDING_CREATE", "default_pool": { "lb_algorithm": "ROUND_ROBIN", "protocol": "HTTP", "description": "pool_description", "health_monitor": { "project_id": "2020619d-e409-4277-8169-832de678f4e8", "expected_codes": "200", "enabled": true, "delay": 10, "fall_threshold": 10, "http_method": "GET", "rise_threshold": 10, "timeout": 10, "url_path": "/some/custom/path", "type": "HTTP" }, "enabled": true, "session_persistence": { "cookie_name": "cookie_name", "type": "HTTP_COOKIE" }, "members": [{ "project_id": "2020619d-e409-4277-8169-832de678f4e8", "weight": 10, "subnet_id": "f3894f9d-e034-44bb-a966-dc6609956c6d", "enabled": true, "protocol_port": 80, "ip_address": "10.0.0.1", "id": "bd105645-e444-4dd4-b207-7b4270b980ef", "operating_status": "OFFLINE" }], "project_id": "2020619d-e409-4277-8169-832de678f4e8", "id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db", "operating_status": "OFFLINE", "name": "pool_name" }, "connection_limit": 10, "enabled": true, "project_id": "2020619d-e409-4277-8169-832de678f4e8", "default_pool_id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db", "l7policies": [{ "redirect_pool_id": "uuid", "description": null, "redirect_pool": { "lb_algorithm": "ROUND_ROBIN", "protocol": "HTTP", "description": "redirect_pool_description", "enabled": true, "session_persistence": { "cookie_name": "cookie_name", "type": "HTTP_COOKIE" }, "members": [], "project_id": "2020619d-e409-4277-8169-832de678f4e8", "id": "49f1fbad-a9f8-434f-9e7f-41ed4bf330db", "operating_status": "OFFLINE", "name": "redirect_pool" }, "l7rules": [], "enabled": true, "redirect_url": null, "action": "REDIRECT_TO_POOL", "position": 1, "id": "b69b041c-0fa7-4682-b04f-c0383178a9a7", "name": null }], "sni_containers": [], "protocol_port": 80, "id": "6249f94f-c936-4e69-9635-8f1b82c99d54", "operating_status": "OFFLINE", "name": "listener_name" }], "vip": { "subnet_id": "d144b932-9566-4871-bfb3-00ecda4816b1", "port_id": null, "ip_address": null }, "project_id": "2020619d-e409-4277-8169-832de678f4e8", "id": "65e2ee4f-8aca-486a-88d4-0b9e7023795f", "operating_status": "OFFLINE", "name": "lb_name" } Update Load Balancer ******************** Modify mutable fields of a load balancer. +----------------+-----------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}`` | +----------------+---------+-------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------+ | +-------------+----------+ | Parameters | Required | +=============+==========+ | name | no | +-------------+----------+ | description | no | +-------------+----------+ | enabled | no | +-------------+----------+ **Request Example**:: { "name": "diff_lb_name", "description": "diff_lb_description", "enabled": false } **Response Example**:: { "id": "6853b957-4bc6-471c-8f50-aeee8a9533ec", "vip":{ "port_id": "uuid", "network_id": "uuid", "ip_address": "192.0.2.1" }, "name": "diff_lb_name", "description": "diff_lb_description", "enabled": true, "provisioning_status": "PENDING_CREATE", "operating_status": "OFFLINE" } Delete Load Balancer ******************** Delete a load balancer. +----------------+----------------------------------+ | Request Type | ``DELETE`` | +----------------+----------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}`` | +----------------+---------+------------------------+ | | Success | 202 | | Response Codes +---------+------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+------------------------+ **No request/response body** Delete Load Balancer Cascade **************************** Delete a load balancer and all the underlying resources (e.g. listener, pool). +----------------+-------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/delete_cascade`` | +----------------+---------+---------------------------------------+ | | Success | 202 | | Response Codes +---------+---------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+---------------------------------------+ **No request/response body** Listeners --------- +------------------------------------------------------------------------+ | **Fully Populated Listener Object** | +---------------------+------------+-------------------------------------+ | Parameters | Type | Description | +=====================+============+=====================================+ | id | UUID | Listener ID | +---------------------+------------+-------------------------------------+ | protocol | String | Network protocol from the \ | | | | following: ``TCP``, ``HTTP``, \ | | | | ``HTTPS`` | +---------------------+------------+-------------------------------------+ | protocol_port | UUID | Port the protocol will listen on | +---------------------+------------+-------------------------------------+ | connection_limit | String | Number of connections allowed at \ | | | | any given time | +---------------------+------------+-------------------------------------+ | default_tls\ | String | Barbican ``UUID`` for TLS container | | _container_id | | | +---------------------+------------+-------------------------------------+ | default_pool_id | UUID | ``UUID`` of the pool to which \ | | | | requests will be routed by default | +---------------------+------------+-------------------------------------+ | project_id | String | ``UUID`` for project | +---------------------+------------+-------------------------------------+ | name | String | String detailing the name of the \ | | | | listener | +---------------------+------------+-------------------------------------+ | description | String | String detailing information \ | | | | about the listener | +---------------------+------------+-------------------------------------+ | enabled | Boolean | Whether or not the listener \ | | | | should be online immediately | +---------------------+------------+-------------------------------------+ | operating_status | String | Network status of a listener | +---------------------+------------+-------------------------------------+ | provisioning_status | String | Physical status of a listener | +---------------------+------------+-------------------------------------+ | insert_headers | Dictionary | Dictionary of additional headers \ | | | | insertion into HTTP header | +---------------------+------------+-------------------------------------+ List Listeners ************** Retrieve a list of listeners. +----------------+--------------------------------------------+ | Request Type | ``GET`` | +----------------+--------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners`` | +----------------+---------+----------------------------------+ | | Success | 200 | | Response Codes +---------+----------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+----------------------------------+ **Response Example**:: [ { "tls_certificate_id": null, "protocol": "HTTP", "description": "listener_description", "provisioning_status": "ACTIVE", "connection_limit": 10, "enabled": true, "sni_containers": [], "protocol_port": 80, "id": "0cc73a2d-8673-4476-bc02-8d7e1f9b7f07", "operating_status": "ONLINE", "name": "listener_name", "default_pool_id": "6c32713a-de18-45a5-b547-63740ec20efb" } ] List Listener Details ********************* Retrieve details of a listener. +----------------+----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` | +----------------+---------+------------------------------------------------+ | | Success | 200 | | Response Codes +---------+------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+------------------------------------------------+ **Response Example**:: { "tls_certificate_id": null, "protocol": "HTTP", "description": "listener_description", "provisioning_status": "ACTIVE", "connection_limit": 10, "enabled": true, "sni_containers": [], "protocol_port": 80, "id": "uuid", "operating_status": "ONLINE", "name": "listener_name", "default_pool_id": "e195954b-78eb-45c2-8a9c-2acfe6a65368" } List Listener Statistics ************************ Retrieve the stats of a listener. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}``\ | | | ``/stats`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "listener": { "bytes_in": 1000, "bytes_out": 1000, "active_connections": 1, "total_connections": 1, "request_errors": 0 } } Create Listener *************** Create a listener. +----------------+---------------------------------------------+ | Request Type | ``POST`` | +----------------+---------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners`` | +----------------+---------+-----------------------------------+ | | Success | 202 | | Response Codes +---------+-----------------------------------+ | | Error | 400, 401, 403, 404, 409, 500, 503 | +----------------+---------+-----------------------------------+ | +------------------+----------+ | Parameters | Required | +==================+==========+ | protocol | yes | +------------------+----------+ | protocol_port | yes | +------------------+----------+ | connection_limit | no | +------------------+----------+ | default_tls\ | no | | _container_id | | +------------------+----------+ | project_id | no | +------------------+----------+ | name | no | +------------------+----------+ | description | no | +------------------+----------+ | default_pool_id | no | +------------------+----------+ | enabled | no | +------------------+----------+ | insert_headers | no | +------------------+----------+ **Request Example**:: { "protocol": "HTTPS", "protocol_port": 88, "connection_limit": 10, "default_tls_container_id": "uuid", "name": "listener_name", "description": "listener_description", "default_pool_id": "c50bd338-dd67-41f8-ab97-fdb42ee9080b", "enabled": true, "insert_headers": {"X-Forwarded-For": "true", "X-Forwarded-Port": "true"} } **Response Example**:: { "tls_certificate_id": null, "protocol": "HTTPS", "description": "listener_description", "provisioning_status": "PENDING_CREATE", "connection_limit": 10, "enabled": true, "sni_containers": [], "protocol_port": 88, "id": "e4c463d7-f21e-4b82-b2fd-813656824d90", "operating_status": "OFFLINE", "name": "listener_name", "default_pool_id": "c50bd338-dd67-41f8-ab97-fdb42ee9080b" } Update Listener *************** Modify mutable fields of a listener. +----------------+----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` | +----------------+---------+------------------------------------------------+ | | Success | 202 | | Response Codes +---------+------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+------------------------------------------------+ | +------------------+----------+ | Parameters | Required | +==================+==========+ | protocol | no | +------------------+----------+ | protocol_port | no | +------------------+----------+ | connection_limit | no | +------------------+----------+ | tls_certificate\ | no | | _id | | +------------------+----------+ | name | no | +------------------+----------+ | description | no | +------------------+----------+ | default_pool_id | no | +------------------+----------+ | enabled | no | +------------------+----------+ **Request Example**:: { "protocol": "HTTPS", "protocol_port": 88, "connection_limit": 10, "tls_certificate_id": "af4783a7-1bae-4dc3-984a-1bdf98639ef1", "name": "listener_name", "description": "listener_description", "default_pool_id": "262d81d4-3672-4a63-beb9-0b851063d480", "enabled": true } **Response Example**:: { "tls_certificate_id": "af4783a7-1bae-4dc3-984a-1bdf98639ef1", "protocol": "HTTPS", "description": "listener_description", "provisioning_status": "ACTIVE", "connection_limit": 10, "enabled": true, "sni_containers": [], "protocol_port": 88, "id": "15d69c9b-c87c-4155-a88f-f8bbe4298590", "operating_status": "ONLINE", "name": "listener_name", "default_pool_id": "262d81d4-3672-4a63-beb9-0b851063d480" } Delete Listener *************** Delete a listener. +----------------+----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/listeners/{listener_id}`` | +----------------+---------+------------------------------------------------+ | | Success | 202 | | Response Codes +---------+------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+------------------------------------------------+ **No request/response body** Pools ----- +--------------------------------------------------------------------------+ | **Fully Populated Pool Object** | +---------------------+---------------+------------------------------------+ | Parameters | Type | Description | +=====================+===============+====================================+ | id | UUID | Pool ID | +---------------------+---------------+------------------------------------+ | protocol | String | Network protocol from the \ | | | | following: ``TCP``, ``HTTP``, \ | | | | ``HTTPS`` | +---------------------+---------------+------------------------------------+ | lb_algorithm | UUID | Load balancing algorithm from \ | | | | the following: \ | | | | ``LEAST_CONNECTIONS``, \ | | | | ``SOURCE_IP``, ``ROUND_ROBIN`` | +---------------------+---------------+------------------------------------+ | session_persistence | Session \ | JSON Session Persistence object \ | | | Persistence \ | (see below) | | | Object | | +---------------------+---------------+------------------------------------+ | name | String | String for pool name | +---------------------+---------------+------------------------------------+ | description | String | String detailing information \ | | | | about the pool | +---------------------+---------------+------------------------------------+ | enabled | Boolean | Whether or not the pool \ | | | | should be online immediately | +---------------------+---------------+------------------------------------+ | +---------------------------------------------------------------+ | **Fully Populated Session Persistence Object** | +-------------+--------+----------------------------------------+ | Parameters | Type | Description | +-------------+--------+----------------------------------------+ | type | String | Type of session persistence from the \ | | | | following: HTTP_COOKIE, SOURCE_IP | +-------------+--------+----------------------------------------+ | cookie_name | String | The name of the cookie. (Only \ | | | | required for HTTP_COOKIE) | +-------------+--------+----------------------------------------+ List Pools ********** Retrieve a list of pools on a loadbalancer. This API endpoint will list all pools on a loadbalancer or optionally all the active pools on a listener, depending on whether the ``listener_id`` query string is appended below. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoints | ``URL/v1/loadbalancers/{lb_id}/pools``\ | | | ``[?listener_id={listener_id}]`` | | | | | | **DEPRECATED** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: [ { "id": "520367bf-0b09-4b91-8a2a-9a5996503bdc", "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "pool_name", "description": "pool_description", "enabled": true, "operating_status": "ONLINE" } ] List Pool Details ***************** Retrieve details of a pool. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "id": "46c1d8da-bb98-4922-8262-5b36dc11017f", "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "pool_name", "description": "pool_description", "enabled": true, "operating_status": "ONLINE" } Create Pool *********** Create a pool. +----------------+-----------------------------------------------------------+ | Request Type | ``POST`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/pools`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 403, 404, 500, 503 | +----------------+---------+-------------------------------------------------+ | +--------------+----------+ | Parameters | Required | +==============+==========+ | protocol | yes | +--------------+----------+ | lb_algorithm | yes | +--------------+----------+ | session\ | no | | _persistence | | +--------------+----------+ | name | no | +--------------+----------+ | description | no | +--------------+----------+ | enabled | no | +--------------+----------+ **Request Example**:: { "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "pool_name", "description": "pool_description", "enabled": true } **Response Example**:: { "lb_algorithm": "ROUND_ROBIN", "protocol": "HTTP", "description": "pool_description", "enabled": true, "session_persistence": { "cookie_name": "cookie_name", "type": "HTTP_COOKIE" }, "id": "6ed2783b-2d87-488d-8452-9b5dfa804728", "operating_status": "OFFLINE", "name": "pool_name" } Update Pool *********** Modify mutable attributes of a pool. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ | +---------------------+----------+ | Parameters | Required | +=====================+==========+ | protocol | no | +---------------------+----------+ | lb_algorithm | yes | +---------------------+----------+ | session_persistence | no | +---------------------+----------+ | name | no | +---------------------+----------+ | description | no | +---------------------+----------+ | enabled | no | +---------------------+----------+ **Request Example**:: { "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "diff_pool_name", "description": "pool_description", "enabled": true } **Response Example**:: { "id": "44034c98-47c9-48b3-8648-2024eeafdb53", "protocol": "HTTP", "lb_algorithm": "ROUND_ROBIN", "session_persistence": { "type": "HTTP_COOKIE", "cookie_name": "cookie_name" }, "name": "diff_pool_name", "description": "pool_description", "enabled": true, "operating_status": "ONLINE" } Delete Pool *********** Delete a pool. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}/pools/{pool_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ **No request/response body** Health Monitors --------------- +-----------------------------------------------------------------+ | **Fully Populated Health Monitor Object** | +----------------+---------+--------------------------------------+ | Parameters | Type | Description | +================+=========+======================================+ | type | String | Type of health monitoring from \ | | | | the following: ``PING``, ``TCP``, \ | | | | ``HTTP``, ``HTTPS`` | +----------------+---------+--------------------------------------+ | delay | Integer | Delay between health checks | +----------------+---------+--------------------------------------+ | timeout | Integer | Timeout to decide whether or not \ | | | | a health check fails | +----------------+---------+--------------------------------------+ | fall_threshold | Integer | Number of health checks that can \ | | | | fail before the pool member is \ | | | | moved from ``ONLINE`` to ``OFFLINE`` | +----------------+---------+--------------------------------------+ | rise_threshold | Integer | Number of health checks that can \ | | | | pass before the pool member is \ | | | | moved from ``OFFLINE`` to ``ONLINE`` | +----------------+---------+--------------------------------------+ | http_method | String | HTTP protocol method to use for \ | | | | the health check request | +----------------+---------+--------------------------------------+ | url_path | String | URL endpoint to hit for the \ | | | | health check request | +----------------+---------+--------------------------------------+ | expected_codes | String | Comma separated list of expected \ | | | | response codes during the health \ | | | | check | +----------------+---------+--------------------------------------+ | enabled | Boolean | Enable/Disable health monitoring | +----------------+---------+--------------------------------------+ List Health Monitor Details *************************** Retrieve details of a health monitor. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/healthmonitor`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/healthmonitor`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } Create Health Monitor ********************* Create a health monitor. +----------------+-----------------------------------------------------------+ | Request Type | ``POST`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/healthmonitor`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/healthmonitor`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 403, 404, 500, 503 | +----------------+---------+-------------------------------------------------+ | +----------------+----------+ | Parameters | Required | +================+==========+ | type | yes | +----------------+----------+ | delay | yes | +----------------+----------+ | timeout | yes | +----------------+----------+ | fall_threshold | yes | +----------------+----------+ | rise_threshold | yes | +----------------+----------+ | http_method | no | +----------------+----------+ | url_path | no | +----------------+----------+ | expected_codes | no | +----------------+----------+ | enabled | no | +----------------+----------+ **Request Example**:: { "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } **Response Example**:: { "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } Update Health Monitor ********************* Modify mutable attributes of a health monitor. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/healthmonitor`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/healthmonitor`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ | +----------------+----------+ | Parameters | Required | +================+==========+ | type | no | +----------------+----------+ | delay | no | +----------------+----------+ | timeout | no | +----------------+----------+ | fall_threshold | no | +----------------+----------+ | rise_threshold | no | +----------------+----------+ | http_method | no | +----------------+----------+ | url_path | no | +----------------+----------+ | expected_codes | no | +----------------+----------+ | enabled | no | +----------------+----------+ **Request Example**:: { "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } **Response Example**:: { "type": "HTTP", "delay": 10, "timeout": 10, "fall_threshold": 10, "rise_threshold": 10, "http_method": "GET", "url_path": "/some/custom/path", "expected_codes": "200", "enabled": true } Delete Health Monitor ********************* Delete a health monitor. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/healthmonitor`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/healthmonitor`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ Pool Members ------------ +-----------------------------------------------------------------+ | **Fully Populated Pool Member Object** | +------------------+---------+------------------------------------+ | Parameters | Type | Description | +==================+=========+====================================+ | id | UUID | Pool member ID | +------------------+---------+------------------------------------+ | ip_address | String | IP address of the pool member | +------------------+---------+------------------------------------+ | protocol_port | String | Port for the protocol to listen on | +------------------+---------+------------------------------------+ | weight | String | Weight of the pool member | +------------------+---------+------------------------------------+ | subnet_id | UUID | ``UUID`` of the subnet this pool \ | | | | member lives on | +------------------+---------+------------------------------------+ | enabled | Boolean | Whether or not the pool member \ | | | | should be online immediately | +------------------+---------+------------------------------------+ | operating_status | String | Network status of the pool member | +------------------+---------+------------------------------------+ List Members ************ Retrieve a list of pool members. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/members`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/members`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: [ { "id": "8b8056dc-89ff-4d08-aa5d-6f8d6c2a44ec", "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "6fd8cb41-f56d-49f0-bf19-db3dbf3191dc", "enabled": true, "operating_status": "ONLINE" } ] List Member Details ******************* Retrieve details of a pool member. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/members/{member_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/members/{member_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "id": "1caf31b6-e36d-4664-959f-472c51c37439", "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "9e58c7ae-9da2-45f2-9a2a-97e39d3ad69e", "enabled": true, "operating_status": "ONLINE" } Create Member ************* Create a pool member. +----------------+-----------------------------------------------------------+ | Request Type | ``POST`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/members`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/members`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 403, 404, 500, 503 | +----------------+---------+-------------------------------------------------+ | +---------------+----------+ | Parameters | Required | +===============+==========+ | ip_address | yes | +---------------+----------+ | protocol_port | yes | +---------------+----------+ | weight | yes | +---------------+----------+ | subnet_id | no | +---------------+----------+ | enabled | no | +---------------+----------+ **Request Example**:: { "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "f9c3a146-a3e3-406d-9f38-e7cd1847a670", "enabled": true } **Response Example**:: { "id": "80b0841b-0ce9-403a-bfb3-391feb299cd5", "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "f9c3a146-a3e3-406d-9f38-e7cd1847a670", "enabled": true, "operating_status": "ONLINE" } Update Member ************* Modify mutable attributes of a pool member. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/members/{member_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/members/{member_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ | +---------------+----------+ | Parameters | Required | +===============+==========+ | protocol_port | no | +---------------+----------+ | weight | no | +---------------+----------+ | enabled | no | +---------------+----------+ **Request Example**:: { "protocol_port": 80, "weight": 10, "enabled": true } **Response Example**:: { "id": "1e9fd5bb-3285-4346-b1c8-b13e08fdae57", "ip_address": "10.0.0.1", "protocol_port": 80, "weight": 10, "subnet_id": "c91661f3-3831-4799-9c2c-681554196d62", "enabled": true, "operating_status": "ONLINE" } Delete Member ************* Delete a pool member. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/pools/{pool_id}/members/{member_id}`` | | | | | | **DEPRECATED:** ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/pools/{pool_id}``\ | | | ``/members/{member_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ Layer 7 Policies ---------------- Layer 7 policies can be used to alter the behavior of the load balancing service such that some action can be taken other than sending requests to the listener's default_pool. If a given request matches all the layer 7 rules associated with a layer 7 policy, that layer 7 policy's action will be taken instead of the default behavior. +------------------------------------------------------------------------+ | **Fully Populated L7Policy Object** | +------------------+-------------+---------------------------------------+ | Parameters | Type | Description | +==================+=============+=======================================+ | id | UUID | L7 Policy ID | +------------------+-------------+---------------------------------------+ | name | String | String detailing the name of the \ | | | | l7policy | +------------------+-------------+---------------------------------------+ | description | String | String detailing information \ | | | | about the l7policy | +------------------+-------------+---------------------------------------+ | action | String | What action to take if the l7policy \ | | | | is matched | +------------------+-------------+---------------------------------------+ | redirect_pool_id | UUID | ID of the pool to which requests \ | | | | should be sent if action is \ | | | | ``REDIRECT_TO_POOL`` | +------------------+-------------+---------------------------------------+ | redirect_url | String | URL to which requests should be \ | | | | redirected if action is \ | | | | ``REDIRECT_TO_URL`` | +------------------+-------------+---------------------------------------+ | position | Integer | Sequence number of this L7 Policy. \ | | | | L7 Policies are evaluated in order \ | | | | starting with 1. | +------------------+-------------+---------------------------------------+ | enabled | Boolean | Whether or not the l7policy \ | | | | should be online immediately | +------------------+-------------+---------------------------------------+ Layer 7 Policy actions +----------------------+---------------------------------+ | L7 policy action | Description | +======================+=================================+ | ``REJECT`` | Requests matching this policy \ | | | will be blocked. | +----------------------+---------------------------------+ | ``REDIRECT_TO_POOL`` | Requests matching this policy \ | | | will be sent to the pool \ | | | referenced by \ | | | ``redirect_pool_id`` | +----------------------+---------------------------------+ | ``REDIRECT_TO_URL`` | Requests matching this policy \ | | | will be redirected to the URL \ | | | referenced by ``redirect_url`` | +----------------------+---------------------------------+ List L7 Policies **************** Retrieve a list of layer 7 policies. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: [ { "id": "1aaf9f08-eb34-41f4-afaa-bf5a8f73635d", "name": "Policy Name", "description": "Policy Description", "action": "REDIRECT_TO_POOL", "redirect_pool_id": "bab7f36c-e931-4cc3-a19d-96707fbb0a92", "redirect_url": None, "position": 1, "enabled": True, }, { "id": "b5e5c33b-a1fa-44fc-8890-b546af64cf55", "name": "Policy Name 2", "description": "Policy Description 2", "action": "REDIRECT_TO_URL", "redirect_pool_id": None, "redirect_url": "http://www.example.com", "position": 2, "enabled": True, } ] List L7 Policy Details ********************** Retrieve details of a layer 7 policy. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "id": "6d6ebf41-d492-4eff-b392-f8099feb23b6", "name": "Policy Name", "description": "Policy Description", "action": "REDIRECT_TO_POOL", "redirect_pool_id": "3295874d-ed51-4c4d-9876-350591946713", "redirect_url": None, "position": 1, "enabled": True, } Create Layer 7 Policy ********************* Create a layer 7 policy. +----------------+-----------------------------------------------------------+ | Request Type | ``POST`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 500 | +----------------+---------+-------------------------------------------------+ | +------------------+----------------------------------------+ | Parameters | Required | +==================+========================================+ | name | no | +------------------+----------------------------------------+ | description | no | +------------------+----------------------------------------+ | action | yes | +------------------+----------------------------------------+ | redirect_pool_id | only if action == ``REDIRECT_TO_POOL`` | +------------------+----------------------------------------+ | redirect_url | only if action == ``REDIRECT_TO_URL`` | +------------------+----------------------------------------+ | position | no (defaults to append to list) | +------------------+----------------------------------------+ | enabled | no (defaults to ``True``) | +------------------+----------------------------------------+ **Request Example**:: { "action": "REDIRECT_TO_POOL", "redirect_pool_id": "341c0015-d7ed-44a6-a5e4-b1af94094f7b" } **Response Example**:: { "id": "23d24092-fe03-42b5-8ff4-c500767468d6", "name": None, "description": None, "action": "REDIRECT_TO_POOL", "redirect_pool_id": "341c0015-d7ed-44a6-a5e4-b1af94094f7b", "redirect_url": None, "position": 1, "enabled": True } Update Layer 7 Policy ********************* Modify mutable attributes of a layer 7 policy. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ | +------------------+----------------------------------------+ | Parameters | Required | +==================+========================================+ | name | no | +------------------+----------------------------------------+ | description | no | +------------------+----------------------------------------+ | action | no | +------------------+----------------------------------------+ | redirect_pool_id | only if action == ``REDIRECT_TO_POOL`` | +------------------+----------------------------------------+ | redirect_url | only if action == ``REDIRECT_TO_URL`` | +------------------+----------------------------------------+ | position | no | +------------------+----------------------------------------+ | enabled | no | +------------------+----------------------------------------+ **Request Example**:: { "action": "REDIRECT_TO_URL", "redirect_url": "http://www.example.com", "enabled": True } **Response Example**:: { "id": "58caa7ac-6cdc-4778-957a-17ed208355ed", "name": None, "description": None, "action": "REDIRECT_TO_URL", "redirect_pool_id": None, "redirect_url": "http://www.example.com", "position": 1, "enabled": True } Delete Layer 7 Policy ********************* Delete a layer 7 policy. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ Layer 7 Rules ------------- Layer 7 rules are individual statements of logic which match parts of an HTTP request, session, or other protocol-specific data for any given client request. All the layer 7 rules associated with a given layer 7 policy are logically ANDed together to see whether the policy matches a given client request. If logical OR behavior is desired instead, the user should instead create multiple layer 7 policies with rules which match each of the components of the logical OR statement. +------------------------------------------------------------------------+ | **Fully Populated L7Rule Object** | +------------------+-------------+---------------------------------------+ | Parameters | Type | Description | +==================+=============+=======================================+ | id | UUID | L7 Rule ID | +------------------+-------------+---------------------------------------+ | type | String | type of L7 rule (see chart below) | +------------------+-------------+---------------------------------------+ | compare_type | String | comparison type to be used with the \ | | | | value in this L7 rule (see chart \ | | | | below) | +------------------+-------------+---------------------------------------+ | key | String | Header or cookie name to match if \ | | | | rule type is ``HEADER`` or ``COOKIE`` | +------------------+-------------+---------------------------------------+ | value | String | value to be compared with | +------------------+-------------+---------------------------------------+ | invert | Boolean | inverts the logic of the rule if \ | | | | ``True`` (ie. perform a logical NOT \ | | | | on the rule) | +------------------+-------------+---------------------------------------+ Layer 7 rule types +----------------------+---------------------------------+--------------------+ | L7 rule type | Description | Valid comparisons | +======================+=================================+====================+ | ``HOST_NAME`` | Matches against the http \ | ``REGEX``, \ | | | Host: header in the request. | ``STARTS_WITH``, \ | | | | ``ENDS_WITH``, \ | | | | ``CONTAINS``, \ | | | | ``EQUAL_TO`` | +----------------------+---------------------------------+--------------------+ | ``PATH`` | Matches against the path \ | ``REGEX``, \ | | | portion of the URL requested | ``STARTS_WITH``, \ | | | | ``ENDS_WITH``, \ | | | | ``CONTAINS``, \ | | | | ``EQUAL_TO`` | +----------------------+---------------------------------+--------------------+ | ``FILE_TYPE`` | Matches against the file name \ | ``REGEX``, \ | | | extension in the URL requested | ``EQUAL_TO`` | +----------------------+---------------------------------+--------------------+ | ``HEADER`` | Matches against a specified \ | ``REGEX``, \ | | | header in the request | ``STARTS_WITH``, \ | | | | ``ENDS_WITH``, \ | | | | ``CONTAINS``, \ | | | | ``EQUAL_TO`` | +----------------------+---------------------------------+--------------------+ | ``COOKIE`` | Matches against a specified \ | ``REGEX``, \ | | | cookie in the request | ``STARTS_WITH``, \ | | | | ``ENDS_WITH``, \ | | | | ``CONTAINS``, \ | | | | ``EQUAL_TO`` | +----------------------+---------------------------------+--------------------+ Layer 7 rule comparison types +----------------------+----------------------------------------------------+ | L7 rule compare type | Description | +======================+====================================================+ | ``REGEX`` | string will be evaluated against regular \ | | | expression stored in ``value`` | +----------------------+----------------------------------------------------+ | ``STARTS_WITH`` | start of string will be compared against ``value`` | +----------------------+----------------------------------------------------+ | ``ENDS_WITH`` | end of string will be compared against ``value`` | +----------------------+----------------------------------------------------+ | ``CONTAINS`` | string contains ``value`` | +----------------------+----------------------------------------------------+ | ``EQUAL_TO`` | string is exactly equal to ``value`` | +----------------------+----------------------------------------------------+ List L7 Rules ************* Retrieve a list of layer 7 rules. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \ | | | ``/l7rules`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: [ { "id": "9986e669-6da6-4979-96bd-b901858bf463", "type": "PATH", "compare_type": "STARTS_WITH", "key": None, "value": "/api", "invert": False }, { "id": "560b97d4-4239-4e4c-b51c-fd0afe387f99", "type": "COOKIE", "compare_type": "REGEX", "key": "my-cookie", "value": "some-value", "invert": True } ] List L7 Rule Details ******************** Retrieve details of a layer 7 rule. +----------------+-----------------------------------------------------------+ | Request Type | ``GET`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \ | | | ``/l7rules/{l7rule_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 200 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500 | +----------------+---------+-------------------------------------------------+ **Response Example**:: { "id": "f19ff3aa-0d24-4749-a9ed-b5b93fad0a22", "type": "PATH", "compare_type": "STARTS_WITH", "key": None, "value": "/api", "invert": False } Create Layer 7 Rule ******************* Create a layer 7 rule. +----------------+-----------------------------------------------------------+ | Request Type | ``POST`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \ | | | ``/l7rules`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 500 | +----------------+---------+-------------------------------------------------+ | +----------------+------------------------------------------+ | Parameters | Required | +================+==========================================+ | type | yes | +----------------+------------------------------------------+ | compare_type | yes | +----------------+------------------------------------------+ | key | only if type is ``HEADER`` or ``COOKIE`` | +----------------+------------------------------------------+ | value | yes | +----------------+------------------------------------------+ | invert | no (Defaults to ``False``) | +----------------+------------------------------------------+ **Request Example**:: { "type": "HOST_NAME", "compare_type": "ENDS_WITH", "value": ".example.com" } **Response Example**:: { "id": "27445155-c28d-4361-8158-9ff91d0eaba3", "type": "HOST_NAME", "compare_type": "ENDS_WITH", "key": None, "value": ".example.com", "invert": False } Update Layer 7 Rule ******************* Modify mutable attributes of a layer 7 rule. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \ | | | ``/l7rules/{l7rule_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ | +----------------+------------------------------------------+ | Parameters | Required | +================+==========================================+ | type | no | +----------------+------------------------------------------+ | compare_type | no | +----------------+------------------------------------------+ | key | only if type is ``HEADER`` or ``COOKIE`` | +----------------+------------------------------------------+ | value | no | +----------------+------------------------------------------+ | invert | no | +----------------+------------------------------------------+ **Request Example**:: { "type": "HEADER", "compare_type": "CONTAINS", "key": "X-My-Header", "value": "sample_substring" } **Response Example**:: { "id": "6f209661-a9b0-47ca-a60a-27154f9fe274", "type": "HEADER", "compare_type": "CONTAINS", "key": "X-My-Header", "value": "sample_substring", "invert": False } Delete Layer 7 Rule ******************* Delete a layer 7 rule. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/loadbalancers/{lb_id}``\ | | | ``/listeners/{listener_id}/l7policies/{l7policy_id}`` \ | | | ``/l7rules/{l7rule_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 409, 500 | +----------------+---------+-------------------------------------------------+ Quotas ------ +------------------------------------------------------------------------+ | **Fully Populated Quotas Object** | +---------------------+------------+-------------------------------------+ | Parameters | Type | Description | +=====================+============+=====================================+ | project_id | UUID | Project ID | +---------------------+------------+-------------------------------------+ | health_monitor | Integer | Health Monitor quota | +---------------------+------------+-------------------------------------+ | listener | Integer | Listener quota | +---------------------+------------+-------------------------------------+ | load_balancer | Integer | Load balancer quota | +---------------------+------------+-------------------------------------+ | member | Integer | Member quota | +---------------------+------------+-------------------------------------+ | pool | Integer | Pool quota | +---------------------+------------+-------------------------------------+ Quotas specified as null will use the configured default quota. Unlimited quotas are represented as -1. List Quotas *********** List all non-default quotas. Note: 'tenant_id' is deprecated and will be removed in a future release. Use 'project_id' instead. +----------------+--------------------------------------------+ | Request Type | ``GET`` | +----------------+--------------------------------------------+ | Endpoint | ``URL/v1/quotas`` | +----------------+---------+----------------------------------+ | | Success | 200 | | Response Codes +---------+----------------------------------+ | | Error | 401, 500 | +----------------+---------+----------------------------------+ **Response Example**:: { "quotas": [ { "load_balancer": 10, "listener": 10, "health_monitor": 10, "tenant_id": "0c23c1e5-2fd3-4914-9b94-ab12d131a4fa", "member": 10, "project_id": "0c23c1e5-2fd3-4914-9b94-ab12d131a4fa", "pool": 10 }, { "load_balancer": null, "listener": null, "health_monitor": 10, "tenant_id": "5df074f1-d173-4a69-b78c-31aeb54f4578", "member": null, "project_id": "5df074f1-d173-4a69-b78c-31aeb54f4578", "pool": null } ] } List Quota Defaults ******************* List the currently configured quota defaults. +----------------+--------------------------------------------+ | Request Type | ``GET`` | +----------------+--------------------------------------------+ | Endpoint | ``URL/v1/quotas/default`` | +----------------+---------+----------------------------------+ | | Success | 200 | | Response Codes +---------+----------------------------------+ | | Error | 401, 500 | +----------------+---------+----------------------------------+ **Response Example**:: { "quota": { "load_balancer": 20, "listener": -1, "member": -1, "pool": 10, "health_monitor": -1 } } List Quota Details ****************** Retrieve details of a project quota. If the project specified does not have custom quotas, the default quotas are returned. +----------------+--------------------------------------------+ | Request Type | ``GET`` | +----------------+--------------------------------------------+ | Endpoint | ``URL/v1/quotas/{project_id}`` | +----------------+---------+----------------------------------+ | | Success | 200 | | Response Codes +---------+----------------------------------+ | | Error | 401, 500 | +----------------+---------+----------------------------------+ **Response Example**:: { "quota": { "load_balancer": 10, "listener": 10, "member": 10, "pool": 10, "health_monitor": 10 } } Update Quota ************ Modify a project's quotas. +----------------+-----------------------------------------------------------+ | Request Type | ``PUT`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/quotas/{project_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 400, 401, 500, 503 | +----------------+---------+-------------------------------------------------+ **Request Example**:: { "quota": { "load_balancer": -1, "listener": 10, "member": 10, "pool": 10, "health_monitor": null } } **Response Example**:: { "quota": { "load_balancer": -1, "listener": 10, "member": 10, "pool": 10, "health_monitor": 20 } } Delete Quota ************ Delete a project's quota, reseting it to the configured default quotas. +----------------+-----------------------------------------------------------+ | Request Type | ``DELETE`` | +----------------+-----------------------------------------------------------+ | Endpoint | ``URL/v1/quotas/{project_id}`` | +----------------+---------+-------------------------------------------------+ | | Success | 202 | | Response Codes +---------+-------------------------------------------------+ | | Error | 401, 404, 500, 503 | +----------------+---------+-------------------------------------------------+