Neutron/LBaaS/APIRevisionProposals

SSL Termination
Single Create LB Call

Request: POST /loadbalancers

{  "loadbalancer": {     "name": "Single Call LB", "port":443, "protocol": "HTTPS", "ssl_decryption": {        "certificate": "CERTIFICATE", "private_key": "PRIVATE_KEY", "intermediate_certificate": "INTERMEDIATE_CERTIFICATE" },     "vips":[ {           "type":"IPv4", "subnet_id":"SUBNET_UUID" }     ],      "pool":{ "name": "pool1”,	 “subnet_id”: “SUBNET_UUID”,        "algorithm": "ROUNDROBIN",         "session_persistence": "COOKIE",         "members": [{            "ip": "10.1.1.1",            "port": 80,            "enabled": true         }],         "health_monitor": {            "type": "HTTPS",            "delay": 1,            "timeout": 10,            "interval": 1         }      }   } }

Response: {  "loadbalancer": {     "id": "LB_UUID", "name": "Single Call LB", "port":443, "protocol": "HTTPS", "ssl_decryption": {        "id": SSL_DECRYPTION_UUID",         "certificate": "CERTIFICATE",         "private_key": "PRIVATE_KEY",         "intermediate_certificate": "INTERMEDIATE_CERTIFICATE"      },      "vips":[         {            "id": "VIP_UUID",            "address": "12.1.1.1",            "type":"IPv4",            "subnet_id":"SUBNET_UUID"         }      ],      "pool":{         "id": "POOL_UUID",         "name": "pool1”, “subnet_id”: “SUBNET_UUID”, "algorithm": "ROUNDROBIN", "session_persistence": "COOKIE", "members": [{ "id": "MEMBER_UUID", "ip": "10.1.1.1", "port": 80, "enabled": true }],        "health_monitor": { "type": "HTTPS", "delay": 1, "timeout": 10, "interval": 1 }     }   } }

Create by Each Primitive

1. Create VIP

Request:

POST /vips

{  "vip": {     "type": "IPv4", "subnet_id": "SUBNET_UUID" } }

Response:

{  "vip": {     "id": "VIP_UUID", "address": "12.1.1.1", "type": "IPv4", "subnet_id": "SUBNET_UUID" } }

2. Create Pool

Request:

POST /pools

{   "pool": { "name": "pool1", "algorithm": "ROUNDROBIN", "session_persistence": "SOURCE_IP", "subnet_id": "SUBNET_UUID", "members": [ {            "ip": "10.1.1.1", "port": 80 }      ]   } }

Response:

{   "pool": { "id": "POOL_UUID", "name": "pool1", "algorithm": "ROUNDROBIN", "session_persistence": "SOURCE_IP", "subnet_id": "SUBNET_UUID", "members": [ {           "id": "MEMBER_UUID", "ip": "10.1.1.1", "port": 80 }      ]   } }

3. Create Health Monitor On Pool

Request:

POST /pools/{pool_uuid}/health_monitor

{  "health_monitor": { "type": "HTTPS", "delay": 1, "timeout": 10, "interval": 1 } }

Response:

{  "health_monitor": { "type": "HTTPS", "delay": 1, "timeout": 10, "interval": 1 } }

4. Create SSL Decryption

Request:

POST /ssl_decryption

{  "ssl_decryption": {     "certificate": "CERTIFICATE", "private_key": "PRIVATE_KEY", "intermediate_certificate": "INTERMEDIATE_CERTIFICATE" } }

Response:

{  "ssl_decryption": {     "id": "SSL_DECRYPTION_UUID", "certificate": "CERTIFICATE", "private_key": "PRIVATE_KEY", "intermediate_certificate": "INTERMEDIATE_CERTIFICATE" } }

5. Create Load Balancer

Request:

POST /loadbalancers

{  "loadbalancer": {     "name": "Single Call LB", "port":443, "protocol": "HTTPS", "ssl_decryption": {        "id": "SSL_DECRYPTION_UUID" },     "vips":[ {           "id": "VIP_UUID" }     ],      "pool":{ "id": "POOL_UUID" }  } }

L7 Switching/Content Switching
Single Create LB Call

In this example, the multiple pools are defined in a content_switching object that is attached to the load balancer object. The rules are to be defined for each pool defined in the content_switching object.

Request: POST /loadbalancers

{  "loadbalancer": {     "name": "Single Call LB", "port":443, "protocol": "HTTPS", "content_switching": {        "enabled": true, "pools": [ {           "name": "pool2", "subnet_id": "SUBNET_UUID", "algorithm": "ROUNDROBIN", "session_persistence": "COOKIE", "members": [ {              "ip":"10.1.1.2", "port": 80, "enabled": true },           "rules":[ {              "type": "path", "match": "/index.html" }]        }]      },      "vips":[ {           "type":"IPv4", "subnet_id":"SUBNET_UUID" }     ],      "pool":{ "name": "pool1”,	 “subnet_id”: “SUBNET_UUID”,        "algorithm": "ROUNDROBIN",         "session_persistence": "COOKIE",         "members": [{            "ip": "10.1.1.1",            "port": 80,            "enabled": true         }],         "health_monitor": {            "type": "HTTPS",            "delay": 1,            "timeout": 10,            "interval": 1         }      }   } }

Response: {  "loadbalancer": {     "id": "LB_UUID", "name": "Single Call LB", "port":443, "protocol": "HTTPS", "ssl_decryption": {        "id": SSL_DECRYPTION_UUID",         "certificate": "CERTIFICATE",         "private_key": "PRIVATE_KEY",         "intermediate_certificate": "INTERMEDIATE_CERTIFICATE"      },      "vips":[         {            "id": "VIP_UUID",            "address": "12.1.1.1",            "type":"IPv4",            "subnet_id":"SUBNET_UUID"         }      ],      "pool":{         "id": "POOL_UUID",         "name": "pool1”, “subnet_id”: “SUBNET_UUID”, "algorithm": "ROUNDROBIN", "session_persistence": "COOKIE", "members": [{ "id": "MEMBER_UUID", "ip": "10.1.1.1", "port": 80, "enabled": true }],        "health_monitor": { "type": "HTTPS", "delay": 1, "timeout": 10, "interval": 1 }     }   } }

Create by Each Primitive