)]}'
{"specs/pike/approved/service-hyper-uuid-in-api.rst":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"729125a17736e6b1f3724adb78e9f39a67cdb1a2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"The `os-hypervisors` API exposes the id in GET (index) requests and uses it in"},{"line_number":32,"context_line":"the \"show\" and \"uptime\" methods to look up the ComputeNode object by that id."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"This is ugly but functional in a single-cell deployment. However, in a"},{"line_number":35,"context_line":"multi-cell deployment, we have no context on which cell we should query to get"},{"line_number":36,"context_line":"service/node details from, since you could have multiple cells each with a"},{"line_number":37,"context_line":"nova-compute service and compute node with id 1, so which cell do you pick to"},{"line_number":38,"context_line":"delete the service or show details about the hypervisor?"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Use Cases"},{"line_number":41,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_6772134b","line":38,"range":{"start_line":34,"start_character":0,"end_line":38,"end_character":56},"updated":"2017-03-21 16:28:02.000000000","message":"Nice description about the problem, I agree.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ae03ebd010557e143e0570a94a952dd17e892de2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"multi-cell deployment, we have no context on which cell we should query to get"},{"line_number":36,"context_line":"service/node details from, since you could have multiple cells each with a"},{"line_number":37,"context_line":"nova-compute service and compute node with id 1, so which cell do you pick to"},{"line_number":38,"context_line":"delete the service or show details about the hypervisor?"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"Use Cases"},{"line_number":41,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_a753fd15","line":38,"in_reply_to":"1a1ced50_6772134b","updated":"2017-03-22 15:07:37.000000000","message":"Yeah, very good description.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ae03ebd010557e143e0570a94a952dd17e892de2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"could simply return ``{cell_uuid}-{resource_uuid}``."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Then rather than iterating all cells to find the resource, we could decode the"},{"line_number":86,"context_line":"input uuid to get the cell we need."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This is not a recommended alternative because it encodes the cell in the REST"},{"line_number":89,"context_line":"API which is something we have said in the past we did not want to do, and is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_27e62d15","line":86,"updated":"2017-03-22 15:07:37.000000000","message":"Can you go from a uuid5 back to one of its constituents? I thought the deal was that you could consistently get the same uuid5 as long as the same namespace and name are used, but not extract the name from an existing one?\n\nNot that it matters, since I agree that this would be a bad idea.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec7f6485ae8f2818f34423ccaa18e73d7447639a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"could simply return ``{cell_uuid}-{resource_uuid}``."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Then rather than iterating all cells to find the resource, we could decode the"},{"line_number":86,"context_line":"input uuid to get the cell we need."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"This is not a recommended alternative because it encodes the cell in the REST"},{"line_number":89,"context_line":"API which is something we have said in the past we did not want to do, and is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_58bea4ff","line":86,"in_reply_to":"1a1ced50_27e62d15","updated":"2017-03-22 16:19:48.000000000","message":"Good question, I\u0027m not sure. I should just remove the the uuid5 part of this.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc12d3adcdcc727f02f56db30f1081fe8d436f98","unresolved":false,"context_lines":[{"line_number":114,"context_line":"os-hypervisors"},{"line_number":115,"context_line":"~~~~~~~~~~~~~~"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There are only ``GET`` methods in this API. They will all be changed"},{"line_number":118,"context_line":"to return the uuid value for the `id` field and take as input a uuid"},{"line_number":119,"context_line":"value for the ``{hypervisor_id}``. We can use the `query parameter"},{"line_number":120,"context_line":"validation`_ added in Ocata to validate that the ID passed in is a uuid."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_8f79cfca","line":117,"range":{"start_line":117,"start_character":15,"end_line":117,"end_character":30},"updated":"2017-03-22 05:46:47.000000000","message":"Just reminds that \u0027search\u0027 and \u0027servers\u0027 action are accept a hostname to match the hypervisors. So that two APIs isn\u0027t in the scope of proposed change.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":114,"context_line":"os-hypervisors"},{"line_number":115,"context_line":"~~~~~~~~~~~~~~"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There are only ``GET`` methods in this API. They will all be changed"},{"line_number":118,"context_line":"to return the uuid value for the `id` field and take as input a uuid"},{"line_number":119,"context_line":"value for the ``{hypervisor_id}``. We can use the `query parameter"},{"line_number":120,"context_line":"validation`_ added in Ocata to validate that the ID passed in is a uuid."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_647748a0","line":117,"range":{"start_line":117,"start_character":15,"end_line":117,"end_character":30},"in_reply_to":"1a1ced50_8f79cfca","updated":"2017-03-22 13:22:25.000000000","message":"Good point. Those both return lists, so I think it would be OK to return a list of hypervisors that match the search pattern across cells. Do you want me to mention that specifically in the spec or do you think what I have is enough?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc12d3adcdcc727f02f56db30f1081fe8d436f98","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There are only ``GET`` methods in this API. They will all be changed"},{"line_number":118,"context_line":"to return the uuid value for the `id` field and take as input a uuid"},{"line_number":119,"context_line":"value for the ``{hypervisor_id}``. We can use the `query parameter"},{"line_number":120,"context_line":"validation`_ added in Ocata to validate that the ID passed in is a uuid."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. _query parameter validation: https://specs.openstack.org/openstack/nova-specs/specs/ocata/implemented/consistent-query-parameters-validation.html"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_0f331f15","line":120,"range":{"start_line":119,"start_character":34,"end_line":120,"end_character":72},"updated":"2017-03-22 05:46:47.000000000","message":"You want to validate the uuid in the URL, not the query parameters?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There are only ``GET`` methods in this API. They will all be changed"},{"line_number":118,"context_line":"to return the uuid value for the `id` field and take as input a uuid"},{"line_number":119,"context_line":"value for the ``{hypervisor_id}``. We can use the `query parameter"},{"line_number":120,"context_line":"validation`_ added in Ocata to validate that the ID passed in is a uuid."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":".. _query parameter validation: https://specs.openstack.org/openstack/nova-specs/specs/ocata/implemented/consistent-query-parameters-validation.html"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_61bf3a61","line":120,"range":{"start_line":119,"start_character":34,"end_line":120,"end_character":72},"in_reply_to":"1a1ced50_0f331f15","updated":"2017-03-22 13:22:25.000000000","message":"Oh right, yes, it wouldn\u0027t be a query parameter. So I guess we just have to validate that the id provided is a uuid in code since we don\u0027t do it with jsonschema.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc12d3adcdcc727f02f56db30f1081fe8d436f98","unresolved":false,"context_lines":[{"line_number":125,"context_line":"~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The following API methods which take as input and/or return the integer"},{"line_number":128,"context_line":"primary key id in the response will be updated to take/return a uuid::"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"   * GET /os-services"},{"line_number":131,"context_line":"   * DELETE /os-services/{service_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_728638dc","line":128,"range":{"start_line":128,"start_character":31,"end_line":128,"end_character":69},"updated":"2017-03-22 05:46:47.000000000","message":"You mean return a new field called \u0027uuid\u0027, and remove the \u0027id\u0027 field in the new microversion? or you mean the value of \u0027id\u0027 change to a uuid. I +1 for the first one.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"ae03ebd010557e143e0570a94a952dd17e892de2","unresolved":false,"context_lines":[{"line_number":125,"context_line":"~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The following API methods which take as input and/or return the integer"},{"line_number":128,"context_line":"primary key id in the response will be updated to take/return a uuid::"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"   * GET /os-services"},{"line_number":131,"context_line":"   * DELETE /os-services/{service_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_87e0c1ce","line":128,"in_reply_to":"1a1ced50_44b96c14","updated":"2017-03-22 15:07:37.000000000","message":"I think we should stop exposing the database key in the API. If that would mean changing the value of the id to be the uuid, or getting rid of id in favor of a new uuid field, I\u0027m not sure which is better. But begone primary key!","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":125,"context_line":"~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The following API methods which take as input and/or return the integer"},{"line_number":128,"context_line":"primary key id in the response will be updated to take/return a uuid::"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"   * GET /os-services"},{"line_number":131,"context_line":"   * DELETE /os-services/{service_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_44b96c14","line":128,"range":{"start_line":128,"start_character":31,"end_line":128,"end_character":69},"in_reply_to":"1a1ced50_728638dc","updated":"2017-03-22 13:22:25.000000000","message":"I had intended to leave the \"id\" key but change the value from an integer to a uuid. I figured that would have less impact on client code, and would also be inline with the \"id\" field in the server response.\n\nI\u0027m open to suggestion here, we\u0027re not terribly consistent. For example, in microversion 2.41 with os-aggregates we started returning a uuid field in addition to the id field. Maybe we should do the same thing here?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec7f6485ae8f2818f34423ccaa18e73d7447639a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"~~~~~~~~~~~"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"The following API methods which take as input and/or return the integer"},{"line_number":128,"context_line":"primary key id in the response will be updated to take/return a uuid::"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"   * GET /os-services"},{"line_number":131,"context_line":"   * DELETE /os-services/{service_id}"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_383e4828","line":128,"in_reply_to":"1a1ced50_87e0c1ce","updated":"2017-03-22 16:19:48.000000000","message":"I got some opinions in IRC and we seem to be OK with just leaving the id key and changing the value to uuid in the microversion, which was what I had originally planned. Documenting it in the api-ref might be a bit odd, but it should be OK.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fd59e6c33f75bab41937577c31741398c53ba464","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_fca5f603","line":148,"updated":"2017-03-20 12:15:16.000000000","message":"Can\u0027t we just make the host and binary optional if you specify a uuid instead?\n\nYou could easily end up with the same hostname in two different cells, I just don\u0027t like the idea of leaving that out.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc12d3adcdcc727f02f56db30f1081fe8d436f98","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_9256545a","line":148,"in_reply_to":"1a1ced50_02422dae","updated":"2017-03-22 05:46:47.000000000","message":"yes, it is worth to not use the hostname in later patch. And we have multiple different \u0027host name\u0027 in our API. In the compute node table, we have host and hypervisor_hostname field. The host field is equal to service host field which is used by service API and host API. But the hypervisor_hostname field is used by os-hypervisor API. Too many different \u0027host name\u0027 in our API, that is really confuse.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ebe11f9b9923639db9c51aa31c5e55b14d188c9b","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_4c172aed","line":148,"in_reply_to":"1a1ced50_0cac52ec","updated":"2017-03-20 18:36:41.000000000","message":"What I don\u0027t really understand is why the service action APIs even work this way, i.e. why don\u0027t they take an id like the other os-services APIs (and server action APIs for that matter)? It just seems clunky to me to have to specify the identifiers in the request body for these APIs but the server_id is a query parameter for the server actions APIs.\n\nIdeally I\u0027d normalize all of the os-services APIs in the microversion to require a service_id (which is the uuid) as a query parameter, and then disable/enable just take a body with an action, so something like:\n\nPUT /os-services/{service_id}/disable\n\nPUT /os-services/disable-log-reason\n{\n    \u0027disabled_reason\u0027: \u0027host os upgrade maintenance\u0027\n}\n\netc","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"73de96e9becf331fc88ee98fd2504608c9f08470","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_2e7b6229","line":148,"in_reply_to":"1a1ced50_13c88fa5","updated":"2017-03-22 16:23:32.000000000","message":"After talking in IRC I think we\u0027re moving toward collapsing the 4 existing PUTs into a single PUT:\n\n  PUT /os-services/{service_id}\n\nWhere the body on that PUT determines the action to take.\n\nFor example:\n\n  PUT /os-services/2fc0e0d9-67f2-4977-8ac8-c9644461323d\n  {\n    \u0027status\u0027: \u0027disabled\u0027,\n    \u0027disabled_reason\u0027: \u0027maintenance\u0027\n  }\n\nThat would replace /os-services/disable-log-reason.\n\nOr:\n\n  PUT /os-services/2fc0e0d9-67f2-4977-8ac8-c9644461323d\n  {\n    \u0027forced_down\u0027: true\n  }\n\nReplaces /os-services/force-down.\n\nThen we don\u0027t have the action-style APIs, we just have a single PUT which handles the various state changes being requested.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"729125a17736e6b1f3724adb78e9f39a67cdb1a2","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_62ba010c","line":148,"in_reply_to":"1a1ced50_2bff14ab","updated":"2017-03-21 16:28:02.000000000","message":"+1 for normalizing and this spec seems good for me.\n\nNOTE: There is similar issue on os-host API, the API doesn\u0027t return \u0027id\u0027 at all. We are using hostname on os-host API and hostname could be unique, but it would be nice to normalize it also with another spec.\n\nhttps://developer.openstack.org/api-ref/compute/?expanded\u003dlist-hosts-detail#list-hosts","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1d8adf711df10ba3943d85292b194d0f9f6366f9","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_dd3d26de","line":148,"in_reply_to":"1a1ced50_354bb85a","updated":"2017-03-22 15:37:44.000000000","message":"http://lists.openstack.org/pipermail/openstack-operators/2017-March/013000.html","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"49ba06e343f525eea571dc10264e170e17cd5961","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_02422dae","line":148,"in_reply_to":"1a1ced50_4c172aed","updated":"2017-03-21 16:37:07.000000000","message":"In my mind, *servers* action APIS are always problematic on the design/interface, especially it would be terrible to switch main behaviors based on request body.\nSo I don\u0027t think os-services API needs to follow that like that\n\n PUT /os-services/{service_id}/action\n    Request body: {\u0027disable\u0027: null}\n\n^^^ is terrible.\nDifferent endpoints are good like\n\n PUT /os-services/{service_id}/disable","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"4b2f6f600e0a1da14fd07aebdc04485473d54cbd","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_2bff14ab","line":148,"in_reply_to":"1a1ced50_4c172aed","updated":"2017-03-21 11:54:24.000000000","message":"Yeah, I am OK just punting on that to another spec later on. You are right though, if we change it we should make it doing things properly, like \"PUT /os-services/{service_id}/disable\" etc.\n\nAs long as if we get a clash we have defined behaviour, like just that 400 ambiguous host thingy.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_a40b007c","line":148,"in_reply_to":"1a1ced50_62ba010c","updated":"2017-03-22 13:22:25.000000000","message":"Ken\u0027ichi: good point about os-hosts, I didn\u0027t think about that API, which now that I\u0027m looking at it, is basically the os-services API, so I wonder why we even have two different APIs for the essentially the same resource (services). The only differences with os-hosts is you can stop/start/reboot a host, which you can\u0027t do in the os-services API. But both have list/show/enable/disable methods.\n\nDo you think we should also be changing os-hosts in this spec like we will for os-services, given how similar they are? The only reason os-hosts is not in here is because I don\u0027t think Dan Smith has started converting that API to support multiple cells yet, or that implicitly \"works\" after he made os-services \"work\" (they don\u0027t really work in multiple cells if you have conflicts right now).","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"828d219f44a9150c5a639f0e1cfa51b357b14fea","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_354bb85a","line":148,"in_reply_to":"1a1ced50_a40b007c","updated":"2017-03-22 14:01:06.000000000","message":"As mentioned in the API subteam meeting today, alternatively we could deprecate os-hosts and move whatever we need from it into os-services, or just decide that stop/start/reboot host actions aren\u0027t something that should live in the Nova API at all, and deprecate but not replace the API.\n\nA quick look at the code for the host_power_action API, it\u0027s only implemented for xen and hyperv, and John was saying he thought it didn\u0027t work for xen anyway.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"09f02f87a6cae6256bdaa22e8240064506b76df1","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_13c88fa5","line":148,"in_reply_to":"1a1ced50_dd3d26de","updated":"2017-03-22 15:58:59.000000000","message":"a PUT url should also be a GET url (and maybe even a DELETE url). If we are going through the process of changing this I think this should be.\n\nPOST /os-services/{service_id}/disable\n\nbecause you doing GET it. You GET /os-services/{service_id}","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c66e71a3525d3ac46049b7d87c157cd956e288b7","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"   The ``host`` and ``binary`` values should be able to uniquely identify a"},{"line_number":147,"context_line":"   service in a multi-cell deployment. Therefore, this spec does not intend"},{"line_number":148,"context_line":"   to make any changes to the ``PUT /os-services/*`` APIs."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_0cac52ec","line":148,"in_reply_to":"1a1ced50_fca5f603","updated":"2017-03-20 18:31:59.000000000","message":"When I talked with Dan about this on Friday, he thought hostname would be unique between cells. Is that really not the case?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a41b48ff92ca8b2b918c6e6be9293e025cd9f525","unresolved":false,"context_lines":[{"line_number":213,"context_line":"* Write a database schema migration to add the services.uuid column."},{"line_number":214,"context_line":"* Add the uuid field to the Service object."},{"line_number":215,"context_line":"   * Generate a uuid for new services if not specified during create()."},{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_fd003903","line":217,"range":{"start_line":216,"start_character":5,"end_line":217,"end_character":55},"updated":"2017-03-22 05:58:28.000000000","message":"so we won\u0027t force a data migration for this. That means in a upgrade process, the request with uuid in microversion may not work before all the online data-migration finished?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce1217287d8a80de970938055f5baf379d63f4c8","unresolved":false,"context_lines":[{"line_number":213,"context_line":"* Write a database schema migration to add the services.uuid column."},{"line_number":214,"context_line":"* Add the uuid field to the Service object."},{"line_number":215,"context_line":"   * Generate a uuid for new services if not specified during create()."},{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_b057b6c8","line":217,"range":{"start_line":216,"start_character":5,"end_line":217,"end_character":55},"in_reply_to":"1a1ced50_448eccd0","updated":"2017-03-22 14:26:43.000000000","message":"No, they run afterwards. So you\u0027d have to support both on-demand setting of the uuid, but could also have a migration as well.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec7f6485ae8f2818f34423ccaa18e73d7447639a","unresolved":false,"context_lines":[{"line_number":213,"context_line":"* Write a database schema migration to add the services.uuid column."},{"line_number":214,"context_line":"* Add the uuid field to the Service object."},{"line_number":215,"context_line":"   * Generate a uuid for new services if not specified during create()."},{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_f85cb07e","line":217,"range":{"start_line":216,"start_character":5,"end_line":217,"end_character":55},"in_reply_to":"1a1ced50_b057b6c8","updated":"2017-03-22 16:19:48.000000000","message":"I thought about this after replying to Alex. If we\u0027re generating and saving a uuid on GET of the services anyway, like we did for compute_nodes and aggregates, then you can force the migration in Pike by simply listing services, which will trigger the load from the DB and set the uuid and save it in the object before returning to the API. Which, if you\u0027re going to use the microversion in Pike, you need to know the UUID first, and to get that you need to list the services, which triggers the load. So I think we\u0027re fine here.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":213,"context_line":"* Write a database schema migration to add the services.uuid column."},{"line_number":214,"context_line":"* Add the uuid field to the Service object."},{"line_number":215,"context_line":"   * Generate a uuid for new services if not specified during create()."},{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_448eccd0","line":217,"range":{"start_line":216,"start_character":5,"end_line":217,"end_character":55},"in_reply_to":"1a1ced50_fd003903","updated":"2017-03-22 13:22:25.000000000","message":"We\u0027d have an online data migration, not an offline data migration. This is a good question, but I had assumed that the online data migrations get ran as part of the upgrade so they are expected to be done by the time you start using the Pike code.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"ed54e49397e642730b9723ae0ff563f23b752c0a","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_0249b131","line":219,"updated":"2017-03-17 23:18:39.000000000","message":"Is it necessary to have both this item, and the [generate uuid on load] from line 216?  Won\u0027t one of them cover it?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"877c06f1f7c4737545668669096855b00ccde51a","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_8e7863f4","line":219,"in_reply_to":"1a1ced50_0249b131","updated":"2017-03-18 21:43:09.000000000","message":"I think we could do either, or both. The online data migration for the compute_nodes.uuid column happened on normal GET access, or on POST and PUT (create and save of the resource). The online data migration basically forced the GET:\n\nhttps://github.com/openstack/nova/blob/13.0.0/nova/db/sqlalchemy/api.py#L6446\n\nSo it loaded up all compute nodes that didn\u0027t have a uuid set and forced them through the GET/set uuid/save flow. I think we could just do similar for the services.uuid field.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5ae2f3b29c4f918ef26051ddb6dfa9f416bf31cf","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_24aab019","line":219,"in_reply_to":"1a1ced50_183ffa24","updated":"2017-03-22 13:22:25.000000000","message":"I think we could do either, and I don\u0027t think we\u0027re consistent when doing something like this. However, the way we do this for compute nodes is also how it was done for aggregates, so maybe we\u0027re more consistent than I thought. Ultimately I\u0027d like Dan Smith\u0027s opinion on this one.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce1217287d8a80de970938055f5baf379d63f4c8","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_b098966b","line":219,"in_reply_to":"1a1ced50_24aab019","updated":"2017-03-22 14:26:43.000000000","message":"If we only do the online migration then we won\u0027t have the uuid available when we start on pike code. That means we\u0027ll need to generate on load so we can honor the api as expected.\n\nSince it\u0027s entirely possible that a deployer could go a cycle or two without ever touching their services (or all of them) we still really need an online migration to ensure that the task gets completed.\n\nThe only other option would be to delay the API change, ensure everything gets migrated (i.e. gets a uuid) in Pike, and then add the API change in Queens. However, that means either delaying multicell, or keeping the caveat around deleting ambiguous services.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":23882,"name":"Dan Peschman","email":"dpeschman@godaddy.com","username":"dtp"},"change_message_id":"4444c735369270d2804afd2cafb46eb81b47c953","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_183ffa24","line":219,"in_reply_to":"1a1ced50_8e7863f4","updated":"2017-03-21 17:23:41.000000000","message":"Since this is a one-time deal, wouldn\u0027t it be cleaner to put it only in the data migraiton, and leave it out of the model load-from-db?","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec7f6485ae8f2818f34423ccaa18e73d7447639a","unresolved":false,"context_lines":[{"line_number":216,"context_line":"   * Generate and save a uuid for old services upon retrieval from the"},{"line_number":217,"context_line":"     database, like when compute nodes got a uuid [1]_."},{"line_number":218,"context_line":"* Add `get_by_uuid` methods to the ComputeNode and Service objects."},{"line_number":219,"context_line":"* Add an online data migration for service uuids like what we had for compute"},{"line_number":220,"context_line":"  nodes [2]_."},{"line_number":221,"context_line":"* Update the ``nova.compute.api.HostAPI`` methods which take an ID and check"},{"line_number":222,"context_line":"  if the ID is a uuid and if so, query for the resource using the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"1a1ced50_b89b1817","line":219,"in_reply_to":"1a1ced50_b098966b","updated":"2017-03-22 16:19:48.000000000","message":"Yeah I don\u0027t want to delay. As mentioned above, I think if we generate on load from the database when listing services, we\u0027re good anyway. The online migration routine via nova-manage db online_data_migrations is just added sugar.","commit_id":"aead316cda486eab9f6beb155fe58c0496041d1b"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"974b52681b0507d92de2dba75a58ed74fd03bbf1","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_130878d9","line":119,"range":{"start_line":119,"start_character":3,"end_line":119,"end_character":61},"updated":"2017-03-23 03:19:42.000000000","message":"This can be replaced by \u0027GET /os-hypervisors?hypervisor_hostname\u003dxxx\u0027.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fc39ffc0d8d40275ccff23b3248496fc58e0d33","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_0fce68b4","line":119,"range":{"start_line":119,"start_character":3,"end_line":119,"end_character":61},"in_reply_to":"1a1ced50_130878d9","updated":"2017-03-23 18:12:07.000000000","message":"That is a different problem to me, which I do not think fits with this spec, so if we did that, I would like to make it a separate change.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"974b52681b0507d92de2dba75a58ed74fd03bbf1","unresolved":false,"context_lines":[{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"},{"line_number":123,"context_line":"   search pattern, so a direct lookup by ID is not necessary."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_93fc68b9","line":120,"range":{"start_line":120,"start_character":5,"end_line":120,"end_character":62},"updated":"2017-03-23 03:19:42.000000000","message":"This can be replaced by \u0027GET /os-hypervisors?hypervisor_hostname\u003dxxx\u0026with_servers\u003dtrue\"","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d7cd74c95b3026215745f043caea2d0f7a9ce716","unresolved":false,"context_lines":[{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"},{"line_number":123,"context_line":"   search pattern, so a direct lookup by ID is not necessary."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_afb474d4","line":120,"range":{"start_line":120,"start_character":5,"end_line":120,"end_character":62},"in_reply_to":"1a1ced50_2fc3248c","updated":"2017-03-23 18:18:23.000000000","message":"honestly, I feel like this is one of those times where things are a lot more clear if we touch this all at once. And for the love of zod, what craziness created this interface before.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fc39ffc0d8d40275ccff23b3248496fc58e0d33","unresolved":false,"context_lines":[{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"},{"line_number":123,"context_line":"   search pattern, so a direct lookup by ID is not necessary."}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_2fc3248c","line":120,"range":{"start_line":120,"start_character":5,"end_line":120,"end_character":62},"in_reply_to":"1a1ced50_93fc68b9","updated":"2017-03-23 18:12:07.000000000","message":"ditto","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"129d645ebbd417413c1dc06d65ba789dd0907db2","unresolved":false,"context_lines":[{"line_number":117,"context_line":".. note:: The following APIs will not be changed::"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/search"},{"line_number":120,"context_line":"   * GET /os-hypervisors/{hypervisor_hostname_pattern}/servers"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"   Both of those APIs return a list of matches given the hostname"},{"line_number":123,"context_line":"   search pattern, so a direct lookup by ID is not necessary."}],"source_content_type":"text/x-rst","patch_set":2,"id":"dfeb2761_cd9b31c7","line":120,"range":{"start_line":120,"start_character":5,"end_line":120,"end_character":62},"in_reply_to":"1a1ced50_afb474d4","updated":"2017-04-02 13:14:24.000000000","message":"OK I\u0027ll work that change in here somehow.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"974b52681b0507d92de2dba75a58ed74fd03bbf1","unresolved":false,"context_lines":[{"line_number":142,"context_line":"   {"},{"line_number":143,"context_line":"      \"services\": ["},{"line_number":144,"context_line":"         {"},{"line_number":145,"context_line":"            \"id\": \"8e6e4ab6-0662-4ff5-8994-dde92bedada1\","},{"line_number":146,"context_line":"            \"binary\": \"nova-scheduler\","},{"line_number":147,"context_line":"            \"disabled_reason\": \"test1\","},{"line_number":148,"context_line":"            \"host\": \"host1\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_13079882","line":145,"range":{"start_line":145,"start_character":18,"end_line":145,"end_character":56},"updated":"2017-03-23 03:19:42.000000000","message":"The original one is an integer. Now it is a string. Is it ok for a type change?","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fc39ffc0d8d40275ccff23b3248496fc58e0d33","unresolved":false,"context_lines":[{"line_number":142,"context_line":"   {"},{"line_number":143,"context_line":"      \"services\": ["},{"line_number":144,"context_line":"         {"},{"line_number":145,"context_line":"            \"id\": \"8e6e4ab6-0662-4ff5-8994-dde92bedada1\","},{"line_number":146,"context_line":"            \"binary\": \"nova-scheduler\","},{"line_number":147,"context_line":"            \"disabled_reason\": \"test1\","},{"line_number":148,"context_line":"            \"host\": \"host1\","}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_4fc0607d","line":145,"range":{"start_line":145,"start_character":18,"end_line":145,"end_character":56},"in_reply_to":"1a1ced50_13079882","updated":"2017-03-23 18:12:07.000000000","message":"I think it will be OK, we\u0027ll document the type in the API reference.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f5e1be6de0804805f6b054b29e0ba5ea1a4b647b","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"**DELETE /os-services/3fe90b52-1d67-4f03-9ed3-5fbf1a6fa1e1**"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"There is no response for a successful delete operation."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The **action** APIs do not take an id to identify the service on which to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_5c0bef7c","line":171,"updated":"2017-03-22 18:48:30.000000000","message":"Do we care about saying things about status code or can we take that as writ?","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"118a3b2d9898b63f026bc5708a586154ea086abf","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"**DELETE /os-services/3fe90b52-1d67-4f03-9ed3-5fbf1a6fa1e1**"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"There is no response for a successful delete operation."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"The **action** APIs do not take an id to identify the service on which to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_6c88f871","line":171,"in_reply_to":"1a1ced50_5c0bef7c","updated":"2017-03-22 20:45:20.000000000","message":"The response code is unchanged so I omitted that detail from the spec.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"974b52681b0507d92de2dba75a58ed74fd03bbf1","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  New request::"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    PUT /os-services/{service_id}"},{"line_number":206,"context_line":"    {"},{"line_number":207,"context_line":"        \"status\": \"disabled\""},{"line_number":208,"context_line":"    }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"* PUT /os-services/disable-log-reason"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_7328cc33","line":208,"range":{"start_line":205,"start_character":4,"end_line":208,"end_character":5},"updated":"2017-03-23 03:19:42.000000000","message":"++ for this way.\n\nBut what is about the response? I think it should be full response of services object.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"d7cd74c95b3026215745f043caea2d0f7a9ce716","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  New request::"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    PUT /os-services/{service_id}"},{"line_number":206,"context_line":"    {"},{"line_number":207,"context_line":"        \"status\": \"disabled\""},{"line_number":208,"context_line":"    }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"* PUT /os-services/disable-log-reason"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_4f914052","line":208,"range":{"start_line":205,"start_character":4,"end_line":208,"end_character":5},"in_reply_to":"1a1ced50_0f5ca8ec","updated":"2017-03-23 18:18:23.000000000","message":"I think full response sounds like a good idea.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4fc39ffc0d8d40275ccff23b3248496fc58e0d33","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"  New request::"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    PUT /os-services/{service_id}"},{"line_number":206,"context_line":"    {"},{"line_number":207,"context_line":"        \"status\": \"disabled\""},{"line_number":208,"context_line":"    }"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"* PUT /os-services/disable-log-reason"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_0f5ca8ec","line":208,"range":{"start_line":205,"start_character":4,"end_line":208,"end_character":5},"in_reply_to":"1a1ced50_7328cc33","updated":"2017-03-23 18:12:07.000000000","message":"We could do that I guess. It wasn\u0027t something I was planning on changing but I can see how it might be useful. I\u0027ll ask sdague what he thinks.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"f5e1be6de0804805f6b054b29e0ba5ea1a4b647b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"    PUT /os-services/{service_id}"},{"line_number":260,"context_line":"    {"},{"line_number":261,"context_line":"        \"forced_down\": true"},{"line_number":262,"context_line":"    }"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":2,"id":"1a1ced50_7c0eeb8c","line":262,"updated":"2017-03-22 18:48:30.000000000","message":"Yeah, these are better.","commit_id":"321a32d3ffc10eefbac8c035453e99eee9fbb15e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2caa50669c4c3d70c24c64a37ca1eca12c3f8fc3","unresolved":false,"context_lines":[{"line_number":107,"context_line":"os-hypervisors"},{"line_number":108,"context_line":"~~~~~~~~~~~~~~"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"There are only ``GET`` methods in this API. They will all be changed"},{"line_number":111,"context_line":"to return the uuid value for the `id` field and take as input a uuid"},{"line_number":112,"context_line":"value for the ``{hypervisor_id}``. We cannot use the `query parameter"},{"line_number":113,"context_line":"validation`_ added in Ocata to validate that the ID passed in is a uuid since"},{"line_number":114,"context_line":"it is not be a query parameter. Therefore, we will need to validate the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"df140735_26089a26","line":111,"range":{"start_line":110,"start_character":44,"end_line":111,"end_character":43},"updated":"2017-06-07 19:23:20.000000000","message":"I missed that the 2.33 microversion adds paging over hypervisors so the links for paging also have to change to use uuids. Maybe doesn\u0027t need to be called out though.","commit_id":"2e1662278ded2f5215e6e6834ccf281cf33e0b73"}]}
