)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the documentation for"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-server-groups-remove"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1728e3b347b4ae0364785d167ac530bf4109f3bf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a961159_ebeebfb3","line":11,"updated":"2014-12-16 22:48:26.000000000","message":"This needs the APIImpact flag per https://review.openstack.org/#/c/129757/.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"d4c4c3877053ffb775346779937f89c5a8f25eba","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is the documentation for"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/nova/+spec/dynamic-server-groups-remove"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1728e3b347b4ae0364785d167ac530bf4109f3bf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a961159_584a3c28","line":11,"in_reply_to":"3a961159_ebeebfb3","updated":"2014-12-17 05:11:59.000000000","message":"Done","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"}],"specs/kilo/approved/dynamic-server-groups-remove.rst":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"92bf812a9a00c3716edec08f3f1a55532e3fa3fe","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    * 404 - not found::"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"          This response code will be returned if the server group does not"},{"line_number":83,"context_line":"          exist or if the server passed in does not belong to the server group."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_3029b937","line":83,"updated":"2014-11-22 07:23:12.000000000","message":"I think we should return 404 only if the server group does not exist as the resource url is correct. \n\nIf the server_id is incorrect then that is an error in the body parameters and should return a 400","commit_id":"d0a6997a600c41bf068a5461b71162d0f47a2cb9"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"57e5f5944f8782c8e2f58d39b1c6fbd70962061c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    * 404 - not found::"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"          This response code will be returned if the server group does not"},{"line_number":83,"context_line":"          exist or if the server passed in does not belong to the server group."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_bf71f10d","line":83,"in_reply_to":"5a890539_3029b937","updated":"2014-11-23 01:05:58.000000000","message":"Done","commit_id":"d0a6997a600c41bf068a5461b71162d0f47a2cb9"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"92bf812a9a00c3716edec08f3f1a55532e3fa3fe","unresolved":false,"context_lines":[{"line_number":82,"context_line":"          This response code will be returned if the server group does not"},{"line_number":83,"context_line":"          exist or if the server passed in does not belong to the server group."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Parameters:"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_5021e54b","line":85,"updated":"2014-11-22 07:23:12.000000000","message":"Did you consider a DELETE on /v2/{tenant_oid}/os-server-groups/ServerGroupID/server_id instead of using actions?","commit_id":"d0a6997a600c41bf068a5461b71162d0f47a2cb9"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"d8915146d40402d7d52562ce20a76065f8c4d82f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"          This response code will be returned if the server group does not"},{"line_number":83,"context_line":"          exist or if the server passed in does not belong to the server group."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * Parameters:"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"5a890539_5470f4db","line":85,"in_reply_to":"5a890539_5021e54b","updated":"2014-11-22 22:50:36.000000000","message":"Thanks for the feedback, Christopher.  I think the idea was that we\u0027re not really deleting the server group, but rather removing a VM from the server group... so that\u0027s why the action route was taken here (similar to removing a host from a host aggregate).","commit_id":"d0a6997a600c41bf068a5461b71162d0f47a2cb9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"28a9579d342374a4ce05134da4064d13a09269cb","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    | tenant_id      | URI   | xsd:string | The ID for the tenant or          |"},{"line_number":95,"context_line":"    |                |       |            | account in a multi-tenancy cloud. |"},{"line_number":96,"context_line":"    +----------------+-------+------------+-----------------------------------+"},{"line_number":97,"context_line":"    | ServerGroup_id | URI   | String     | The server group ID.              |"},{"line_number":98,"context_line":"    +----------------+-------+------------+-----------------------------------+"},{"line_number":99,"context_line":"    | server_id      | URI   | capsi:UUID | The UUID for the server to remove |"},{"line_number":100,"context_line":"    |                |       |            | from the server group.            |"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_87cd5aba","line":97,"updated":"2014-11-26 17:58:41.000000000","message":"I\u0027m not sure the parameter would be CamelCase no ?","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"20584578ae744210ac2a91362b13f7ad94258f08","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    | tenant_id      | URI   | xsd:string | The ID for the tenant or          |"},{"line_number":95,"context_line":"    |                |       |            | account in a multi-tenancy cloud. |"},{"line_number":96,"context_line":"    +----------------+-------+------------+-----------------------------------+"},{"line_number":97,"context_line":"    | ServerGroup_id | URI   | String     | The server group ID.              |"},{"line_number":98,"context_line":"    +----------------+-------+------------+-----------------------------------+"},{"line_number":99,"context_line":"    | server_id      | URI   | capsi:UUID | The UUID for the server to remove |"},{"line_number":100,"context_line":"    |                |       |            | from the server group.            |"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_8701da6c","line":97,"in_reply_to":"5a890539_87cd5aba","updated":"2014-11-26 18:13:49.000000000","message":"This is the same parameter name here as it is for the existing server group show and server group delete APIs.","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"28a9579d342374a4ce05134da4064d13a09269cb","unresolved":false,"context_lines":[{"line_number":139,"context_line":"Notifications impact"},{"line_number":140,"context_line":"--------------------"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"A Nova servergroup.deletmember notification will be created to be sent when a"},{"line_number":143,"context_line":"server is removed from a server group."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Other end user impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_87447a1c","line":142,"updated":"2014-11-26 17:58:41.000000000","message":"typo : deletemember, I guess ?","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"20584578ae744210ac2a91362b13f7ad94258f08","unresolved":false,"context_lines":[{"line_number":139,"context_line":"Notifications impact"},{"line_number":140,"context_line":"--------------------"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"A Nova servergroup.deletmember notification will be created to be sent when a"},{"line_number":143,"context_line":"server is removed from a server group."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"Other end user impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"5a890539_87eabaaa","line":142,"in_reply_to":"5a890539_87447a1c","updated":"2014-11-26 18:13:49.000000000","message":"Done","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"28a9579d342374a4ce05134da4064d13a09269cb","unresolved":false,"context_lines":[{"line_number":200,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"This is a simple feature with no race conditions, so unit tests will provide"},{"line_number":203,"context_line":"complete testing coverage."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\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":2,"id":"5a890539_27fd8609","line":203,"updated":"2014-11-26 17:58:41.000000000","message":"wouldn\u0027t it mean a new Tempest test ?","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"20584578ae744210ac2a91362b13f7ad94258f08","unresolved":false,"context_lines":[{"line_number":200,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"This is a simple feature with no race conditions, so unit tests will provide"},{"line_number":203,"context_line":"complete testing coverage."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\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":2,"id":"5a890539_67e5cedb","line":203,"in_reply_to":"5a890539_27fd8609","updated":"2014-11-26 18:13:49.000000000","message":"Done","commit_id":"53ac0ccaea7d48d9de9d0b21129760b77aa449bc"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"3688920f33a0ab83d677c8bf908b18d24dfe12c2","unresolved":false,"context_lines":[{"line_number":84,"context_line":"          This response code will be returned if the server group does not"},{"line_number":85,"context_line":"          exist."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * Parameters:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a890539_bb7fc965","line":87,"updated":"2014-11-27 02:04:34.000000000","message":"This was discussed in the API-WG meeting. We feel the \"/action\" style of extending the API goes against RESTful principles and instead would like to recommend the following alternative:\n\n/v2/{tenant_id}/os-server-groups/{ServerGroup_id}/members\n\nA GET method sent to the above resource will return the collection of server memberships. The URI of each membership will be:\n\n/v2/{tenant_id}/os-server-groups/{ServerGroup_id}/members/{server_id}\n\nThe representation can include the server_id, server resource URL, and any other piece of information that is deemed useful.\n\nTo remove a server, you will send a DELETE request to the membership URL for the server.\n\nAs a future extension, adding a server to a group would be done by sending a POST request to the /members URL shown above.","commit_id":"ed14ac86abfe8a4a4a09d1aeff5f0d4c7cc4b813"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"e3c2344818194cd159e752064122e1998e08fe3f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"          This response code will be returned if the server group does not"},{"line_number":85,"context_line":"          exist."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/action"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  * Parameters:"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a890539_9cc70864","line":87,"in_reply_to":"5a890539_bb7fc965","updated":"2014-12-02 01:15:04.000000000","message":"Done","commit_id":"ed14ac86abfe8a4a4a09d1aeff5f0d4c7cc4b813"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"be0e1c443d17cfca23d84722f44af911d1459619","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Unit tests, including integrated API sample tests and tempest tests will be"},{"line_number":203,"context_line":"added."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a890539_39868a17","line":204,"updated":"2014-11-26 19:39:33.000000000","message":"well, functional tests should maybe also mentioned as work items but go for it.","commit_id":"ed14ac86abfe8a4a4a09d1aeff5f0d4c7cc4b813"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"e3c2344818194cd159e752064122e1998e08fe3f","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"Unit tests, including integrated API sample tests and tempest tests will be"},{"line_number":203,"context_line":"added."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5a890539_bcc20451","line":204,"in_reply_to":"5a890539_39868a17","updated":"2014-12-02 01:15:04.000000000","message":"Done","commit_id":"ed14ac86abfe8a4a4a09d1aeff5f0d4c7cc4b813"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"be74fcfa470c8567b0ca927cb43d48d3bdf99948","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Specification for the method"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Removes a server from a server group"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * Method type: GET"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_3d244dc5","line":74,"updated":"2014-12-02 05:05:07.000000000","message":"This needs updating I think - \"List servers in a server group\"?","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"dcf55233d2fa175cf2272c4ebfc19d5f6d2733f3","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Specification for the method"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Removes a server from a server group"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * Method type: GET"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_2b6b07ba","line":74,"in_reply_to":"5a890539_3d244dc5","updated":"2014-12-02 20:40:32.000000000","message":"Done","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"cb85d5ff9868a1f1368f2ce98f8bf9bea50cbe84","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Specification for the method"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Removes a server from a server group"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * Method type: GET"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_8054f6ca","line":74,"in_reply_to":"5a890539_3d244dc5","updated":"2014-12-02 05:17:56.000000000","message":"The original intent of the API is to remove a server from the group - in which case for this particular call, we\u0027d be issuing a DELETE to the resource (so the method type would need to be updated).\n\nI think Miguel was also advising that a GET be added as well for the .../members URI, which would, as you said, list servers in a group.","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"4b842ffeb780387ef399f0c7279e17b898ff56de","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"* Specification for the method"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"  * Removes a server from a server group"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"  * Method type: GET"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_cbb8dfc9","line":74,"in_reply_to":"5a890539_8054f6ca","updated":"2014-12-02 06:28:17.000000000","message":"yep, thats fine having both GET (for listing servers in a server group and DELETE to remove a server from the group. I was just pointing that line 74 is describing the GET so should talk about listing servers in a server group. Line 133 is describing the DELETE and is correct about describing removing a server from a server group","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"be74fcfa470c8567b0ca927cb43d48d3bdf99948","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"  * Method type: DELETE"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"  * Normal http response code: 202"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  * Expected error http response codes:"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_1d3eb1da","line":137,"updated":"2014-12-02 05:05:07.000000000","message":"Is the delete really an async call? If so, then that\u0027s fine. If its going to end up being a synchronous delete from the db then we should return 200","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"cb85d5ff9868a1f1368f2ce98f8bf9bea50cbe84","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"  * Method type: DELETE"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"  * Normal http response code: 202"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  * Expected error http response codes:"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_c05d1eee","line":137,"in_reply_to":"5a890539_1d3eb1da","updated":"2014-12-02 05:17:56.000000000","message":"+1 ... I think 200 is correct in this case.","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"dcf55233d2fa175cf2272c4ebfc19d5f6d2733f3","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"  * Method type: DELETE"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"  * Normal http response code: 202"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"  * Expected error http response codes:"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_cb5b6320","line":137,"in_reply_to":"5a890539_1d3eb1da","updated":"2014-12-02 20:40:32.000000000","message":"Done","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":12606,"name":"Miguel Grinberg","email":"miguel.grinberg@gmail.com","username":"miguelgrinberg"},"change_message_id":"472a32d443750b2de1172db92948008e7ddb5345","unresolved":false,"context_lines":[{"line_number":143,"context_line":"          This response code will be returned if the server group does not"},{"line_number":144,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"  * Parameters:"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_1c0cf893","line":146,"updated":"2014-12-02 01:26:17.000000000","message":"I would include this URL as an additional link in the \"links\" section of the /members URL for each server. This is in  compliance with HATEOAS, to not force clients to build this URL on their own.","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"dcf55233d2fa175cf2272c4ebfc19d5f6d2733f3","unresolved":false,"context_lines":[{"line_number":143,"context_line":"          This response code will be returned if the server group does not"},{"line_number":144,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"  * URL: /v2/{tenant_id}/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"  * Parameters:"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"5a890539_eb9bbfc6","line":146,"in_reply_to":"5a890539_1c0cf893","updated":"2014-12-02 20:40:32.000000000","message":"Done","commit_id":"9496517d92fcc8e4ca04c35aa17adfe81afbbdc3"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"5228fb65d47186aa4c009b3ad2ac7f26c5c7d20d","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Testing"},{"line_number":265,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Unit tests, including integrated API sample tests and tempest tests will be"},{"line_number":268,"context_line":"added."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_3a28af32","line":267,"updated":"2014-12-02 22:03:06.000000000","message":"Tempest tests are listed here, but does everyone agree that tempest tests are needed for this new functionality since it is pretty straightforward with no race conditions?","commit_id":"d8dccf684cbde6f98b2468e5300587852670fff2"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"253449559c94594ee3da2837d6abafabc4ec2ec0","unresolved":false,"context_lines":[{"line_number":264,"context_line":"Testing"},{"line_number":265,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"Unit tests, including integrated API sample tests and tempest tests will be"},{"line_number":268,"context_line":"added."},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"Documentation Impact"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5a890539_ca4a6b26","line":267,"in_reply_to":"5a890539_3a28af32","updated":"2014-12-03 08:56:21.000000000","message":"The problem is that you extend the REST API, so that\u0027s part of the contract that all REST APIs are covered by functional tests.","commit_id":"d8dccf684cbde6f98b2468e5300587852670fff2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    * 404 - not found::"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"          This response code will be returned if the server group does not"},{"line_number":164,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  * URL: /v2.1/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_4b6ef3ca","line":164,"updated":"2014-12-16 22:48:26.000000000","message":"I\u0027d expect a 400 if the server is not a member of the server group.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4dab463b5d2c6d709f9a66d0abdb3c9f7896f402","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    * 404 - not found::"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"          This response code will be returned if the server group does not"},{"line_number":164,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  * URL: /v2.1/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_9df016cb","line":164,"in_reply_to":"3a961159_36e82a7c","updated":"2014-12-17 04:09:43.000000000","message":"Does not exist / not found is definitely a 404, but requesting the delete of a member of a server group when the member isn\u0027t in the group sounds like a bad request (400) to me, so I\u0027m saying I think there are two error conditions here.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"85c2c17308997fe96106aa0a2a886d54e2dc013e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    * 404 - not found::"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"          This response code will be returned if the server group does not"},{"line_number":164,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  * URL: /v2.1/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_d6b52632","line":164,"in_reply_to":"3a961159_4b6ef3ca","updated":"2014-12-16 22:59:31.000000000","message":"I believe 404 is the standard code to use when a particular resource doesn\u0027t exist (i.e., the server in this case) vs. a general 400 error code?  Or is there a precedent already for this?  FWIW, Morgan also agreed with a 404 here.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"6b11397a687bed10ef96230b9637457f1a7467e0","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    * 404 - not found::"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"          This response code will be returned if the server group does not"},{"line_number":164,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  * URL: /v2.1/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_f851280f","line":164,"in_reply_to":"3a961159_9df016cb","updated":"2014-12-17 04:54:35.000000000","message":"Yep, you\u0027re correct; there are two error scenarios:\n\n1) The SG with ID {ServerGroup_id} couldn\u0027t be found\n2) The SG\u0027s member with ID {server_id} couldn\u0027t be found\n\nThat said, both should generate a 404 because the URI is wrong and the response error text would allow one to disambiguate the two.\n\n400 codes are generally used when something in the request body itself is wrong (i.e., malformed syntax/unexpected payload).  The above error coding aligns with REST best practices as well as the definitions on http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html -- it\u0027s certainly easy to change the codes, but I think in this case it\u0027s following the standards.\n\nIn any case, I don\u0027t want us to get hung up too badly on this point since it\u0027s easy to switch either way.  :-)","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"f3e059c6efcdc05f1d8078bb03d7c4668fb846b6","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    * 404 - not found::"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"          This response code will be returned if the server group does not"},{"line_number":164,"context_line":"          exist, or if the server is not a member of the server group."},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"  * URL: /v2.1/os-server-groups/{ServerGroup_id}/members/{server_id}"},{"line_number":167,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_36e82a7c","line":164,"in_reply_to":"3a961159_d6b52632","updated":"2014-12-16 23:18:20.000000000","message":"I believe this should be 404 as well, since the server UUID is part of the URL. I think it would be 400, if the server UUID was passed in in the request body.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Policy Changes: Two new authorizations will be added so that the Nova"},{"line_number":191,"context_line":"  policy.json file has the ability to distinctly enumerate what roles can list"},{"line_number":192,"context_line":"  the servers in a server group an what roles can remove servers from a server"},{"line_number":193,"context_line":"  group."},{"line_number":194,"context_line":"  The following action will be required in the policy to list the server"},{"line_number":195,"context_line":"  members in a server group:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_2ba0c7f3","line":192,"updated":"2014-12-16 22:48:26.000000000","message":"s/an/and/","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"f3e059c6efcdc05f1d8078bb03d7c4668fb846b6","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"* Policy Changes: Two new authorizations will be added so that the Nova"},{"line_number":191,"context_line":"  policy.json file has the ability to distinctly enumerate what roles can list"},{"line_number":192,"context_line":"  the servers in a server group an what roles can remove servers from a server"},{"line_number":193,"context_line":"  group."},{"line_number":194,"context_line":"  The following action will be required in the policy to list the server"},{"line_number":195,"context_line":"  members in a server group:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_f6dce21a","line":192,"in_reply_to":"3a961159_2ba0c7f3","updated":"2014-12-16 23:18:20.000000000","message":"Done","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":216,"context_line":"In addition to the API, the user will be able to use the Nova CLI to remove"},{"line_number":217,"context_line":"instances from a server group. The CLI will be of the form:"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* nova server-group-delete-server \u003cid\u003e \u003cserver\u003e"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Where \u003cid\u003e represents the server group\u0027s identifier and \u003cserver\u003e represents"},{"line_number":222,"context_line":"an instance\u0027s uuid or name. The uuid will be required in cases in which the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_6b81ef49","line":219,"updated":"2014-12-16 22:48:26.000000000","message":"nit: I might name this server-group-delete-member","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"f3e059c6efcdc05f1d8078bb03d7c4668fb846b6","unresolved":false,"context_lines":[{"line_number":216,"context_line":"In addition to the API, the user will be able to use the Nova CLI to remove"},{"line_number":217,"context_line":"instances from a server group. The CLI will be of the form:"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"* nova server-group-delete-server \u003cid\u003e \u003cserver\u003e"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Where \u003cid\u003e represents the server group\u0027s identifier and \u003cserver\u003e represents"},{"line_number":222,"context_line":"an instance\u0027s uuid or name. The uuid will be required in cases in which the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_d6c0c62c","line":219,"in_reply_to":"3a961159_6b81ef49","updated":"2014-12-16 23:18:20.000000000","message":"Done. I will make this change in the server-group add spec as well to change server-group-add-server to server-group-add-member","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* nova server-group-delete-server \u003cid\u003e \u003cserver\u003e"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Where \u003cid\u003e represents the server group\u0027s identifier and \u003cserver\u003e represents"},{"line_number":222,"context_line":"an instance\u0027s uuid or name. The uuid will be required in cases in which the"},{"line_number":223,"context_line":"name does not unambiguously identify a server."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_8bdc5b76","line":222,"updated":"2014-12-16 22:48:26.000000000","message":"The API definition above says it\u0027s a UUID, so how are you going to pass the name?  Or are you going to make a call to look up the server by name and if found, then call the API with the UUID?  I\u0027d hope not.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"f3e059c6efcdc05f1d8078bb03d7c4668fb846b6","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* nova server-group-delete-server \u003cid\u003e \u003cserver\u003e"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Where \u003cid\u003e represents the server group\u0027s identifier and \u003cserver\u003e represents"},{"line_number":222,"context_line":"an instance\u0027s uuid or name. The uuid will be required in cases in which the"},{"line_number":223,"context_line":"name does not unambiguously identify a server."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_f6b5c2d0","line":222,"in_reply_to":"3a961159_36410a0c","updated":"2014-12-16 23:18:20.000000000","message":"Yes, the latter, and would return an error if there are multiple instances with that name.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7664,"name":"Joe Cropper","email":"jwcroppe@us.ibm.com","username":"jwcroppe"},"change_message_id":"85c2c17308997fe96106aa0a2a886d54e2dc013e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"* nova server-group-delete-server \u003cid\u003e \u003cserver\u003e"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"Where \u003cid\u003e represents the server group\u0027s identifier and \u003cserver\u003e represents"},{"line_number":222,"context_line":"an instance\u0027s uuid or name. The uuid will be required in cases in which the"},{"line_number":223,"context_line":"name does not unambiguously identify a server."},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_36410a0c","line":222,"in_reply_to":"3a961159_8bdc5b76","updated":"2014-12-16 22:59:31.000000000","message":"The latter... I think this is the same behavior for things like adding hosts to aggregates, etc.  You can pass the aggregate as either an ID or name - so we were trying to maintain parity here.  If ID only is preferred, we can go that route too.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a879077ccc3a6ada6fa4369f01eb47c2fe8b0fb","unresolved":false,"context_lines":[{"line_number":257,"context_line":"* Add new get_members() and delete_member() methods to the Nova instance group"},{"line_number":258,"context_line":"  object."},{"line_number":259,"context_line":"* Add member level index and delete APIs to Server Group API v2.1 extensions."},{"line_number":260,"context_line":"* Add Nova CLI for removing a server from a server group."},{"line_number":261,"context_line":"* Add Nova integration API sample tests to cover the new APIs."},{"line_number":262,"context_line":"* Add new tempest tests."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_6b5d6fe9","line":260,"updated":"2014-12-16 22:48:26.000000000","message":"Won\u0027t there also be a CLI to get the members, or does server-group-get already show the member UUID list?","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"},{"author":{"_account_id":7221,"name":"Jennifer Mulsow","email":"jmulsow@us.ibm.com","username":"jmulsow"},"change_message_id":"f3e059c6efcdc05f1d8078bb03d7c4668fb846b6","unresolved":false,"context_lines":[{"line_number":257,"context_line":"* Add new get_members() and delete_member() methods to the Nova instance group"},{"line_number":258,"context_line":"  object."},{"line_number":259,"context_line":"* Add member level index and delete APIs to Server Group API v2.1 extensions."},{"line_number":260,"context_line":"* Add Nova CLI for removing a server from a server group."},{"line_number":261,"context_line":"* Add Nova integration API sample tests to cover the new APIs."},{"line_number":262,"context_line":"* Add new tempest tests."},{"line_number":263,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3a961159_569e9657","line":260,"in_reply_to":"3a961159_6b5d6fe9","updated":"2014-12-16 23:18:20.000000000","message":"Both the server-group-list and server-group-show CLIs show the member UUID list.","commit_id":"512bf71cc1d0332a560010fe5ce50f898ba3adc2"}]}
