)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"86d58614422018cee8a95f00a205d07a4828410b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jeffrey Longstaff \u003cj.longstaff@f5.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-10-27 08:51:47 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix doc8 errors; address review comments."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Implements Story: 1655768"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f4b6375_3bce56b4","line":7,"updated":"2017-10-31 23:19:21.000000000","message":"We should fix the title on this patch too.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"}],"specs/version1.1/enable-provider-driver.rst":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":5,"context_line":"https://storyboard.openstack.org/#!/story/1655768"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provider drivers are third party implementations that give Octavia operators"},{"line_number":8,"context_line":"a way of integrating other load balancing systems into an Octavia deployment."},{"line_number":9,"context_line":"Operators may want to employ other load balancing implementations, including"},{"line_number":10,"context_line":"hardware applicanaces, in addition to the standard Octavia driver based on"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_1d3012e8","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":32},"updated":"2017-10-07 00:05:25.000000000","message":"Technically the reference implementation (octavia driver) will move over to be a driver too.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":4,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":5,"context_line":"https://storyboard.openstack.org/#!/story/1655768"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provider drivers are third party implementations that give Octavia operators"},{"line_number":8,"context_line":"a way of integrating other load balancing systems into an Octavia deployment."},{"line_number":9,"context_line":"Operators may want to employ other load balancing implementations, including"},{"line_number":10,"context_line":"hardware applicanaces, in addition to the standard Octavia driver based on"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_fc1c4d6b","line":7,"range":{"start_line":7,"start_character":21,"end_line":7,"end_character":32},"in_reply_to":"7f515b1d_1d3012e8","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Provider drivers are third party implementations that give Octavia operators"},{"line_number":8,"context_line":"a way of integrating other load balancing systems into an Octavia deployment."},{"line_number":9,"context_line":"Operators may want to employ other load balancing implementations, including"},{"line_number":10,"context_line":"hardware applicanaces, in addition to the standard Octavia driver based on"},{"line_number":11,"context_line":"Linux Virtual Servers (LVS)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_9d59a236","line":11,"range":{"start_line":10,"start_character":66,"end_line":11,"end_character":27},"updated":"2017-10-07 00:05:25.000000000","message":"Current Octavia driver does not use LVS.  I would just drop this part.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Provider drivers are third party implementations that give Octavia operators"},{"line_number":8,"context_line":"a way of integrating other load balancing systems into an Octavia deployment."},{"line_number":9,"context_line":"Operators may want to employ other load balancing implementations, including"},{"line_number":10,"context_line":"hardware applicanaces, in addition to the standard Octavia driver based on"},{"line_number":11,"context_line":"Linux Virtual Servers (LVS)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"},{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_9c2b1981","line":11,"range":{"start_line":10,"start_character":66,"end_line":11,"end_character":27},"in_reply_to":"7f515b1d_9d59a236","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"009dee89e71f13abb146b7250ec9a8d5b8ed2d0a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":"Neutron LBaaS v2 supports a *provider* parameter, giving LBaaS users a way to"},{"line_number":16,"context_line":"direct LBaaS requests to a specific backend driver. The Octavia API includes a"},{"line_number":17,"context_line":"*provider* parameter as well, but currently only supports one provder, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for drivers developed by third party vendors"},{"line_number":19,"context_line":"is needed. With this in place, operators can configure load balancers using"},{"line_number":20,"context_line":"multiple providers, either the default provided by Octavia, or those "}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_4be61e19","line":17,"updated":"2017-10-10 18:18:31.000000000","message":"s/provder/provider","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":14,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":15,"context_line":"Neutron LBaaS v2 supports a *provider* parameter, giving LBaaS users a way to"},{"line_number":16,"context_line":"direct LBaaS requests to a specific backend driver. The Octavia API includes a"},{"line_number":17,"context_line":"*provider* parameter as well, but currently only supports one provder, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for drivers developed by third party vendors"},{"line_number":19,"context_line":"is needed. With this in place, operators can configure load balancers using"},{"line_number":20,"context_line":"multiple providers, either the default provided by Octavia, or those "}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_d086f1db","line":17,"in_reply_to":"5f4e5783_4be61e19","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"*provider* parameter as well, but currently only supports one provder, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for drivers developed by third party vendors"},{"line_number":19,"context_line":"is needed. With this in place, operators can configure load balancers using"},{"line_number":20,"context_line":"multiple providers, either the default provided by Octavia, or those "},{"line_number":21,"context_line":"created by third party vendors."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_1d45b243","line":20,"range":{"start_line":20,"start_character":63,"end_line":20,"end_character":69},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at the end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":17,"context_line":"*provider* parameter as well, but currently only supports one provder, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for drivers developed by third party vendors"},{"line_number":19,"context_line":"is needed. With this in place, operators can configure load balancers using"},{"line_number":20,"context_line":"multiple providers, either the default provided by Octavia, or those "},{"line_number":21,"context_line":"created by third party vendors."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_95158a4b","line":20,"range":{"start_line":20,"start_character":63,"end_line":20,"end_character":69},"in_reply_to":"7f515b1d_1d45b243","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"},{"line_number":24,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_5d644ae5","line":25,"range":{"start_line":25,"start_character":40,"end_line":25,"end_character":53},"updated":"2017-10-07 00:05:25.000000000","message":"Again, not necessarily third parties.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"},{"line_number":24,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_30630545","line":25,"range":{"start_line":25,"start_character":40,"end_line":25,"end_character":53},"in_reply_to":"7f515b1d_5d644ae5","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"},{"line_number":24,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "},{"line_number":29,"context_line":"callback functions that give drivers a way to udpate status and statistics."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_1d5ed211","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":35},"updated":"2017-10-07 00:05:25.000000000","message":"loaded via stevedore, enabled by configuration file.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"},{"line_number":24,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "},{"line_number":29,"context_line":"callback functions that give drivers a way to udpate status and statistics."}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_b06db533","line":26,"range":{"start_line":25,"start_character":0,"end_line":26,"end_character":35},"in_reply_to":"7f515b1d_1d5ed211","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "},{"line_number":29,"context_line":"callback functions that give drivers a way to udpate status and statistics."},{"line_number":30,"context_line":"Functions that are synchronous are noted below."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_fd753699","line":28,"range":{"start_line":28,"start_character":73,"end_line":28,"end_character":76},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at the end of the line","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "},{"line_number":29,"context_line":"callback functions that give drivers a way to udpate status and statistics."},{"line_number":30,"context_line":"Functions that are synchronous are noted below."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_90519965","line":28,"range":{"start_line":28,"start_character":73,"end_line":28,"end_character":76},"in_reply_to":"7f515b1d_fd753699","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"009dee89e71f13abb146b7250ec9a8d5b8ed2d0a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"  * create"},{"line_number":43,"context_line":"  * update"},{"line_number":44,"context_line":"  * remove"},{"line_number":45,"context_line":"  * get statistics"},{"line_number":46,"context_line":"  * get status tree"},{"line_number":47,"context_line":"  * failover"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_eb738a4c","line":45,"updated":"2017-10-10 18:18:31.000000000","message":"(*) we could aggregate statistics from the listener for the lb ones if a driver doesn\u0027t support them - thoughts?","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":71,"context_line":"  * update"},{"line_number":72,"context_line":"  * remove"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* L7 Policies"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * create"},{"line_number":77,"context_line":"  * update"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_956027a7","line":74,"updated":"2017-10-09 21:01:38.000000000","message":"L7 Rules as well","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":71,"context_line":"  * update"},{"line_number":72,"context_line":"  * remove"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* L7 Policies"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * create"},{"line_number":77,"context_line":"  * update"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_50720113","line":74,"in_reply_to":"7f515b1d_956027a7","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"With potentially multiple drivers, Octavia will validate that a driver"},{"line_number":85,"context_line":"can complete a given request before scheduling that request to the driver."},{"line_number":86,"context_line":"The provider-driver interface will include a method for validating requests."},{"line_number":87,"context_line":"Unlike the standard API above, this function will be synchronous."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_b5e9e3e3","line":86,"updated":"2017-10-09 21:01:38.000000000","message":"Couldn\u0027t we just send the request for the driver and have the driver return either \"Not implemented\" or \"Accepted\"?\nWhat is the value in having a validation call here?","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"With potentially multiple drivers, Octavia will validate that a driver"},{"line_number":85,"context_line":"can complete a given request before scheduling that request to the driver."},{"line_number":86,"context_line":"The provider-driver interface will include a method for validating requests."},{"line_number":87,"context_line":"Unlike the standard API above, this function will be synchronous."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. code-block:: python"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_672385a8","line":86,"in_reply_to":"7f515b1d_b5e9e3e3","updated":"2017-11-01 14:41:16.000000000","message":"Yes, that\u0027s a better solution. Updated to include this.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Octavia flavors are defined in a separate specification (see References below)."},{"line_number":106,"context_line":"Support for flavors will be provided through two provider driver interfaces,"},{"line_number":107,"context_line":"one to query supported flavors and another to validate that a flavor is "},{"line_number":108,"context_line":"supported. Both functions are synchronous."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Following are interface defintions for flavor support:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_dd9ddabb","line":107,"range":{"start_line":107,"start_character":69,"end_line":107,"end_character":72},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    None."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  Returns:"},{"line_number":122,"context_line":"    list "},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_9da7620c","line":122,"range":{"start_line":122,"start_character":7,"end_line":122,"end_character":9},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    None."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  Returns:"},{"line_number":122,"context_line":"    list "},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_f5ccfb89","line":122,"range":{"start_line":122,"start_character":4,"end_line":122,"end_character":9},"updated":"2017-10-09 21:01:38.000000000","message":"Don\u0027t we need this to be a dict?  I am thinking we want both a name and a description.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    None."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  Returns:"},{"line_number":122,"context_line":"    list "},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"3f4b6375_67f4a5f1","line":122,"range":{"start_line":122,"start_character":4,"end_line":122,"end_character":9},"in_reply_to":"5f4e5783_2bc88253","updated":"2017-11-01 14:41:16.000000000","message":"I view it as a valuable convenience for operators who want to check parameters but may not access to docs.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"009dee89e71f13abb146b7250ec9a8d5b8ed2d0a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    None."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  Returns:"},{"line_number":122,"context_line":"    list "},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_2bc88253","line":122,"range":{"start_line":122,"start_character":4,"end_line":122,"end_character":9},"in_reply_to":"7f515b1d_f5ccfb89","updated":"2017-10-10 18:18:31.000000000","message":"Aren\u0027t we replacing a vendor\u0027s documentation with that? Not sure if we need that at all...","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    None."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"  Returns:"},{"line_number":122,"context_line":"    list "},{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_f0d1edce","line":122,"range":{"start_line":122,"start_character":4,"end_line":122,"end_character":9},"in_reply_to":"7f515b1d_f5ccfb89","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  is_supported_flavor(flavor_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"  Validates if driver can support flavor identified by flavor_id."},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_15955740","line":126,"range":{"start_line":126,"start_character":22,"end_line":126,"end_character":31},"updated":"2017-10-09 21:01:38.000000000","message":"Shouldn\u0027t we pass the flavor metadata as a JSON document?  If we pass the ID it would mean the driver would have to look up the contents.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  is_supported_flavor(flavor_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"  Validates if driver can support flavor identified by flavor_id."},{"line_number":129,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_d0d4b1bf","line":126,"range":{"start_line":126,"start_character":22,"end_line":126,"end_character":31},"in_reply_to":"7f515b1d_15955740","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":139,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":140,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":141,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":142,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"*Update Status API*"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_55106f59","line":142,"range":{"start_line":142,"start_character":16,"end_line":142,"end_character":67},"updated":"2017-10-09 21:01:38.000000000","message":"Should we use keystone service accounts or setup an independent way to authenticate drivers?\nWe discussed using certificates, we have also discussed using shared keys.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"009dee89e71f13abb146b7250ec9a8d5b8ed2d0a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":140,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":141,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":142,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"*Update Status API*"},{"line_number":145,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_6b39da3f","line":142,"range":{"start_line":142,"start_character":16,"end_line":142,"end_character":67},"in_reply_to":"7f515b1d_55106f59","updated":"2017-10-10 18:18:31.000000000","message":"Yes, we discussed having a piece of code which handles the communication and authentication with Octavia to ensure, e.g. that a driver can only change values in entities which belong to that driver. So instead of a REST interface I think we will have some sort of \"library\"","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":146,"context_line":"A new REST endpoint will be defined to support updating entity status. The"},{"line_number":147,"context_line":"API will be defined by these URLs:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"/v2.0/lbaas/loadbalancers/{loadbalancer_id}/status"},{"line_number":150,"context_line":"/v2.0/lbaas/listeners/{listener_id}/status"},{"line_number":151,"context_line":"/v2.0/lbaas/pools/{pool_id}/status"},{"line_number":152,"context_line":"/v2.0/lbaas/pools/{pool_id}/members/{member_id}/status"},{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_10afa5e3","line":153,"range":{"start_line":149,"start_character":0,"end_line":153,"end_character":45},"updated":"2017-10-09 21:01:38.000000000","message":"Are we thinking that we would put this under our existing API? Does that give enough deployment flexibility for operators?\nAlso, what do people think about just having one call that can update any/all of the status?\nShould that call take an list of status dicts or one call per load balancer?","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_7daee6e7","line":156,"range":{"start_line":156,"start_character":37,"end_line":156,"end_character":39},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_70e5fda7","line":156,"range":{"start_line":156,"start_character":37,"end_line":156,"end_character":39},"in_reply_to":"7f515b1d_7daee6e7","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36678dfdd7ffe71efc70e139f9f47d211eec7151","unresolved":false,"context_lines":[{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_d0b46d38","line":156,"range":{"start_line":156,"start_character":37,"end_line":156,"end_character":39},"in_reply_to":"7f515b1d_7daee6e7","updated":"2017-10-09 21:01:38.000000000","message":"This also appears truncated","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_30f1c56c","line":156,"range":{"start_line":156,"start_character":37,"end_line":156,"end_character":39},"in_reply_to":"7f515b1d_d0b46d38","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Use the existing endpoint, which is now GET only, to support updating "},{"line_number":161,"context_line":"statistics for load balancers and listeners. The API is defined by these URLs:"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"/v2.0/lbaas/loadbalancers/loadbalancer_id/stats"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_5da9eada","line":160,"range":{"start_line":160,"start_character":61,"end_line":160,"end_character":70},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"**Driver Entry Points**"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Provider drivers will be loaded by Octavia. The Octavia configuration file "},{"line_number":171,"context_line":"will be modified to included a section for provider driver names. Driver"},{"line_number":172,"context_line":"developers will be responsible for implementing driver installations which"},{"line_number":173,"context_line":"define their entry point, similar to how Neutron loads other types of drivers"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_3db86e28","line":170,"range":{"start_line":170,"start_character":70,"end_line":170,"end_character":75},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Provider drivers will be loaded by Octavia. The Octavia configuration file "},{"line_number":171,"context_line":"will be modified to included a section for provider driver names. Driver"},{"line_number":172,"context_line":"developers will be responsible for implementing driver installations which"},{"line_number":173,"context_line":"define their entry point, similar to how Neutron loads other types of drivers"},{"line_number":174,"context_line":"(e.g., ML2 drivers)."},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"Alternatives"},{"line_number":177,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_1dba5209","line":174,"range":{"start_line":172,"start_character":0,"end_line":174,"end_character":20},"updated":"2017-10-07 00:05:25.000000000","message":"We need to define the namespace the drivers will advertise in.\n\nHere is a proposal:\noctavia.provider.drivers \u003d\n    octavia_driver \u003d octavia.api.drivers.octavia.driver:OctaviaDriver","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":177,"context_line":"------------"},{"line_number":178,"context_line":"**Driver Callback Support**"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"An alternative to using REST endpoints for driver callbacks is to develop "},{"line_number":181,"context_line":"a stand-alone library that driver developers can use."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_fd83f654","line":180,"range":{"start_line":180,"start_character":66,"end_line":180,"end_character":74},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line.","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":177,"context_line":"------------"},{"line_number":178,"context_line":"**Driver Callback Support**"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"An alternative to using REST endpoints for driver callbacks is to develop "},{"line_number":181,"context_line":"a stand-alone library that driver developers can use."},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Data model impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_d0edd18b","line":180,"range":{"start_line":180,"start_character":66,"end_line":180,"end_character":74},"in_reply_to":"7f515b1d_fd83f654","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":226,"context_line":"parameter. Users may want to understand the availablity of third party drivers,"},{"line_number":227,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":228,"context_line":"other than to define drivers in the Octavia configuration file. Provider driver "},{"line_number":229,"context_line":"developers will need to provide their own means of driver status."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_bd7d7e6f","line":228,"range":{"start_line":228,"start_character":73,"end_line":228,"end_character":80},"updated":"2017-10-07 00:05:25.000000000","message":"Blank at end of the line and this line is too long (could be due to the space).","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":225,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":226,"context_line":"parameter. Users may want to understand the availablity of third party drivers,"},{"line_number":227,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":228,"context_line":"other than to define drivers in the Octavia configuration file. Provider driver "},{"line_number":229,"context_line":"developers will need to provide their own means of driver status."},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"5f4e5783_d03ef1d8","line":228,"range":{"start_line":228,"start_character":73,"end_line":228,"end_character":80},"in_reply_to":"7f515b1d_bd7d7e6f","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4eefd09b43177602dcde8e67af8a9ee5f83d820b","unresolved":false,"context_lines":[{"line_number":265,"context_line":"  * REST API"},{"line_number":266,"context_line":"  * Update status functions"},{"line_number":267,"context_line":"  * Update statistics functions"},{"line_number":268,"context_line":" "},{"line_number":269,"context_line":"Dependencies"},{"line_number":270,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":271,"context_line":"* Octavia API:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f515b1d_5d920aa1","line":268,"range":{"start_line":268,"start_character":0,"end_line":268,"end_character":1},"updated":"2017-10-07 00:05:25.000000000","message":"Space on a blank line","commit_id":"b5c58f0a800fa8e541a83e1692e4610848deed8d"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Provider drivers are third party implementations that give Octavia operators"},{"line_number":8,"context_line":"a way of integrating other load balancing systems into an Octavia deployment."},{"line_number":9,"context_line":"Operators may want to employ other load balancing implementations, including"},{"line_number":10,"context_line":"hardware applicanaces, in addition to the standard Octavia driver based on"},{"line_number":11,"context_line":"Linux Virtual Servers (LVS)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_6b2cf101","line":10,"updated":"2017-10-12 18:22:37.000000000","message":"s/applicanaces/appliances\n\nAlso, maybe worth adding \"including both hardware appliances and software load balancer\".","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"*provider* parameter as well, but currently only supports one provder, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for drivers developed by third party vendors"},{"line_number":19,"context_line":"is needed. With this in place, operators can configure load balancers using"},{"line_number":20,"context_line":"multiple providers, either the default provided by Octavia, or those "},{"line_number":21,"context_line":"created by third party vendors."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_0b39fd3f","line":20,"updated":"2017-10-12 18:22:37.000000000","message":"There are a few extra spaces here and below.","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Provider drivers will be implemented by third parties and defined by name"},{"line_number":26,"context_line":"in the  Octavia configuration file. Octavia will load drivers and communicate"},{"line_number":27,"context_line":"with drivers through a standard class interface defined below. Most driver"},{"line_number":28,"context_line":"functions will be aynchronous to Octavia, and Octavia will provide a set of "},{"line_number":29,"context_line":"callback functions that give drivers a way to udpate status and statistics."},{"line_number":30,"context_line":"Functions that are synchronous are noted below."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_ebd101fd","line":28,"updated":"2017-10-12 18:22:37.000000000","message":"s/aynchronous/asynchronous","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"**Standard Octavia API Interface**"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Provider drivers will be expected to support the full interface described"},{"line_number":35,"context_line":"by the Octavia API, currently v2.0. If a driver cannot support an interface,"},{"line_number":36,"context_line":"drivers should fail a request validation call (described below)."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"The interface will include support for the following:"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_267190aa","line":35,"updated":"2017-10-12 18:22:37.000000000","message":"Maybe provide a link to the current Octavia v2.0 API?\n\n https://developer.openstack.org/api-ref/load-balancer/v2/index.html","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Provider drivers will be expected to support the full interface described"},{"line_number":35,"context_line":"by the Octavia API, currently v2.0. If a driver cannot support an interface,"},{"line_number":36,"context_line":"drivers should fail a request validation call (described below)."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"The interface will include support for the following:"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_eb04614c","line":36,"updated":"2017-10-12 18:22:37.000000000","message":"\"drivers should fail\" is a little bit confusing, and maybe you can use provider driver?","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  * create"},{"line_number":43,"context_line":"  * update"},{"line_number":44,"context_line":"  * remove"},{"line_number":45,"context_line":"  * get statistics"},{"line_number":46,"context_line":"  * get status tree"},{"line_number":47,"context_line":"  * failover"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_cbad2532","line":44,"updated":"2017-10-12 18:22:37.000000000","message":"delete is more commonly used for CRUD operations","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"  * remove"},{"line_number":45,"context_line":"  * get statistics"},{"line_number":46,"context_line":"  * get status tree"},{"line_number":47,"context_line":"  * failover"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"* Listeners"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_eb2581c3","line":47,"updated":"2017-10-12 18:22:37.000000000","message":"missing get API","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  * create"},{"line_number":52,"context_line":"  * update"},{"line_number":53,"context_line":"  * remove"},{"line_number":54,"context_line":"  * get statistics"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* Pools"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_eb77c1d3","line":53,"updated":"2017-10-12 18:22:37.000000000","message":"ditto","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"  * create"},{"line_number":59,"context_line":"  * update"},{"line_number":60,"context_line":"  * remove"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"* Members"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_ab81c991","line":60,"updated":"2017-10-12 18:22:37.000000000","message":"ditto","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"  * create"},{"line_number":65,"context_line":"  * update"},{"line_number":66,"context_line":"  * remove"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"* Health Monitor"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_2b47197b","line":66,"updated":"2017-10-12 18:22:37.000000000","message":"ditto","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"  * create"},{"line_number":71,"context_line":"  * update"},{"line_number":72,"context_line":"  * remove"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* L7 Policies"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_0b4a1d7f","line":72,"updated":"2017-10-12 18:22:37.000000000","message":"ditto","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * create"},{"line_number":77,"context_line":"  * update"},{"line_number":78,"context_line":"  * remove"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"It is assumed that quotas will be handled by Octavia and not provider drivers."},{"line_number":81,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_ab5ae94b","line":78,"updated":"2017-10-12 18:22:37.000000000","message":"ditto","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"788741566d6f902315a995ddf55f89897f761d7d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"With potentially multiple drivers, Octavia will validate that a driver"},{"line_number":85,"context_line":"can complete a given request before scheduling that request to the driver."},{"line_number":86,"context_line":"The provider-driver interface will include a method for validating requests."},{"line_number":87,"context_line":"Unlike the standard API above, this function will be synchronous."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. code-block:: python"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_46036c0e","line":87,"updated":"2017-10-12 18:22:37.000000000","message":"Will this validation be enforced for all APIs?","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":84,"context_line":"With potentially multiple drivers, Octavia will validate that a driver"},{"line_number":85,"context_line":"can complete a given request before scheduling that request to the driver."},{"line_number":86,"context_line":"The provider-driver interface will include a method for validating requests."},{"line_number":87,"context_line":"Unlike the standard API above, this function will be synchronous."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":".. code-block:: python"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_54760c40","line":87,"in_reply_to":"5f4e5783_46036c0e","updated":"2017-10-17 15:12:11.000000000","message":"Why not punt all validation to the driver?  The driver should know what calls are implemented and which are not. If a call is made that is not implemented the driver can return an error message stating that.","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":".. code-block:: python"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"  get_supported_flavor_parameters()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  Returns a list of flavor parameters supported by this driver."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_3fe5a938","line":114,"range":{"start_line":114,"start_character":1,"end_line":114,"end_character":35},"updated":"2017-10-17 15:12:11.000000000","message":"Just to clarify, this should return a list of supported metadata parameters that an operator can pass when creating a flavor profile (provider+metadata).","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":".. code-block:: python"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  is_supported_flavor(flavor_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"  Validates if driver can support flavor identified by flavor_id."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"  Args:"},{"line_number":131,"context_line":"    flavor_id: identifier for flavor."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"  Returns:"},{"line_number":134,"context_line":"    bool True if supported, False if not."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"**Driver Callback Support**"},{"line_number":137,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_3fc80972","line":134,"range":{"start_line":126,"start_character":1,"end_line":134,"end_character":41},"updated":"2017-10-17 15:12:11.000000000","message":"If we are passing in a flavor_id it means that we possibly already created a flavor that has invalid metadata specified for the corresponding provider. The validation should happen on flavor profile create and if the metadata is invalid based on the validation call the driver provides then we should not create the flavor profile.  The provider driver should provide a call to validate the metadata of a flavor profile prior creating it.","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"**Driver Callback Support**"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Provider drivers need support for updating provisioning status, operating"},{"line_number":139,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":140,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":141,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":142,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"*Update Status API*"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"A new REST endpoint will be defined to support updating entity status. The"},{"line_number":147,"context_line":"API will be defined by these URLs:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"/v2.0/lbaas/loadbalancers/{loadbalancer_id}/status"},{"line_number":150,"context_line":"/v2.0/lbaas/listeners/{listener_id}/status"},{"line_number":151,"context_line":"/v2.0/lbaas/pools/{pool_id}/status"},{"line_number":152,"context_line":"/v2.0/lbaas/pools/{pool_id}/members/{member_id}/status"},{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_bf97593a","line":153,"range":{"start_line":138,"start_character":0,"end_line":153,"end_character":45},"updated":"2017-10-17 15:12:11.000000000","message":"Ability to do a bulk status update of multiple entities would be useful.  For example, what happens if the status changes all of a sudden for 100 listeners?\n\nIf the status is error, how are we planning to let the user know the specific error message?  This would help troubleshooting failures.","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":153,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":156,"context_line":"Valid values will be integers mapped to "},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"*Update Statistics API*"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_5fa06590","line":156,"updated":"2017-10-17 15:12:11.000000000","message":"seems part is missing","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Security impact"},{"line_number":216,"context_line":"---------------"},{"line_number":217,"context_line":"REST APIs will be added, but all new APIs will be restricted to administrators."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"Notifications impact"},{"line_number":220,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_df19f5d6","line":217,"range":{"start_line":217,"start_character":0,"end_line":217,"end_character":79},"updated":"2017-10-17 15:12:11.000000000","message":"How are we preventing one driver from updating the status of entities from another driver?","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"72583669f2175e6484c71597b3b0bfb0e1572b74","unresolved":false,"context_lines":[{"line_number":233,"context_line":"The peformance impact on Octavia should be minimal. Driver requests will need"},{"line_number":234,"context_line":"to be scheduled, and Octavia will process driver callbacks through the a REST"},{"line_number":235,"context_line":"interface. As provider drivers are loaded by Octavia, calls into drivers are"},{"line_number":236,"context_line":"through direct interfacesn"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"Other deployer impact"},{"line_number":239,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5f4e5783_df1fb569","line":236,"range":{"start_line":236,"start_character":15,"end_line":236,"end_character":26},"updated":"2017-10-17 15:12:11.000000000","message":"typo","commit_id":"75f859284daabf5b5ae01becae1ee4cbf43f7327"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"f988227d1159fc8d02d474ac9c0fad6116b64795","unresolved":false,"context_lines":[{"line_number":16,"context_line":"direct LBaaS requests to a specific backend driver. The Octavia API includes a"},{"line_number":17,"context_line":"*provider* parameter as well, but currently supports one provider, the"},{"line_number":18,"context_line":"Octavia driver. Adding support for other drivers is needed. With this in place,"},{"line_number":19,"context_line":"operators can configure load balancers using multiple providers, either the"},{"line_number":20,"context_line":"Octavia default or others."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_dfa38eb0","line":19,"range":{"start_line":19,"start_character":39,"end_line":19,"end_character":63},"updated":"2017-11-02 11:51:40.000000000","message":"Simultaneously?\nMight be worth to clarify that (could be related to flavors?)","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8d65fe2cc6a7e0391af93957134de0314c8ef3cd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Available drivers will be enabled by entries in the Octavia configuration file."},{"line_number":25,"context_line":"Drivers will be loaded via stevedore and Octavia will communicate with drivers"},{"line_number":26,"context_line":"through a standard class interface defined below. Most driver functions will be"},{"line_number":27,"context_line":"aynchronous to Octavia, and Octavia will provide a set of callback functions"},{"line_number":28,"context_line":"that give drivers a way to udpate status and statistics. Functions that are"},{"line_number":29,"context_line":"synchronous are noted below."},{"line_number":30,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_baf72e5a","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":11},"updated":"2017-11-08 21:34:19.000000000","message":"asynchronous","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8d65fe2cc6a7e0391af93957134de0314c8ef3cd","unresolved":false,"context_lines":[{"line_number":25,"context_line":"Drivers will be loaded via stevedore and Octavia will communicate with drivers"},{"line_number":26,"context_line":"through a standard class interface defined below. Most driver functions will be"},{"line_number":27,"context_line":"aynchronous to Octavia, and Octavia will provide a set of callback functions"},{"line_number":28,"context_line":"that give drivers a way to udpate status and statistics. Functions that are"},{"line_number":29,"context_line":"synchronous are noted below."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"**Standard Octavia API Interface**"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_7a9776ed","line":28,"range":{"start_line":28,"start_character":27,"end_line":28,"end_character":33},"updated":"2017-11-08 21:34:19.000000000","message":"update","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  * create"},{"line_number":42,"context_line":"  * update"},{"line_number":43,"context_line":"  * delete"},{"line_number":44,"context_line":"  * get statistics"},{"line_number":45,"context_line":"  * get status tree"},{"line_number":46,"context_line":"  * failover"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"* Listeners"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_b37f10aa","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":19},"updated":"2017-10-31 22:38:04.000000000","message":"I think these would just come from the Octavia database and not need to call into the driver.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":41,"context_line":"  * create"},{"line_number":42,"context_line":"  * update"},{"line_number":43,"context_line":"  * delete"},{"line_number":44,"context_line":"  * get statistics"},{"line_number":45,"context_line":"  * get status tree"},{"line_number":46,"context_line":"  * failover"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"* Listeners"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_c1406138","line":45,"range":{"start_line":44,"start_character":0,"end_line":45,"end_character":19},"in_reply_to":"3f4b6375_b37f10aa","updated":"2017-11-01 14:41:16.000000000","message":"Presumably the drivers are updating stats and status periodically, but having this interface would \u0027kick\u0027 the driver to do an immediate update. Are we ok with relying on returning stats/status from the last update (whenever that might have been)? If so, it makes sense to me to remove these APIs.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  * create"},{"line_number":51,"context_line":"  * update"},{"line_number":52,"context_line":"  * delete"},{"line_number":53,"context_line":"  * get statistics"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* Pools"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_33456071","line":53,"range":{"start_line":53,"start_character":2,"end_line":53,"end_character":18},"updated":"2017-10-31 22:38:04.000000000","message":"Does this need to call into the driver or would it just pull from the DB?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":50,"context_line":"  * create"},{"line_number":51,"context_line":"  * update"},{"line_number":52,"context_line":"  * delete"},{"line_number":53,"context_line":"  * get statistics"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"* Pools"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_4176b1a6","line":53,"range":{"start_line":53,"start_character":2,"end_line":53,"end_character":18},"in_reply_to":"3f4b6375_33456071","updated":"2017-11-01 14:41:16.000000000","message":"Same as aboe.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Members"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  * create"},{"line_number":64,"context_line":"  * update"},{"line_number":65,"context_line":"  * delete"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Health Monitor"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_d3072c1d","line":64,"range":{"start_line":64,"start_character":1,"end_line":64,"end_character":10},"updated":"2017-10-31 22:38:04.000000000","message":"We have added a batch update for members, I think drivers should have this option too.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":61,"context_line":"* Members"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"  * create"},{"line_number":64,"context_line":"  * update"},{"line_number":65,"context_line":"  * delete"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"* Health Monitor"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_0170b9a4","line":64,"range":{"start_line":64,"start_character":1,"end_line":64,"end_character":10},"in_reply_to":"3f4b6375_d3072c1d","updated":"2017-11-01 14:41:16.000000000","message":"Yes, that makes sense. I\u0027ll add it as well.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Driver implementations may not be able to support all operations, and are free"},{"line_number":90,"context_line":"to reject a request. Provider drivers will validate that they can complete the"},{"line_number":91,"context_line":"request and return one of two values, defined as constants:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Accepted: Driver can complete the request and will continue processing the"},{"line_number":94,"context_line":"    request."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_256997bd","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":59},"updated":"2017-10-31 22:38:04.000000000","message":"Can we define an exception the driver will raise if it is not able to implement the request?\nSomething like DriverNotImplemented based on an APIException, with a message that lets the user know what requested feature is not implemented by this driver?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Driver implementations may not be able to support all operations, and are free"},{"line_number":90,"context_line":"to reject a request. Provider drivers will validate that they can complete the"},{"line_number":91,"context_line":"request and return one of two values, defined as constants:"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"  * Accepted: Driver can complete the request and will continue processing the"},{"line_number":94,"context_line":"    request."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_615e4d13","line":91,"range":{"start_line":91,"start_character":8,"end_line":91,"end_character":59},"in_reply_to":"3f4b6375_256997bd","updated":"2017-11-01 14:41:16.000000000","message":"An exception in place of return value makes sesn.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Octavia flavors are defined in a separate specification (see References below)."},{"line_number":101,"context_line":"Support for flavors will be provided through two provider driver interfaces,"},{"line_number":102,"context_line":"one to query supported flavors and another to validate that a flavor is"},{"line_number":103,"context_line":"supported. Both functions are synchronous."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Following are interface defintions for flavor support:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_051c5b11","line":102,"range":{"start_line":102,"start_character":23,"end_line":102,"end_character":30},"updated":"2017-10-31 22:38:04.000000000","message":"flavor parameters","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"Octavia flavors are defined in a separate specification (see References below)."},{"line_number":101,"context_line":"Support for flavors will be provided through two provider driver interfaces,"},{"line_number":102,"context_line":"one to query supported flavors and another to validate that a flavor is"},{"line_number":103,"context_line":"supported. Both functions are synchronous."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"Following are interface defintions for flavor support:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_419b51c8","line":102,"range":{"start_line":102,"start_character":23,"end_line":102,"end_character":30},"in_reply_to":"3f4b6375_051c5b11","updated":"2017-11-01 14:41:16.000000000","message":"Done","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":133,"context_line":"**Driver Callback Support**"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Provider drivers need support for updating provisioning status, operating"},{"line_number":136,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":137,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":138,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":139,"context_line":"and statistics. The APIs will be restricted to administrators only."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_253e3729","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":24},"updated":"2017-10-31 22:38:04.000000000","message":"We should probably comment that this is needed for aggregate queries to the Octavia API and thus is impractical to query the driver.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":133,"context_line":"**Driver Callback Support**"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"Provider drivers need support for updating provisioning status, operating"},{"line_number":136,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":137,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":138,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":139,"context_line":"and statistics. The APIs will be restricted to administrators only."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_a16e8593","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":24},"in_reply_to":"3f4b6375_253e3729","updated":"2017-11-01 14:41:16.000000000","message":"Ok.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":136,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":137,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":138,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":139,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"*Update Status API*"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_4537f34e","line":139,"range":{"start_line":139,"start_character":47,"end_line":139,"end_character":61},"updated":"2017-10-31 22:38:04.000000000","message":"drivers?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":136,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":137,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":138,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":139,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"*Update Status API*"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_c121814f","line":139,"range":{"start_line":139,"start_character":47,"end_line":139,"end_character":61},"in_reply_to":"3f4b6375_4537f34e","updated":"2017-11-01 14:41:16.000000000","message":"On further reflection, I\u0027m not sure it makes sense to define a REST interface here. Rather, we can define a library API that provider drivers use, and that library can be implemented in any number of ways, including a REST implementation. But the REST interface does not need to be public. Thoughts?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0f40f6ac25844f4b0244d5dbff184dece4773b4a","unresolved":false,"context_lines":[{"line_number":136,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":137,"context_line":"and instead will callback to Octavia using new REST APIs. REST endpoints"},{"line_number":138,"context_line":"will be created allowing drivers to periodically update entity status"},{"line_number":139,"context_line":"and statistics. The APIs will be restricted to administrators only."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"*Update Status API*"},{"line_number":142,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_41418a09","line":139,"range":{"start_line":139,"start_character":47,"end_line":139,"end_character":61},"in_reply_to":"3f4b6375_c121814f","updated":"2017-11-07 19:29:34.000000000","message":"Yes, I think providing a library is best than we can worry about a) authentication and b) how to send the values","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":143,"context_line":"A new REST endpoint will be defined to support updating entity status. The"},{"line_number":144,"context_line":"API will be defined by these URLs:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"/v2.0/lbaas/loadbalancers/{loadbalancer_id}/status"},{"line_number":147,"context_line":"/v2.0/lbaas/listeners/{listener_id}/status"},{"line_number":148,"context_line":"/v2.0/lbaas/pools/{pool_id}/status"},{"line_number":149,"context_line":"/v2.0/lbaas/pools/{pool_id}/members/{member_id}/status"},{"line_number":150,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":153,"context_line":"Valid values will be integer constants as defined by Octavia."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_880742ca","line":150,"range":{"start_line":146,"start_character":0,"end_line":150,"end_character":45},"updated":"2017-10-31 22:38:04.000000000","message":"My comments from patch set 1 still apply here. It seems like we want a custom path that allows bulk updates.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0f40f6ac25844f4b0244d5dbff184dece4773b4a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"A new REST endpoint will be defined to support updating entity status. The"},{"line_number":144,"context_line":"API will be defined by these URLs:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"/v2.0/lbaas/loadbalancers/{loadbalancer_id}/status"},{"line_number":147,"context_line":"/v2.0/lbaas/listeners/{listener_id}/status"},{"line_number":148,"context_line":"/v2.0/lbaas/pools/{pool_id}/status"},{"line_number":149,"context_line":"/v2.0/lbaas/pools/{pool_id}/members/{member_id}/status"},{"line_number":150,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":153,"context_line":"Valid values will be integer constants as defined by Octavia."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_21756e64","line":150,"range":{"start_line":146,"start_character":0,"end_line":150,"end_character":45},"in_reply_to":"3f4b6375_614f6d34","updated":"2017-11-07 19:29:34.000000000","message":"again I would prefer a library...","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":143,"context_line":"A new REST endpoint will be defined to support updating entity status. The"},{"line_number":144,"context_line":"API will be defined by these URLs:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"/v2.0/lbaas/loadbalancers/{loadbalancer_id}/status"},{"line_number":147,"context_line":"/v2.0/lbaas/listeners/{listener_id}/status"},{"line_number":148,"context_line":"/v2.0/lbaas/pools/{pool_id}/status"},{"line_number":149,"context_line":"/v2.0/lbaas/pools/{pool_id}/members/{member_id}/status"},{"line_number":150,"context_line":"/v2.0/lbaas/l7_policies/{l7_policy_id}/status"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"The payload will include provisioning status and operating status values."},{"line_number":153,"context_line":"Valid values will be integer constants as defined by Octavia."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_614f6d34","line":150,"range":{"start_line":146,"start_character":0,"end_line":150,"end_character":45},"in_reply_to":"3f4b6375_880742ca","updated":"2017-11-01 14:41:16.000000000","message":"A bulk update instead of, or in addition to, individual updates? My preference is a single bulk update.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Use the existing endpoint, which is now GET only, to support updating"},{"line_number":158,"context_line":"statistics for load balancers and listeners. The API is defined by these URLs:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"/v2.0/lbaas/loadbalancers/loadbalancer_id/stats"},{"line_number":161,"context_line":"/v2.0/lbaas/listeners/listener_id/stats"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Statistics are as defined in the Octavia API."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_c8fc1ab7","line":161,"range":{"start_line":160,"start_character":0,"end_line":161,"end_character":39},"updated":"2017-10-31 22:38:04.000000000","message":"Same question, should this be a bulk API instead of per LB or listener?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Use the existing endpoint, which is now GET only, to support updating"},{"line_number":158,"context_line":"statistics for load balancers and listeners. The API is defined by these URLs:"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"/v2.0/lbaas/loadbalancers/loadbalancer_id/stats"},{"line_number":161,"context_line":"/v2.0/lbaas/listeners/listener_id/stats"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Statistics are as defined in the Octavia API."},{"line_number":164,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_61ebeddb","line":161,"range":{"start_line":160,"start_character":0,"end_line":161,"end_character":39},"in_reply_to":"3f4b6375_c8fc1ab7","updated":"2017-11-01 14:41:16.000000000","message":"Yes, I think a bulk API makes sense.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Security impact"},{"line_number":213,"context_line":"---------------"},{"line_number":214,"context_line":"REST APIs will be added, but all new APIs will be restricted to administrators."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Notifications impact"},{"line_number":217,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_08e112fd","line":214,"range":{"start_line":214,"start_character":64,"end_line":214,"end_character":78},"updated":"2017-10-31 22:38:04.000000000","message":"I think we should discuss how to protect these.  Is it keystone tokens, two-way TLS certs, hmac?\nPersonally I like to use two-way TLS to keep it simple.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0f40f6ac25844f4b0244d5dbff184dece4773b4a","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Security impact"},{"line_number":213,"context_line":"---------------"},{"line_number":214,"context_line":"REST APIs will be added, but all new APIs will be restricted to administrators."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Notifications impact"},{"line_number":217,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_41286a31","line":214,"range":{"start_line":214,"start_character":64,"end_line":214,"end_character":78},"in_reply_to":"3f4b6375_01ab1989","updated":"2017-11-07 19:29:34.000000000","message":"This proves my point. I doubt many driver developers want to deal with keystone -- so I would say we go with the library approach and manage at the authentication for them...","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"97192f1edb3130b82ab3497731a311ef78206680","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"Security impact"},{"line_number":213,"context_line":"---------------"},{"line_number":214,"context_line":"REST APIs will be added, but all new APIs will be restricted to administrators."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Notifications impact"},{"line_number":217,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_01ab1989","line":214,"range":{"start_line":214,"start_character":64,"end_line":214,"end_character":78},"in_reply_to":"3f4b6375_08e112fd","updated":"2017-11-01 14:41:16.000000000","message":"My experience here is limited, so I\u0027m completely open.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"f988227d1159fc8d02d474ac9c0fad6116b64795","unresolved":false,"context_lines":[{"line_number":220,"context_line":"Other end user impact"},{"line_number":221,"context_line":"---------------------"},{"line_number":222,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":223,"context_line":"parameter. Users may want to understand the availablity of third party drivers,"},{"line_number":224,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":225,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":226,"context_line":"developers will need to provide their own means of reporting driver status."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_af2892e1","line":223,"range":{"start_line":223,"start_character":10,"end_line":223,"end_character":39},"updated":"2017-11-02 11:51:40.000000000","message":"So, would non-admin users be able to see which driver is used as a backend?","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0f40f6ac25844f4b0244d5dbff184dece4773b4a","unresolved":false,"context_lines":[{"line_number":220,"context_line":"Other end user impact"},{"line_number":221,"context_line":"---------------------"},{"line_number":222,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":223,"context_line":"parameter. Users may want to understand the availablity of third party drivers,"},{"line_number":224,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":225,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":226,"context_line":"developers will need to provide their own means of reporting driver status."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_21e8cedf","line":223,"range":{"start_line":223,"start_character":10,"end_line":223,"end_character":39},"in_reply_to":"3f4b6375_af2892e1","updated":"2017-11-07 19:29:34.000000000","message":"I think some operators will allow their users to specify providers and others will prefer if they use flavors. That needs some more fleshing out.","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0f40f6ac25844f4b0244d5dbff184dece4773b4a","unresolved":false,"context_lines":[{"line_number":222,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":223,"context_line":"parameter. Users may want to understand the availablity of third party drivers,"},{"line_number":224,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":225,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":226,"context_line":"developers will need to provide their own means of reporting driver status."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_e1c63668","line":225,"updated":"2017-11-07 19:29:34.000000000","message":"We talked in Denver about a similar command to neuron\u0027s agent status. So let\u0027s think more about that...","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d57c466c80f174e293eaec28741fb71690426b2b","unresolved":false,"context_lines":[{"line_number":230,"context_line":"The peformance impact on Octavia should be minimal. Driver requests will need"},{"line_number":231,"context_line":"to be scheduled, and Octavia will process driver callbacks through the a REST"},{"line_number":232,"context_line":"interface. As provider drivers are loaded by Octavia, calls into drivers are"},{"line_number":233,"context_line":"through direct interfacesn"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"Other deployer impact"},{"line_number":236,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3f4b6375_c8c3fa56","line":233,"range":{"start_line":233,"start_character":15,"end_line":233,"end_character":26},"updated":"2017-10-31 22:38:04.000000000","message":"typo","commit_id":"ec614d88b2cf28f66c992e3cfa1e0ee19ae8863f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":74,"context_line":"  | name           | string | Human-readable name of the resource.           |"},{"line_number":75,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":76,"context_line":"  | project_id     | string | ID of the project owning this resource.        |"},{"line_number":77,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"  **delete**"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_d11153ae","line":77,"updated":"2017-11-14 21:36:28.000000000","message":"single create (see https://developer.openstack.org/api-ref/load-balancer/v2/index.html) will require also pools and such...","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  The driver will notify Octavia that the delete was successful. If the delete"},{"line_number":88,"context_line":"  failed, the driver will update the provisioning status to ERROR."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  failover"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  Performs a failover of a load balancer."}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_71229f02","line":89,"updated":"2017-11-14 21:36:28.000000000","message":"we offer an cascade option","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  The driver will notify Octavia that the delete was successful. If the delete"},{"line_number":88,"context_line":"  failed, the driver will update the provisioning status to ERROR."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"  failover"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  Performs a failover of a load balancer."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_91ccfb61","line":90,"updated":"2017-11-14 21:36:28.000000000","message":"make this bold","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":98,"context_line":"  The driver will update the provisioning status of the load balancer to either"},{"line_number":99,"context_line":"  ACTIVE if successfully failed over, or ERROR if not failed over."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"  **get statistics**"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  Returns a dictionary containing statistics for a load balancer."},{"line_number":104,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_b1fa5772","line":101,"updated":"2017-11-14 21:36:28.000000000","message":"I thought we weren\u0027t doing a poll but rather writing this into the Octavia DB?","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":123,"context_line":"  +--------------------+------+-----------------------------------------------+"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"  **get status tree**"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"  Returns a dictionary representing the status tree for a load balancer."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"  If the operation succeeds, the returned element is a dictionary that contains"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_71f4df86","line":126,"updated":"2017-11-14 21:36:28.000000000","message":"Same, I thought we weren\u0027t doing a poll","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":271,"context_line":"  the project_id of the parent load balancer."},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"  If the driver cannot fulfill the request due to insufficient data or data"},{"line_number":274,"context_line":"  that is not valid, the driver will raise a NotImplementedError exception."},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"  Required values:"},{"line_number":277,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_d15f1370","line":274,"updated":"2017-11-14 21:36:28.000000000","message":"we should throw a different exception for data which is not valid...","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":352,"context_line":"  The driver will notify Octavia that the delete was successful. If the delete"},{"line_number":353,"context_line":"  failed, the driver will update the provisioning status to ERROR."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"  **get statistics**"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"  Returns a dictionary containing statistics for a listener."},{"line_number":358,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_514b23af","line":355,"updated":"2017-11-14 21:36:28.000000000","message":"poll vs. update?","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":526,"context_line":"  |                       |        | ROUND_ROBIN, LEAST_CONNECTIONS, or       |"},{"line_number":527,"context_line":"  |                       |        | SOURCE_IP.                               |"},{"line_number":528,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":529,"context_line":"  | listener_id   OR      | string | ID of listener.                          |"},{"line_number":530,"context_line":"  | loadbalancer_id       |        | ID of load balancer.                     |"},{"line_number":531,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":532,"context_line":"  | protocol              | string | Protocol type: One of HTTP, HTTPS,       |"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_f1d1efce","line":529,"updated":"2017-11-14 21:36:28.000000000","message":"better to make this two rows","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":891,"context_line":"Driver implementations may not be able to support all operations, and are free"},{"line_number":892,"context_line":"to reject a request. Provider drivers will validate that they can complete the"},{"line_number":893,"context_line":"request. If the request fails validation, drivers will raise a"},{"line_number":894,"context_line":"NotImplemented exception. The exception should include a message parameter"},{"line_number":895,"context_line":"that describes the nature of the failure."},{"line_number":896,"context_line":""},{"line_number":897,"context_line":"**Flavor Support Interface**"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_51e0c396","line":894,"updated":"2017-11-14 21:36:28.000000000","message":"Let\u0027s have a distinct Exception for when validation fails","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"d2174c4d6f228ea82fe4b66bbe802b639938bf84","unresolved":false,"context_lines":[{"line_number":980,"context_line":"Performance Impact"},{"line_number":981,"context_line":"------------------"},{"line_number":982,"context_line":"The performance impact on Octavia should be minimal. Driver requests will need"},{"line_number":983,"context_line":"to be scheduled, and Octavia will process driver callbacks through the a REST"},{"line_number":984,"context_line":"interface. As provider drivers are loaded by Octavia, calls into drivers are"},{"line_number":985,"context_line":"through direct interfaces"},{"line_number":986,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"1f485f77_b104974b","line":983,"updated":"2017-11-14 21:36:28.000000000","message":"through a library which might fo REDT calls or other ways of communicating...","commit_id":"d8ade87bac6d8868db0f811e6ce3f89a2d510a39"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"**Octavia Provider Driver API**"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Provider drivers will be expected to support the full interface described"},{"line_number":34,"context_line":"by the Octavia API, currently v2.0. If a driver does not implement an aAPI"},{"line_number":35,"context_line":"function, drivers should fail a request by raising a NotImplementedError"},{"line_number":36,"context_line":"exception. If a driver implments a function but does not support a particular"},{"line_number":37,"context_line":"option passed in by the caller, the driver should raise an"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_cf2047af","line":34,"updated":"2017-11-16 21:01:58.000000000","message":"aAPI?","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":31,"context_line":"**Octavia Provider Driver API**"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Provider drivers will be expected to support the full interface described"},{"line_number":34,"context_line":"by the Octavia API, currently v2.0. If a driver does not implement an aAPI"},{"line_number":35,"context_line":"function, drivers should fail a request by raising a NotImplementedError"},{"line_number":36,"context_line":"exception. If a driver implments a function but does not support a particular"},{"line_number":37,"context_line":"option passed in by the caller, the driver should raise an"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_d3abeb72","line":34,"in_reply_to":"1f485f77_cf2047af","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  | name           | string | Human-readable name of the resource.           |"},{"line_number":85,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":86,"context_line":"  | project_id     | string | ID of the project owning this resource.        |"},{"line_number":87,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  **delete**"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_52119c51","line":87,"updated":"2017-11-16 21:01:58.000000000","message":"still not sufficient for single-create","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  | name           | string | Human-readable name of the resource.           |"},{"line_number":85,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":86,"context_line":"  | project_id     | string | ID of the project owning this resource.        |"},{"line_number":87,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  **delete**"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_f3ef0fae","line":87,"in_reply_to":"1f485f77_52119c51","updated":"2017-11-20 15:42:15.000000000","message":"Added VIP address as required, and loadbalancer, VIP network/subnet options. Also, added clarification on how VIP address is defined (before calling provider driver).","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  **failover**"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  Performs a failover of a load balancer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  If the driver does not implement failovert, the driver will raise a"},{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_f277689f","line":104,"updated":"2017-11-16 21:01:58.000000000","message":"I would write something: A failover can mean different things in the context of a provider driver - for instance in Octavia\u0027s case we replace the current service vm(s) with another one.","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"  **failover**"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  Performs a failover of a load balancer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  If the driver does not implement failovert, the driver will raise a"},{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_f372af11","line":104,"in_reply_to":"1f485f77_f277689f","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  Performs a failover of a load balancer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  If the driver does not implement failovert, the driver will raise a"},{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"},{"line_number":108,"context_line":"  the exception message."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_b26d70cd","line":106,"range":{"start_line":106,"start_character":35,"end_line":106,"end_character":44},"updated":"2017-11-16 21:01:58.000000000","message":"failoverT remove \u0027t\u0027","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"  Performs a failover of a load balancer."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"  If the driver does not implement failovert, the driver will raise a"},{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"},{"line_number":108,"context_line":"  the exception message."},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_7360df33","line":106,"range":{"start_line":106,"start_character":35,"end_line":106,"end_character":44},"in_reply_to":"1f485f77_b26d70cd","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"},{"line_number":108,"context_line":"  the exception message."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  If the operation fails to complete successfully, the driver will raise"},{"line_number":111,"context_line":"  a LoadBalancerFailoverError exception and include a message field information"},{"line_number":112,"context_line":"  on the cause of the failure."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_52687cb7","line":110,"updated":"2017-11-16 21:01:58.000000000","message":"failover is async. So of the operation fails the load balancer will se set to ERROR","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":107,"context_line":"  NotImplementedError exception and include information about the failure in"},{"line_number":108,"context_line":"  the exception message."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  If the operation fails to complete successfully, the driver will raise"},{"line_number":111,"context_line":"  a LoadBalancerFailoverError exception and include a message field information"},{"line_number":112,"context_line":"  on the cause of the failure."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_1355d350","line":110,"in_reply_to":"1f485f77_52687cb7","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":111,"context_line":"  a LoadBalancerFailoverError exception and include a message field information"},{"line_number":112,"context_line":"  on the cause of the failure."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"  **get statistics**"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  Returns a dictionary containing statistics for a load balancer."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_92803448","line":114,"updated":"2017-11-16 21:01:58.000000000","message":"Aren\u0027t we going to push that to the DB and this call will only  be for the Octavia API to get it from the DB but not carry it through to the driver?","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":111,"context_line":"  a LoadBalancerFailoverError exception and include a message field information"},{"line_number":112,"context_line":"  on the cause of the failure."},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"  **get statistics**"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"  Returns a dictionary containing statistics for a load balancer."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_93c6c316","line":114,"in_reply_to":"1f485f77_92803448","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":134,"context_line":"  +--------------------+------+-----------------------------------------------+"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  **get status tree**"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  Returns a dictionary representing the status tree for a load balancer."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"  If the driver does not implement the request, the driver will raise a"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_52963c95","line":137,"updated":"2017-11-16 21:01:58.000000000","message":"Aren\u0027t we going to push that to the DB and this call will only  be for the Octavia API to get it from the DB but not carry it through to the driver?","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":134,"context_line":"  +--------------------+------+-----------------------------------------------+"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  **get status tree**"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  Returns a dictionary representing the status tree for a load balancer."},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"  If the driver does not implement the request, the driver will raise a"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_f3e06f99","line":137,"in_reply_to":"1f485f77_52963c95","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"  failed, the driver will update the provisioning status to ERROR."},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"  **get statistics**"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"  Returns a dictionary containing statistics for a listener."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"  If the driver does not implement the request, the driver will raise a"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_f2d3e85e","line":385,"updated":"2017-11-16 21:01:58.000000000","message":"I thought we are sending push to the DB?","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":382,"context_line":"  failed, the driver will update the provisioning status to ERROR."},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"  **get statistics**"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"  Returns a dictionary containing statistics for a listener."},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"  If the driver does not implement the request, the driver will raise a"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_93efa386","line":385,"in_reply_to":"1f485f77_f2d3e85e","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"  **delete**"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"  Deletes an existing pool."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"  If the driver does not implement the request, the driver will raise a"},{"line_number":602,"context_line":"  NotImplementedError exception."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_92439413","line":599,"updated":"2017-11-16 21:01:58.000000000","message":"and it\u0027s members.","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":596,"context_line":""},{"line_number":597,"context_line":"  **delete**"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"  Deletes an existing pool."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"  If the driver does not implement the request, the driver will raise a"},{"line_number":602,"context_line":"  NotImplementedError exception."}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_ae64bcba","line":599,"in_reply_to":"1f485f77_92439413","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"  UnsupportedConfigurationOptionError and include a message parameter providing"},{"line_number":1564,"context_line":"  an explanation of the failure."},{"line_number":1565,"context_line":""},{"line_number":1566,"context_line":"  **LoadBalancerFailoverError**"},{"line_number":1567,"context_line":""},{"line_number":1568,"context_line":"  This is the exception raised when a load balancer failover does not succeed."},{"line_number":1569,"context_line":"  When raised, it should include a message parameter providing an explanation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_b225705e","line":1566,"updated":"2017-11-16 21:01:58.000000000","message":"Since the failover is async we will set the LB to error instead","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":1563,"context_line":"  UnsupportedConfigurationOptionError and include a message parameter providing"},{"line_number":1564,"context_line":"  an explanation of the failure."},{"line_number":1565,"context_line":""},{"line_number":1566,"context_line":"  **LoadBalancerFailoverError**"},{"line_number":1567,"context_line":""},{"line_number":1568,"context_line":"  This is the exception raised when a load balancer failover does not succeed."},{"line_number":1569,"context_line":"  When raised, it should include a message parameter providing an explanation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_33001735","line":1566,"in_reply_to":"1f485f77_b225705e","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"  .. code-block:: python"},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"    def update_loadbalancer_status(loadbalancer_id,"},{"line_number":1632,"context_line":"                                   provisioning_status\u003dNone,"},{"line_number":1633,"context_line":"                                   operating_status\u003dNone):"},{"line_number":1634,"context_line":"        \"\"\"Update load balancer status."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_f2908845","line":1631,"updated":"2017-11-16 21:01:58.000000000","message":"can we have an update_status with a jspn/python dictionary which contains all the status we need to update, e,g.\n\n\"loadbalancers\":  [ \n{\"id\":\"123\", \"provisioning_status\":\"ACTICE\", \"operating_status\":\"Online\"}],\n\"listeners\": [{...","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":1628,"context_line":""},{"line_number":1629,"context_line":"  .. code-block:: python"},{"line_number":1630,"context_line":""},{"line_number":1631,"context_line":"    def update_loadbalancer_status(loadbalancer_id,"},{"line_number":1632,"context_line":"                                   provisioning_status\u003dNone,"},{"line_number":1633,"context_line":"                                   operating_status\u003dNone):"},{"line_number":1634,"context_line":"        \"\"\"Update load balancer status."}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_ae9fdcb2","line":1631,"in_reply_to":"1f485f77_f2908845","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1705,"context_line":""},{"line_number":1706,"context_line":"  .. code-block:: python"},{"line_number":1707,"context_line":""},{"line_number":1708,"context_line":"    def update_loadbalancer_statistics(loadbalancer_id, statistics):"},{"line_number":1709,"context_line":"        \"\"\"Update load balancer statistics."},{"line_number":1710,"context_line":""},{"line_number":1711,"context_line":"        The statistics are an aggregate of all listeners in a load balancer."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_52a19c93","line":1708,"updated":"2017-11-16 21:01:58.000000000","message":"can we get a similar json/python dictionary based method","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"  .. code-block:: python"},{"line_number":1747,"context_line":""},{"line_number":1748,"context_line":"    def loadbalancer_destroyed(loadbalancer_id):"},{"line_number":1749,"context_line":"        \"\"\"Notifies Octavia that load balancer was deleted."},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"        :param loadbalancer_id (string): load balancer ID."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_d2beacb2","line":1748,"updated":"2017-11-16 21:01:58.000000000","message":"unnecessary we have a provisioning_status of \"DELETED\" - so a status update would cover that","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":1745,"context_line":""},{"line_number":1746,"context_line":"  .. code-block:: python"},{"line_number":1747,"context_line":""},{"line_number":1748,"context_line":"    def loadbalancer_destroyed(loadbalancer_id):"},{"line_number":1749,"context_line":"        \"\"\"Notifies Octavia that load balancer was deleted."},{"line_number":1750,"context_line":""},{"line_number":1751,"context_line":"        :param loadbalancer_id (string): load balancer ID."}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_6e455417","line":1748,"in_reply_to":"1f485f77_d2beacb2","updated":"2017-11-20 15:42:15.000000000","message":"Done","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1755,"context_line":"        raise NotImplementedError()"},{"line_number":1756,"context_line":""},{"line_number":1757,"context_line":"    def listener_destroyed(listener_id):"},{"line_number":1758,"context_line":"        \"\"\"Notifies Octavia that listener was deleted."},{"line_number":1759,"context_line":""},{"line_number":1760,"context_line":"        :param listener_id (string): listener ID."},{"line_number":1761,"context_line":"        :raises: ResourceDestroyedError"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_52cabc4d","line":1758,"updated":"2017-11-16 21:01:58.000000000","message":"same","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"827968a235473bffa38e911b61975e6b50fec31b","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        raise NotImplementedError()"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"  **Get Resource Support**"},{"line_number":1812,"context_line":"  Provider drivers may need to get information about an Octavia resource."},{"line_number":1813,"context_line":"  These methods return resources as defined in Octavia."},{"line_number":1814,"context_line":"  As an example of its use, a provider driver may need to sync with Octavia,"},{"line_number":1815,"context_line":"  and therefore need to fetch all of the Octavia resourcces it is responsible"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1f485f77_f2076881","line":1812,"updated":"2017-11-16 21:01:58.000000000","message":"why can\u0027t we use the existing API or API client?","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"a5e7527473cb9c209dbbb689da3b1306103dfb23","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        raise NotImplementedError()"},{"line_number":1810,"context_line":""},{"line_number":1811,"context_line":"  **Get Resource Support**"},{"line_number":1812,"context_line":"  Provider drivers may need to get information about an Octavia resource."},{"line_number":1813,"context_line":"  These methods return resources as defined in Octavia."},{"line_number":1814,"context_line":"  As an example of its use, a provider driver may need to sync with Octavia,"},{"line_number":1815,"context_line":"  and therefore need to fetch all of the Octavia resourcces it is responsible"}],"source_content_type":"text/x-rst","patch_set":7,"id":"ff82abbf_8e3698b4","line":1812,"in_reply_to":"1f485f77_f2076881","updated":"2017-11-20 15:42:15.000000000","message":"Agreed. Removed this section.","commit_id":"3730abedfd7e237180484f7456a178ea04a8f055"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"3d2dc61937a0016ebdc4520da768a1b42af760b3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  before calling the provider driver, and is not the responsibility of the"},{"line_number":80,"context_line":"  provider driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"  With the Octavia API, providing a neutron port ID for the vip_port_id"},{"line_number":83,"context_line":"  tells Octavia to use this port for the VIP. Some port settings may be changed"},{"line_number":84,"context_line":"  or removed as required by Octavia, but the IP address will be retained. If"},{"line_number":85,"context_line":"  the port has more than one subnet users must specify either the vip_subnet_id"},{"line_number":86,"context_line":"  or vip_address to clarify which address should be used for the VIP."},{"line_number":87,"context_line":"  Specifying a neutron subnet ID will tell Octavia to create a neutron port on"},{"line_number":88,"context_line":"  this subnet and allocate an IP address from the subnet if the vip_address was"},{"line_number":89,"context_line":"  not specified. If vip_address was specified, Octavia will attempt to allocate"},{"line_number":90,"context_line":"  the vip_address from the subnet for the VIP address. Finally, when a"},{"line_number":91,"context_line":"  vip_network_ip is specified Octavia will select a subnet from the network,"},{"line_number":92,"context_line":"  preferring IPv4 over IPv6 subnets, if a vip_address was not provided."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  Supported options:"},{"line_number":95,"context_line":"  +----------------+--------+------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_ea2dc9a8","line":92,"range":{"start_line":82,"start_character":2,"end_line":92,"end_character":71},"updated":"2017-11-20 21:23:18.000000000","message":"As part of Active/Active L3 spec (https://review.openstack.org/#/c/453005/15/specs/version1.1/active-active-l3-distributor.rst) we agreed to not assume front-end subnet (formerly VRRP) \u003d VIP subnet and to extend the existing API to allow the user to provide an optional front-end subnet. Shouldn\u0027t this reflect this as well?  If not, it would have to be specified in flavor metadata","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"a83dc2f7ca8dcaae5aaeb964498e9db09182e2fe","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  before calling the provider driver, and is not the responsibility of the"},{"line_number":80,"context_line":"  provider driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"  With the Octavia API, providing a neutron port ID for the vip_port_id"},{"line_number":83,"context_line":"  tells Octavia to use this port for the VIP. Some port settings may be changed"},{"line_number":84,"context_line":"  or removed as required by Octavia, but the IP address will be retained. If"},{"line_number":85,"context_line":"  the port has more than one subnet users must specify either the vip_subnet_id"},{"line_number":86,"context_line":"  or vip_address to clarify which address should be used for the VIP."},{"line_number":87,"context_line":"  Specifying a neutron subnet ID will tell Octavia to create a neutron port on"},{"line_number":88,"context_line":"  this subnet and allocate an IP address from the subnet if the vip_address was"},{"line_number":89,"context_line":"  not specified. If vip_address was specified, Octavia will attempt to allocate"},{"line_number":90,"context_line":"  the vip_address from the subnet for the VIP address. Finally, when a"},{"line_number":91,"context_line":"  vip_network_ip is specified Octavia will select a subnet from the network,"},{"line_number":92,"context_line":"  preferring IPv4 over IPv6 subnets, if a vip_address was not provided."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  Supported options:"},{"line_number":95,"context_line":"  +----------------+--------+------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_eb51afda","line":92,"range":{"start_line":82,"start_character":2,"end_line":92,"end_character":71},"in_reply_to":"ff82abbf_0baa37d1","updated":"2017-11-27 22:47:52.000000000","message":"With Neutron QoS support coming we probably should think about that, too. Right now the user can specify a qos policy to be added to the port Octavia ia creates OR supply. aport with a QoS policy already associated.","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"f5d18179cb40a2c1ff5f0a051f5dd273813823d3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"  before calling the provider driver, and is not the responsibility of the"},{"line_number":80,"context_line":"  provider driver."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"  With the Octavia API, providing a neutron port ID for the vip_port_id"},{"line_number":83,"context_line":"  tells Octavia to use this port for the VIP. Some port settings may be changed"},{"line_number":84,"context_line":"  or removed as required by Octavia, but the IP address will be retained. If"},{"line_number":85,"context_line":"  the port has more than one subnet users must specify either the vip_subnet_id"},{"line_number":86,"context_line":"  or vip_address to clarify which address should be used for the VIP."},{"line_number":87,"context_line":"  Specifying a neutron subnet ID will tell Octavia to create a neutron port on"},{"line_number":88,"context_line":"  this subnet and allocate an IP address from the subnet if the vip_address was"},{"line_number":89,"context_line":"  not specified. If vip_address was specified, Octavia will attempt to allocate"},{"line_number":90,"context_line":"  the vip_address from the subnet for the VIP address. Finally, when a"},{"line_number":91,"context_line":"  vip_network_ip is specified Octavia will select a subnet from the network,"},{"line_number":92,"context_line":"  preferring IPv4 over IPv6 subnets, if a vip_address was not provided."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  Supported options:"},{"line_number":95,"context_line":"  +----------------+--------+------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_0baa37d1","line":92,"range":{"start_line":82,"start_character":2,"end_line":92,"end_character":71},"in_reply_to":"ff82abbf_ea2dc9a8","updated":"2017-11-22 14:01:14.000000000","message":"I wasn\u0027t suggesting any change, simply re-stating how Octavia determines the VIP address. I\u0027ll update this to be clear.","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"3d2dc61937a0016ebdc4520da768a1b42af760b3","unresolved":false,"context_lines":[{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"  **Update provisioning and operating status API**"},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"  The update status API defined below can be used by provider drivers"},{"line_number":1658,"context_line":"  to update the provisioning and/or operating status of Octavia resources"},{"line_number":1659,"context_line":"  (load balancer, listener, pool, member, health monitor, L7 policy, or L7"},{"line_number":1660,"context_line":"  rule)."},{"line_number":1661,"context_line":""},{"line_number":1662,"context_line":"  For the following status API, valid values for provisioning status"},{"line_number":1663,"context_line":"  and operating status parameters are as defined by Octavia status codes. If an"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_f73291a7","line":1660,"range":{"start_line":1657,"start_character":1,"end_line":1660,"end_character":8},"updated":"2017-11-20 21:23:18.000000000","message":"How are we preventing a provider driver from updating resources that belong to a different provider driver?","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"a83dc2f7ca8dcaae5aaeb964498e9db09182e2fe","unresolved":false,"context_lines":[{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"  **Update provisioning and operating status API**"},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"  The update status API defined below can be used by provider drivers"},{"line_number":1658,"context_line":"  to update the provisioning and/or operating status of Octavia resources"},{"line_number":1659,"context_line":"  (load balancer, listener, pool, member, health monitor, L7 policy, or L7"},{"line_number":1660,"context_line":"  rule)."},{"line_number":1661,"context_line":""},{"line_number":1662,"context_line":"  For the following status API, valid values for provisioning status"},{"line_number":1663,"context_line":"  and operating status parameters are as defined by Octavia status codes. If an"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_2b231758","line":1660,"range":{"start_line":1657,"start_character":1,"end_line":1660,"end_character":8},"in_reply_to":"ff82abbf_8bd64727","updated":"2017-11-27 22:47:52.000000000","message":"This will be an implementation detail on the library. There might be different\ndrivers (e.g. RPC-Queue, REST) with different authentication schemes to update depending on the needs of an operator","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"f5d18179cb40a2c1ff5f0a051f5dd273813823d3","unresolved":false,"context_lines":[{"line_number":1654,"context_line":""},{"line_number":1655,"context_line":"  **Update provisioning and operating status API**"},{"line_number":1656,"context_line":""},{"line_number":1657,"context_line":"  The update status API defined below can be used by provider drivers"},{"line_number":1658,"context_line":"  to update the provisioning and/or operating status of Octavia resources"},{"line_number":1659,"context_line":"  (load balancer, listener, pool, member, health monitor, L7 policy, or L7"},{"line_number":1660,"context_line":"  rule)."},{"line_number":1661,"context_line":""},{"line_number":1662,"context_line":"  For the following status API, valid values for provisioning status"},{"line_number":1663,"context_line":"  and operating status parameters are as defined by Octavia status codes. If an"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_8bd64727","line":1660,"range":{"start_line":1657,"start_character":1,"end_line":1660,"end_character":8},"in_reply_to":"ff82abbf_f73291a7","updated":"2017-11-22 14:01:14.000000000","message":"Octavia could generate an auth token and pass the token in each request, or give the driver the token when the driver is loaded, and require drivers to include the auth token when updating status/stats. Any other suggestions?","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":20279,"name":"Jason Niesz","email":"Jason.Niesz@walmart.com","username":"jniesz"},"change_message_id":"3d2dc61937a0016ebdc4520da768a1b42af760b3","unresolved":false,"context_lines":[{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"Other end user impact"},{"line_number":1792,"context_line":"---------------------"},{"line_number":1793,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":1794,"context_line":"parameter. Users may want to understand the availability of provider drivers,"},{"line_number":1795,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":1796,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":1797,"context_line":"developers will need to provide their own means of reporting driver status."},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"Performance Impact"},{"line_number":1800,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_179295f7","line":1797,"range":{"start_line":1793,"start_character":0,"end_line":1797,"end_character":75},"updated":"2017-11-20 21:23:18.000000000","message":"This sounds like a bad user experience, as each provider driver might expose a different API / way of getting driver status. As an operator, I would want a single API call that could return the status of all currently loaded provider drivers. I believe it was mentioned before having something like neutron agent status","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"f5d18179cb40a2c1ff5f0a051f5dd273813823d3","unresolved":false,"context_lines":[{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"Other end user impact"},{"line_number":1792,"context_line":"---------------------"},{"line_number":1793,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":1794,"context_line":"parameter. Users may want to understand the availability of provider drivers,"},{"line_number":1795,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":1796,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":1797,"context_line":"developers will need to provide their own means of reporting driver status."},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"Performance Impact"},{"line_number":1800,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_cb720f4a","line":1797,"range":{"start_line":1793,"start_character":0,"end_line":1797,"end_character":75},"in_reply_to":"ff82abbf_179295f7","updated":"2017-11-22 14:01:14.000000000","message":"Makes sense. I\u0027m guessing that Octavia can provide a list of loaded provider drivers and their availability (i.e., that they respond to a status check from Octavia). Does that satisfy operator needs?","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"a83dc2f7ca8dcaae5aaeb964498e9db09182e2fe","unresolved":false,"context_lines":[{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"Other end user impact"},{"line_number":1792,"context_line":"---------------------"},{"line_number":1793,"context_line":"Users will be able to direct requests to specific backends using the *provider*"},{"line_number":1794,"context_line":"parameter. Users may want to understand the availability of provider drivers,"},{"line_number":1795,"context_line":"but Octavia will not handle any driver discovery or driver status checks,"},{"line_number":1796,"context_line":"other than to define drivers in the Octavia configuration file. Driver"},{"line_number":1797,"context_line":"developers will need to provide their own means of reporting driver status."},{"line_number":1798,"context_line":""},{"line_number":1799,"context_line":"Performance Impact"},{"line_number":1800,"context_line":"------------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"ff82abbf_abd40721","line":1797,"range":{"start_line":1793,"start_character":0,"end_line":1797,"end_character":75},"in_reply_to":"ff82abbf_cb720f4a","updated":"2017-11-27 22:47:52.000000000","message":"Yes, that seems fair.","commit_id":"67753dd0067fa1d24136a50c3d74eeaab9c59adf"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"bf7cba1794e0a7ea0934fbfd64353445b6bdf978","unresolved":false,"context_lines":[{"line_number":68,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":69,"context_line":"  | loadbalancer_id | string | ID of load balancer to create.                |"},{"line_number":70,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":71,"context_line":"  | vip_address     | string | \tThe IP address of the Virtual IP (VIP).      |"},{"line_number":72,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  To clarify use of VIP address and VIP networks: When users create load"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_da523b35","line":71,"range":{"start_line":71,"start_character":4,"end_line":71,"end_character":73},"updated":"2017-11-29 21:10:17.000000000","message":"address is not required, but VIP port and/or subnet and/or network are. In other words, one of {port, subnet, network} is required\nI tried to put things in order in this recent documentation-only patch: https://review.openstack.org/#/c/519370/3/api-ref/source/v2/loadbalancer.inc","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"03053df695d22376e3403fb67fb9c86d70beb735","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  provider driver. The work to determine the VIP address is done by Octavia"},{"line_number":79,"context_line":"  before calling the provider driver, and is not the responsibility of the"},{"line_number":80,"context_line":"  provider driver. Refer to the Octavia API documentation for information on"},{"line_number":81,"context_line":"  how Octavia determines the VIP address."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"  Supported options:"},{"line_number":84,"context_line":"  +----------------+--------+------------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_dd2eb58a","line":81,"range":{"start_line":81,"start_character":33,"end_line":81,"end_character":40},"updated":"2017-11-29 21:00:51.000000000","message":"Please add: \"Users can pass in their own ports with Security Groups and/or QoS policies attached. Device drivers need to interrogate the port and adjust their VIP port if they are not relying on Neutron to handle those features\".","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"03053df695d22376e3403fb67fb9c86d70beb735","unresolved":false,"context_lines":[{"line_number":104,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":105,"context_line":"  | vip_port_id    | string | The ID of the Virtual IP (VIP) port.           |"},{"line_number":106,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":107,"context_line":"  | vip_port_id    | string | The ID of the subnet for the Virtual IP (VIP). |"},{"line_number":108,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  **Creating a Fully Populated Load Balancer**"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_1dac1deb","line":107,"updated":"2017-11-29 21:00:51.000000000","message":"Duplicate!","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":25239,"name":"Bar Elharar","email":"bar@redhat.com","username":"belharar"},"change_message_id":"bf7cba1794e0a7ea0934fbfd64353445b6bdf978","unresolved":false,"context_lines":[{"line_number":104,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":105,"context_line":"  | vip_port_id    | string | The ID of the Virtual IP (VIP) port.           |"},{"line_number":106,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":107,"context_line":"  | vip_port_id    | string | The ID of the subnet for the Virtual IP (VIP). |"},{"line_number":108,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  **Creating a Fully Populated Load Balancer**"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_3a448773","line":107,"range":{"start_line":107,"start_character":8,"end_line":107,"end_character":12},"updated":"2017-11-29 21:10:17.000000000","message":"subnet","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"03053df695d22376e3403fb67fb9c86d70beb735","unresolved":false,"context_lines":[{"line_number":105,"context_line":"  | vip_port_id    | string | The ID of the Virtual IP (VIP) port.           |"},{"line_number":106,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":107,"context_line":"  | vip_port_id    | string | The ID of the subnet for the Virtual IP (VIP). |"},{"line_number":108,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  **Creating a Fully Populated Load Balancer**"},{"line_number":111,"context_line":"  If the *loadbalancer* option is specified, the provider driver will iterate"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_3d7c8170","line":108,"updated":"2017-11-29 21:00:51.000000000","message":"we are missing the vip_subnet","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"03053df695d22376e3403fb67fb9c86d70beb735","unresolved":false,"context_lines":[{"line_number":106,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":107,"context_line":"  | vip_port_id    | string | The ID of the subnet for the Virtual IP (VIP). |"},{"line_number":108,"context_line":"  +----------------+--------+------------------------------------------------+"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"  **Creating a Fully Populated Load Balancer**"},{"line_number":111,"context_line":"  If the *loadbalancer* option is specified, the provider driver will iterate"},{"line_number":112,"context_line":"  through the dictionary and create all of the child objects in addition to"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ff82abbf_5d58652f","line":109,"updated":"2017-11-29 21:00:51.000000000","message":"Please future proof with QoS id (https://docs.openstack.org/octavia/pike/contributor/specs/version1.0/vip-qos-policy-application.html)","commit_id":"650d39892fbcfb4f95c83d7b0ffa5e7e9a4ee27c"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"956002614ad77278e8e1e72ee9be56bac61d51e2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Octavia driver namespace \"octavia.api.drivers\". This entry point name will"},{"line_number":45,"context_line":"be used to enable the driver in the Octavia configuration file and as the"},{"line_number":46,"context_line":"\"provider\" parameter user\u0027s specify when creating a load balancer. An example"},{"line_number":47,"context_line":"for the octavia reference driver would be:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_931439a2","line":47,"updated":"2017-12-05 20:00:16.000000000","message":"Maybe we can put all drivers under octavia/drivers similar to neutron_lbaas.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"65bdbf01b7ecacee1d63c1730e6bbafc27a93794","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Octavia driver namespace \"octavia.api.drivers\". This entry point name will"},{"line_number":45,"context_line":"be used to enable the driver in the Octavia configuration file and as the"},{"line_number":46,"context_line":"\"provider\" parameter user\u0027s specify when creating a load balancer. An example"},{"line_number":47,"context_line":"for the octavia reference driver would be:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_5791794d","line":47,"in_reply_to":"df87a7cf_91464d7c","updated":"2017-12-07 22:31:32.000000000","message":"Make sense to me.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":44,"context_line":"Octavia driver namespace \"octavia.api.drivers\". This entry point name will"},{"line_number":45,"context_line":"be used to enable the driver in the Octavia configuration file and as the"},{"line_number":46,"context_line":"\"provider\" parameter user\u0027s specify when creating a load balancer. An example"},{"line_number":47,"context_line":"for the octavia reference driver would be:"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_91464d7c","line":47,"in_reply_to":"df87a7cf_931439a2","updated":"2017-12-07 00:29:03.000000000","message":"Drivers other than the reference implementation will need to have their own repository and installer. Even the reference implementation could be moved out to it\u0027s own repo at some point in the future.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"956002614ad77278e8e1e72ee9be56bac61d51e2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"function, drivers should fail a request by raising a ``NotImplementedError``"},{"line_number":59,"context_line":"exception. If a driver implements a function but does not support a particular"},{"line_number":60,"context_line":"option passed in by the caller, the driver should raise an"},{"line_number":61,"context_line":"``UnsupportedConfigurationOptionError``."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_3368cd1f","line":61,"updated":"2017-12-05 20:00:16.000000000","message":"I think driver should have the option to either raise this exception or just ignore this option.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"b4f51761a5dfffc2f2c8b3ee3f3839c8987bcedb","unresolved":false,"context_lines":[{"line_number":58,"context_line":"function, drivers should fail a request by raising a ``NotImplementedError``"},{"line_number":59,"context_line":"exception. If a driver implements a function but does not support a particular"},{"line_number":60,"context_line":"option passed in by the caller, the driver should raise an"},{"line_number":61,"context_line":"``UnsupportedConfigurationOptionError``."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_692502ab","line":61,"in_reply_to":"df87a7cf_3368cd1f","updated":"2017-12-05 20:40:05.000000000","message":"The problem with allowing the driver to ignore unsupported options is that the user has explicitly asked for an object to be created in this way. It should be up to the user to then attempt again without the unsupported option if they really want the object created.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":58,"context_line":"function, drivers should fail a request by raising a ``NotImplementedError``"},{"line_number":59,"context_line":"exception. If a driver implements a function but does not support a particular"},{"line_number":60,"context_line":"option passed in by the caller, the driver should raise an"},{"line_number":61,"context_line":"``UnsupportedConfigurationOptionError``."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_f11799a2","line":61,"in_reply_to":"df87a7cf_692502ab","updated":"2017-12-07 00:29:03.000000000","message":"+1 to Jeff\u0027s comment.\nWe need to be explicit with the user. If not they will just raise support questions for why a feature they asked for was setup on their load balancer.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"},{"line_number":65,"context_line":"`voluptuous \u003chttps://pypi.python.org/pypi/voluptuous\u003e`_ to validate the"},{"line_number":66,"context_line":"request against the current driver capabilities."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ec888072","line":66,"range":{"start_line":65,"start_character":56,"end_line":66,"end_character":48},"updated":"2017-12-03 12:55:02.000000000","message":"I was expecting to find some more details about this.\nSay that a 3rd party vendor driver that does provide this data. How does that come into play?\nFor example, if a driver does not support l7policies, do we even need to forward such requests to it? or perhaps we can optimize this flow and reply directly from Octavia\u0027s data plane.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"},{"line_number":65,"context_line":"`voluptuous \u003chttps://pypi.python.org/pypi/voluptuous\u003e`_ to validate the"},{"line_number":66,"context_line":"request against the current driver capabilities."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_24121c64","line":66,"range":{"start_line":65,"start_character":56,"end_line":66,"end_character":48},"in_reply_to":"df87a7cf_915c0d7f","updated":"2017-12-12 21:39:41.000000000","message":"Yeah, I was just thinking that we will have the capabilities information in Octavia anyways (maybe as a property of the driver itself). Since this driver code runs as a part of Octavia API, I think we\u0027re good here. Thanks for that clarification :)","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"},{"line_number":65,"context_line":"`voluptuous \u003chttps://pypi.python.org/pypi/voluptuous\u003e`_ to validate the"},{"line_number":66,"context_line":"request against the current driver capabilities."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_915c0d7f","line":66,"range":{"start_line":65,"start_character":56,"end_line":66,"end_character":48},"in_reply_to":"df87a7cf_ec888072","updated":"2017-12-07 00:29:03.000000000","message":"We don\u0027t want to try to track every driver\u0027s capability in the main Octavia code. I think it is best to send the user request to the driver and allow the driver to validate if it can satisfy the user request.  That part of the driver code will essentially be running as part of the Octavia API thread anyway.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"4f6bac313e2d30e80ee9bd027e607081ce325b55","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  will be responsible for updating the provisioning status of the load"},{"line_number":83,"context_line":"  balancer to either ``ACTIVE`` if successfully created, or ``ERROR`` if not"},{"line_number":84,"context_line":"  created."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  The Octavia API will accept and do basic API validation of the create"},{"line_number":87,"context_line":"  request from the user.  The load balancer python object representing the"},{"line_number":88,"context_line":"  request body will be passed to the driver create method as it was received"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8ef20c06","line":85,"updated":"2017-12-03 04:38:38.000000000","message":"what about op status?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  will be responsible for updating the provisioning status of the load"},{"line_number":83,"context_line":"  balancer to either ``ACTIVE`` if successfully created, or ``ERROR`` if not"},{"line_number":84,"context_line":"  created."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  The Octavia API will accept and do basic API validation of the create"},{"line_number":87,"context_line":"  request from the user.  The load balancer python object representing the"},{"line_number":88,"context_line":"  request body will be passed to the driver create method as it was received"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_f1937d4e","line":85,"in_reply_to":"df87a7cf_8ef20c06","updated":"2017-12-03 12:55:02.000000000","message":"+1","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":82,"context_line":"  will be responsible for updating the provisioning status of the load"},{"line_number":83,"context_line":"  balancer to either ``ACTIVE`` if successfully created, or ``ERROR`` if not"},{"line_number":84,"context_line":"  created."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  The Octavia API will accept and do basic API validation of the create"},{"line_number":87,"context_line":"  request from the user.  The load balancer python object representing the"},{"line_number":88,"context_line":"  request body will be passed to the driver create method as it was received"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_7172a9e5","line":85,"in_reply_to":"df87a7cf_f1937d4e","updated":"2017-12-07 00:29:03.000000000","message":"Operating status is \"observed\" status and will be updated as the driver reports an observed status for the object.\nSee the section below about \"Update provisioning and operating status API\"","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  created."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  The Octavia API will accept and do basic API validation of the create"},{"line_number":87,"context_line":"  request from the user.  The load balancer python object representing the"},{"line_number":88,"context_line":"  request body will be passed to the driver create method as it was received"},{"line_number":89,"context_line":"  and validated with the following exceptions:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b19df55a","line":87,"range":{"start_line":87,"start_character":24,"end_line":87,"end_character":25},"updated":"2017-12-03 12:55:02.000000000","message":"nit: extra whitespace.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":84,"context_line":"  created."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"  The Octavia API will accept and do basic API validation of the create"},{"line_number":87,"context_line":"  request from the user.  The load balancer python object representing the"},{"line_number":88,"context_line":"  request body will be passed to the driver create method as it was received"},{"line_number":89,"context_line":"  and validated with the following exceptions:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_1181dd8f","line":87,"range":{"start_line":87,"start_character":24,"end_line":87,"end_character":25},"in_reply_to":"df87a7cf_b19df55a","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"956002614ad77278e8e1e72ee9be56bac61d51e2","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  1. The provider will be removed as this is used for driver selection."},{"line_number":92,"context_line":"  2. The flavor will be expanded from the provided ID to be the full"},{"line_number":93,"context_line":"     dictionary representing the flavor metadata."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  **Load balancer object**"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_5346b17e","line":93,"updated":"2017-12-05 20:00:16.000000000","message":"Could you put an example of flavor metadata here? Does it look like {\u0027id\u0027: xxx, \u0027name\u0027, \u0027driver\u0027:  provider-driver-xxx}?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  1. The provider will be removed as this is used for driver selection."},{"line_number":92,"context_line":"  2. The flavor will be expanded from the provided ID to be the full"},{"line_number":93,"context_line":"     dictionary representing the flavor metadata."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"  **Load balancer object**"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_517765d5","line":93,"in_reply_to":"df87a7cf_5346b17e","updated":"2017-12-07 00:29:03.000000000","message":"Hmm, the format is defined in the flavor spec: https://docs.openstack.org/octavia/latest/contributor/specs/version1.0/flavors.html\nIt is a dictionary object of name/value pairs.\nThe name and values are arbitrary and defined by the provider driver as described below in \"get_supported_flavor_parameters\"","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"4f6bac313e2d30e80ee9bd027e607081ce325b55","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_eeedd825","line":125,"updated":"2017-12-03 04:38:38.000000000","message":"we probably need to be more descriptive on the VIP, e.g. it can be one of this but not all...","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"956002614ad77278e8e1e72ee9be56bac61d51e2","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_130ee93a","line":125,"in_reply_to":"df87a7cf_11c5c13c","updated":"2017-12-05 20:00:16.000000000","message":"Agree. Octavia validates these common options. But driver can also have its own validation, e.g. this particular flavor is not supported by this driver.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_91140d50","line":125,"in_reply_to":"df87a7cf_11c5c13c","updated":"2017-12-07 00:29:03.000000000","message":"Yes, initial validation will still be done at the API layer in Octavia.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"b4f51761a5dfffc2f2c8b3ee3f3839c8987bcedb","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8663951a","line":125,"in_reply_to":"df87a7cf_130ee93a","updated":"2017-12-05 20:40:05.000000000","message":"I would like to see the VIP address supplied by Octavia. Presumably, Octavia already has logic to determine the VIP address by whatever VIP parameters are passed by the user.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b124b0b0","line":125,"in_reply_to":"df87a7cf_8663951a","updated":"2017-12-07 00:29:03.000000000","message":"We should discuss that here. My initial thought is that a driver may want to provision it\u0027s own neutron port, maybe providing special settings to neutron for the port. That is why I was just passing the data the user gives us through to the driver rather than creating the port and passing a port to the driver. Is this an unlikely situation?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"65bdbf01b7ecacee1d63c1730e6bbafc27a93794","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b796c54b","line":125,"in_reply_to":"df87a7cf_b124b0b0","updated":"2017-12-07 22:31:32.000000000","message":"My 2c is just create the port and pass down to user. AFAIK, there is no use case for driver to create such port.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_11c5c13c","line":125,"in_reply_to":"df87a7cf_eeedd825","updated":"2017-12-03 12:55:02.000000000","message":"Indeed. Also, I think the validation for this should happen in Octavia, not at the driver.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":122,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":123,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":124,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":127,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":128,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_715b8953","line":125,"in_reply_to":"df87a7cf_eeedd825","updated":"2017-12-07 00:29:03.000000000","message":"This is pass through and defined in the API reference. Should we duplicate that here?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":149,"context_line":"  creating the load balancer instance."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* **delete**"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"  Removes an existing load balancer."},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_51f9097e","line":151,"range":{"start_line":151,"start_character":4,"end_line":151,"end_character":10},"updated":"2017-12-03 12:55:02.000000000","message":"Should we also move the loadbalancer op status to OFFLINE (and ERROR in case it failed to delete)?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":149,"context_line":"  creating the load balancer instance."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* **delete**"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"  Removes an existing load balancer."},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_d19cd4c1","line":151,"range":{"start_line":151,"start_character":4,"end_line":151,"end_character":10},"in_reply_to":"df87a7cf_51f9097e","updated":"2017-12-07 00:29:03.000000000","message":"Operating status is observed and reported by the driver independent of this method call. It is described in the section below: Update provisioning and operating status API","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":148,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":149,"context_line":"  creating the load balancer instance."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"* **delete**"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"  Removes an existing load balancer."},{"line_number":154,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c73012ec","line":151,"range":{"start_line":151,"start_character":4,"end_line":151,"end_character":10},"in_reply_to":"df87a7cf_d19cd4c1","updated":"2017-12-12 21:39:41.000000000","message":"I couldn\u0027t find it for some reason.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"956002614ad77278e8e1e72ee9be56bac61d51e2","unresolved":false,"context_lines":[{"line_number":172,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":173,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"},{"line_number":174,"context_line":"  of the load balancer to either ``ACTIVE`` if successfully failed over, or"},{"line_number":175,"context_line":"  ``ERROR`` if not failed over."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  Failover can mean different things in the context of a provider driver. For"},{"line_number":178,"context_line":"  example, the Octavia driver replaces the current amphora(s) with another"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c6b8bd2b","line":175,"updated":"2017-12-05 20:00:16.000000000","message":"If failover failed, can we rollover back to previous one. If rollback is successful, the loadbalancer can still be ACTIVE. We can put it to ERROR if failover failed and rollback failed too.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":172,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":173,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"},{"line_number":174,"context_line":"  of the load balancer to either ``ACTIVE`` if successfully failed over, or"},{"line_number":175,"context_line":"  ``ERROR`` if not failed over."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  Failover can mean different things in the context of a provider driver. For"},{"line_number":178,"context_line":"  example, the Octavia driver replaces the current amphora(s) with another"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_e4c9945a","line":175,"in_reply_to":"df87a7cf_0d543d52","updated":"2017-12-12 21:39:41.000000000","message":"Should we somehow indicate that this loadbalancer is non-highly available? perhaps with a DEGRADED status?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":172,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":173,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"},{"line_number":174,"context_line":"  of the load balancer to either ``ACTIVE`` if successfully failed over, or"},{"line_number":175,"context_line":"  ``ERROR`` if not failed over."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  Failover can mean different things in the context of a provider driver. For"},{"line_number":178,"context_line":"  example, the Octavia driver replaces the current amphora(s) with another"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_0d543d52","line":175,"in_reply_to":"df87a7cf_379715ef","updated":"2017-12-08 00:57:25.000000000","message":"Your first question is a good one, currently no, but it probably should.\nDefinitely, if the second failover succeeds it goes to ACTIVE.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"65bdbf01b7ecacee1d63c1730e6bbafc27a93794","unresolved":false,"context_lines":[{"line_number":172,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":173,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"},{"line_number":174,"context_line":"  of the load balancer to either ``ACTIVE`` if successfully failed over, or"},{"line_number":175,"context_line":"  ``ERROR`` if not failed over."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  Failover can mean different things in the context of a provider driver. For"},{"line_number":178,"context_line":"  example, the Octavia driver replaces the current amphora(s) with another"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_379715ef","line":175,"in_reply_to":"df87a7cf_71adc8e7","updated":"2017-12-07 22:31:32.000000000","message":"If the provisioning_status is in error state, do we allow retry failover on a loadbalancer? If retry succeeds, then the load balancer will be back to ACTIVE.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":172,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":173,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"},{"line_number":174,"context_line":"  of the load balancer to either ``ACTIVE`` if successfully failed over, or"},{"line_number":175,"context_line":"  ``ERROR`` if not failed over."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  Failover can mean different things in the context of a provider driver. For"},{"line_number":178,"context_line":"  example, the Octavia driver replaces the current amphora(s) with another"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_71adc8e7","line":175,"in_reply_to":"df87a7cf_c6b8bd2b","updated":"2017-12-07 00:29:03.000000000","message":"Would it be ACTIVE if the failover failed?  The data plane traffic would still be flowing through the original instance. provisioning status is different than operating status.  The load balancer operating status would still be online since it is still passing traffic, but I would expect provisioning status to reflect the ERROR.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":272,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":273,"context_line":"  settings."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":276,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":277,"context_line":"  will be responsible for updating the provisioning status of the listener"},{"line_number":278,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8c08d428","line":275,"range":{"start_line":275,"start_character":62,"end_line":275,"end_character":63},"updated":"2017-12-03 12:55:02.000000000","message":"lowercase the \u0027s\u0027","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":272,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":273,"context_line":"  settings."},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":276,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":277,"context_line":"  will be responsible for updating the provisioning status of the listener"},{"line_number":278,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_51de846d","line":275,"range":{"start_line":275,"start_character":62,"end_line":275,"end_character":63},"in_reply_to":"df87a7cf_8c08d428","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":360,"context_line":"  *Creating a Fully Populated Listener*"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"  If the \"default_pool\" or \"l7policies\" option is specified, the provider"},{"line_number":363,"context_line":"  driver will iterate through the list and create all of the child objects"},{"line_number":364,"context_line":"  in addition to creating the listener instance."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* **delete**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b1d5f5bb","line":363,"range":{"start_line":363,"start_character":14,"end_line":363,"end_character":38},"updated":"2017-12-03 12:55:02.000000000","message":"\"default_pool\" is singular, isn\u0027t it?\n\nI double-check with: https://developer.openstack.org/api-ref/load-balancer/v2/#create-listener\n\nPerhaps we just need to fix the wording here.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":360,"context_line":"  *Creating a Fully Populated Listener*"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"  If the \"default_pool\" or \"l7policies\" option is specified, the provider"},{"line_number":363,"context_line":"  driver will iterate through the list and create all of the child objects"},{"line_number":364,"context_line":"  in addition to creating the listener instance."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* **delete**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_240c5c93","line":363,"range":{"start_line":363,"start_character":14,"end_line":363,"end_character":38},"in_reply_to":"df87a7cf_b1cef0b1","updated":"2017-12-12 21:39:41.000000000","message":"Right. But can\u0027t the above wording give the impression that both \"default_pool\" and \"l7policies\" are lists?\n\nIn any case, English is a second language for me. If that is not the case here, I apologize for the noise.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":360,"context_line":"  *Creating a Fully Populated Listener*"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"  If the \"default_pool\" or \"l7policies\" option is specified, the provider"},{"line_number":363,"context_line":"  driver will iterate through the list and create all of the child objects"},{"line_number":364,"context_line":"  in addition to creating the listener instance."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* **delete**"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b1cef0b1","line":363,"range":{"start_line":363,"start_character":14,"end_line":363,"end_character":38},"in_reply_to":"df87a7cf_b1d5f5bb","updated":"2017-12-07 00:29:03.000000000","message":"default_pool is singular, but l7policies is a list.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":363,"context_line":"  driver will iterate through the list and create all of the child objects"},{"line_number":364,"context_line":"  in addition to creating the listener instance."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* **delete**"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"  Deletes an existing listener."},{"line_number":369,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_71d76dc1","line":366,"range":{"start_line":366,"start_character":4,"end_line":366,"end_character":10},"updated":"2017-12-03 12:55:02.000000000","message":"Same question as in the loadbalancer delete: should we move the op status to OFFLINE during the deletion process?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":363,"context_line":"  driver will iterate through the list and create all of the child objects"},{"line_number":364,"context_line":"  in addition to creating the listener instance."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"* **delete**"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"  Deletes an existing listener."},{"line_number":369,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_51c76497","line":366,"range":{"start_line":366,"start_character":4,"end_line":366,"end_character":10},"in_reply_to":"df87a7cf_71d76dc1","updated":"2017-12-07 00:29:03.000000000","message":"See other answers","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":472,"context_line":""},{"line_number":473,"context_line":"  The create method will be passed the pool object with the requested settings."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  The pool will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":476,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":477,"context_line":"  will be responsible for updating the provisioning status of the pool"},{"line_number":478,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_7100cd35","line":475,"range":{"start_line":475,"start_character":58,"end_line":475,"end_character":59},"updated":"2017-12-03 12:55:02.000000000","message":"lowercase the \u0027s\u0027","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":472,"context_line":""},{"line_number":473,"context_line":"  The create method will be passed the pool object with the requested settings."},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"  The pool will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":476,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":477,"context_line":"  will be responsible for updating the provisioning status of the pool"},{"line_number":478,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_71c4e891","line":475,"range":{"start_line":475,"start_character":58,"end_line":475,"end_character":59},"in_reply_to":"df87a7cf_7100cd35","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"b4f51761a5dfffc2f2c8b3ee3f3839c8987bcedb","unresolved":false,"context_lines":[{"line_number":501,"context_line":"  | description           | string | A human-readable description for the     |"},{"line_number":502,"context_line":"  |                       |        | pool.                                    |"},{"line_number":503,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":504,"context_line":"  | healthmonitors        | object | A `Healthmonitor object`_.               |"},{"line_number":505,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":506,"context_line":"  | lb_algorithm          | string | Load balancing algorithm: One of         |"},{"line_number":507,"context_line":"  |                       |        | ROUND_ROBIN, LEAST_CONNECTIONS, or       |"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_c6599d5a","line":504,"updated":"2017-12-05 20:40:05.000000000","message":"Should this be singlular -- healthmonitor? Or do we intend this to be a list of healthmonitors?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":501,"context_line":"  | description           | string | A human-readable description for the     |"},{"line_number":502,"context_line":"  |                       |        | pool.                                    |"},{"line_number":503,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":504,"context_line":"  | healthmonitors        | object | A `Healthmonitor object`_.               |"},{"line_number":505,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":506,"context_line":"  | lb_algorithm          | string | Load balancing algorithm: One of         |"},{"line_number":507,"context_line":"  |                       |        | ROUND_ROBIN, LEAST_CONNECTIONS, or       |"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_d13854a1","line":504,"in_reply_to":"df87a7cf_c6599d5a","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"88e67c65c448f8888e2d4ea7d34a50f087fa3efd","unresolved":false,"context_lines":[{"line_number":501,"context_line":"  | description           | string | A human-readable description for the     |"},{"line_number":502,"context_line":"  |                       |        | pool.                                    |"},{"line_number":503,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":504,"context_line":"  | healthmonitors        | object | A `Healthmonitor object`_.               |"},{"line_number":505,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":506,"context_line":"  | lb_algorithm          | string | Load balancing algorithm: One of         |"},{"line_number":507,"context_line":"  |                       |        | ROUND_ROBIN, LEAST_CONNECTIONS, or       |"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_e0d34537","line":504,"in_reply_to":"df87a7cf_c6599d5a","updated":"2017-12-06 21:11:14.000000000","message":"Per api spec, healthmonitor should be singular.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"4f6bac313e2d30e80ee9bd027e607081ce325b55","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"* **delete**"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"  Removes an existing pool."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"  The delete method will be passed the pool ID."},{"line_number":537,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_4edc0474","line":534,"updated":"2017-12-03 04:38:38.000000000","message":"don\u0027t we remove a pool with members?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"* **delete**"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"  Removes an existing pool."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"  The delete method will be passed the pool ID."},{"line_number":537,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_51034943","line":534,"in_reply_to":"df87a7cf_4edc0474","updated":"2017-12-03 12:55:02.000000000","message":"we do:\n\nhttps://github.com/openstack/octavia/blob/b80cc9c923442f08e4f6d2d322b97b299b14564e/octavia/controller/worker/flows/pool_flows.py#L81-L82","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"* **delete**"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"  Removes an existing pool."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"  The delete method will be passed the pool ID."},{"line_number":537,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_913e4c89","line":534,"in_reply_to":"df87a7cf_51034943","updated":"2017-12-07 00:29:03.000000000","message":"I don\u0027t understand the comment. Please tell me what you would like here.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":531,"context_line":""},{"line_number":532,"context_line":"* **delete**"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"  Removes an existing pool."},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"  The delete method will be passed the pool ID."},{"line_number":537,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_24b69c8c","line":534,"in_reply_to":"df87a7cf_913e4c89","updated":"2017-12-12 21:39:41.000000000","message":"I merely answered German\u0027s question here, but maybe the intention he had in mind is that we should mention the fact that pool deletion cascades to both members and health monitors?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":631,"context_line":"  The create method will be passed the member object with the requested"},{"line_number":632,"context_line":"  settings."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"  The member will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":635,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":636,"context_line":"  will be responsible for updating the provisioning status of the member"},{"line_number":637,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ac0d9838","line":634,"range":{"start_line":634,"start_character":60,"end_line":634,"end_character":61},"updated":"2017-12-03 12:55:02.000000000","message":"lowercase the \u0027s\u0027","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":631,"context_line":"  The create method will be passed the member object with the requested"},{"line_number":632,"context_line":"  settings."},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"  The member will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":635,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":636,"context_line":"  will be responsible for updating the provisioning status of the member"},{"line_number":637,"context_line":"  to either ``ACTIVE`` if successfully created, or ``ERROR`` if not created."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_b1435013","line":634,"range":{"start_line":634,"start_character":60,"end_line":634,"end_character":61},"in_reply_to":"df87a7cf_ac0d9838","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  |                       |        | value is from 0 to 256. Default is 1.    |"},{"line_number":690,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"* **delete**"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"  Removes a pool member."},{"line_number":695,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_1107011f","line":692,"range":{"start_line":692,"start_character":4,"end_line":692,"end_character":10},"updated":"2017-12-03 12:55:02.000000000","message":"same question as pool, listeners and loadbalancers.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  |                       |        | value is from 0 to 256. Default is 1.    |"},{"line_number":690,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"* **delete**"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"  Removes a pool member."},{"line_number":695,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_514c4441","line":692,"range":{"start_line":692,"start_character":4,"end_line":692,"end_character":10},"in_reply_to":"df87a7cf_1107011f","updated":"2017-12-07 00:29:03.000000000","message":"Same answer. grin","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"16b6ab28d127160e8a1d18e9cfc76f39937c07a8","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  |                       |        | value is from 0 to 256. Default is 1.    |"},{"line_number":690,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"* **delete**"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"  Removes a pool member."},{"line_number":695,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_e4af5429","line":692,"range":{"start_line":692,"start_character":4,"end_line":692,"end_character":10},"in_reply_to":"df87a7cf_514c4441","updated":"2017-12-12 21:39:41.000000000","message":":-)","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":836,"context_line":"  The create method will be passed the healthmonitor object with the requested"},{"line_number":837,"context_line":"  settings."},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"  The health monitor will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":840,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":841,"context_line":"  will be responsible for updating the provisioning status of the health"},{"line_number":842,"context_line":"  monitor to either ``ACTIVE`` if successfully created, or ``ERROR`` if not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ccfedc04","line":839,"range":{"start_line":839,"start_character":68,"end_line":839,"end_character":69},"updated":"2017-12-03 12:55:02.000000000","message":"lowercase the \u0027s\u0027","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":836,"context_line":"  The create method will be passed the healthmonitor object with the requested"},{"line_number":837,"context_line":"  settings."},{"line_number":838,"context_line":""},{"line_number":839,"context_line":"  The health monitor will be in the ``PENDING_CREATE`` provisioning_Status and"},{"line_number":840,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"},{"line_number":841,"context_line":"  will be responsible for updating the provisioning status of the health"},{"line_number":842,"context_line":"  monitor to either ``ACTIVE`` if successfully created, or ``ERROR`` if not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_7149482f","line":839,"range":{"start_line":839,"start_character":68,"end_line":839,"end_character":69},"in_reply_to":"df87a7cf_ccfedc04","updated":"2017-12-07 00:29:03.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":900,"context_line":"  |                       |        | begins with a forward slash (/).         |"},{"line_number":901,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"* **delete**"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"  Deletes an existing health monitor."},{"line_number":906,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8c21b4a2","line":903,"range":{"start_line":903,"start_character":4,"end_line":903,"end_character":10},"updated":"2017-12-03 12:55:02.000000000","message":"ditto (op status OFFLINE?)","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"33aa5f3fc69e6d10444b5840d8dc2ccdb481bf73","unresolved":false,"context_lines":[{"line_number":900,"context_line":"  |                       |        | begins with a forward slash (/).         |"},{"line_number":901,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":902,"context_line":""},{"line_number":903,"context_line":"* **delete**"},{"line_number":904,"context_line":""},{"line_number":905,"context_line":"  Deletes an existing health monitor."},{"line_number":906,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_11523cdf","line":903,"range":{"start_line":903,"start_character":4,"end_line":903,"end_character":10},"in_reply_to":"df87a7cf_8c21b4a2","updated":"2017-12-07 00:29:03.000000000","message":"same","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"  If the driver does not support an option defined in the options parameter,"},{"line_number":1028,"context_line":"  the driver will raise an UnsupportedConfigurationOptionError."},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"  The driver will update the provisioning status of the monitor to either"},{"line_number":1031,"context_line":"  ACTIVE if successfully created, or ERROR if not created."},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"  All the rules associated with a given policy are logically ANDed together."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ac26f8b6","line":1030,"range":{"start_line":1030,"start_character":52,"end_line":1030,"end_character":63},"updated":"2017-12-03 12:55:02.000000000","message":"the policy?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"  If the driver does not support an option defined in the options parameter,"},{"line_number":1028,"context_line":"  the driver will raise an UnsupportedConfigurationOptionError."},{"line_number":1029,"context_line":""},{"line_number":1030,"context_line":"  The driver will update the provisioning status of the monitor to either"},{"line_number":1031,"context_line":"  ACTIVE if successfully created, or ERROR if not created."},{"line_number":1032,"context_line":""},{"line_number":1033,"context_line":"  All the rules associated with a given policy are logically ANDed together."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_cd4975b7","line":1030,"range":{"start_line":1030,"start_character":52,"end_line":1030,"end_character":63},"in_reply_to":"df87a7cf_ac26f8b6","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"  If the driver does not support an option defined in the options parameter,"},{"line_number":1108,"context_line":"  the driver will raise an UnsupportedConfigurationOptionError."},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"  The driver will update the provisioning status of the monitor to either"},{"line_number":1111,"context_line":"  ACTIVE if successfully updated, or ERROR if not updated."},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"  Supported options:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_4c3bacd0","line":1110,"range":{"start_line":1110,"start_character":56,"end_line":1110,"end_character":63},"updated":"2017-12-03 12:55:02.000000000","message":"policy?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"  If the driver does not support an option defined in the options parameter,"},{"line_number":1108,"context_line":"  the driver will raise an UnsupportedConfigurationOptionError."},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"  The driver will update the provisioning status of the monitor to either"},{"line_number":1111,"context_line":"  ACTIVE if successfully updated, or ERROR if not updated."},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"  Supported options:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_6dc86921","line":1110,"range":{"start_line":1110,"start_character":56,"end_line":1110,"end_character":63},"in_reply_to":"df87a7cf_4c3bacd0","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"b4f51761a5dfffc2f2c8b3ee3f3839c8987bcedb","unresolved":false,"context_lines":[{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"  .. code-block:: python"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"    class L7PolicyManager(object):"},{"line_number":1147,"context_line":"      def create(self, l7policy_id, listener_id, action\u003d\u0027REJECT\u0027, options\u003dNone):"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"          \"\"\"Creates a new L7 policy."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_69f662fc","line":1146,"updated":"2017-12-05 20:40:05.000000000","message":"I\u0027m sure it\u0027s planned, but this code block and the L7Rule code block should be changed to match the Driver with l7policy_xxx pattern in the other abstract class definitions.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1143,"context_line":""},{"line_number":1144,"context_line":"  .. code-block:: python"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"    class L7PolicyManager(object):"},{"line_number":1147,"context_line":"      def create(self, l7policy_id, listener_id, action\u003d\u0027REJECT\u0027, options\u003dNone):"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"          \"\"\"Creates a new L7 policy."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8dcdad32","line":1146,"in_reply_to":"df87a7cf_69f662fc","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":1294,"context_line":"  | Name                  | Type   | Description                              |"},{"line_number":1295,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":1296,"context_line":"  | l7policy_id           | string | The ID of the L7 policy.                 |"},{"line_number":1297,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":1298,"context_line":"  | l7rule_id             | string | The ID of the L7 rule to update.         |"},{"line_number":1299,"context_line":"  +-----------------------+--------+------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_6c3d50ba","line":1296,"range":{"start_line":1296,"start_character":4,"end_line":1296,"end_character":15},"updated":"2017-12-03 12:55:02.000000000","message":"my question might be out of scope for this spec, but I\u0027ll ask anyway: why do we require this? l7rule_id can only exist under a single l7policy_id (to the best of my knowledge), can\u0027t we extract l7policy_id from l7rule_id?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1293,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":1294,"context_line":"  | Name                  | Type   | Description                              |"},{"line_number":1295,"context_line":"  +\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d+"},{"line_number":1296,"context_line":"  | l7policy_id           | string | The ID of the L7 policy.                 |"},{"line_number":1297,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":1298,"context_line":"  | l7rule_id             | string | The ID of the L7 rule to update.         |"},{"line_number":1299,"context_line":"  +-----------------------+--------+------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ade1919d","line":1296,"range":{"start_line":1296,"start_character":4,"end_line":1296,"end_character":15},"in_reply_to":"df87a7cf_6c3d50ba","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":1348,"context_line":"                invert (bool): When True the logic of the rule is inverted. For"},{"line_number":1349,"context_line":"                    example, with invert true, equal to would become not equal"},{"line_number":1350,"context_line":"                    to. Default is False."},{"line_number":1351,"context_line":"                key (int): \tThe key to use for the comparison. For example, the"},{"line_number":1352,"context_line":"                    name of the cookie to evaluate."},{"line_number":1353,"context_line":"            :raises: NotImplementedError if driver does not support request."},{"line_number":1354,"context_line":"            :raises: UnsupportedConfigurationOptionError if driver does not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ac74b89a","line":1351,"range":{"start_line":1351,"start_character":26,"end_line":1351,"end_character":28},"updated":"2017-12-03 12:55:02.000000000","message":"too many whitespaces.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1348,"context_line":"                invert (bool): When True the logic of the rule is inverted. For"},{"line_number":1349,"context_line":"                    example, with invert true, equal to would become not equal"},{"line_number":1350,"context_line":"                    to. Default is False."},{"line_number":1351,"context_line":"                key (int): \tThe key to use for the comparison. For example, the"},{"line_number":1352,"context_line":"                    name of the cookie to evaluate."},{"line_number":1353,"context_line":"            :raises: NotImplementedError if driver does not support request."},{"line_number":1354,"context_line":"            :raises: UnsupportedConfigurationOptionError if driver does not"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_6df1496b","line":1351,"range":{"start_line":1351,"start_character":26,"end_line":1351,"end_character":28},"in_reply_to":"df87a7cf_ac74b89a","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"a88671ec9f94929da251ffad7fdc415806f2c874","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"                invert (bool): \tWhen True the logic of the rule is inverted."},{"line_number":1382,"context_line":"                    For example, with invert true, equal to would become not"},{"line_number":1383,"context_line":"                    equal to. Default is False."},{"line_number":1384,"context_line":"                key (int): \tThe key to use for the comparison. For example, the"},{"line_number":1385,"context_line":"                    name of the cookie to evaluate."},{"line_number":1386,"context_line":"                type (string): The L7 rule type. One of COOKIE, FILE_TYPE,"},{"line_number":1387,"context_line":"                    HEADER, HOST_NAME, or PATH."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_6c66b0f0","line":1384,"range":{"start_line":1384,"start_character":26,"end_line":1384,"end_character":28},"updated":"2017-12-03 12:55:02.000000000","message":"too many whitespaces.","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ebd9fd5cd1f3aa6eef2b50ad690ab6fdfabec0b4","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"                invert (bool): \tWhen True the logic of the rule is inverted."},{"line_number":1382,"context_line":"                    For example, with invert true, equal to would become not"},{"line_number":1383,"context_line":"                    equal to. Default is False."},{"line_number":1384,"context_line":"                key (int): \tThe key to use for the comparison. For example, the"},{"line_number":1385,"context_line":"                    name of the cookie to evaluate."},{"line_number":1386,"context_line":"                type (string): The L7 rule type. One of COOKIE, FILE_TYPE,"},{"line_number":1387,"context_line":"                    HEADER, HOST_NAME, or PATH."}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_8df60d63","line":1384,"range":{"start_line":1384,"start_character":26,"end_line":1384,"end_character":28},"in_reply_to":"df87a7cf_6c66b0f0","updated":"2017-12-08 00:57:25.000000000","message":"Done","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"4f6bac313e2d30e80ee9bd027e607081ce325b55","unresolved":false,"context_lines":[{"line_number":1480,"context_line":""},{"line_number":1481,"context_line":"Provider drivers need support for updating provisioning status, operating"},{"line_number":1482,"context_line":"status, and statistics. Drivers will not directly use database operations,"},{"line_number":1483,"context_line":"and instead will callback to Octavia using a new API."},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"Update provisioning and operating status API"},{"line_number":1486,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"}],"source_content_type":"text/x-rst","patch_set":13,"id":"df87a7cf_ced1f459","line":1483,"updated":"2017-12-03 04:38:38.000000000","message":"We should probably be more specific in that this API will support a driver interface for multiple transports and out first transport will be REST? RPC?","commit_id":"fb3a7663fa577a636fa645f07ab96a55e42ec0b2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"4a1d120163dd520bb7bf6fe19f86490e13c7bd3c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"Available drivers will be enabled by entries in the Octavia configuration file."},{"line_number":28,"context_line":"Drivers will be loaded via stevedore and Octavia will communicate with drivers"},{"line_number":29,"context_line":"through a standard class interface defined below. Most driver functions will be"},{"line_number":30,"context_line":"asynchronous to Octavia, and Octavia will provide a library of functions"},{"line_number":31,"context_line":"that give drivers a way to update status and statistics. Functions that are"},{"line_number":32,"context_line":"synchronous are noted below."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Octavia API functions not listed here will continue to be handled by the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_360b92d5","line":31,"range":{"start_line":30,"start_character":42,"end_line":31,"end_character":55},"updated":"2017-12-19 14:18:08.000000000","message":"[Update: reading further down this spec, I get now that push/callback is being proposed; keeping my comment anyway for clarity and diagram]\n\nPush, pool or both functions? I think the suggested way would be only pool, but nevertheless I\u0027ll leave my comment if push is also being suggested.\n\nIf push/both, that would mean Octavia would be open to listening from backends, either through its drivers (as depicted below) or through other means (e.g. via NBI, introducing a loop-cycle). That would be a game changer here. Neutron ML2 does not support this, for example.\n\n\n          REST NBI\n             |\n             |\n             V\n            Core\n             |\n             |\n             V\n        Provider SBI\n         ^         ^\n         |         |\n         V         V\n      Driver_X  Driver_Y\n         ^         ^\n         |         |\n         V         V\n      Backend_X  Backend_Y\n\n\nNote the up down arrows.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"4a1d120163dd520bb7bf6fe19f86490e13c7bd3c","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  octavia \u003d octavia.api.drivers.octavia.driver:OctaviaDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia Provider Driver API"},{"line_number":54,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_013c06c6","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":9},"updated":"2017-12-19 14:18:08.000000000","message":"\u0027octavia\u0027 as name is not much explicit. Something like \u0027provider_drivers\u0027 or \u0027service_providers\u0027 would fit better (\u0027mechanism_drivers\u0027 in neutron ml2)","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  octavia \u003d octavia.api.drivers.octavia.driver:OctaviaDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia Provider Driver API"},{"line_number":54,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_91a52307","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":9},"in_reply_to":"9f91af0f_061c09bf","updated":"2018-01-13 00:15:47.000000000","message":"I\u0027m not sure we need a change here, maybe Carlos can clarify if a change is needed.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b685c2890fc9e9a93d6534011e5c0c328b599706","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  octavia \u003d octavia.api.drivers.octavia.driver:OctaviaDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia Provider Driver API"},{"line_number":54,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_e5f9e57f","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":9},"in_reply_to":"df87a7cf_013c06c6","updated":"2017-12-19 19:04:24.000000000","message":"This example is for the \"octavia\" driver. This word would then be placed in the octavia.conf to enable this driver.\nI do see that this example should be more complete and include the line above this one as referenced in the paragraph above it.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":".. code-block:: python"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"  octavia \u003d octavia.api.drivers.octavia.driver:OctaviaDriver"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Octavia Provider Driver API"},{"line_number":54,"context_line":"---------------------------"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_061c09bf","line":51,"range":{"start_line":51,"start_character":2,"end_line":51,"end_character":9},"in_reply_to":"df87a7cf_e5f9e57f","updated":"2018-01-09 14:58:07.000000000","message":"I\u0027m not sure the exact change you want here. Can you provide the line you want added?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"ec5f7dae7c8dcceec8043b3638200820aba53a5c","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Driver developers should refer to the official"},{"line_number":71,"context_line":"`Octavia API reference"},{"line_number":72,"context_line":"\u003chttps://developer.openstack.org/api-ref/load-balancer/v2/index.html\u003e`_"},{"line_number":73,"context_line":"document for details of the fields or expected outcome of these calls."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_0e9978c2","line":70,"updated":"2017-12-09 07:23:40.000000000","message":"maybe we can get that as a warning? It definitely need to be bold and blinking ;-)","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9061627c7a1ece738a167c28dae8ce9f33e93117","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Driver developers should refer to the official"},{"line_number":71,"context_line":"`Octavia API reference"},{"line_number":72,"context_line":"\u003chttps://developer.openstack.org/api-ref/load-balancer/v2/index.html\u003e`_"},{"line_number":73,"context_line":"document for details of the fields or expected outcome of these calls."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_3fb1e347","line":70,"in_reply_to":"df87a7cf_0e9978c2","updated":"2017-12-11 21:52:06.000000000","message":"Maybe just bolded would suffice? lol","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Driver developers should refer to the official"},{"line_number":71,"context_line":"`Octavia API reference"},{"line_number":72,"context_line":"\u003chttps://developer.openstack.org/api-ref/load-balancer/v2/index.html\u003e`_"},{"line_number":73,"context_line":"document for details of the fields or expected outcome of these calls."}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_8f4fe632","line":70,"in_reply_to":"df87a7cf_39a528b6","updated":"2018-01-09 14:58:07.000000000","message":"Done","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"See the `Exception Model`_ below for more details."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Driver developers should refer to the official"},{"line_number":71,"context_line":"`Octavia API reference"},{"line_number":72,"context_line":"\u003chttps://developer.openstack.org/api-ref/load-balancer/v2/index.html\u003e`_"},{"line_number":73,"context_line":"document for details of the fields or expected outcome of these calls."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_39a528b6","line":70,"in_reply_to":"df87a7cf_3fb1e347","updated":"2017-12-14 19:26:20.000000000","message":"If needed we can put this in a box.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"ec5f7dae7c8dcceec8043b3638200820aba53a5c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_ce8e3078","line":130,"updated":"2017-12-09 07:23:40.000000000","message":"1) There was discussion in a previous version for Octavia to create the VIP port. I know from experience that this needs to done a certain way to not break functionality (e.g.  vip port ownership, QoS?) - so I am not sure if delegating this to the driver makes sense + if we delegate if we shouldn\u0027t offer a way to create it for them.\n\n2) QoS - with QoS being close to be merged I think we should add the QoS id here, too","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"b6e20916d8414182543ca156c1655a2d0dbf0727","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_0a0eff31","line":130,"in_reply_to":"df87a7cf_04c84fa3","updated":"2017-12-12 22:17:33.000000000","message":"\u003e This is my open question to the driver writers. If everyone is fine\n \u003e with the API creating the VIP port, fine, we can do it how Octavia\n \u003e does it today and pass the details into the driver.  It just seemed\n \u003e that some drivers might want more flexibility with the VIP port.\n\n+1.\nIMO, it can be valuable to learn from what happens in neutron-lbaas providers.\n\nSince most providers are just a black box, they simply handle the VIP creation internally. The only driver who creates[1] the VIP port via neutron is the haproxy in namespace driver.\nSo we might want to allow providers to fetch the networking driver from Octavia, but I *think* most providers will solve this internally.\n\n[1] https://github.com/openstack/neutron-lbaas/blob/71cc778ead87c619972740db56a127dd46189d2e/neutron_lbaas/drivers/haproxy/namespace_driver.py#L318-L319","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"5eafd1142e7f3daa3606265c7d2ebc210a20ce10","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_4c3f2cb5","line":130,"in_reply_to":"df87a7cf_04c84fa3","updated":"2017-12-13 16:12:00.000000000","message":"As a driver writer, we do want to be responsible for creating the VIP port. Our view is that Octavia should pass the information needed to create the port the provider driver, and the provider driver handles VIP port creation.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_2657cd5a","line":130,"in_reply_to":"df87a7cf_0a0eff31","updated":"2018-01-09 14:58:07.000000000","message":"The next patch proposes and additional method, create_vip_port, which provider driver can implement or not. If they do not implement they will raise an exception and Octavia should create the port. See next patch for details.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b49663f3a07077c4318218d990a79bf3bbea5419","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_8137b6b0","line":130,"in_reply_to":"df87a7cf_4c3f2cb5","updated":"2017-12-19 12:27:46.000000000","message":"As a driver writer, we prefer to not be responsible for LB port creation since we can\u0027t always do that synchronously.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9061627c7a1ece738a167c28dae8ce9f33e93117","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_ff8ffb71","line":130,"in_reply_to":"df87a7cf_ce8e3078","updated":"2017-12-11 21:52:06.000000000","message":"Octavia creates the VIP port right now *on the API side*, but via the network driver, right? So ... Theoretically, would we be saying we use a provider\u0027s controller, but still the neutron networking driver if the cloud uses neutron? At which point, unless I have incredibly confused myself during the last paragraph or so, this just isn\u0027t something we need to think about?\n\nFor #2, it should be taken care of in whichever merges second... So, I\u0027d be tempted to say we merge this first?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f0c42d2857691afc823aa3391f1d0a3a80b8e4e3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":128,"context_line":"  | vip_subnet_id   | string | The ID of the subnet for the VIP.             |"},{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_04c84fa3","line":130,"in_reply_to":"df87a7cf_ff8ffb71","updated":"2017-12-12 00:47:56.000000000","message":"This is my open question to the driver writers. If everyone is fine with the API creating the VIP port, fine, we can do it how Octavia does it today and pass the details into the driver.  It just seemed that some drivers might want more flexibility with the VIP port.\n#2, see the comment above about \"at the time of writing\"","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"},{"line_number":134,"context_line":"  request cannot be accepted."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  **VIP dictionary**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_ad1751ee","line":133,"range":{"start_line":132,"start_character":25,"end_line":133,"end_character":42},"updated":"2017-12-19 09:52:35.000000000","message":"What is the reason for driver to return the VIP dict?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"},{"line_number":134,"context_line":"  request cannot be accepted."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  **VIP dictionary**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_31e20f31","line":133,"range":{"start_line":132,"start_character":25,"end_line":133,"end_character":42},"in_reply_to":"9f91af0f_1f753fcb","updated":"2018-01-13 00:15:47.000000000","message":"It\u0027s needed for the user experience. When the LB is created the return JSON to the user includes the IP/port details.\nThis is a backward compatibility requirement for LBaaS v2.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":129,"context_line":"  +-----------------+--------+-----------------------------------------------+"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"  The driver is expected to validate that the driver supports the request"},{"line_number":132,"context_line":"  and to create the VIP. The method will then return a VIP dictionary"},{"line_number":133,"context_line":"  as defined in the Octavia driver library or raise an exception if the"},{"line_number":134,"context_line":"  request cannot be accepted."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"  **VIP dictionary**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_1f753fcb","line":133,"range":{"start_line":132,"start_character":25,"end_line":133,"end_character":42},"in_reply_to":"df87a7cf_ad1751ee","updated":"2018-01-09 14:58:07.000000000","message":"In this version of the spec, the driver creates the port, instead of Octavia, and the driver needs to return this data. The next patch proposes adding a new method, create_vip_port (which driver may or may not implement), and removing the vip dict return value from this method.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  *Creating a Fully Populated Load Balancer*"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  If the \"listener\" option is specified, the provider driver will iterate"},{"line_number":153,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":154,"context_line":"  creating the load balancer instance."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **delete**"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_2d2ca200","line":154,"range":{"start_line":152,"start_character":2,"end_line":154,"end_character":37},"updated":"2017-12-19 09:52:35.000000000","message":"Neutron LBaaS DB model allows to get the root LB from any model passed to driver and actually to explore the whole LB graph. Will this feature be provided by Octavia drivers API?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b49663f3a07077c4318218d990a79bf3bbea5419","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  *Creating a Fully Populated Load Balancer*"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  If the \"listener\" option is specified, the provider driver will iterate"},{"line_number":153,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":154,"context_line":"  creating the load balancer instance."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **delete**"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_c1737e4d","line":154,"range":{"start_line":152,"start_character":2,"end_line":154,"end_character":37},"in_reply_to":"df87a7cf_2d2ca200","updated":"2017-12-19 12:27:46.000000000","message":"Our solution relies on this capability and it should be preserved","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  *Creating a Fully Populated Load Balancer*"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  If the \"listener\" option is specified, the provider driver will iterate"},{"line_number":153,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":154,"context_line":"  creating the load balancer instance."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **delete**"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_053df2c2","line":154,"range":{"start_line":152,"start_character":2,"end_line":154,"end_character":37},"in_reply_to":"df87a7cf_2d2ca200","updated":"2018-01-09 14:58:07.000000000","message":"Yes, by using the standard Octavia API.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  *Creating a Fully Populated Load Balancer*"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  If the \"listener\" option is specified, the provider driver will iterate"},{"line_number":153,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":154,"context_line":"  creating the load balancer instance."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **delete**"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_6524feaf","line":154,"range":{"start_line":152,"start_character":2,"end_line":154,"end_character":37},"in_reply_to":"df87a7cf_c1737e4d","updated":"2018-01-09 14:58:07.000000000","message":"Agreed.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"  *Creating a Fully Populated Load Balancer*"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"  If the \"listener\" option is specified, the provider driver will iterate"},{"line_number":153,"context_line":"  through the list and create all of the child objects in addition to"},{"line_number":154,"context_line":"  creating the load balancer instance."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* **delete**"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_d1c72b12","line":154,"range":{"start_line":152,"start_character":2,"end_line":154,"end_character":37},"in_reply_to":"df87a7cf_c1737e4d","updated":"2018-01-13 00:15:47.000000000","message":"This is something that is not in this spec. The intent here is to limit the amount of data being passed around to only the required data set and to closely reflect the service API. This reduces the overhead impact on the database, network, and drivers.\n\nSince your driver is the only one, at the moment, that requires the full tree I think we should move forward with this spec and create a followup patch that enables you to get the data you need. Maybe via an additional callback or via the service API.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"  Removes an existing load balancer."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  The delete method will be passed the load balancer ID and the cascade"},{"line_number":161,"context_line":"  boolean."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  The load balancer will be in the ``PENDING_DELETE`` provisioning_status when"},{"line_number":164,"context_line":"  it is passed to the driver. The driver will notify Octavia that the delete"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_ed7f9adc","line":161,"range":{"start_line":160,"start_character":2,"end_line":161,"end_character":10},"updated":"2017-12-19 09:52:35.000000000","message":"Why LB deletion has explicit delete_cascade parameter? \nIs there a use case when LB is deleted but everything underneath remains?\nShouldn\u0027t delete_cascade default be TRUE?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"  Removes an existing load balancer."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  The delete method will be passed the load balancer ID and the cascade"},{"line_number":161,"context_line":"  boolean."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  The load balancer will be in the ``PENDING_DELETE`` provisioning_status when"},{"line_number":164,"context_line":"  it is passed to the driver. The driver will notify Octavia that the delete"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_51e79b13","line":161,"range":{"start_line":160,"start_character":2,"end_line":161,"end_character":10},"in_reply_to":"9f91af0f_25ad96e8","updated":"2018-01-13 00:15:47.000000000","message":"Again, this is to be consistent with the current neutron-lbaas LBaaS v2 API which has an explicit cascade option.\nIf the driver wants to treat all deletes as cascade, that is their option but it would be inconsistent with the API.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"  Removes an existing load balancer."},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"  The delete method will be passed the load balancer ID and the cascade"},{"line_number":161,"context_line":"  boolean."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"  The load balancer will be in the ``PENDING_DELETE`` provisioning_status when"},{"line_number":164,"context_line":"  it is passed to the driver. The driver will notify Octavia that the delete"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_25ad96e8","line":161,"range":{"start_line":160,"start_character":2,"end_line":161,"end_character":10},"in_reply_to":"df87a7cf_ed7f9adc","updated":"2018-01-09 14:58:07.000000000","message":"The cascade parameter was defined here to be consistent with the Octavia API. As it\u0027s defined now, a driver should raise an exception if cascade is False and the LB has child objects. Alternatively, Octavia could return the error before calling the driver, in which case, the cascade option is unnecessary and it is always implicitly set to True (driver always deletes all child objects). Anyone have a preference?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"  The API includes an option for cascade delete. When cascade is set to"},{"line_number":169,"context_line":"  True, the provider driver will delete all child objects of the load balancer."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"* **failover**"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_4d9b2617","line":171,"range":{"start_line":171,"start_character":2,"end_line":171,"end_character":14},"updated":"2017-12-19 09:52:35.000000000","message":"Is failover API a replacement for NLBaaS refresh API?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":168,"context_line":"  The API includes an option for cascade delete. When cascade is set to"},{"line_number":169,"context_line":"  True, the provider driver will delete all child objects of the load balancer."},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"* **failover**"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_91abe387","line":171,"range":{"start_line":171,"start_character":2,"end_line":171,"end_character":14},"in_reply_to":"df87a7cf_4d9b2617","updated":"2018-01-13 00:15:47.000000000","message":"No, this is different to the neutron-lbaas internal (not LBaaSv2) refresh API.\nThis is for Admin use to cause a load balancer failover as defined by the driver. Consider an Active/Standby implementation.\nAlso, please see the API reference documentation, it covers these actions. https://developer.openstack.org/api-ref/load-balancer/v2/index.html","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"e29f3b1ac9aee73b60ee864ceb2907b320d99db5","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  The failover method will be passed the load balancer ID."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":178,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_8b6f4891","line":175,"range":{"start_line":175,"start_character":2,"end_line":175,"end_character":58},"updated":"2017-12-14 10:05:03.000000000","message":"Will pass the LB id ? \nThe structure of the phrase is not clear","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  The failover method will be passed the load balancer ID."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":178,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_0f9c365b","line":175,"range":{"start_line":175,"start_character":2,"end_line":175,"end_character":58},"in_reply_to":"df87a7cf_19b704db","updated":"2018-01-09 14:58:07.000000000","message":"Done","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"5be8585188b66f7c4f630779c51f6c88f6c404fc","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  The failover method will be passed the load balancer ID."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":178,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_41656944","line":175,"range":{"start_line":175,"start_character":2,"end_line":175,"end_character":58},"in_reply_to":"df87a7cf_19b704db","updated":"2017-12-17 09:10:58.000000000","message":"Yes this options is better, tnx .","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"  Performs a failover of a load balancer."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"  The failover method will be passed the load balancer ID."},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"  The load balancer will be in the ``PENDING_UPDATE`` provisioning_status when"},{"line_number":178,"context_line":"  it is passed to the driver. The driver will update the provisioning_status"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_19b704db","line":175,"range":{"start_line":175,"start_character":2,"end_line":175,"end_character":58},"in_reply_to":"df87a7cf_8b6f4891","updated":"2017-12-14 19:26:20.000000000","message":"See the code example below, the failover method is passed in, as a parameter, the load balancer ID.\nWould \"The failover method will be passed in, as a parameter, the load balancer ID.\" be better?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"  The driver is expected to validate that the driver supports the request."},{"line_number":216,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":217,"context_line":"  accepted."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"**Abstract class definition**"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_2d64a221","line":217,"range":{"start_line":217,"start_character":10,"end_line":217,"end_character":11},"updated":"2017-12-19 09:52:35.000000000","message":"No stats API for LB? Octavia v2.0 API reference has it.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"  The driver is expected to validate that the driver supports the request."},{"line_number":216,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":217,"context_line":"  accepted."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"**Abstract class definition**"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_f18d8731","line":217,"range":{"start_line":217,"start_character":10,"end_line":217,"end_character":11},"in_reply_to":"9f91af0f_4f8b1e6d","updated":"2018-01-13 00:15:47.000000000","message":"+1\nThis is to allow admin aggregate calls and to be backward compatible with LBaaSv2 API.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"  The driver is expected to validate that the driver supports the request."},{"line_number":216,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":217,"context_line":"  accepted."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"**Abstract class definition**"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_4f8b1e6d","line":217,"range":{"start_line":217,"start_character":10,"end_line":217,"end_character":11},"in_reply_to":"df87a7cf_2d64a221","updated":"2018-01-09 14:58:07.000000000","message":"There is still a stats API for Octavia, but Octavia does not call the provider driver, and instead returns values from from the database. Provider drivers are responsible for updating the database.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"e29f3b1ac9aee73b60ee864ceb2907b320d99db5","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  Creates a listener for a load balancer."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":278,"context_line":"  settings."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_status and"},{"line_number":281,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_0b0a5889","line":278,"range":{"start_line":277,"start_character":2,"end_line":278,"end_character":11},"updated":"2017-12-14 10:05:03.000000000","message":"will be passed the - not clear","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  Creates a listener for a load balancer."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":278,"context_line":"  settings."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_status and"},{"line_number":281,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_5fbae76d","line":278,"range":{"start_line":277,"start_character":2,"end_line":278,"end_character":11},"in_reply_to":"df87a7cf_0b0a5889","updated":"2018-01-09 14:58:07.000000000","message":"Done","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  Creates a listener for a load balancer."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":278,"context_line":"  settings."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_status and"},{"line_number":281,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_d9b0bce0","line":278,"range":{"start_line":277,"start_character":2,"end_line":278,"end_character":11},"in_reply_to":"df87a7cf_0b0a5889","updated":"2017-12-14 19:26:20.000000000","message":"Same comment as above","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"5be8585188b66f7c4f630779c51f6c88f6c404fc","unresolved":false,"context_lines":[{"line_number":274,"context_line":""},{"line_number":275,"context_line":"  Creates a listener for a load balancer."},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"  The create method will be passed the listener object with the requested"},{"line_number":278,"context_line":"  settings."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"  The listener will be in the ``PENDING_CREATE`` provisioning_status and"},{"line_number":281,"context_line":"  ``OFFLINE`` operating_status when it is passed to the driver. The driver"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_814a91a9","line":278,"range":{"start_line":277,"start_character":2,"end_line":278,"end_character":11},"in_reply_to":"df87a7cf_d9b0bce0","updated":"2017-12-17 09:10:58.000000000","message":"Same rephrasing as previous comment will work","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"e29f3b1ac9aee73b60ee864ceb2907b320d99db5","unresolved":false,"context_lines":[{"line_number":468,"context_line":"          \"\"\""},{"line_number":469,"context_line":"          raise NotImplementedError()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"Pool"},{"line_number":472,"context_line":"^^^^"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"* **create**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_2b887b1d","line":471,"range":{"start_line":471,"start_character":0,"end_line":471,"end_character":1},"updated":"2017-12-14 10:05:03.000000000","message":"We should have an indicator that tells that the LB service is up- this means that if we have a pool with members alive ( health check passed - if not healtcheck configured\u003d\u003dhealtchcheck passed)\nIf there are alive members we should have field says \" service \u0027pool protocol/port is available\" , if the members fail to communicate with the LB via healtch check the field will say \" service \u0027pool protocol/port is unavailable\". This will give a faster indication regarding the members state","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":468,"context_line":"          \"\"\""},{"line_number":469,"context_line":"          raise NotImplementedError()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"Pool"},{"line_number":472,"context_line":"^^^^"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"* **create**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_59d90c20","line":471,"range":{"start_line":471,"start_character":0,"end_line":471,"end_character":1},"in_reply_to":"df87a7cf_2b887b1d","updated":"2017-12-14 19:26:20.000000000","message":"I don\u0027t understand the comment.  Maybe you are talking about the status interface described below?\nYou can\u0027t pass in a working pool here, this is to create/update/delete a new pool.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"5be8585188b66f7c4f630779c51f6c88f6c404fc","unresolved":false,"context_lines":[{"line_number":468,"context_line":"          \"\"\""},{"line_number":469,"context_line":"          raise NotImplementedError()"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"Pool"},{"line_number":472,"context_line":"^^^^"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"* **create**"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_41ca491a","line":471,"range":{"start_line":471,"start_character":0,"end_line":471,"end_character":1},"in_reply_to":"df87a7cf_59d90c20","updated":"2017-12-17 09:10:58.000000000","message":"I will bring it up in the IRC and will explain . U can ignore that one  for now","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"ec5f7dae7c8dcceec8043b3638200820aba53a5c","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_8e85885c","line":539,"updated":"2017-12-09 07:23:40.000000000","message":"My comment referred to that we need to change the description to \"Removes existing an existing pool and it\u0027s members\"","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_79ef30b0","line":539,"in_reply_to":"df87a7cf_2b139b0f","updated":"2017-12-14 19:26:20.000000000","message":"Our LBaaS v2 API definition does not allow members to exist that are not bound to a pool. That change would have to come by defining LBaaS v3 API which is outside the scope of this spec.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"db8e26a12f5dce9f16acc773ec159ff8304d014e","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_8deba0da","line":539,"in_reply_to":"df87a7cf_79ef30b0","updated":"2017-12-17 21:59:09.000000000","message":"\u003e Our LBaaS v2 API definition does not allow members to exist that\n \u003e are not bound to a pool. That change would have to come by defining\n \u003e LBaaS v3 API which is outside the scope of this spec.\n\n+1","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_3fb5a37e","line":539,"in_reply_to":"df87a7cf_8e85885c","updated":"2018-01-09 14:58:07.000000000","message":"Done","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_794410b8","line":539,"in_reply_to":"df87a7cf_8e85885c","updated":"2017-12-14 19:26:20.000000000","message":"Ok, we can update this.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"9061627c7a1ece738a167c28dae8ce9f33e93117","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_df3c7794","line":539,"in_reply_to":"df87a7cf_8e85885c","updated":"2017-12-11 21:52:06.000000000","message":"Yeah essentially pool deletes are ALL assumed to be \"cascade deletes\" with regard to members under them.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":18746,"name":"Alex Stafeyev","email":"alexo101087@gmail.com","username":"AlexSTafeyev"},"change_message_id":"e29f3b1ac9aee73b60ee864ceb2907b320d99db5","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_2b139b0f","line":539,"in_reply_to":"df87a7cf_c74fb232","updated":"2017-12-14 10:05:03.000000000","message":"Maybe we should give a choice regarding members deletion with the pool. \n\nThere can be an option that the user will want to delete a pool but reattach its member to another pool so recreation of members can be irritating. From the other hand I asked my self more then once \" If I delete the pool why the members are still there?!\" , So giving a choice \"keep the members\" might be a good solution for both type of cases.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6579,"name":"Nir Magnezi","email":"nmagnezi@redhat.com","username":"nmagnezi"},"change_message_id":"b6e20916d8414182543ca156c1655a2d0dbf0727","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"* **delete**"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"  Removes an existing pool."},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"  The delete method will be passed the pool ID."},{"line_number":542,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_c74fb232","line":539,"in_reply_to":"df87a7cf_df3c7794","updated":"2017-12-12 22:17:33.000000000","message":"I followed up with an additional reply to this @ PS13. I think that indeed such addition would be good to have.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":751,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":752,"context_line":"  accepted."},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"* **batch update**"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"  Set the state of members for a pool in one API call. This may include"},{"line_number":757,"context_line":"  creating new members, deleting old members, and updating existing members."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_6d7629a7","line":754,"range":{"start_line":754,"start_character":2,"end_line":754,"end_character":18},"updated":"2017-12-19 09:52:35.000000000","message":"1. What is the rational behind this special API?\n2. What will be the trigger for this API call?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"0bc32cebaa8da8ced598eae9ffb89dfe23788e08","unresolved":false,"context_lines":[{"line_number":751,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":752,"context_line":"  accepted."},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"* **batch update**"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"  Set the state of members for a pool in one API call. This may include"},{"line_number":757,"context_line":"  creating new members, deleting old members, and updating existing members."}],"source_content_type":"text/x-rst","patch_set":15,"id":"bf8cb3f7_3140ec56","line":754,"range":{"start_line":754,"start_character":2,"end_line":754,"end_character":18},"in_reply_to":"df87a7cf_61de323f","updated":"2017-12-22 10:56:26.000000000","message":"It\u0027s called \"batch update\" but it can be used for batch creation with zero existing members as well.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"b49663f3a07077c4318218d990a79bf3bbea5419","unresolved":false,"context_lines":[{"line_number":751,"context_line":"  The method will then return or raise an exception if the request cannot be"},{"line_number":752,"context_line":"  accepted."},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"* **batch update**"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"  Set the state of members for a pool in one API call. This may include"},{"line_number":757,"context_line":"  creating new members, deleting old members, and updating existing members."}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_61de323f","line":754,"range":{"start_line":754,"start_character":2,"end_line":754,"end_character":18},"in_reply_to":"df87a7cf_6d7629a7","updated":"2017-12-19 12:27:46.000000000","message":"Please ignore the previous comment.\nMembers creation batch would be even more powerful from performance perspective, for cases when big amount of members will be added to a pool.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":879,"context_line":"  |                       |        | DELETE, GET, HEAD, OPTIONS, PATCH, POST, |"},{"line_number":880,"context_line":"  |                       |        | PUT, or TRACE.                           |"},{"line_number":881,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":882,"context_line":"  | max_retries           | int    | The number of successful checks before   |"},{"line_number":883,"context_line":"  |                       |        | changing the operating status of the     |"},{"line_number":884,"context_line":"  |                       |        | member to ONLINE.                        |"},{"line_number":885,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":886,"context_line":"  | max_retries_down      | int    | The number of allowed check failures     |"},{"line_number":887,"context_line":"  |                       |        | before changing the operating status of  |"},{"line_number":888,"context_line":"  |                       |        | the member to ERROR. A valid value is    |"},{"line_number":889,"context_line":"  |                       |        | from 1 to 10.                            |"},{"line_number":890,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":891,"context_line":"  | name                  | string | Human-readable name of the monitor.      |"},{"line_number":892,"context_line":"  +-----------------------+--------+------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_cddf3564","line":889,"range":{"start_line":882,"start_character":2,"end_line":889,"end_character":79},"updated":"2017-12-19 09:52:35.000000000","message":"max_retries_down is actually an analogy to NLBaaS\u0027s max_retries parameter.\n1. Maybe \"max_retries_down\" should be changed to \"max_retries\" and \"max_retries\" changed to \"max_retries_up\"?\n2.Why \"max_retries\" is mandatory and has no default?","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":879,"context_line":"  |                       |        | DELETE, GET, HEAD, OPTIONS, PATCH, POST, |"},{"line_number":880,"context_line":"  |                       |        | PUT, or TRACE.                           |"},{"line_number":881,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":882,"context_line":"  | max_retries           | int    | The number of successful checks before   |"},{"line_number":883,"context_line":"  |                       |        | changing the operating status of the     |"},{"line_number":884,"context_line":"  |                       |        | member to ONLINE.                        |"},{"line_number":885,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":886,"context_line":"  | max_retries_down      | int    | The number of allowed check failures     |"},{"line_number":887,"context_line":"  |                       |        | before changing the operating status of  |"},{"line_number":888,"context_line":"  |                       |        | the member to ERROR. A valid value is    |"},{"line_number":889,"context_line":"  |                       |        | from 1 to 10.                            |"},{"line_number":890,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":891,"context_line":"  | name                  | string | Human-readable name of the monitor.      |"},{"line_number":892,"context_line":"  +-----------------------+--------+------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_b1b5bfcf","line":889,"range":{"start_line":882,"start_character":2,"end_line":889,"end_character":79},"in_reply_to":"9f91af0f_7fbfab60","updated":"2018-01-13 00:15:47.000000000","message":"Jeffery is correct. This is an unfortunate part of the LBaaSv2 API we have to pull forward for backwards compatibility.  Changing it here for the driver interface would lead to confusion with the naming in the service API.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"c51de3e87563ce9c9febc8e6a0c0a91f08c1b970","unresolved":false,"context_lines":[{"line_number":879,"context_line":"  |                       |        | DELETE, GET, HEAD, OPTIONS, PATCH, POST, |"},{"line_number":880,"context_line":"  |                       |        | PUT, or TRACE.                           |"},{"line_number":881,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":882,"context_line":"  | max_retries           | int    | The number of successful checks before   |"},{"line_number":883,"context_line":"  |                       |        | changing the operating status of the     |"},{"line_number":884,"context_line":"  |                       |        | member to ONLINE.                        |"},{"line_number":885,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":886,"context_line":"  | max_retries_down      | int    | The number of allowed check failures     |"},{"line_number":887,"context_line":"  |                       |        | before changing the operating status of  |"},{"line_number":888,"context_line":"  |                       |        | the member to ERROR. A valid value is    |"},{"line_number":889,"context_line":"  |                       |        | from 1 to 10.                            |"},{"line_number":890,"context_line":"  +-----------------------+--------+------------------------------------------+"},{"line_number":891,"context_line":"  | name                  | string | Human-readable name of the monitor.      |"},{"line_number":892,"context_line":"  +-----------------------+--------+------------------------------------------+"}],"source_content_type":"text/x-rst","patch_set":15,"id":"9f91af0f_7fbfab60","line":889,"range":{"start_line":882,"start_character":2,"end_line":889,"end_character":79},"in_reply_to":"df87a7cf_cddf3564","updated":"2018-01-09 14:58:07.000000000","message":"In answer to both questions, the spec is trying to be consistent with the Octavia API. This is the way the API defines these attributes.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":8446,"name":"Evgeny Fedoruk","email":"evgenyf@radware.com","username":"evgenyfedoruk"},"change_message_id":"1cc602a2729958e8a9da38148dac379aa77f602d","unresolved":false,"context_lines":[{"line_number":1347,"context_line":"one to query supported flavor metadata keys and another to validate that a"},{"line_number":1348,"context_line":"flavor is supported. Both functions are synchronous."},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"* **get_supported_flavor_keys**"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"  Retrieves a dictionary of supported flavor keys and their description."},{"line_number":1353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_ed73197f","line":1350,"range":{"start_line":1350,"start_character":4,"end_line":1350,"end_character":29},"updated":"2017-12-19 09:52:35.000000000","message":"Probably \"get_supported_flavor_metadata\"","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":1347,"context_line":"one to query supported flavor metadata keys and another to validate that a"},{"line_number":1348,"context_line":"flavor is supported. Both functions are synchronous."},{"line_number":1349,"context_line":""},{"line_number":1350,"context_line":"* **get_supported_flavor_keys**"},{"line_number":1351,"context_line":""},{"line_number":1352,"context_line":"  Retrieves a dictionary of supported flavor keys and their description."},{"line_number":1353,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f96bb07_91e763e5","line":1350,"range":{"start_line":1350,"start_character":4,"end_line":1350,"end_character":29},"in_reply_to":"df87a7cf_ed73197f","updated":"2018-01-13 00:15:47.000000000","message":"I think this is more clear as is.  The data returned is only the key names and the description of the key. No values/data would be returned with this call.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"0d267b04eefe90c6fe19e3400471d7a2dfae1b69","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"  The methods listed here are the only callable methods for drivers."},{"line_number":1484,"context_line":"  All other interfaces are not considered stable or safe for drivers to"},{"line_number":1485,"context_line":"  access."},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"Update provisioning and operating status API"},{"line_number":1488,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":1489,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_47262719","line":1486,"updated":"2017-12-13 17:09:35.000000000","message":"When I thought first about the driver support library I was thinking it would abstract whatever transport we would use (e.g. REST, RabbitMQ, etc.) from the driver author so operators could use what fits their install best. In such a scenario the driver library would decidedly not run as part of the Octavia API server but potentially on some other host.\n\nAfter discussing this it became clear that the preferred way for driver developers is to use the library as part of the 3rd party driver on the Octavia API server and manage their own transport from appliance to driver. So the support library function would merely be some way of bulk updating the DB.\n\nLet\u0027s get some clarity on what the support library does: abstract transport and updates - or just updates. And where we think this all would run: as part of the driver on the Octavia API server or as part of some other component.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"cb195570dabb5ad3fdffc920f2733e38b2fcc020","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"  The methods listed here are the only callable methods for drivers."},{"line_number":1484,"context_line":"  All other interfaces are not considered stable or safe for drivers to"},{"line_number":1485,"context_line":"  access."},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"Update provisioning and operating status API"},{"line_number":1488,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":1489,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_2c6edaff","line":1486,"in_reply_to":"df87a7cf_070e563a","updated":"2017-12-19 17:07:53.000000000","message":"Based on today\u0027s community meeting [1], attendees agreed that opting for the northbound REST API is good enough for a first cut at least. People raised and acked pros/cons on different approaches, being the NBI a non perfect one but sufficient to not block the approval of the this spec.\n\n[1] http://lists.openstack.org/pipermail/openstack-dev/2017-December/125608.html","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f5faf857aa79acbf83636523c86206e226c83207","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"  The methods listed here are the only callable methods for drivers."},{"line_number":1484,"context_line":"  All other interfaces are not considered stable or safe for drivers to"},{"line_number":1485,"context_line":"  access."},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"Update provisioning and operating status API"},{"line_number":1488,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":1489,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_59758cf9","line":1486,"in_reply_to":"df87a7cf_47262719","updated":"2017-12-14 19:26:20.000000000","message":"My original thought on this was to provide a REST API for the drivers to submit this information.  It seemed to give us scalability advantages, as well as driver deployment flexibility. The downside is it requires more security work to be done to authenticate drivers to the API.\nSo, my question to the driver writers is, does this meet your needs or would you prefer something different.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":20220,"name":"Jeffrey Longstaff","email":"j.longstaff@f5.com","username":"longstaff"},"change_message_id":"139e3107176ce499d246873c1fff5c1fc40c1fd8","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"  The methods listed here are the only callable methods for drivers."},{"line_number":1484,"context_line":"  All other interfaces are not considered stable or safe for drivers to"},{"line_number":1485,"context_line":"  access."},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"Update provisioning and operating status API"},{"line_number":1488,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":1489,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_658f30cd","line":1486,"in_reply_to":"df87a7cf_59758cf9","updated":"2017-12-18 20:41:04.000000000","message":"From my perspective, a REST API is fine.","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"4a1d120163dd520bb7bf6fe19f86490e13c7bd3c","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"  The methods listed here are the only callable methods for drivers."},{"line_number":1484,"context_line":"  All other interfaces are not considered stable or safe for drivers to"},{"line_number":1485,"context_line":"  access."},{"line_number":1486,"context_line":""},{"line_number":1487,"context_line":"Update provisioning and operating status API"},{"line_number":1488,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":1489,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"df87a7cf_070e563a","line":1486,"in_reply_to":"df87a7cf_658f30cd","updated":"2017-12-19 14:18:08.000000000","message":"A discussion similar to this one happened in 2016 in neutron for the port data_plane_status extension [1][2][3] where a ml2 backend (or other external system) could report the status of the data plane of neutron ports -- this maps to operating_status in neutron-lbaas and octavia.\n\nOptions were:\n\n1. introduce a callback system in each ml2 mech driver\n2. have a common mech-driver independent callback agent\n3. accept REST API calls to update the attribute (port data_plane_status in that case) *BUT* with a policy set to only allow users with data plane integrator role\n\nWe went for option 3 as the spec was specifically targeted at adding and updating a single port attribute. For Octavia, it might be worthwhile considering also other options.\n\n[1] https://bugs.launchpad.net/neutron/+bug/1598081\n[2] https://specs.openstack.org/openstack/neutron-specs/specs/backlog/ocata/port-data-plane-status.html\n[3] https://blueprints.launchpad.net/neutron/+spec/port-data-plane-status","commit_id":"679b84d73ba712f5864f2d69c15b654a4cfdf3d2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":138,"context_line":"  create the VIP port. Octavia will call create_vip_port() with a loadbalancer"},{"line_number":139,"context_line":"  ID and a partially defined VIP dictionary. Provider drivers that support"},{"line_number":140,"context_line":"  port creation will create the port and return a fully populated VIP"},{"line_number":141,"context_line":"  dictionary."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"  **VIP dictionary**"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"7f96bb07_11e593a8","line":141,"updated":"2018-01-13 00:15:47.000000000","message":"This is perfect, thank you!","commit_id":"7531e936e2566b484a8d2b89655c035f40c2181c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"  Removes an existing load balancer."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"  Octavia will pass in the load balancer ID as a parameter."},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"  The load balancer will be in the ``PENDING_DELETE`` provisioning_status when"},{"line_number":170,"context_line":"  it is passed to the driver. The driver will notify Octavia that the delete"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7f96bb07_d1bc0bde","line":167,"range":{"start_line":167,"start_character":57,"end_line":167,"end_character":59},"updated":"2018-01-13 00:15:47.000000000","message":"The cascade boolean should be included here.","commit_id":"7531e936e2566b484a8d2b89655c035f40c2181c"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"a8df3c9ded75ac479c9b31829c54c23cf256df65","unresolved":false,"context_lines":[{"line_number":248,"context_line":"         \"\"\"Creates a new load balancer."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"         :param loadbalancer (object): The load balancer object."},{"line_number":251,"context_line":"         :return:  Nothing if the create request was accepted."},{"line_number":252,"context_line":"         :raises DriverError: An unexpected error occurred in the driver."},{"line_number":253,"context_line":"         :raises NotImplementedError: The driver does not support create."},{"line_number":254,"context_line":"         :raises UnsupportedOptionError: The driver does not"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7f96bb07_be538ee2","line":251,"updated":"2018-01-10 22:52:31.000000000","message":"Doesn\u0027t this always return nothing. It\u0027s either None or an exception being raised right?\n\nAlso extra space here in front of \"Nothing\".","commit_id":"7531e936e2566b484a8d2b89655c035f40c2181c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0810446566ecb78fdbe3b4e2d7d846064bf223b9","unresolved":false,"context_lines":[{"line_number":248,"context_line":"         \"\"\"Creates a new load balancer."},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"         :param loadbalancer (object): The load balancer object."},{"line_number":251,"context_line":"         :return:  Nothing if the create request was accepted."},{"line_number":252,"context_line":"         :raises DriverError: An unexpected error occurred in the driver."},{"line_number":253,"context_line":"         :raises NotImplementedError: The driver does not support create."},{"line_number":254,"context_line":"         :raises UnsupportedOptionError: The driver does not"}],"source_content_type":"text/x-rst","patch_set":16,"id":"7f96bb07_b1385f3d","line":251,"in_reply_to":"7f96bb07_be538ee2","updated":"2018-01-13 00:15:47.000000000","message":"True, None would be more consistent here.","commit_id":"7531e936e2566b484a8d2b89655c035f40c2181c"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"20a2dbc90aab20cf1e42ef3ea362575c9e1c9679","unresolved":false,"context_lines":[{"line_number":58,"context_line":"function, drivers should fail a request by raising a ``NotImplementedError``"},{"line_number":59,"context_line":"exception. If a driver implements a function but does not support a particular"},{"line_number":60,"context_line":"option passed in by the caller, the driver should raise an"},{"line_number":61,"context_line":"``UnsupportedOptionError``."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_d3362fe8","line":61,"updated":"2018-02-19 21:51:13.000000000","message":"Sorry that I arrive late to the party. I wonder why we went with this instead of feature negotiation. (I agree on the unsupportedOptionError though).","commit_id":"885bd784bf4cf0d262f193f91c1d028ef6daf7ef"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"db832ed247c7f280546a73250066c1cfab1c2ae3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"function, drivers should fail a request by raising a ``NotImplementedError``"},{"line_number":59,"context_line":"exception. If a driver implements a function but does not support a particular"},{"line_number":60,"context_line":"option passed in by the caller, the driver should raise an"},{"line_number":61,"context_line":"``UnsupportedOptionError``."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"It is recommended that drivers use the"},{"line_number":64,"context_line":"`jsonschema \u003chttps://github.com/Julian/jsonschema\u003e`_ package or"}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_e72349a6","line":61,"in_reply_to":"3fa0c359_d3362fe8","updated":"2018-02-21 01:16:37.000000000","message":"By feature negotiation do you mean deciding the driver to use based on the requested feature?\nThat would have a number of issues, including users requesting a specific driver, but getting an LB on another driver. We also can\u0027t mix drivers, so if LB with driver A doesn\u0027t support listeners, we cannot implement a listener using driver B under our current model (it would be odd as well).","commit_id":"885bd784bf4cf0d262f193f91c1d028ef6daf7ef"},{"author":{"_account_id":14352,"name":"Antoni Segura Puimedon","email":"celebdor@gmail.com","username":"toni"},"change_message_id":"20a2dbc90aab20cf1e42ef3ea362575c9e1c9679","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  1. The provider will be removed as this is used for driver selection."},{"line_number":93,"context_line":"  2. The flavor will be expanded from the provided ID to be the full"},{"line_number":94,"context_line":"     dictionary representing the flavor metadata."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  **Load balancer object**"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_734abb55","line":94,"updated":"2018-02-19 21:51:13.000000000","message":"Is this flavor nova related or could it be driver specific?","commit_id":"885bd784bf4cf0d262f193f91c1d028ef6daf7ef"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"db832ed247c7f280546a73250066c1cfab1c2ae3","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"  1. The provider will be removed as this is used for driver selection."},{"line_number":93,"context_line":"  2. The flavor will be expanded from the provided ID to be the full"},{"line_number":94,"context_line":"     dictionary representing the flavor metadata."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"  **Load balancer object**"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":17,"id":"3fa0c359_27a131f9","line":94,"in_reply_to":"3fa0c359_734abb55","updated":"2018-02-21 01:16:37.000000000","message":"This is not nova related. Please see the flavor spec here: https://docs.openstack.org/octavia/latest/contributor/index.html#version-1-0-pike","commit_id":"885bd784bf4cf0d262f193f91c1d028ef6daf7ef"}]}
