)]}'
{"ironic/common/neutron.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"142b148b9f8db702b67a98a1adb012abd2bae5ae","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_0dc13e2f","line":82,"updated":"2020-03-12 14:37:23.000000000","message":"Please add a docstring","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":7386,"name":"Tzu-Mainn Chen","email":"tzumainn@redhat.com","username":"tzumainn"},"change_message_id":"52f655e46d77c9594d2fb24a24f3fc4c34bd1f1e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_15e5b338","line":82,"in_reply_to":"1fa4df85_0dc13e2f","updated":"2020-03-13 17:08:04.000000000","message":"Done!","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"142b148b9f8db702b67a98a1adb012abd2bae5ae","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"},{"line_number":86,"context_line":"        \u0027neutron\u0027,"},{"line_number":87,"context_line":"        auth\u003dauth)"},{"line_number":88,"context_line":"    endpoint \u003d keystone.get_endpoint(\u0027neutron\u0027, session\u003dsession,"},{"line_number":89,"context_line":"                                     auth\u003dauth)"},{"line_number":90,"context_line":"    return clientv20.Client(session\u003dsession,"},{"line_number":91,"context_line":"                            auth\u003dauth,"},{"line_number":92,"context_line":"                            endpoint_override\u003dendpoint,"},{"line_number":93,"context_line":"                            retries\u003dCONF.neutron.retries,"},{"line_number":94,"context_line":"                            global_request_id\u003dcontext.global_id,"},{"line_number":95,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def unbind_neutron_port(port_id, client\u003dNone, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_cdbb26c2","line":95,"range":{"start_line":82,"start_character":0,"end_line":95,"end_character":65},"updated":"2020-03-12 14:37:23.000000000","message":"I wonder what we\u0027re going to do when we go to move to openstacksdk...","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":7386,"name":"Tzu-Mainn Chen","email":"tzumainn@redhat.com","username":"tzumainn"},"change_message_id":"8816b243d7ee41bb156b3185e1716c6e779d2bbf","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"},{"line_number":86,"context_line":"        \u0027neutron\u0027,"},{"line_number":87,"context_line":"        auth\u003dauth)"},{"line_number":88,"context_line":"    endpoint \u003d keystone.get_endpoint(\u0027neutron\u0027, session\u003dsession,"},{"line_number":89,"context_line":"                                     auth\u003dauth)"},{"line_number":90,"context_line":"    return clientv20.Client(session\u003dsession,"},{"line_number":91,"context_line":"                            auth\u003dauth,"},{"line_number":92,"context_line":"                            endpoint_override\u003dendpoint,"},{"line_number":93,"context_line":"                            retries\u003dCONF.neutron.retries,"},{"line_number":94,"context_line":"                            global_request_id\u003dcontext.global_id,"},{"line_number":95,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def unbind_neutron_port(port_id, client\u003dNone, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_f47561fb","line":95,"range":{"start_line":82,"start_character":0,"end_line":95,"end_character":65},"in_reply_to":"1fa4df85_b4c04ee2","updated":"2020-03-16 13:41:15.000000000","message":"Fair enough! What\u0027s the other option I should be following? I\u0027m not all that familiar with openstacksdk.","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1d83de10b991519275b2c78d6c5b30441be84b64","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"},{"line_number":86,"context_line":"        \u0027neutron\u0027,"},{"line_number":87,"context_line":"        auth\u003dauth)"},{"line_number":88,"context_line":"    endpoint \u003d keystone.get_endpoint(\u0027neutron\u0027, session\u003dsession,"},{"line_number":89,"context_line":"                                     auth\u003dauth)"},{"line_number":90,"context_line":"    return clientv20.Client(session\u003dsession,"},{"line_number":91,"context_line":"                            auth\u003dauth,"},{"line_number":92,"context_line":"                            endpoint_override\u003dendpoint,"},{"line_number":93,"context_line":"                            retries\u003dCONF.neutron.retries,"},{"line_number":94,"context_line":"                            global_request_id\u003dcontext.global_id,"},{"line_number":95,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def unbind_neutron_port(port_id, client\u003dNone, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_b4c04ee2","line":95,"range":{"start_line":82,"start_character":0,"end_line":95,"end_character":65},"in_reply_to":"1fa4df85_b5cfffae","updated":"2020-03-16 09:25:19.000000000","message":"I\u0027m not entirely sure we should do this now in this way without taking into consideration the migration to openstacksdk.\nWe\u0027re adding a function that will be removed once the conversion is done, and I\u0027m also not sure it\u0027s necessary at the moment.","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":7386,"name":"Tzu-Mainn Chen","email":"tzumainn@redhat.com","username":"tzumainn"},"change_message_id":"52f655e46d77c9594d2fb24a24f3fc4c34bd1f1e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"},{"line_number":86,"context_line":"        \u0027neutron\u0027,"},{"line_number":87,"context_line":"        auth\u003dauth)"},{"line_number":88,"context_line":"    endpoint \u003d keystone.get_endpoint(\u0027neutron\u0027, session\u003dsession,"},{"line_number":89,"context_line":"                                     auth\u003dauth)"},{"line_number":90,"context_line":"    return clientv20.Client(session\u003dsession,"},{"line_number":91,"context_line":"                            auth\u003dauth,"},{"line_number":92,"context_line":"                            endpoint_override\u003dendpoint,"},{"line_number":93,"context_line":"                            retries\u003dCONF.neutron.retries,"},{"line_number":94,"context_line":"                            global_request_id\u003dcontext.global_id,"},{"line_number":95,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def unbind_neutron_port(port_id, client\u003dNone, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_b5cfffae","line":95,"range":{"start_line":82,"start_character":0,"end_line":95,"end_character":65},"in_reply_to":"1fa4df85_cdbb26c2","updated":"2020-03-13 17:08:04.000000000","message":"Haha, no idea :) I admit that I\u0027m just blindly copying the current pattern ironic uses for neutron/cinder/etc.","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2d67e1bd91b660501a1ed5f957ddce1c391d522f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def get_conf_client(context):"},{"line_number":83,"context_line":"    auth \u003d ks_loading.load_auth_from_conf_options(CONF, \u0027neutron\u0027)"},{"line_number":84,"context_line":"    session \u003d ks_loading.load_session_from_conf_options("},{"line_number":85,"context_line":"        CONF,"},{"line_number":86,"context_line":"        \u0027neutron\u0027,"},{"line_number":87,"context_line":"        auth\u003dauth)"},{"line_number":88,"context_line":"    endpoint \u003d keystone.get_endpoint(\u0027neutron\u0027, session\u003dsession,"},{"line_number":89,"context_line":"                                     auth\u003dauth)"},{"line_number":90,"context_line":"    return clientv20.Client(session\u003dsession,"},{"line_number":91,"context_line":"                            auth\u003dauth,"},{"line_number":92,"context_line":"                            endpoint_override\u003dendpoint,"},{"line_number":93,"context_line":"                            retries\u003dCONF.neutron.retries,"},{"line_number":94,"context_line":"                            global_request_id\u003dcontext.global_id,"},{"line_number":95,"context_line":"                            timeout\u003dCONF.neutron.request_timeout)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def unbind_neutron_port(port_id, client\u003dNone, context\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_1d6c1035","line":95,"range":{"start_line":82,"start_character":0,"end_line":95,"end_character":65},"in_reply_to":"1fa4df85_f47561fb","updated":"2020-03-23 19:18:52.000000000","message":"You can see an example of this being done at https://review.opendev.org/#/c/672179 where we leveraged openstacksdk for talking to ironic. Neutron shouldn\u0027t be too different. See: https://docs.openstack.org/openstacksdk/latest/user/proxies/network.html for the networking specific interface docs and for the different context/credentials passing, you\u0027ll still need a new method to invoke the call because you\u0027ll need to administratively be a separate user.","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"af31ae12955e6793e69a69368dac483a1feb4de6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    \"\"\""},{"line_number":117,"context_line":"    if not client:"},{"line_number":118,"context_line":"        # verify that user can see the port before updating it"},{"line_number":119,"context_line":"        get_client(context\u003dcontext).show_port(port_id)"},{"line_number":120,"context_line":"        client \u003d _get_conf_client(context)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    return client.update_port(port_id, update_body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"df33271e_9aad2a9d","line":119,"updated":"2020-03-31 22:40:53.000000000","message":"This actually makes sense. If not already noted in a reno, it likely should be noted in that there is now an additional get request with neutron for every port update.\n\nOne thing to consider, what does this raise if we can\u0027t get the client and show the port, what exception does that raise and how does that look to a user. I would guess we would end up with some \"port not found\" error being raised to the user and in last_error, but I suspect we would need to actually suggest that it might be a permission issue or missing port in whatever we return back.","commit_id":"8b41da219eba853ccb99a610e502dd0d24c5cf48"}],"ironic/drivers/modules/network/flat.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4e8769d05b0c76d0778eabc8deeabeafa72c151c","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _bind_flat_ports(self, task):"},{"line_number":57,"context_line":"        LOG.debug(\"Binding flat network ports\")"},{"line_number":58,"context_line":"        client \u003d neutron.get_conf_client(task.context)"},{"line_number":59,"context_line":"        for port_like_obj in task.ports + task.portgroups:"},{"line_number":60,"context_line":"            vif_port_id \u003d ("},{"line_number":61,"context_line":"                port_like_obj.internal_info.get(common.TENANT_VIF_KEY)"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_7dcb9c1d","line":58,"updated":"2020-03-23 21:00:18.000000000","message":"The same is likely needed for drivers/modules/network/neutron.py espescially for v6 users where more records will need to be loaded and additional logic is in flgiht.","commit_id":"a1809bcd96c62b1355128dd23077ecf03775df42"},{"author":{"_account_id":7386,"name":"Tzu-Mainn Chen","email":"tzumainn@redhat.com","username":"tzumainn"},"change_message_id":"2a29c34208d8ce9febcbe85c2d784bb731c077cb","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                continue"},{"line_number":66,"context_line":"            body \u003d {"},{"line_number":67,"context_line":"                \u0027port\u0027: {"},{"line_number":68,"context_line":"                    \u0027binding:host_id\u0027: task.node.uuid,"},{"line_number":69,"context_line":"                    \u0027binding:vnic_type\u0027: neutron.VNIC_BAREMETAL,"},{"line_number":70,"context_line":"                    \u0027mac_address\u0027: port_like_obj.address"},{"line_number":71,"context_line":"                }"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_c9a90ede","line":68,"updated":"2020-03-26 15:28:58.000000000","message":"It turns out this parameter is similarly restricted as the mac_address: https://opendev.org/openstack/neutron/src/branch/master/neutron/conf/policies/port.py#L228-L233","commit_id":"a1809bcd96c62b1355128dd23077ecf03775df42"}],"ironic/drivers/modules/network/neutron.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"142b148b9f8db702b67a98a1adb012abd2bae5ae","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        ports \u003d [p for p in ports if not p.portgroup_id]"},{"line_number":191,"context_line":"        portgroups \u003d task.portgroups"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        client \u003d neutron.get_conf_client(task.context)"},{"line_number":194,"context_line":"        pobj_without_vif \u003d 0"},{"line_number":195,"context_line":"        for port_like_obj in ports + portgroups:"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_6d81d2c3","line":193,"updated":"2020-03-12 14:37:23.000000000","message":"So I feel like just pulling the client for doing the entire plug op is the wrong thing to do.\n\nReason being, if a user attempts to plug a network, we don\u0027t exactly know if the vif is in their rights to plug. Really, only a connection with their credentials can determine that. The need for the admin credentials though is to update the mac address of the port, so I think we need to explictly break that out as a specific action where we use elevated access and then allow port binding to continue with the user\u0027s context.","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"},{"author":{"_account_id":7386,"name":"Tzu-Mainn Chen","email":"tzumainn@redhat.com","username":"tzumainn"},"change_message_id":"52f655e46d77c9594d2fb24a24f3fc4c34bd1f1e","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        ports \u003d [p for p in ports if not p.portgroup_id]"},{"line_number":191,"context_line":"        portgroups \u003d task.portgroups"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        client \u003d neutron.get_conf_client(task.context)"},{"line_number":194,"context_line":"        pobj_without_vif \u003d 0"},{"line_number":195,"context_line":"        for port_like_obj in ports + portgroups:"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1fa4df85_b55dbfea","line":193,"in_reply_to":"1fa4df85_6d81d2c3","updated":"2020-03-13 17:08:04.000000000","message":"Ah, that makes perfect sense. I\u0027ll update the patch!","commit_id":"b436badfa338e259b22ae5db61959a8e55c3d4c3"}],"ironic/tests/unit/common/test_neutron.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4e8769d05b0c76d0778eabc8deeabeafa72c151c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"                                            auth\u003dmock.sentinel.auth, retries\u003d2,"},{"line_number":185,"context_line":"                                            endpoint_override\u003d\u0027neutron_url\u0027,"},{"line_number":186,"context_line":"                                            global_request_id\u003d\u0027global\u0027,"},{"line_number":187,"context_line":"                                            timeout\u003d45)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class TestNeutronNetworkActions(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df33271e_bdd524bc","line":187,"updated":"2020-03-23 21:00:18.000000000","message":"just a nit, but it might be good to add a comment as to why these tests are important.","commit_id":"a1809bcd96c62b1355128dd23077ecf03775df42"}]}
