)]}'
{"specs/victoria/approved/routed-networks-scheduling.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operator, more particularly when you move"},{"line_number":17,"context_line":"an instance, which leads to inconsistencies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_ae9c080e","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":45},"updated":"2020-06-05 11:48:22.000000000","message":"nit: operations","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operator, more particularly when you move"},{"line_number":17,"context_line":"an instance, which leads to inconsistencies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_7b327ea9","line":16,"range":{"start_line":16,"start_character":37,"end_line":16,"end_character":45},"in_reply_to":"ff570b3c_ae9c080e","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_ae43686b","line":24,"updated":"2020-06-05 11:48:22.000000000","message":"It is only possible if the ip_allocation of the port is set to \u0027deferred\u0027. And also this case makes the assumption that a neutron network has segment on _every_ compute host in the system so the scheduler free to choose any host.","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_9b2dd248","line":24,"in_reply_to":"ff570b3c_ae43686b","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Use Cases"},{"line_number":31,"context_line":"---------"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_0e79b4c3","line":29,"updated":"2020-06-05 11:48:22.000000000","message":"Migration is the most prominent case I agree. However there are multiple other cases for simple boot as well:\n\n* there could be compute hosts without network segment from a given neutron network the port uses. Then the scheduler cannot select the hosts without segment\n* there could be a port with ip_allocation\u003dimmediate, then neutron assigns a segment at port create and therefore the scheduler can only select a host that is in the selected segment.\n* there could be boot with network. Then nova creates the port after the scheduling. In this case nova needs to make sure it creates the  port with ip_allocation\u003ddeferred settings.","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Use Cases"},{"line_number":31,"context_line":"---------"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_7bbc3ebb","line":29,"in_reply_to":"ff570b3c_0e79b4c3","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":40,"context_line":"as Placement Resource Providers and Placement aggregates are created per"},{"line_number":41,"context_line":"segment."},{"line_number":42,"context_line":"Since Placement resource provider aggregates are mirrored as Nova aggregates,"},{"line_number":43,"context_line":"operators can add the related hosts of a specific network segment to the"},{"line_number":44,"context_line":"above nova aggregate."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":47,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_e479ff2e","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":21},"updated":"2020-06-05 11:48:22.000000000","message":"I think neutron creates the host aggregate in nova and also neutron adds compute hosts into the host aggregate based on how segments are mapped to hosts. Then nova mirrors the host aggregate to placement as placement aggregate.\n\n[1] https://github.com/openstack/neutron/blob/34cb6461be809e6ace42a57f2d71b5513ebcdf8d/neutron/services/segments/plugin.py#L281","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":40,"context_line":"as Placement Resource Providers and Placement aggregates are created per"},{"line_number":41,"context_line":"segment."},{"line_number":42,"context_line":"Since Placement resource provider aggregates are mirrored as Nova aggregates,"},{"line_number":43,"context_line":"operators can add the related hosts of a specific network segment to the"},{"line_number":44,"context_line":"above nova aggregate."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":47,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_6f83c7cd","line":44,"range":{"start_line":42,"start_character":0,"end_line":44,"end_character":21},"in_reply_to":"ff570b3c_e479ff2e","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":60,"context_line":"filter. This said, given we limit the number of allocation candidates returned"},{"line_number":61,"context_line":"by Placement, we could miss some good resource providers so the filter couldn\u0027t"},{"line_number":62,"context_line":"work."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Data model impact"},{"line_number":65,"context_line":"-----------------"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_bf5434ff","line":63,"updated":"2020-06-05 11:48:22.000000000","message":"There is an alternative where it is not nova who calls neutron to get the segments and then map them to aggregates but neutron provides the required aggregate relationship via port.resource_request attribute. This alternative has a neutron impact but in the other hand on the nova side it could reuse the existing port.resource_request handling added during the min bandwidth support feature.","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":60,"context_line":"filter. This said, given we limit the number of allocation candidates returned"},{"line_number":61,"context_line":"by Placement, we could miss some good resource providers so the filter couldn\u0027t"},{"line_number":62,"context_line":"work."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"Data model impact"},{"line_number":65,"context_line":"-----------------"},{"line_number":66,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_8f529b66","line":63,"in_reply_to":"ff570b3c_bf5434ff","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4aca18e3bcf3ce28ca359d0e656d0eefd759ce62","unresolved":false,"context_lines":[{"line_number":64,"context_line":"Data model impact"},{"line_number":65,"context_line":"-----------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"None."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"REST API impact"},{"line_number":70,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"ff570b3c_04619305","line":67,"updated":"2020-06-05 11:48:22.000000000","message":"There is a small ovo impact in the WIP patch [1] to allow collecting and communicating the requested aggregates via the request_spec.request_level_params\n\n[1] https://review.opendev.org/#/c/656885/7/nova/objects/request_spec.py@1233","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":64,"context_line":"Data model impact"},{"line_number":65,"context_line":"-----------------"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"None."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"REST API impact"},{"line_number":70,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"bf51134e_da63afdb","line":67,"in_reply_to":"ff570b3c_04619305","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"e99642aa1fe68ce59071932e2b030db2f57053ab"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"57469d2a307a6786a8f3cee016249a8cdd384871","unresolved":false,"context_lines":[{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  ..note::"},{"line_number":32,"context_line":"  The current only way for using routed networks in Nova is by creating a"},{"line_number":33,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"},{"line_number":34,"context_line":"  all compute services are every in at least one network segment."}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_555ad0f2","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":2},"updated":"2020-06-17 08:42:01.000000000","message":"Remove this indent and add a blank line after this line.","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52b687e681e47319e666beb5a8c551a3095069fb","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"  ..note::"},{"line_number":32,"context_line":"  The current only way for using routed networks in Nova is by creating a"},{"line_number":33,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"},{"line_number":34,"context_line":"  all compute services are every in at least one network segment."},{"line_number":35,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_65d551e5","line":32,"range":{"start_line":32,"start_character":2,"end_line":32,"end_character":22},"updated":"2020-06-22 09:38:26.000000000","message":"Currently the only way for...","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52b687e681e47319e666beb5a8c551a3095069fb","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  ..note::"},{"line_number":32,"context_line":"  The current only way for using routed networks in Nova is by creating a"},{"line_number":33,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"},{"line_number":34,"context_line":"  all compute services are every in at least one network segment."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Use Cases"},{"line_number":37,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_a531295d","line":34,"range":{"start_line":34,"start_character":2,"end_line":34,"end_character":65},"updated":"2020-06-22 09:38:26.000000000","message":"all compute services are assigned to at least one network segment.","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52b687e681e47319e666beb5a8c551a3095069fb","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":55,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":56,"context_line":"aggregate per each segment and will add compute services that are mapped with"},{"line_number":57,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":58,"context_line":"those aggregates into Placement aggregates."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_e585e1d0","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":13},"updated":"2020-06-22 09:38:26.000000000","message":"for","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"52b687e681e47319e666beb5a8c551a3095069fb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Another alternative would be to have Neutron passing directly the needed"},{"line_number":79,"context_line":"aggregate to Nova instead of Nova asking Neutron for it, but that would mean"},{"line_number":80,"context_line":"that we should modify Neutron to return the Placement needed query in the"},{"line_number":81,"context_line":"``port.resource_request`` attribute."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Data model impact"},{"line_number":84,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_854d05c6","line":81,"updated":"2020-06-22 09:38:26.000000000","message":"For the long run I think this would be the nicer solution as it needs less neutron specific code in nova to discover the neutron segment mapping.","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"3b61714e0e93f93445679630a387d09751881ed1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"Another alternative would be to have Neutron passing directly the needed"},{"line_number":79,"context_line":"aggregate to Nova instead of Nova asking Neutron for it, but that would mean"},{"line_number":80,"context_line":"that we should modify Neutron to return the Placement needed query in the"},{"line_number":81,"context_line":"``port.resource_request`` attribute."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"Data model impact"},{"line_number":84,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":2,"id":"bf51134e_0338cd3a","line":81,"in_reply_to":"bf51134e_854d05c6","updated":"2020-06-22 11:43:52.000000000","message":"+1","commit_id":"74c1c1e772bdb639059e72bb614e40027e35d0b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/routed-networks-scheduling"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operation, more particularly when you move"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_0d04d07d","line":13,"updated":"2020-07-21 15:20:48.000000000","message":"nit","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/routed-networks-scheduling"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operation, more particularly when you move"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_f0396fa3","line":13,"in_reply_to":"bf51134e_0d04d07d","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operation, more particularly when you move"},{"line_number":17,"context_line":"an instance, which leads to inconsistencies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_ed2d1cfe","line":16,"range":{"start_line":16,"start_character":48,"end_line":16,"end_character":74},"updated":"2020-07-21 15:20:48.000000000","message":"nit: including those where ?","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Neutron provides network segments support thanks to Routed Networks where you"},{"line_number":15,"context_line":"can create a port allocated to a specific segment. Unfortunately, Nova doesn\u0027t"},{"line_number":16,"context_line":"verify the segment at every instance operation, more particularly when you move"},{"line_number":17,"context_line":"an instance, which leads to inconsistencies."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_103503a9","line":16,"range":{"start_line":16,"start_character":48,"end_line":16,"end_character":74},"in_reply_to":"bf51134e_ed2d1cfe","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_2dbb9472","line":26,"range":{"start_line":26,"start_character":35,"end_line":26,"end_character":42},"updated":"2020-07-21 15:20:48.000000000","message":". This","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_b0ba5707","line":26,"range":{"start_line":26,"start_character":35,"end_line":26,"end_character":42},"in_reply_to":"bf51134e_2dbb9472","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_907bd327","line":28,"range":{"start_line":27,"start_character":23,"end_line":28,"end_character":58},"updated":"2020-07-21 15:55:21.000000000","message":"This makes it sound like Nova allocates the IP at boot time, which isn\u0027t correct, right? You boot with a Neutron port, and the problem is that Nova currently has no way of knowing whether a compute host is connected to the network segment that the port is in. Right?","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":24,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":25,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":26,"context_line":"lead to a wrong scheduling decision, which is problematic when a move operation"},{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_289892be","line":28,"range":{"start_line":27,"start_character":23,"end_line":28,"end_character":58},"in_reply_to":"bf51134e_907bd327","updated":"2020-07-29 16:11:46.000000000","message":"This is a late binding for the IP address, but this is done at boot time. It\u0027s just the fact that we don\u0027t verify anything about networks when we schedule so we just ask for an IP address when the compute is already addressed for creating a new instance.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_ad4324af","line":30,"updated":"2020-07-21 15:20:48.000000000","message":"nit","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":27,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_d0bd4b03","line":30,"in_reply_to":"bf51134e_ad4324af","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"},{"line_number":34,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_4d6b68f0","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":8},"updated":"2020-07-21 15:20:48.000000000","message":"Can you move this main text, and change the below to say:\n\n  As a result of this gap, the only way to use routed networks\n  in nova currently is by creating...","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"},{"line_number":34,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_b0eb77da","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":8},"in_reply_to":"bf51134e_4d6b68f0","updated":"2020-07-21 15:55:21.000000000","message":"And the note renders weird, anyways. The \u0027..note::\u0027 appears in the text, and the note text itself is a black rectangle with white monospace text.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"},{"line_number":34,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_70c0bf7d","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":8},"in_reply_to":"bf51134e_4d6b68f0","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":28,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"..note::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"  Currently the only way for using routed networks in Nova is by creating a"},{"line_number":34,"context_line":"  port having the ``ip_allocation`` value be ``deferred`` and making sure that"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_08930ea5","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":8},"in_reply_to":"bf51134e_b0eb77da","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"As an operator, I\u0027d like to make sure that instances IP addresses can be"},{"line_number":41,"context_line":"correctly spread between the network segments I provided."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As an operator, I don\u0027t want to see instances going to compute services that"},{"line_number":44,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_70c6ff4b","line":41,"range":{"start_line":40,"start_character":43,"end_line":41,"end_character":57},"updated":"2020-07-21 15:55:21.000000000","message":"I don\u0027t understand this sentence. Spreading IP addresses makes me think of load balancing, which has nothing to do with this.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":37,"context_line":"Use Cases"},{"line_number":38,"context_line":"---------"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"As an operator, I\u0027d like to make sure that instances IP addresses can be"},{"line_number":41,"context_line":"correctly spread between the network segments I provided."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"As an operator, I don\u0027t want to see instances going to compute services that"},{"line_number":44,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_a83782b0","line":41,"range":{"start_line":40,"start_character":43,"end_line":41,"end_character":57},"in_reply_to":"bf51134e_70c6ff4b","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"},{"line_number":45,"context_line":"network."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"As a user, I\u0027d like to pass a network or a port argument when creating an"},{"line_number":48,"context_line":"instance without trying to know which port I should use or not being asked to"},{"line_number":49,"context_line":"create a port with a ``ip_allocation\u003ddeferred`` value."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_b0eed7b1","line":49,"range":{"start_line":47,"start_character":11,"end_line":49,"end_character":54},"updated":"2020-07-21 15:55:21.000000000","message":"The \u0027or not\u0027 in here confused me. How about:\n\nAs a user, I\u0027d like Nova to place my instance on the correct host according to the port or network I\u0027ve requested for my instance, without having to use ip_alloction\u003ddeferred.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":44,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"},{"line_number":45,"context_line":"network."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"As a user, I\u0027d like to pass a network or a port argument when creating an"},{"line_number":48,"context_line":"instance without trying to know which port I should use or not being asked to"},{"line_number":49,"context_line":"create a port with a ``ip_allocation\u003ddeferred`` value."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_8808bed9","line":49,"range":{"start_line":47,"start_character":11,"end_line":49,"end_character":54},"in_reply_to":"bf51134e_b0eed7b1","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_ad1cc4c1","line":56,"range":{"start_line":56,"start_character":13,"end_line":56,"end_character":31},"updated":"2020-07-21 15:20:48.000000000","message":"link to the neutron docs on this, if any exist, would be helpful for future readers","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":53,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_f007afc8","line":56,"range":{"start_line":56,"start_character":13,"end_line":56,"end_character":31},"in_reply_to":"bf51134e_ad1cc4c1","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_cd749801","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":9},"updated":"2020-07-21 15:20:48.000000000","message":"Placement aggregate? Nova host aggregate? I suspect the latter since you mention the former below. Would be good to clarify and expand upon this","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_e80fbade","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":9},"in_reply_to":"bf51134e_305f6773","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_901f5308","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":9},"in_reply_to":"bf51134e_cd749801","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"Once you configure routed networks in Neutron, network segments are represented"},{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_305f6773","line":57,"range":{"start_line":57,"start_character":0,"end_line":57,"end_character":9},"in_reply_to":"bf51134e_cd749801","updated":"2020-07-21 15:55:21.000000000","message":"Yeah, this is confusing. You\u0027re saying that network segments are resource providers, but then immediately after saying that Neutron will create aggregates for each segment. Why have aggregates if we already have RPs?","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_8d53c06c","line":59,"updated":"2020-07-21 15:20:48.000000000","message":"So we\u0027ll be automating the creation of host aggregates? Is this something we do already for anything else? If so, maybe point me at that but if not, I\u0027ve some questions. IIRC, a host can belong to multiple host aggregates (but only one availability zone) so that shouldn\u0027t be an issue. However, how would one distinguish between these \"generated\" host aggregates and user-defined ones? Do we want to expose them via the API or hide them? Finally, can an operator unset the host aggregate information or will it be automatically reset?","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dabe307651e9a109193f55f8b38ed7576eab0251","unresolved":false,"context_lines":[{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_a401f008","line":59,"in_reply_to":"bf51134e_10ba23e0","updated":"2020-08-06 14:28:54.000000000","message":"Neutron already automated the host aggregate creation as described here.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":56,"context_line":"as Placement Resource Providers. Neutron will then ask Nova to create an"},{"line_number":57,"context_line":"aggregate for each segment and will add compute services that are mapped with"},{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_10ba23e0","line":59,"in_reply_to":"bf51134e_8d53c06c","updated":"2020-07-21 15:49:36.000000000","message":"No, since host aggregates are hidden from end users, only operators looking at the aggregate API would see them.\n\nAs hosts can be in more than one aggregate, it\u0027s also OK.\n\nOf course, operators could modify the host aggregates but since the names are saying \"Neutron segment id\", then I\u0027m pretty sure the operator wouldn\u0027t do it.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"},{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_cd4db8c5","line":62,"range":{"start_line":62,"start_character":29,"end_line":62,"end_character":31},"updated":"2020-07-21 15:20:48.000000000","message":"i.e.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"},{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_70ca7f6e","line":62,"range":{"start_line":62,"start_character":29,"end_line":62,"end_character":31},"in_reply_to":"bf51134e_cd4db8c5","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"},{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_b0f89749","line":64,"range":{"start_line":61,"start_character":0,"end_line":64,"end_character":27},"updated":"2020-07-21 15:55:21.000000000","message":"I\u0027m not sure if this is already implied in your proposed change, but we need to remember to support multiple ports/networks. IOW, ask placement for compute hosts that are connected to all of the segments from the requested ports/networks.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":58,"context_line":"respective segments into the related aggregates. Eventually, Nova will mirror"},{"line_number":59,"context_line":"those aggregates into Placement aggregates."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":62,"context_line":"only get resource providers (ie. compute nodes) that are in the aggregate"},{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_28f9b2c7","line":64,"range":{"start_line":61,"start_character":0,"end_line":64,"end_character":27},"in_reply_to":"bf51134e_b0f89749","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"},{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_0dee908a","line":69,"updated":"2020-07-21 15:20:48.000000000","message":"This is most likely because I\u0027m not familiar with this terminology, but after reading this I\u0027m still not sure what the solution would entail. Any chance of a diagram or pseudo code? /o\\","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"},{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_d07eebad","line":69,"range":{"start_line":66,"start_character":0,"end_line":69,"end_character":18},"updated":"2020-07-21 15:55:21.000000000","message":"Why would we need a config option? The current behaviour is mostly broken, right? So why make the solution opt-in? Also, let\u0027s not handwave the name of the config option away. I realize we can bikeshed in the implementation, but config options are effectively part of our API (kinda sorta - work with me here), we have to get it right the first time.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"},{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_70ac3f35","line":69,"in_reply_to":"bf51134e_0dee908a","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":63,"context_line":"related to the segments that are in the network passed by the user (or related"},{"line_number":64,"context_line":"to the port that is asked)."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"As Nova needs to find which segments are related and then which aggregates,"},{"line_number":67,"context_line":"we could just provide a new pre-filter that would look at it if some"},{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_a8d30238","line":69,"range":{"start_line":66,"start_character":0,"end_line":69,"end_character":18},"in_reply_to":"bf51134e_d07eebad","updated":"2020-07-29 16:11:46.000000000","message":"We need operators to opt-in as routed-networks is an optional feature that can be deployed... or not. In the latter case, we don\u0027t want to make all this below pseudo-code for nothing.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"  As said below in the `Alternatives`_ section, we could have Neutron passing"},{"line_number":74,"context_line":"  directly the aggregates, so this pre-filter could be deprecated once we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_905d934a","line":71,"updated":"2020-07-21 15:55:21.000000000","message":"Ditto - re weird rendering","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":68,"context_line":"configuration option (say ``query_placement_for_routed_network_aggregates``)"},{"line_number":69,"context_line":"would be ``True``."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"..note::"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"  As said below in the `Alternatives`_ section, we could have Neutron passing"},{"line_number":74,"context_line":"  directly the aggregates, so this pre-filter could be deprecated once we"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_a8bca2dc","line":71,"in_reply_to":"bf51134e_905d934a","updated":"2020-07-29 16:11:46.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e9a16192ba0b1726cb5efd9d99c0eaeed416c95d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Data model impact"},{"line_number":91,"context_line":"-----------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"We need to augment the ``RequestSpec`` object to be able to provide in its"},{"line_number":94,"context_line":"nested ``RequestLevelParams`` object attribute the specific aggregate."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_102fc3a7","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":70},"updated":"2020-07-21 15:55:21.000000000","message":"Do we? Is the port/network in the request not enough?","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"bdbd6bc034cc647ce6d0ff377fa61f671863b425","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Data model impact"},{"line_number":91,"context_line":"-----------------"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"We need to augment the ``RequestSpec`` object to be able to provide in its"},{"line_number":94,"context_line":"nested ``RequestLevelParams`` object attribute the specific aggregate."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"REST API impact"},{"line_number":97,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f560f44_08902e4e","line":94,"range":{"start_line":93,"start_character":0,"end_line":94,"end_character":70},"in_reply_to":"bf51134e_102fc3a7","updated":"2020-07-29 16:11:46.000000000","message":"That\u0027s a potential implementation detail that will be seen later. I\u0027ll use the conditional.","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a4bad1fa4821a4afb839c9ae344c0f7f8dbf8c67","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  None"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Feature Liaison"},{"line_number":155,"context_line":"---------------"},{"line_number":156,"context_line":"bauzas"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Work Items"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_ed97dcea","line":155,"updated":"2020-07-21 15:20:48.000000000","message":"nit: newline after this","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c22bdfaa10ad8e1a8f0d1127252c4c1395f08200","unresolved":false,"context_lines":[{"line_number":152,"context_line":"  None"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Feature Liaison"},{"line_number":155,"context_line":"---------------"},{"line_number":156,"context_line":"bauzas"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"Work Items"}],"source_content_type":"text/x-rst","patch_set":4,"id":"bf51134e_109fc365","line":155,"in_reply_to":"bf51134e_ed97dcea","updated":"2020-07-21 15:49:36.000000000","message":"Done","commit_id":"8399d1455af1a3c2db4e6fc4ea55b9dc07f675a1"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"912aff494fe4bae846984f7e40b184961e2bb173","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":23,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":24,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":25,"context_line":"lead to a wrong scheduling decision. This is problematic when a move operation"},{"line_number":26,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":27,"context_line":"related to the IP address that was allocated at boot time."}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_00775a04","line":24,"range":{"start_line":24,"start_character":63,"end_line":24,"end_character":73},"updated":"2020-07-30 12:07:25.000000000","message":", which can","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"65b99e9721d6b617ed17ad8ef2a98972e41dd895","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Problem description"},{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":23,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":24,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":25,"context_line":"lead to a wrong scheduling decision. This is problematic when a move operation"},{"line_number":26,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":27,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"As a result of this gap, the only way to use routed networks in Nova currently"},{"line_number":30,"context_line":"is by creating a port having the ``ip_allocation`` value be ``deferred`` and"},{"line_number":31,"context_line":"making sure that all compute services are assigned to at least one network"},{"line_number":32,"context_line":"segment."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_90129308","line":32,"range":{"start_line":22,"start_character":0,"end_line":32,"end_character":8},"updated":"2020-07-30 14:38:14.000000000","message":"This paragraph is easier to understand after reading the routed networks Neutron doc [1] (which should be listed as a reference here).\n\nTo rephrase what Sylvain is saying, booting with a port in a network segment works just fine, as long as no IP is specified, which lets Neutron pick an IP from the segment\u0027s subnet. Problems arise if an IP *is* specified, as Nova has no way of knowing which compute host(s) are hooked up to segments (subnets, to be more precise) that can actually provide that IP.\n\n[1] https://docs.openstack.org/neutron/latest/admin/config-routed-networks.html","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":19,"context_line":"Problem description"},{"line_number":20,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Although it\u0027s possible to create a Neutron port with a routed networks setup"},{"line_number":23,"context_line":"and boot an instance with this port, the network locality of the compute node"},{"line_number":24,"context_line":"associated with the instance won\u0027t be verified by the scheduler and could"},{"line_number":25,"context_line":"lead to a wrong scheduling decision. This is problematic when a move operation"},{"line_number":26,"context_line":"sends an instance to a compute node that isn\u0027t in the network segment that is"},{"line_number":27,"context_line":"related to the IP address that was allocated at boot time."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"As a result of this gap, the only way to use routed networks in Nova currently"},{"line_number":30,"context_line":"is by creating a port having the ``ip_allocation`` value be ``deferred`` and"},{"line_number":31,"context_line":"making sure that all compute services are assigned to at least one network"},{"line_number":32,"context_line":"segment."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_3a5d547a","line":32,"range":{"start_line":22,"start_character":0,"end_line":32,"end_character":8},"in_reply_to":"9f560f44_90129308","updated":"2020-07-31 10:45:06.000000000","message":"you dont actully boot a vm with a port in a network segment\nyou boot a vm with a port attached to a network that has segments.\n\nthe way this works is when you create a network, it can be a routed network or standard, that is determined by if you create network segment and associate subnets to those segment or if you just create subnets.\n\nwhen a network has segments the default ip_allocaton policy will be defer instead of intimidate. when the defer policy is in use\nthe ip address of the port is only assigned when the port is bound to a host. so when nova binds the port neutron uses that host to look up the segment(s) associcated with the host and network then it selects an ip from a corresponding subnet.\n\nthe issue is that once the ip is assigned once it will not change. so for move operation we have to keep the vm within the same segment that correspond to the ip\u0027s subnet otherwise teh port binding could fail and more importantly the ip will not be routable.\n\neven though neutron models segments in placment via nova host aggreates nova is not aware of this and does not confine the host to members of that aggreate.\n\nnot there is a second problem with inital boot and rescduleds namely that once we bind the port the first time the segment will be selected and the ip assgined. if we retry the alternate hosts will not take that into account.\n\nthere is a third issue too whichs is realted. since we dont take into account ip avaiableiyt the first host we select might be in a segment that nolonger has ips aviable. ipv4 adress are actully modeled as an inventory in placment for routed network but we currently dont claim them.\n\nfinally if you create a port with a fixed ip instead of letting neutron assign it, which is still valid to do in a routed network deployment we also do not use its segment to filter the inital host list.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":34,"context_line":"Use Cases"},{"line_number":35,"context_line":"---------"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"As an operator, I\u0027d like to make sure that instances IP addresses can be"},{"line_number":38,"context_line":"correctly separated between the network segments I provided."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"As an operator, I don\u0027t want to see instances going to compute services that"},{"line_number":41,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_daca5818","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":60},"updated":"2020-07-31 10:45:06.000000000","message":"this would require a new segment/ip aware weigher\nthe spec does not currently address this so i would remove this personally as the spec as written does not enable this.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":37,"context_line":"As an operator, I\u0027d like to make sure that instances IP addresses can be"},{"line_number":38,"context_line":"correctly separated between the network segments I provided."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"As an operator, I don\u0027t want to see instances going to compute services that"},{"line_number":41,"context_line":"aren\u0027t in network segments if the user asks for either a port or a routed"},{"line_number":42,"context_line":"network."},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_1ad5f0b9","line":40,"range":{"start_line":40,"start_character":63,"end_line":40,"end_character":71},"updated":"2020-07-31 10:45:06.000000000","message":"node","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"As a user, I\u0027d like Nova to place my instance on the correct host  according to"},{"line_number":45,"context_line":"the port or network I\u0027ve requested for my instance, without having to"},{"line_number":46,"context_line":"specifically create a port with a ``ip_allocation\u003ddeferred`` value."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_1aee9087","line":46,"range":{"start_line":46,"start_character":34,"end_line":46,"end_character":60},"updated":"2020-07-31 10:45:06.000000000","message":"neutron is actully ment to do this automatically apparently but im not sure when it started doing that. i belive when ip_allocation was first added it was manually set.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"dabe307651e9a109193f55f8b38ed7576eab0251","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"As a user, I\u0027d like Nova to place my instance on the correct host  according to"},{"line_number":45,"context_line":"the port or network I\u0027ve requested for my instance, without having to"},{"line_number":46,"context_line":"specifically create a port with a ``ip_allocation\u003ddeferred`` value."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"Proposed change"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_8462ec08","line":46,"range":{"start_line":46,"start_character":34,"end_line":46,"end_character":60},"in_reply_to":"9f560f44_1aee9087","updated":"2020-08-06 14:28:54.000000000","message":"As far as I remember from my tests ip_allocation needs to be set to deferred manually.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"65b99e9721d6b617ed17ad8ef2a98972e41dd895","unresolved":false,"context_lines":[{"line_number":49,"context_line":"Proposed change"},{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once you `configure routed networks in Neutron`_, network segments are"},{"line_number":53,"context_line":"represented as Placement Resource Providers. Neutron will then ask Nova to"},{"line_number":54,"context_line":"create a Nova host aggregate for each segment and will add compute services"},{"line_number":55,"context_line":"that are mapped with respective segments into the related aggregates."}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_d0f36be6","line":52,"updated":"2020-07-30 14:38:14.000000000","message":"Oh you\u0027ve linked the doc here, OK.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"65b99e9721d6b617ed17ad8ef2a98972e41dd895","unresolved":false,"context_lines":[{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once you `configure routed networks in Neutron`_, network segments are"},{"line_number":53,"context_line":"represented as Placement Resource Providers. Neutron will then ask Nova to"},{"line_number":54,"context_line":"create a Nova host aggregate for each segment and will add compute services"},{"line_number":55,"context_line":"that are mapped with respective segments into the related aggregates."},{"line_number":56,"context_line":"Eventually, Nova will mirror those aggregates into Placement aggregates."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_90873310","line":54,"range":{"start_line":53,"start_character":64,"end_line":54,"end_character":45},"updated":"2020-07-30 14:38:14.000000000","message":"IOW Neutron hits the [1] API, right? And this is already the case (I\u0027m confirming because it\u0027s in the proposed change section, but based on the Neutron doc it\u0027s actually existing behavior)\n\n[1] https://docs.openstack.org/api-ref/compute/?expanded\u003dcreate-aggregate-detail#create-aggregate","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":50,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Once you `configure routed networks in Neutron`_, network segments are"},{"line_number":53,"context_line":"represented as Placement Resource Providers. Neutron will then ask Nova to"},{"line_number":54,"context_line":"create a Nova host aggregate for each segment and will add compute services"},{"line_number":55,"context_line":"that are mapped with respective segments into the related aggregates."},{"line_number":56,"context_line":"Eventually, Nova will mirror those aggregates into Placement aggregates."},{"line_number":57,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_9aa74050","line":54,"range":{"start_line":53,"start_character":64,"end_line":54,"end_character":45},"in_reply_to":"9f560f44_90873310","updated":"2020-07-31 10:45:06.000000000","message":"yes neutron calls the nova api\nthis is the code that creates teh RP and nova aggreate\nhttps://github.com/openstack/neutron/blob/master/neutron/services/segments/plugin.py#L272-L289\n\nnova also traslates the nova aggreate into a placment aggreate\n\nalthough neutron also woudl created it just by doing\n self.p_client.associate_aggregates(segment_id, [aggregate_uuid])","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"912aff494fe4bae846984f7e40b184961e2bb173","unresolved":false,"context_lines":[{"line_number":53,"context_line":"represented as Placement Resource Providers. Neutron will then ask Nova to"},{"line_number":54,"context_line":"create a Nova host aggregate for each segment and will add compute services"},{"line_number":55,"context_line":"that are mapped with respective segments into the related aggregates."},{"line_number":56,"context_line":"Eventually, Nova will mirror those aggregates into Placement aggregates."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":59,"context_line":"only get resource providers (i.e. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_4b14d3a0","line":56,"updated":"2020-07-30 12:07:25.000000000","message":"I know that we\u0027d be effectively duplicating the neutron doc in doing so, but I\u0027d really appreciate some sample output from various OSC commands showing what such an aggregate actually looks like. \u0027openstack resource provider list\u0027, \u0027openstack aggregate list\u0027, and \u0027openstack resource provider aggregate list\u0027 would probably be the ones we get. It just helps provide context that you otherwise need to go spelunking through code and multiple docs for","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c5f0250334d12ccef5e7d46c9ad1f2b1e4e46000","unresolved":false,"context_lines":[{"line_number":53,"context_line":"represented as Placement Resource Providers. Neutron will then ask Nova to"},{"line_number":54,"context_line":"create a Nova host aggregate for each segment and will add compute services"},{"line_number":55,"context_line":"that are mapped with respective segments into the related aggregates."},{"line_number":56,"context_line":"Eventually, Nova will mirror those aggregates into Placement aggregates."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"What we then need for Nova is to have a way for asking the Placement API to"},{"line_number":59,"context_line":"only get resource providers (i.e. compute nodes) that are in the aggregate"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_9a5d92eb","line":56,"in_reply_to":"9f560f44_4b14d3a0","updated":"2020-07-30 13:33:34.000000000","message":"I can surely add some details in a FUP if you wish, even if that means copying the existing neutron docs.","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":74,"context_line":"      return False"},{"line_number":75,"context_line":"    segment_ids \u003d \u003cget_all_segments_ids_from_network_or_port\u003e"},{"line_number":76,"context_line":"    for segment in segment_ids:"},{"line_number":77,"context_line":"       agg_info \u003d \u003cget_provider_aggregates_from_segment_id\u003e"},{"line_number":78,"context_line":"       \u003cappend_agg_info_to_required_aggregates\u003e"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. note::"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_bd1dde67","line":77,"range":{"start_line":77,"start_character":18,"end_line":77,"end_character":59},"updated":"2020-07-31 10:45:06.000000000","message":"this function is pretty simple as the name of the host aggreate will be \n     SEGMENT_NAME_STUB % segment_id\nwhich is \n    \u0027Neutron segment id %s\u0027 % segment_id\n\nso we just get the aggrate with that name then its uuid is the placemnt uuid.\n\nso this can be done fiarly efficnetly as a db query with a list of aggrate names generated by looping over the segments","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"912aff494fe4bae846984f7e40b184961e2bb173","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"REST API impact"},{"line_number":107,"context_line":"---------------"},{"line_number":108,"context_line":"None."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Security impact"},{"line_number":111,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_605f3672","line":108,"updated":"2020-07-30 12:07:25.000000000","message":"nit: missing newline above this","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"65b99e9721d6b617ed17ad8ef2a98972e41dd895","unresolved":false,"context_lines":[{"line_number":133,"context_line":"Other deployer impact"},{"line_number":134,"context_line":"---------------------"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"A new configuration option would be::"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":139,"context_line":"              default\u003dFalse),"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_702b7fea","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":37},"updated":"2020-07-30 14:38:14.000000000","message":"You explained why we need this config option in a review comment, ideally we\u0027d have it in the spec itself. Also, it\u0027d be kinda nice if Nova could auto-detect whether Neutron is using routed networks or not (by checking for a specific kind of aggregate?)","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":133,"context_line":"Other deployer impact"},{"line_number":134,"context_line":"---------------------"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"A new configuration option would be::"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":139,"context_line":"              default\u003dFalse),"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_da3418fe","line":136,"range":{"start_line":136,"start_character":0,"end_line":136,"end_character":37},"in_reply_to":"9f560f44_702b7fea","updated":"2020-07-31 10:45:06.000000000","message":"well for a start we almost always add one when adding a prefilter but really its the perfomance impact which is described above.\n\nif you do not use routed networks we dont want to have to call neutron on every scheduler operation to look up segments.\n\nso i think this is already in the spec on line 128","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"65b99e9721d6b617ed17ad8ef2a98972e41dd895","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"A new configuration option would be::"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":139,"context_line":"              default\u003dFalse),"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_d0cb6b47","line":138,"range":{"start_line":138,"start_character":15,"end_line":138,"end_character":60},"updated":"2020-07-30 14:38:14.000000000","message":"I guess we can bikeshed the name in the implementation...","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"43f28183b48b22c997d625d8c348584f3c18df14","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"A new configuration option would be::"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"  cfg.BoolOpt(\"query_placement_for_routed_network_aggregates\","},{"line_number":139,"context_line":"              default\u003dFalse),"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Developer impact"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9f560f44_fa1abc7a","line":138,"range":{"start_line":138,"start_character":15,"end_line":138,"end_character":60},"in_reply_to":"9f560f44_d0cb6b47","updated":"2020-07-31 10:45:06.000000000","message":"this would be in line with the other prefilter config options so i think this name is fine\n\ne.g query_placement_for_availability_zone\nhttps://github.com/openstack/nova/blob/master/nova/conf/scheduler.py#L169\n\n\"placement_aggregate_required_for_tenants\"\nhttps://github.com/openstack/nova/blob/master/nova/conf/scheduler.py#L157","commit_id":"3554dda45b56c957610023a9553ebd575617a93e"}]}
