)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d6310899aad0b05a587d5c7b8c4e66194eb7bb1c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"hypervisors. As well as for neutron to get the uuid of the hypervisor of"},{"line_number":15,"context_line":"the non ironic compute host by filtering the hypervisors by the hostname"},{"line_number":16,"context_line":"where the neutron agent is running."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"blueprint: filter-hypervisors-by-service-host"},{"line_number":19,"context_line":"Change-Id: I899fe2c55dc39094265a3f150841bd4e19ca4094"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_3aecacf2","line":17,"updated":"2019-11-22 16:07:38.000000000","message":"Need the APIImpact bro!","commit_id":"3cf188826aa16f39997179b0a59a61a62ceedda8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bd24d63a49ce5a7e5d2cd1997bf7e5e455973284","unresolved":false,"context_lines":[{"line_number":14,"context_line":"hypervisors. As well as for neutron to get the uuid of the hypervisor of"},{"line_number":15,"context_line":"the non ironic compute host by filtering the hypervisors by the hostname"},{"line_number":16,"context_line":"where the neutron agent is running."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"blueprint: filter-hypervisors-by-service-host"},{"line_number":19,"context_line":"Change-Id: I899fe2c55dc39094265a3f150841bd4e19ca4094"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_5a6e4864","line":17,"in_reply_to":"3fa7e38b_3aecacf2","updated":"2019-11-22 16:11:01.000000000","message":"Done. :D","commit_id":"3cf188826aa16f39997179b0a59a61a62ceedda8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Filter hypervisors by service host"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":10,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":11,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":12,"context_line":"host of the compute service that managing them. This feature would be"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_7f15084c","line":9,"range":{"start_line":9,"start_character":51,"end_line":9,"end_character":58},"updated":"2019-11-26 21:09:55.000000000","message":"nit: \"detail\"\n\nhttps://docs.openstack.org/api-ref/compute/#list-hypervisors-details","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Filter hypervisors by service host"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":10,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":11,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":12,"context_line":"host of the compute service that managing them. This feature would be"},{"line_number":13,"context_line":"beneficial for Ironic users where a single compute host manages multiple"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_9f1a447a","line":10,"range":{"start_line":10,"start_character":58,"end_line":10,"end_character":61},"updated":"2019-11-26 21:09:55.000000000","message":"nix","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":10,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":11,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":12,"context_line":"host of the compute service that managing them. This feature would be"},{"line_number":13,"context_line":"beneficial for Ironic users where a single compute host manages multiple"},{"line_number":14,"context_line":"hypervisors. As well as for neutron to get the uuid of the hypervisor of"},{"line_number":15,"context_line":"the non ironic compute host by filtering the hypervisors by the hostname"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3fa7e38b_3f0f903a","line":12,"range":{"start_line":12,"start_character":28,"end_line":12,"end_character":32},"updated":"2019-11-26 21:09:55.000000000","message":"that is","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"}],"specs/ussuri/approved/filter-hypervisors-by-service-host.rst":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dde1f9a1e50f00588e8e2ce2f4f766fe6a3e2738","unresolved":false,"context_lines":[{"line_number":58,"context_line":"In a new microversion add the new optional `service_host` query parameter to"},{"line_number":59,"context_line":"`GET /os-hypervisors` and `GET /os-hypervisors/details` APIs. If it is"},{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_5b3640e9","line":61,"range":{"start_line":61,"start_character":62,"end_line":61,"end_character":76},"updated":"2019-11-25 05:28:19.000000000","message":"We can\u0027t specify mulitple times for this parameter, right?\n\nI guess we don\u0027t have usecase for here.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d92ee273a05e772f1abb5069af0602f481f1227a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"In a new microversion add the new optional `service_host` query parameter to"},{"line_number":59,"context_line":"`GET /os-hypervisors` and `GET /os-hypervisors/details` APIs. If it is"},{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_a74ce43f","line":61,"range":{"start_line":61,"start_character":62,"end_line":61,"end_character":76},"in_reply_to":"3fa7e38b_5b3640e9","updated":"2019-11-26 10:13:17.000000000","message":"Yeh, it is not a pattern match but a single hostname so repeating it does not make any sense. I\u0027ve added a clarification sentence.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1ea2de457b7771ca2c2b8357b4a5a0d9f828c339","unresolved":false,"context_lines":[{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_fa305409","line":64,"range":{"start_line":63,"start_character":1,"end_line":64,"end_character":76},"updated":"2019-11-22 16:41:43.000000000","message":"why? we shoudl be able to support that.\n\nalso a 404 would be incorect here. its not that the hyperviour was not found it was a bad request so it shoudl be a 400 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/400","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d92ee273a05e772f1abb5069af0602f481f1227a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_07b13802","line":64,"range":{"start_line":63,"start_character":1,"end_line":64,"end_character":76},"in_reply_to":"3fa7e38b_a320789b","updated":"2019-11-26 10:13:17.000000000","message":"Supporting sevice_host\u003dX\u0026hyperisor_hostname_patter\u003dA together is a feature creep to me. I don\u0027t need this to resolve our immediate problems. You also said that there is an alternative hyperisor_hostname_patter\u003dA query that can be used already today.\n\nI\u0027m OK to change the response to 400 if the two filter used together.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8e911c913b14fd2031ef72cebca9ab26a671bf9","unresolved":false,"context_lines":[{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_a320789b","line":64,"range":{"start_line":63,"start_character":1,"end_line":64,"end_character":76},"in_reply_to":"3fa7e38b_fa305409","updated":"2019-11-22 17:27:25.000000000","message":"Agree with Sean.\n\nLet\u0027s say I\u0027ve got an ironic node A that is rebalanced between compute services X and Y. I want to see if A is on X or Y and for some reason rather than just use hypervisor_hostname_pattern to filter the node and get the service.host from it, I filter on service_host\u003dX\u0026hypervisor_hostname_pattern\u003dA.\n\nIf there is no match then we return an empty list just like we would if we filtered on hypervisor_hostname_pattern for a node that doesn\u0027t exist.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1ea2de457b7771ca2c2b8357b4a5a0d9f828c339","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_fa193487","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"updated":"2019-11-22 16:41:43.000000000","message":"yep makes sense","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d92ee273a05e772f1abb5069af0602f481f1227a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_67a10ca9","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"3fa7e38b_3b126459","updated":"2019-11-26 10:13:17.000000000","message":"OK. So if the service is not found then the result is an empty list. If the service is found but it does not handle any nodes the the result will also be empty list.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dde1f9a1e50f00588e8e2ce2f4f766fe6a3e2738","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_3b126459","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"3fa7e38b_66a92edb","updated":"2019-11-25 05:28:19.000000000","message":"yea, it should be an empty list","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d83a836e94b5cf3e22d7a07d76e288a31a2d0f97","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_66a92edb","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"3fa7e38b_83b1bc03","updated":"2019-11-22 18:11:09.000000000","message":"so if did a show with the id/uuid and it did not exist we woudl expect a 404\n\nbut on the list endpoint with the filter applied i woudl expect an empty list.but im kind of ok with it because its consistnet with the exsiting behavior for hypervisor_hostname_pattern.\n\nbut if we were to expand the scope of this spec we could modify the behavior of the hypervisor_hostname_pattern filter to not return a 404 and return an empty list in which case i think we shoudl do the same here.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"21e1d8b008f527c291b411de2e50f738acdecd5d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_83b1bc03","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"3fa7e38b_e378b08f","updated":"2019-11-22 17:41:00.000000000","message":"yeah, the URL exists, so 404 is not right\n\nagree it is confusing, but it\u0027s that way to try and maintain the semantics associated with URLs, not things modifying the request.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8e911c913b14fd2031ef72cebca9ab26a671bf9","unresolved":false,"context_lines":[{"line_number":63,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":64,"context_line":"`service_host` query parameter is not supported and will result in HTTP 404."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_e378b08f","line":67,"range":{"start_line":66,"start_character":0,"end_line":67,"end_character":66},"in_reply_to":"3fa7e38b_fa193487","updated":"2019-11-22 17:27:25.000000000","message":"I\u0027m not sure 404 is correct here, especially for a filter parameter.\n\nMy understanding from the API SIG guidelines is that:\n\n1. if the resource in the path does not exist \u003d 404\n2. if a resource in the request body does not exist \u003d 400\n\nIf it\u0027s something you\u0027re filtering on though and there is no match, it should just be an empty response.\n\nUnfortunately edleafe is not around anymore and I\u0027m not sure cdent would be either to answer this, but you could ask in the #openstack-sdks channel.\n\n(later)\n\nI guess gibi is trying to be consistent with this behavior:\n\nhttps://github.com/openstack/nova/blob/e3a55493ba0cb405f14b9090282d93eb230c5715/nova/api/openstack/compute/hypervisors.py#L111","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1ea2de457b7771ca2c2b8357b4a5a0d9f828c339","unresolved":false,"context_lines":[{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":71,"context_line":"hypervisors then HTTP 404 will be returned to be aligned with behavior of"},{"line_number":72,"context_line":"`hypervisor_hostname_pattern` query parameter."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Security impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_603b56c7","line":72,"range":{"start_line":69,"start_character":0,"end_line":72,"end_character":46},"updated":"2019-11-22 16:41:43.000000000","message":"i would not have exepcted a 404 here i would have expected either an empty respoce with 200 or a partial respoce where we list the compute node but the hypervior_hostnaem would be empty.\n\ni think this would only happen if you  had and ironic compute service but no baremetal node listed in ironic or mapped to this serivce right?\n\ni think we should be able to distinguas beteen this case and the one above.\n\nif we did a hypervisor list it would presumable be present there in which case if we do a list or show with the service_host query arg we should return the same content as the list would have for that compute node.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d92ee273a05e772f1abb5069af0602f481f1227a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":71,"context_line":"hypervisors then HTTP 404 will be returned to be aligned with behavior of"},{"line_number":72,"context_line":"`hypervisor_hostname_pattern` query parameter."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Security impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_077ff817","line":72,"range":{"start_line":69,"start_character":0,"end_line":72,"end_character":46},"in_reply_to":"3fa7e38b_1b2c4891","updated":"2019-11-26 10:13:17.000000000","message":"OK, I will fix the hypervisor_hostname_patter handling. So if no node is found with the provided pattern then the API will return an empty list.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b8e911c913b14fd2031ef72cebca9ab26a671bf9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":71,"context_line":"hypervisors then HTTP 404 will be returned to be aligned with behavior of"},{"line_number":72,"context_line":"`hypervisor_hostname_pattern` query parameter."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Security impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_e39d10bb","line":72,"range":{"start_line":69,"start_character":0,"end_line":72,"end_character":46},"in_reply_to":"3fa7e38b_603b56c7","updated":"2019-11-22 17:27:25.000000000","message":"Ugh I didn\u0027t know we did this:\n\nhttps://github.com/openstack/nova/blob/e3a55493ba0cb405f14b9090282d93eb230c5715/nova/api/openstack/compute/hypervisors.py#L111\n\nSo gibi is trying to be consistent with that filtering behavior.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dde1f9a1e50f00588e8e2ce2f4f766fe6a3e2738","unresolved":false,"context_lines":[{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":71,"context_line":"hypervisors then HTTP 404 will be returned to be aligned with behavior of"},{"line_number":72,"context_line":"`hypervisor_hostname_pattern` query parameter."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Security impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_1b2c4891","line":72,"range":{"start_line":69,"start_character":0,"end_line":72,"end_character":46},"in_reply_to":"3fa7e38b_c6d10259","updated":"2019-11-25 05:28:19.000000000","message":"we can fix them in one microversion, since it is small.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d83a836e94b5cf3e22d7a07d76e288a31a2d0f97","unresolved":false,"context_lines":[{"line_number":66,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":67,"context_line":"`service_host` parameter of the request then HTTP 404 is returned."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":70,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":71,"context_line":"hypervisors then HTTP 404 will be returned to be aligned with behavior of"},{"line_number":72,"context_line":"`hypervisor_hostname_pattern` query parameter."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"Security impact"},{"line_number":75,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3fa7e38b_c6d10259","line":72,"range":{"start_line":69,"start_character":0,"end_line":72,"end_character":46},"in_reply_to":"3fa7e38b_e39d10bb","updated":"2019-11-22 18:11:09.000000000","message":"ya so i think ideally we would keep the behavior consitent and not return a 404 for either case but that would abe a second api change and expand the scope.\n\nas i said above i think being consitened between the too is imporant but a 404 feels wrong.","commit_id":"0a3ae628d1e5ecca8d205d7edb7c4e17816b03dc"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/filter-hypervisors-by-service-host"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":14,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":15,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":16,"context_line":"host of the compute service that managing them. This feature would be"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_5f14cc4d","line":13,"range":{"start_line":13,"start_character":51,"end_line":13,"end_character":58},"updated":"2019-11-26 21:09:55.000000000","message":"detail","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/filter-hypervisors-by-service-host"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":14,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":15,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":16,"context_line":"host of the compute service that managing them. This feature would be"},{"line_number":17,"context_line":"beneficial for Ironic users where a single compute host manages multiple"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_bf02a00b","line":14,"range":{"start_line":14,"start_character":58,"end_line":14,"end_character":61},"updated":"2019-11-26 21:09:55.000000000","message":"nix","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":13,"context_line":"The `GET /os-hypervisors` and `GET /os-hypervisors/details` API can list"},{"line_number":14,"context_line":"hypervisors and the response contains the service host of the each"},{"line_number":15,"context_line":"hypervisor. But there is no way to filter the returned hypervisors by the"},{"line_number":16,"context_line":"host of the compute service that managing them. This feature would be"},{"line_number":17,"context_line":"beneficial for Ironic users where a single compute host manages multiple"},{"line_number":18,"context_line":"hypervisors. As well as for neutron to get the uuid of the hypervisor of"},{"line_number":19,"context_line":"the non ironic compute host by filtering the hypervisors by the hostname"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_dfff5c00","line":16,"range":{"start_line":16,"start_character":28,"end_line":16,"end_character":32},"updated":"2019-11-26 21:09:55.000000000","message":"that is","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"There is no way to filter the result of `GET /os-hypervisors` and"},{"line_number":26,"context_line":"`GET /os-hypervisors/details` API by the hostname of the compute service"},{"line_number":27,"context_line":"managing the hypervisor."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_3a047e14","line":26,"range":{"start_line":26,"start_character":30,"end_line":26,"end_character":33},"updated":"2019-11-26 21:09:55.000000000","message":"APIs","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"There is no way to filter the result of `GET /os-hypervisors` and"},{"line_number":26,"context_line":"`GET /os-hypervisors/details` API by the hostname of the compute service"},{"line_number":27,"context_line":"managing the hypervisor."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Use Cases"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_9affb2ff","line":26,"range":{"start_line":26,"start_character":21,"end_line":26,"end_character":28},"updated":"2019-11-26 21:09:55.000000000","message":"detail","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"There is no way to filter the result of `GET /os-hypervisors` and"},{"line_number":26,"context_line":"`GET /os-hypervisors/details` API by the hostname of the compute service"},{"line_number":27,"context_line":"managing the hypervisor."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Use Cases"},{"line_number":30,"context_line":"---------"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_7a7196ab","line":28,"updated":"2019-11-26 21:09:55.000000000","message":"The ironic case is pretty clear if you know how things are modeled in nova:\n\n- nova-compute service host can manage 0 or more ironic nodes which are modeled as compute nodes in the nova DB and as \"hypervisors\" in the os-hypervisors API\n- so compute service host is 1:M with hypervisors (nodes)\n\nFor a driver like libvirt though they are 1:1 (host:node).\n\nThe issue for neutron/cyborg is they need to report inventory to the compute node resource provider tree for the libvirt driver case and if the [DEFAULT]/host config in nova does not match the hypervisor_hostname (nodename) reported by the libvirt driver than neutron/cyborg fail to find the resource provider by hypervisor (where the hypervisor resource and provider in placement use the same uuid), so external clients fail to report their inventory correctly.","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Support `service_host` filter of the `GET /os-hypervisors` and"},{"line_number":43,"context_line":"`GET /os-hypervisors/details` APIs."},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"Alternatives"},{"line_number":46,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_5a705aa5","line":43,"range":{"start_line":43,"start_character":21,"end_line":43,"end_character":28},"updated":"2019-11-26 21:09:55.000000000","message":"detail","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Alternatives"},{"line_number":46,"context_line":"------------"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Filter on the client side."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Data model impact"},{"line_number":51,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_9a281286","line":48,"updated":"2019-11-26 21:09:55.000000000","message":"I always like to have alternatives document why they are not preferred to the proposed solution. In this case it would be an obvious performance issue for a large deployment like CERN so it\u0027s faster to filter server-side.","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Data model impact"},{"line_number":51,"context_line":"-----------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"None"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"REST API impact"},{"line_number":56,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_5a5a9af2","line":53,"updated":"2019-11-26 21:09:55.000000000","message":"So if only service_host is specified we can just use ComputeNodeList.get_all_by_host - that\u0027s easy.\n\nIf we allow filtering on hypervisor_hostname_pattern *and* service_host, then it\u0027s less easy - we\u0027d have to write some new DB API query methods for that, e.g.:\n\nselect * from compute_nodes where host \u003d \"$service_host\" and hypervisor_hostname like \"%%$hypervisor_hostname_pattern%%\";\n\nIt\u0027s not a model impact, but it\u0027d be a new query method on the ComputeNodeList object unless we did the fuzzy match first and then in the API filtered on the service_host in code, though that would be less efficient than doing it in the DB.","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"---------------"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"In a new microversion add the new optional `service_host` query parameter to"},{"line_number":59,"context_line":"`GET /os-hypervisors` and `GET /os-hypervisors/details` APIs. If it is"},{"line_number":60,"context_line":"specified in the request then only those hypervisors are returned where the"},{"line_number":61,"context_line":"compute service hostname managing the hyperisor equals to the `service_host`."},{"line_number":62,"context_line":"The `service_host` should contain a full hostname so it does not make sense to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_da5bea1f","line":59,"range":{"start_line":59,"start_character":47,"end_line":59,"end_character":54},"updated":"2019-11-26 21:09:55.000000000","message":"detail","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"The `service_host` should contain a full hostname so it does not make sense to"},{"line_number":63,"context_line":"allow it to be repeated."},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":66,"context_line":"`service_host` query parameter is not supported and will result in HTTP 400."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"If compute service does not exists with the hostname specified in the"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_1aa7420c","line":65,"updated":"2019-11-26 21:09:55.000000000","message":"Why? I don\u0027t understand why we can\u0027t support both. It might not make sense to specify both, but why disallow it? If there is a good reason it should be documented in here I think.","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"Specifying the existing `hypervisor_hostname_pattern` together with the new"},{"line_number":66,"context_line":"`service_host` query parameter is not supported and will result in HTTP 400."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"If compute service does not exists with the hostname specified in the"},{"line_number":69,"context_line":"`service_host` parameter of the request then an empty list is returned."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"If a compute service exists with the hostname specified in the `service_host`"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_bab38e4e","line":68,"range":{"start_line":68,"start_character":28,"end_line":68,"end_character":34},"updated":"2019-11-26 21:09:55.000000000","message":"exist","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"If a compute service exists with the hostname specified in the `service_host`"},{"line_number":72,"context_line":"parameter of the request but that compute service does not manage any"},{"line_number":73,"context_line":"hypervisors then an empty list  will be returned."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Also with this new microversion the `hypervisor_hostname_pattern` filter"},{"line_number":76,"context_line":"handling will be changed to align it with the above behaviors. So if there is"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_5a7e1a6b","line":73,"range":{"start_line":73,"start_character":30,"end_line":73,"end_character":32},"updated":"2019-11-26 21:09:55.000000000","message":"nix one space","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"614b9ff4d168283e7c518ecbaaa87c1530d19fd8","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Also with this new microversion the `hypervisor_hostname_pattern` filter"},{"line_number":76,"context_line":"handling will be changed to align it with the above behaviors. So if there is"},{"line_number":77,"context_line":"no node fund with the provided pattern then instead of returning HTTP 404 the"},{"line_number":78,"context_line":"API will return an empty list."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Security impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3fa7e38b_1a90a296","line":77,"range":{"start_line":77,"start_character":8,"end_line":77,"end_character":12},"updated":"2019-11-26 21:09:55.000000000","message":"found","commit_id":"b75881b385d5b43cf92d941e0a53e8ee0a7a6f0a"}]}
