)]}'
{"kuryr_kubernetes/controller/drivers/lbaasv2.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"e5651cc0ad2c3790915d51dc182811df0a4ba58f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            LOG.exception(\u0027Failed when creating security group rule for \u0027"},{"line_number":155,"context_line":"                          \u0027listener %s.\u0027, listener.name)"},{"line_number":156,"context_line":"        except os_exc.SDKException:"},{"line_number":157,"context_line":"            pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _apply_members_security_groups(self, loadbalancer, port, target_port,"},{"line_number":160,"context_line":"                                       protocol, sg_rule_name, new_sgs\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_20edaf24","line":157,"range":{"start_line":157,"start_character":12,"end_line":157,"end_character":16},"updated":"2019-11-18 09:56:43.000000000","message":"It is ok to pass this one? Should we force a retry instead?","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"983f67b77313e4b21b48bde045d72d6ed0385956","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            LOG.exception(\u0027Failed when creating security group rule for \u0027"},{"line_number":155,"context_line":"                          \u0027listener %s.\u0027, listener.name)"},{"line_number":156,"context_line":"        except os_exc.SDKException:"},{"line_number":157,"context_line":"            pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _apply_members_security_groups(self, loadbalancer, port, target_port,"},{"line_number":160,"context_line":"                                       protocol, sg_rule_name, new_sgs\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_72304bea","line":157,"range":{"start_line":157,"start_character":12,"end_line":157,"end_character":16},"in_reply_to":"3fa7e38b_20edaf24","updated":"2019-11-19 06:50:19.000000000","message":"I didn\u0027t intend to change the logic. It might happen, than something could go wrong. Maybe I\u0027ll remove catching this exception, so that it will fail and we will see in logs what has happened?","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c3de6507a1085c602036f0c34bb2ab19c5c4e6b4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            LOG.exception(\u0027Failed when creating security group rule for \u0027"},{"line_number":155,"context_line":"                          \u0027listener %s.\u0027, listener.name)"},{"line_number":156,"context_line":"        except os_exc.SDKException:"},{"line_number":157,"context_line":"            pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _apply_members_security_groups(self, loadbalancer, port, target_port,"},{"line_number":160,"context_line":"                                       protocol, sg_rule_name, new_sgs\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_72e12b2b","line":157,"range":{"start_line":157,"start_character":12,"end_line":157,"end_character":16},"in_reply_to":"3fa7e38b_72304bea","updated":"2019-11-19 08:56:59.000000000","message":"Although, in original code, logic was as follows:\n\n- catch all the NeutronClientExeption (which is the topmost for neutron client)\n- check if there was a conflict\n- if there was a conflict log it and continue\n- if not, just continue\n\nSo, I kept the behavior unchanged, since I catch the conflict exception first, and general SDKException later.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"3ebaa57727cbc7502422dd76839ead62f22dcc24","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            LOG.exception(\u0027Failed when creating security group rule for \u0027"},{"line_number":155,"context_line":"                          \u0027listener %s.\u0027, listener.name)"},{"line_number":156,"context_line":"        except os_exc.SDKException:"},{"line_number":157,"context_line":"            pass"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _apply_members_security_groups(self, loadbalancer, port, target_port,"},{"line_number":160,"context_line":"                                       protocol, sg_rule_name, new_sgs\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_bbfc5fb6","line":157,"range":{"start_line":157,"start_character":12,"end_line":157,"end_character":16},"in_reply_to":"3fa7e38b_72e12b2b","updated":"2019-11-19 09:43:03.000000000","message":"ohh, you are right! sorry for the noise! Dismiss my comment!","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"e5651cc0ad2c3790915d51dc182811df0a4ba58f","unresolved":false,"context_lines":[{"line_number":479,"context_line":"            LOG.error(\"Port with fixed ips %s not found!\", fixed_ips)"},{"line_number":480,"context_line":"            raise"},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"        try:"},{"line_number":483,"context_line":"            return next(ports)"},{"line_number":484,"context_line":"        except StopIteration:"},{"line_number":485,"context_line":"            return None"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def _post_lb_resource(self, resource, request, **kwargs):"},{"line_number":488,"context_line":"        # FIXME(dulek): openstacksdk doesn\u0027t support Octavia tags until version"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e0aa3782","line":485,"range":{"start_line":482,"start_character":0,"end_line":485,"end_character":23},"updated":"2019-11-18 09:56:43.000000000","message":"cool!","commit_id":"76929cfd731e0f85921c593631445174685d26e7"}],"kuryr_kubernetes/controller/drivers/namespace_subnet.py":[{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"f8c741ded4ba453af1aafbab62e5e1dd1ed5233d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                raise"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            if \u0027NeutronError\u0027 in result:"},{"line_number":106,"context_line":"                if result[\u0027type\u0027] \u003d\u003d \u0027RouterNotFound\u0027:"},{"line_number":107,"context_line":"                    LOG.debug(\"Provided router %s not found.\", router_id)"},{"line_number":108,"context_line":"                elif result[\u0027type\u0027] \u003d\u003d \u0027RouterInterfaceNotFoundForSubnet\u0027:"},{"line_number":109,"context_line":"                    LOG.debug(\"Subnet %(subnet)s not attached to router \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_fd02eb08","line":106,"range":{"start_line":106,"start_character":19,"end_line":106,"end_character":34},"updated":"2019-11-15 16:39:04.000000000","message":"I got this when running Network Policy tests: KeyError: \u0027type\u0027. The result content has the following format:\n\n{u\u0027NeutronError\u0027: {u\u0027message\u0027: u\u0027Router 927515c6-e20b-45cd-820b-a75b798e1819 has no interface on subnet 1758695e-1a8b-47a0-a7cf-9c55951fdcf2\u0027, u\u0027type\n\u0027: u\u0027RouterInterfaceNotFoundForSubnet\u0027, u\u0027detail\u0027: u\u0027\u0027}}","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c3de6507a1085c602036f0c34bb2ab19c5c4e6b4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                raise"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            if \u0027NeutronError\u0027 in result:"},{"line_number":106,"context_line":"                if result[\u0027type\u0027] \u003d\u003d \u0027RouterNotFound\u0027:"},{"line_number":107,"context_line":"                    LOG.debug(\"Provided router %s not found.\", router_id)"},{"line_number":108,"context_line":"                elif result[\u0027type\u0027] \u003d\u003d \u0027RouterInterfaceNotFoundForSubnet\u0027:"},{"line_number":109,"context_line":"                    LOG.debug(\"Subnet %(subnet)s not attached to router \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_120f97e0","line":106,"range":{"start_line":106,"start_character":19,"end_line":106,"end_character":34},"in_reply_to":"3fa7e38b_20328fa8","updated":"2019-11-19 08:56:59.000000000","message":"(Also, as for RouterInterfaceNotFoundForSubnet type, please look at line 108)","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0cc8e7a53b7e9e9389094a3104fa92533d399d77","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                raise"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            if \u0027NeutronError\u0027 in result:"},{"line_number":106,"context_line":"                if result[\u0027type\u0027] \u003d\u003d \u0027RouterNotFound\u0027:"},{"line_number":107,"context_line":"                    LOG.debug(\"Provided router %s not found.\", router_id)"},{"line_number":108,"context_line":"                elif result[\u0027type\u0027] \u003d\u003d \u0027RouterInterfaceNotFoundForSubnet\u0027:"},{"line_number":109,"context_line":"                    LOG.debug(\"Subnet %(subnet)s not attached to router \""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_20328fa8","line":106,"range":{"start_line":106,"start_character":19,"end_line":106,"end_character":34},"in_reply_to":"3fa7e38b_fd02eb08","updated":"2019-11-18 09:33:36.000000000","message":"Right! Line 105 is looking for key \u0027NeutronError\u0027, and yet I missed it :)","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                        # Get the trunk_id from the error message"},{"line_number":140,"context_line":"                        trunk_id \u003d ("},{"line_number":141,"context_line":"                            str(e).split(\u0027trunk\u0027)[1].split(\u0027.\u0027)[0].strip())"},{"line_number":142,"context_line":"                        os_net.delete_remove_subports("},{"line_number":143,"context_line":"                            trunk_id, port_id\u003dleftover_port.id)"},{"line_number":144,"context_line":"                    else:"},{"line_number":145,"context_line":"                        LOG.exception(\"Unexpected error deleting leftover \""}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_2d6fd192","line":142,"range":{"start_line":142,"start_character":31,"end_line":142,"end_character":53},"updated":"2019-11-19 17:02:16.000000000","message":"If what I read in openstacksdk code is correct, this should be just delete_subports.","commit_id":"f58e5003d2d003791aa9cb28825bef57e3330bbc"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"e60aa6b9547d19ce90f769ba85b78ac92bea19b8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                        # Get the trunk_id from the error message"},{"line_number":140,"context_line":"                        trunk_id \u003d ("},{"line_number":141,"context_line":"                            str(e).split(\u0027trunk\u0027)[1].split(\u0027.\u0027)[0].strip())"},{"line_number":142,"context_line":"                        os_net.delete_remove_subports("},{"line_number":143,"context_line":"                            trunk_id, port_id\u003dleftover_port.id)"},{"line_number":144,"context_line":"                    else:"},{"line_number":145,"context_line":"                        LOG.exception(\"Unexpected error deleting leftover \""}],"source_content_type":"text/x-python","patch_set":10,"id":"3fa7e38b_ad1d0174","line":142,"range":{"start_line":142,"start_character":31,"end_line":142,"end_character":53},"in_reply_to":"3fa7e38b_2d6fd192","updated":"2019-11-19 17:26:43.000000000","message":"Definitely a mistake.","commit_id":"f58e5003d2d003791aa9cb28825bef57e3330bbc"}],"kuryr_kubernetes/controller/drivers/network_policy.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"e5651cc0ad2c3790915d51dc182811df0a4ba58f","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                              existing_sg_rules if rule not in"},{"line_number":98,"context_line":"                              current_sg_rules]"},{"line_number":99,"context_line":"        for sg_rule in sg_rules_to_delete:"},{"line_number":100,"context_line":"            driver_utils.delete_security_group_rule(sgr_ids[sg_rule])"},{"line_number":101,"context_line":"        # Create new rules that weren\u0027t already on the security group"},{"line_number":102,"context_line":"        sg_rules_to_add \u003d [rule for rule in current_sg_rules if rule not in"},{"line_number":103,"context_line":"                           existing_sg_rules]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e0831702","line":100,"range":{"start_line":100,"start_character":11,"end_line":100,"end_character":69},"updated":"2019-11-18 09:56:43.000000000","message":"no errors with openstacksdk if the rule is not found? nice!","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"c3de6507a1085c602036f0c34bb2ab19c5c4e6b4","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                              existing_sg_rules if rule not in"},{"line_number":98,"context_line":"                              current_sg_rules]"},{"line_number":99,"context_line":"        for sg_rule in sg_rules_to_delete:"},{"line_number":100,"context_line":"            driver_utils.delete_security_group_rule(sgr_ids[sg_rule])"},{"line_number":101,"context_line":"        # Create new rules that weren\u0027t already on the security group"},{"line_number":102,"context_line":"        sg_rules_to_add \u003d [rule for rule in current_sg_rules if rule not in"},{"line_number":103,"context_line":"                           existing_sg_rules]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_f222fb53","line":100,"range":{"start_line":100,"start_character":11,"end_line":100,"end_character":69},"in_reply_to":"3fa7e38b_e0831702","updated":"2019-11-19 08:56:59.000000000","message":"In case sg rule doesn\u0027t exists, there would be no effect - either as an exception nor returned value/json/whatever.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"f8c741ded4ba453af1aafbab62e5e1dd1ed5233d","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            #              To work around this we will delete those two SG"},{"line_number":171,"context_line":"            #              rules just after creation."},{"line_number":172,"context_line":"            for sgr in sg.security_group_rules:"},{"line_number":173,"context_line":"                self.os_net.delete_security_group_rule(sgr.id)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            i_rules, e_rules \u003d self.parse_network_policy_rules(policy, sg.id)"},{"line_number":176,"context_line":"            for i_rule in i_rules:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_1a290d9b","line":173,"range":{"start_line":173,"start_character":16,"end_line":173,"end_character":62},"updated":"2019-11-15 16:39:04.000000000","message":"When running Network Policy tests with this patch I got: \u0027dict\u0027 object has no attribute \u0027id\u0027. You will need to update how the ID is retrieved, as the sg rule looks like:\n\n{u\u0027remote_group_id\u0027: None, u\u0027direction\u0027: u\u0027egress\u0027, u\u0027protocol\u0027: None, u\u0027description\u0027: None, u\u0027tags\u0027: [], u\u0027ethertype\u0027: u\u0027IPv6\u0027, u\u0027remote_ip_prefix\u0027: N\none, u\u0027port_range_max\u0027: None, u\u0027updated_at\u0027: u\u00272019-11-15T16:31:36Z\u0027, u\u0027security_group_id\u0027: u\u00278f3c3ac0-f796-421b-a2d0-2379089ac3b2\u0027, u\u0027port_range_min\u0027: None, u\u0027revision_number\u0027: 0, u\u0027tenant_id\u0027: u\u00279707689db7564be7af7ab317e3d8cd7d\u0027, u\u0027crea\nted_at\u0027: u\u00272019-11-15T16:31:36Z\u0027, u\u0027project_id\u0027: u\u00279707689db7564be7af7ab317e3d8cd7d\u0027, u\u0027id\u0027: u\u002758f0c51c-88d9-4352-80c6-91a46711b915\u0027}","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0cc8e7a53b7e9e9389094a3104fa92533d399d77","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            #              To work around this we will delete those two SG"},{"line_number":171,"context_line":"            #              rules just after creation."},{"line_number":172,"context_line":"            for sgr in sg.security_group_rules:"},{"line_number":173,"context_line":"                self.os_net.delete_security_group_rule(sgr.id)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"            i_rules, e_rules \u003d self.parse_network_policy_rules(policy, sg.id)"},{"line_number":176,"context_line":"            for i_rule in i_rules:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_80e5830c","line":173,"range":{"start_line":173,"start_character":16,"end_line":173,"end_character":62},"in_reply_to":"3fa7e38b_1a290d9b","updated":"2019-11-18 09:33:36.000000000","message":"Right. Nested objects returned by openstacksdk client are either dicts, or list of dicts.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"fbc81c1aec9831849ee8c4d4082abd14ead5c032","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            for e_rule in e_rules:"},{"line_number":181,"context_line":"                sgr_id \u003d driver_utils.create_security_group_rule(e_rule)"},{"line_number":182,"context_line":"                e_rule[\u0027security_group_rule\u0027][\u0027id\u0027] \u003d sgr_id"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"            # Add default rules to allow traffic from host and svc subnet"},{"line_number":185,"context_line":"            self._add_default_np_rules(sg.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_b1cb371b","line":182,"range":{"start_line":182,"start_character":22,"end_line":182,"end_character":45},"updated":"2019-11-16 19:48:46.000000000","message":"Shouldn\u0027t this be removed?","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0cc8e7a53b7e9e9389094a3104fa92533d399d77","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"            for e_rule in e_rules:"},{"line_number":181,"context_line":"                sgr_id \u003d driver_utils.create_security_group_rule(e_rule)"},{"line_number":182,"context_line":"                e_rule[\u0027security_group_rule\u0027][\u0027id\u0027] \u003d sgr_id"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"            # Add default rules to allow traffic from host and svc subnet"},{"line_number":185,"context_line":"            self._add_default_np_rules(sg.id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_4016abf4","line":182,"range":{"start_line":182,"start_character":22,"end_line":182,"end_character":45},"in_reply_to":"3fa7e38b_b1cb371b","updated":"2019-11-18 09:33:36.000000000","message":"Right.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"}],"kuryr_kubernetes/controller/drivers/network_policy_security_groups.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":"    for crd_rule in crd_rules:"},{"line_number":70,"context_line":"        remote_ip_prefixes \u003d crd_rule.get(\u0027remote_ip_prefixes\u0027)"},{"line_number":71,"context_line":"        min_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_min\u0027)"},{"line_number":72,"context_line":"        max_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_max\u0027)"},{"line_number":73,"context_line":"        if (remote_ip_prefixes and ("},{"line_number":74,"context_line":"                min_port \u003e\u003d container_port and"},{"line_number":75,"context_line":"                container_port \u003c\u003d max_port)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_a74f6090","side":"PARENT","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":72},"updated":"2019-11-19 17:02:16.000000000","message":"Does this mean that we change the format of data saved to CRDs? If so we need an upgrade plan here.","commit_id":"5a8681a582dc8eeb294d0d0a490d44b064c33c96"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":"    for crd_rule in crd_rules:"},{"line_number":70,"context_line":"        remote_ip_prefixes \u003d crd_rule.get(\u0027remote_ip_prefixes\u0027)"},{"line_number":71,"context_line":"        min_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_min\u0027)"},{"line_number":72,"context_line":"        max_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_max\u0027)"},{"line_number":73,"context_line":"        if (remote_ip_prefixes and ("},{"line_number":74,"context_line":"                min_port \u003e\u003d container_port and"},{"line_number":75,"context_line":"                container_port \u003c\u003d max_port)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_dfaca0ef","side":"PARENT","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":72},"in_reply_to":"3fa7e38b_8d8da52b","updated":"2019-11-19 17:39:01.000000000","message":"Yeah… I\u0027ll defer to Maysa for confirmation if format changes.","commit_id":"5a8681a582dc8eeb294d0d0a490d44b064c33c96"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":"    for crd_rule in crd_rules:"},{"line_number":70,"context_line":"        remote_ip_prefixes \u003d crd_rule.get(\u0027remote_ip_prefixes\u0027)"},{"line_number":71,"context_line":"        min_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_min\u0027)"},{"line_number":72,"context_line":"        max_port \u003d crd_rule[\u0027security_group_rule\u0027].get(\u0027port_range_max\u0027)"},{"line_number":73,"context_line":"        if (remote_ip_prefixes and ("},{"line_number":74,"context_line":"                min_port \u003e\u003d container_port and"},{"line_number":75,"context_line":"                container_port \u003c\u003d max_port)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8d8da52b","side":"PARENT","line":72,"range":{"start_line":71,"start_character":0,"end_line":72,"end_character":72},"in_reply_to":"3fa7e38b_a74f6090","updated":"2019-11-19 17:25:40.000000000","message":"Or, we could keep it in the \"old\" way there and convert here…","commit_id":"5a8681a582dc8eeb294d0d0a490d44b064c33c96"}],"kuryr_kubernetes/controller/drivers/public_ip.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def is_ip_available(self, ip_addr, port_id_to_be_associated\u003dNone):"},{"line_number":93,"context_line":"        if ip_addr:"},{"line_number":94,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":95,"context_line":"            floating_ips_list \u003d list(os_net.ips(floating_ip_address\u003dip_addr))"},{"line_number":96,"context_line":"            for entry in floating_ips_list:"},{"line_number":97,"context_line":"                if not entry:"},{"line_number":98,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_7221249e","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":37},"updated":"2019-11-19 17:02:16.000000000","message":"Seems like no need to unwind the generator, we only iterate through it in this method.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def is_ip_available(self, ip_addr, port_id_to_be_associated\u003dNone):"},{"line_number":93,"context_line":"        if ip_addr:"},{"line_number":94,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":95,"context_line":"            floating_ips_list \u003d list(os_net.ips(floating_ip_address\u003dip_addr))"},{"line_number":96,"context_line":"            for entry in floating_ips_list:"},{"line_number":97,"context_line":"                if not entry:"},{"line_number":98,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8db605dc","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":37},"in_reply_to":"3fa7e38b_7221249e","updated":"2019-11-19 17:25:40.000000000","message":"I think, there was something with the test case. Will investigate.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def is_ip_available(self, ip_addr, port_id_to_be_associated\u003dNone):"},{"line_number":93,"context_line":"        if ip_addr:"},{"line_number":94,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":95,"context_line":"            floating_ips_list \u003d list(os_net.ips(floating_ip_address\u003dip_addr))"},{"line_number":96,"context_line":"            for entry in floating_ips_list:"},{"line_number":97,"context_line":"                if not entry:"},{"line_number":98,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_9fb2a849","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":37},"in_reply_to":"3fa7e38b_8db605dc","updated":"2019-11-19 17:39:01.000000000","message":"Fair with me, no need to spend time fixing unit tests to get rid of one list().","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7f93013082510ef297b50fa22cbe78667b91c7cd","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    def is_ip_available(self, ip_addr, port_id_to_be_associated\u003dNone):"},{"line_number":93,"context_line":"        if ip_addr:"},{"line_number":94,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":95,"context_line":"            floating_ips_list \u003d list(os_net.ips(floating_ip_address\u003dip_addr))"},{"line_number":96,"context_line":"            for entry in floating_ips_list:"},{"line_number":97,"context_line":"                if not entry:"},{"line_number":98,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_5974ef04","line":95,"range":{"start_line":95,"start_character":32,"end_line":95,"end_character":37},"in_reply_to":"3fa7e38b_9fb2a849","updated":"2019-11-26 16:22:05.000000000","message":"Ok, checked, no issues whatsoever, removed list.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except os_exc.ConflictException:"},{"line_number":153,"context_line":"            LOG.warning(\"Conflict when assigning floating IP with id %s. \""},{"line_number":154,"context_line":"                        \"Checking if it\u0027s already assigned correctly.\", res_id)"},{"line_number":155,"context_line":"            fip \u003d os_net.get_ip(res_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if fip.port_id \u003d\u003d vip_port_id:"},{"line_number":158,"context_line":"                LOG.debug(\u0027FIP %s already assigned to %s\u0027, res_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_3265ece1","line":155,"range":{"start_line":155,"start_character":12,"end_line":155,"end_character":39},"updated":"2019-11-19 17:02:16.000000000","message":"This can raise on 404 again, right? Neutronclient was just returning None and that\u0027s handled in 166. We should handle 404 here as well.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except os_exc.ConflictException:"},{"line_number":153,"context_line":"            LOG.warning(\"Conflict when assigning floating IP with id %s. \""},{"line_number":154,"context_line":"                        \"Checking if it\u0027s already assigned correctly.\", res_id)"},{"line_number":155,"context_line":"            fip \u003d os_net.get_ip(res_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if fip.port_id \u003d\u003d vip_port_id:"},{"line_number":158,"context_line":"                LOG.debug(\u0027FIP %s already assigned to %s\u0027, res_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_cdedddb8","line":155,"range":{"start_line":155,"start_character":12,"end_line":155,"end_character":39},"in_reply_to":"3fa7e38b_3265ece1","updated":"2019-11-19 17:25:40.000000000","message":"404 is not 409, so it will not be handled here. I didn\u0027t change the logic. Or at least trying hard not to do it :)","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except os_exc.ConflictException:"},{"line_number":153,"context_line":"            LOG.warning(\"Conflict when assigning floating IP with id %s. \""},{"line_number":154,"context_line":"                        \"Checking if it\u0027s already assigned correctly.\", res_id)"},{"line_number":155,"context_line":"            fip \u003d os_net.get_ip(res_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if fip.port_id \u003d\u003d vip_port_id:"},{"line_number":158,"context_line":"                LOG.debug(\u0027FIP %s already assigned to %s\u0027, res_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e486abba","line":155,"range":{"start_line":155,"start_character":12,"end_line":155,"end_character":39},"in_reply_to":"3fa7e38b_3ff29406","updated":"2019-11-20 07:46:38.000000000","message":"+1 To Michal\u0027s comment. We should probably keep handling the case when the returned fip is None.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except os_exc.ConflictException:"},{"line_number":153,"context_line":"            LOG.warning(\"Conflict when assigning floating IP with id %s. \""},{"line_number":154,"context_line":"                        \"Checking if it\u0027s already assigned correctly.\", res_id)"},{"line_number":155,"context_line":"            fip \u003d os_net.get_ip(res_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if fip.port_id \u003d\u003d vip_port_id:"},{"line_number":158,"context_line":"                LOG.debug(\u0027FIP %s already assigned to %s\u0027, res_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_3ff29406","line":155,"range":{"start_line":155,"start_character":12,"end_line":155,"end_character":39},"in_reply_to":"3fa7e38b_cdedddb8","updated":"2019-11-19 17:39:01.000000000","message":"What I mean is handling exceptions from this line. It\u0027s in except block and missing a new try block. My point is neutron.show_floatingip was probably returning None when floatingip was not existing and line 166 handled that. Now we\u0027ll get an exception. Is that right?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        except os_exc.ConflictException:"},{"line_number":153,"context_line":"            LOG.warning(\"Conflict when assigning floating IP with id %s. \""},{"line_number":154,"context_line":"                        \"Checking if it\u0027s already assigned correctly.\", res_id)"},{"line_number":155,"context_line":"            fip \u003d os_net.get_ip(res_id)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            if fip.port_id \u003d\u003d vip_port_id:"},{"line_number":158,"context_line":"                LOG.debug(\u0027FIP %s already assigned to %s\u0027, res_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_5315ae4b","line":155,"range":{"start_line":155,"start_character":12,"end_line":155,"end_character":39},"in_reply_to":"3fa7e38b_e486abba","updated":"2019-11-26 15:12:44.000000000","message":"We will get here an exception, instead of None, in case of no floating IP for specified resource. I\u0027ll add appropriate log message in that case.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"}],"kuryr_kubernetes/controller/drivers/utils.py":[{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"fbc81c1aec9831849ee8c4d4082abd14ead5c032","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        port_range_max \u003d port_range_min"},{"line_number":259,"context_line":"    if not protocol:"},{"line_number":260,"context_line":"        protocol \u003d \u0027TCP\u0027"},{"line_number":261,"context_line":"    security_group_rule_body \u003d {"},{"line_number":262,"context_line":"        u\u0027security_group_rule\u0027: {"},{"line_number":263,"context_line":"            u\u0027ethertype\u0027: ethertype,"},{"line_number":264,"context_line":"            u\u0027security_group_id\u0027: security_group_id,"},{"line_number":265,"context_line":"            u\u0027description\u0027: description,"},{"line_number":266,"context_line":"            u\u0027direction\u0027: direction,"},{"line_number":267,"context_line":"            u\u0027protocol\u0027: protocol.lower(),"},{"line_number":268,"context_line":"            u\u0027port_range_min\u0027: port_range_min,"},{"line_number":269,"context_line":"            u\u0027port_range_max\u0027: port_range_max,"},{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"    }"},{"line_number":272,"context_line":"    if cidr:"},{"line_number":273,"context_line":"        security_group_rule_body[u\u0027security_group_rule\u0027]["},{"line_number":274,"context_line":"            u\u0027remote_ip_prefix\u0027] \u003d cidr"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_11f48b5a","line":271,"range":{"start_line":261,"start_character":0,"end_line":271,"end_character":5},"updated":"2019-11-16 19:48:46.000000000","message":"This \u0027security_group_rule\u0027 should probably also be removed from the rule body.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"0cc8e7a53b7e9e9389094a3104fa92533d399d77","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        port_range_max \u003d port_range_min"},{"line_number":259,"context_line":"    if not protocol:"},{"line_number":260,"context_line":"        protocol \u003d \u0027TCP\u0027"},{"line_number":261,"context_line":"    security_group_rule_body \u003d {"},{"line_number":262,"context_line":"        u\u0027security_group_rule\u0027: {"},{"line_number":263,"context_line":"            u\u0027ethertype\u0027: ethertype,"},{"line_number":264,"context_line":"            u\u0027security_group_id\u0027: security_group_id,"},{"line_number":265,"context_line":"            u\u0027description\u0027: description,"},{"line_number":266,"context_line":"            u\u0027direction\u0027: direction,"},{"line_number":267,"context_line":"            u\u0027protocol\u0027: protocol.lower(),"},{"line_number":268,"context_line":"            u\u0027port_range_min\u0027: port_range_min,"},{"line_number":269,"context_line":"            u\u0027port_range_max\u0027: port_range_max,"},{"line_number":270,"context_line":"        }"},{"line_number":271,"context_line":"    }"},{"line_number":272,"context_line":"    if cidr:"},{"line_number":273,"context_line":"        security_group_rule_body[u\u0027security_group_rule\u0027]["},{"line_number":274,"context_line":"            u\u0027remote_ip_prefix\u0027] \u003d cidr"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e059d7fc","line":271,"range":{"start_line":261,"start_character":0,"end_line":271,"end_character":5},"in_reply_to":"3fa7e38b_11f48b5a","updated":"2019-11-18 09:33:36.000000000","message":"Nice catch!","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"9212d9731450ec9a676d79262778a2cf4aa74945","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_b2631cb1","line":198,"range":{"start_line":198,"start_character":51,"end_line":198,"end_character":57},"updated":"2019-11-19 16:31:55.000000000","message":"TCP?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ed95393e","line":198,"range":{"start_line":198,"start_character":51,"end_line":198,"end_character":57},"in_reply_to":"3fa7e38b_b2631cb1","updated":"2019-11-19 17:25:40.000000000","message":"Code[1] says that it can be null, tcp, udp or icmp :)\n\n[1] https://github.com/openstack/openstacksdk/blob/e25e97720135dc3f59647758363edef24d6b8639/openstack/network/v2/security_group_rule.py#L62-L64","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_847c97eb","line":198,"range":{"start_line":198,"start_character":51,"end_line":198,"end_character":57},"in_reply_to":"3fa7e38b_ed95393e","updated":"2019-11-20 07:46:38.000000000","message":"I believe that comment on the openstacksdk is not correct. This null value resulted in an error.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"9212d9731450ec9a676d79262778a2cf4aa74945","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_329e4c54","line":201,"range":{"start_line":201,"start_character":67,"end_line":201,"end_character":68},"updated":"2019-11-19 16:31:55.000000000","message":"\u00270.0.0.0/0\u0027?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    create \u003d os_net.create_security_group_rule"},{"line_number":192,"context_line":"    sgr \u003d \u0027\u0027"},{"line_number":193,"context_line":"    try:"},{"line_number":194,"context_line":"        sgr \u003d create(ether_type\u003dbody.get(\u0027ether_type\u0027, \u0027\u0027),"},{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e7db18e7","line":201,"range":{"start_line":194,"start_character":0,"end_line":201,"end_character":70},"updated":"2019-11-19 17:02:16.000000000","message":"I\u0027m pretty sure this is wrong, where from had you got the default values? The issue here is that with SG rules it\u0027s really important to only pass the stuff we want to allow and there should be None\u0027s otherwise.\n\nAlso remote_ip_prefix is full CIDR, so shouldn\u0027t be the allowed value.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    create \u003d os_net.create_security_group_rule"},{"line_number":192,"context_line":"    sgr \u003d \u0027\u0027"},{"line_number":193,"context_line":"    try:"},{"line_number":194,"context_line":"        sgr \u003d create(ether_type\u003dbody.get(\u0027ether_type\u0027, \u0027\u0027),"},{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_bf4be425","line":201,"range":{"start_line":194,"start_character":0,"end_line":201,"end_character":70},"in_reply_to":"3fa7e38b_2dd6f1c4","updated":"2019-11-19 17:39:01.000000000","message":"We can just go with 1, seems simpler.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_2d79112e","line":201,"range":{"start_line":201,"start_character":67,"end_line":201,"end_character":68},"in_reply_to":"3fa7e38b_329e4c54","updated":"2019-11-19 17:25:40.000000000","message":"Definitely not an int. Not sure what\u0027s the default for it. Will check.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    create \u003d os_net.create_security_group_rule"},{"line_number":192,"context_line":"    sgr \u003d \u0027\u0027"},{"line_number":193,"context_line":"    try:"},{"line_number":194,"context_line":"        sgr \u003d create(ether_type\u003dbody.get(\u0027ether_type\u0027, \u0027\u0027),"},{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_c4db6fe7","line":201,"range":{"start_line":194,"start_character":0,"end_line":201,"end_character":70},"in_reply_to":"3fa7e38b_bf4be425","updated":"2019-11-20 07:46:38.000000000","message":"+1. Copying the body should be enough. However, I guess it will be easier if you remain the body with the following format:\n\n{\u0027security_group_rule\u0027:...,\n \u0027remote_ip_prefixes\u0027:...,\n \u0027namespace\u0027:...}\n\nThis way you can easily retrieve the security_group_rule that is gonna be created without needing to touch the other additional fields(\u0027remote_ip_prefixes\u0027, \u0027namespace\u0027).\n\nwdyt?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7f93013082510ef297b50fa22cbe78667b91c7cd","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    create \u003d os_net.create_security_group_rule"},{"line_number":192,"context_line":"    sgr \u003d \u0027\u0027"},{"line_number":193,"context_line":"    try:"},{"line_number":194,"context_line":"        sgr \u003d create(ether_type\u003dbody.get(\u0027ether_type\u0027, \u0027\u0027),"},{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_f96efbfc","line":201,"range":{"start_line":194,"start_character":0,"end_line":201,"end_character":70},"in_reply_to":"3fa7e38b_c4db6fe7","updated":"2019-11-26 16:22:05.000000000","message":"I\u0027d rather not. First, because we sneak a rule regarding data structure to be neutron alike, instead of data centric - in the latter case, we could have just a translators between desired data structures, instead cluttering some additional things, which are unrelated to neutron. And this particular case is showing, that it\u0027s not easy to exchange some library because of that matter :)","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    create \u003d os_net.create_security_group_rule"},{"line_number":192,"context_line":"    sgr \u003d \u0027\u0027"},{"line_number":193,"context_line":"    try:"},{"line_number":194,"context_line":"        sgr \u003d create(ether_type\u003dbody.get(\u0027ether_type\u0027, \u0027\u0027),"},{"line_number":195,"context_line":"                     security_group_id\u003dbody.get(\u0027security_group_id\u0027, \u0027\u0027),"},{"line_number":196,"context_line":"                     description\u003dbody.get(\u0027description\u0027, \u0027\u0027),"},{"line_number":197,"context_line":"                     direction\u003dbody.get(\u0027direction\u0027, \u0027\u0027),"},{"line_number":198,"context_line":"                     protocol\u003dbody.get(\u0027protocol\u0027, \u0027null\u0027),"},{"line_number":199,"context_line":"                     port_range_max\u003dbody.get(\u0027port_range_max\u0027, 0),"},{"line_number":200,"context_line":"                     port_range_min\u003dbody.get(\u0027port_range_min\u0027, 0),"},{"line_number":201,"context_line":"                     remote_ip_prefix\u003dbody.get(\u0027remote_ip_prefix\u0027, 0))"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    except os_exc.ConflictException as ex:"},{"line_number":204,"context_line":"        LOG.debug(\"Failed to create already existing security group \""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_2dd6f1c4","line":201,"range":{"start_line":194,"start_character":0,"end_line":201,"end_character":70},"in_reply_to":"3fa7e38b_e7db18e7","updated":"2019-11-19 17:25:40.000000000","message":"Ok. Turns out, it wasn\u0027t best idea. Probably.\n\nI\u0027ve assumed, that instead of copying the body dict, I\u0027ll go with the defaults of the values passed here, at least that was the idea.\n\nIt will be much more complicated, if I go through the dict and check keys existence.\n\nI can see two options besides the latter.\n\n1. copying the dict (simply body_copy \u003d dict(body) is enough, since it is not nested) and remove potential illegal keys\n2. change the payload returned by the drivers_utils.create_security_group_rule_body method to return what it promise to return, and apply additional fields elsewhere.\n\nWhat do you think?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_e750f82e","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"updated":"2019-11-19 17:02:16.000000000","message":"This is worth changing as well.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_fe36e14f","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"in_reply_to":"3fa7e38b_1f5478c5","updated":"2019-11-26 15:12:44.000000000","message":"Will double check.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7438951cab23d3ed4b4348d3be54f3caf1baee01","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_cb8a46bb","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"in_reply_to":"3fa7e38b_ab458a46","updated":"2019-11-26 16:49:53.000000000","message":"Or, maybe not. This one has to be carefully handled. I\u0027ll make another change for this function.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_eddbf9e6","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"in_reply_to":"3fa7e38b_e750f82e","updated":"2019-11-19 17:25:40.000000000","message":"For sure. In different patch, since it is not the subject for this series :)","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_1f5478c5","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"in_reply_to":"3fa7e38b_eddbf9e6","updated":"2019-11-19 17:39:01.000000000","message":"Actually it\u0027s changed in 2/2, but for a method that doesn\u0027t seem to exist.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"7f93013082510ef297b50fa22cbe78667b91c7cd","unresolved":false,"context_lines":[{"line_number":406,"context_line":"    return net_crd[\u0027spec\u0027][\u0027subnetCIDR\u0027]"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"def tag_neutron_resources(resource, res_ids):"},{"line_number":410,"context_line":"    tags \u003d CONF.neutron_defaults.resource_tags"},{"line_number":411,"context_line":"    if tags:"},{"line_number":412,"context_line":"        neutron \u003d clients.get_neutron_client()"},{"line_number":413,"context_line":"        for res_id in res_ids:"},{"line_number":414,"context_line":"            try:"},{"line_number":415,"context_line":"                neutron.replace_tag(resource, res_id, body\u003d{\"tags\": tags})"},{"line_number":416,"context_line":"            except n_exc.NeutronClientException:"},{"line_number":417,"context_line":"                LOG.warning(\"Failed to tag %s %s with %s. Ignoring, but this \""},{"line_number":418,"context_line":"                            \"is still unexpected.\", resource, res_id, tags,"},{"line_number":419,"context_line":"                            exc_info\u003dTrue)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"def get_services(namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ab458a46","line":419,"range":{"start_line":409,"start_character":0,"end_line":419,"end_character":42},"in_reply_to":"3fa7e38b_fe36e14f","updated":"2019-11-26 16:22:05.000000000","message":"Hm. That one was missed. Will be converted aswell.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"}],"kuryr_kubernetes/controller/drivers/vif_pool.py":[{"author":{"_account_id":23567,"name":"Luis Tomas Bolivar","email":"ltomasbo@redhat.com","username":"ltomasbo"},"change_message_id":"e5651cc0ad2c3790915d51dc182811df0a4ba58f","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                os_net.delete_port(port.id)"},{"line_number":440,"context_line":"                    else:"},{"line_number":441,"context_line":"                        # delete port if they have no binding but belong to the"},{"line_number":442,"context_line":"                        # deployment networks, regardless of their tagging"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_601967cf","line":439,"range":{"start_line":439,"start_character":32,"end_line":439,"end_character":59},"updated":"2019-11-18 09:56:43.000000000","message":"I think we still need to catch the sdkexception here, as there may be other problems besides not found, such as ports that are wrongly in DOWN status but attached to the trunk, which will raise port in use or conflict. So we need to ensure we continue cleaning up the others and only have to ahndle later the leftovers with the workarounds that we have here and there","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"983f67b77313e4b21b48bde045d72d6ed0385956","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                os_net.delete_port(port.id)"},{"line_number":440,"context_line":"                    else:"},{"line_number":441,"context_line":"                        # delete port if they have no binding but belong to the"},{"line_number":442,"context_line":"                        # deployment networks, regardless of their tagging"}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_12579703","line":439,"range":{"start_line":439,"start_character":32,"end_line":439,"end_character":59},"in_reply_to":"3fa7e38b_601967cf","updated":"2019-11-19 06:50:19.000000000","message":"Yeah, sounds reasonable. I will wrap it in try:except for SDKException.","commit_id":"76929cfd731e0f85921c593631445174685d26e7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                del self._available_ports_pools[pool_key][sg_key]"},{"line_number":309,"context_line":"                for port_id in ports:"},{"line_number":310,"context_line":"                    # remove all SGs from the port to be reused"},{"line_number":311,"context_line":"                    os_net.update_port(port_id, security_groups\u003d[])"},{"line_number":312,"context_line":"                    # add the port to the default pool"},{"line_number":313,"context_line":"                    self._available_ports_pools[pool_key].setdefault("},{"line_number":314,"context_line":"                        tuple([]), []).append(port_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_72136466","line":311,"range":{"start_line":311,"start_character":0,"end_line":311,"end_character":67},"updated":"2019-11-19 17:02:16.000000000","message":"Love how more compact it is. :D","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        tags \u003d config.CONF.neutron_defaults.resource_tags"},{"line_number":386,"context_line":"        if tags:"},{"line_number":387,"context_line":"            attrs[\u0027tags\u0027] \u003d tags"},{"line_number":388,"context_line":"        # TODO(gryf): look out for the of object in list when c_utils will be"},{"line_number":389,"context_line":"        # migrated to OpenstackSDK"},{"line_number":390,"context_line":"        all_active_ports \u003d c_utils.get_ports_by_attrs(**attrs)"},{"line_number":391,"context_line":"        in_use_ports \u003d self._get_in_use_ports()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_32096c30","line":388,"range":{"start_line":388,"start_character":39,"end_line":388,"end_character":41},"updated":"2019-11-19 17:02:16.000000000","message":"of?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        tags \u003d config.CONF.neutron_defaults.resource_tags"},{"line_number":386,"context_line":"        if tags:"},{"line_number":387,"context_line":"            attrs[\u0027tags\u0027] \u003d tags"},{"line_number":388,"context_line":"        # TODO(gryf): look out for the of object in list when c_utils will be"},{"line_number":389,"context_line":"        # migrated to OpenstackSDK"},{"line_number":390,"context_line":"        all_active_ports \u003d c_utils.get_ports_by_attrs(**attrs)"},{"line_number":391,"context_line":"        in_use_ports \u003d self._get_in_use_ports()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ad98a11a","line":388,"range":{"start_line":388,"start_character":39,"end_line":388,"end_character":41},"in_reply_to":"3fa7e38b_32096c30","updated":"2019-11-19 17:25:40.000000000","message":"s/of object/object type/","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                                # belongs to the deployment subnet and it does"},{"line_number":434,"context_line":"                                # not have the right tags"},{"line_number":435,"context_line":"                                # NOTE(gryf): OpenstackSDK will not give any"},{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_a4019309","line":436,"range":{"start_line":436,"start_character":34,"end_line":436,"end_character":46},"updated":"2019-11-20 07:46:38.000000000","message":"Do you mean doesn\u0027t raise an exception?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":433,"context_line":"                                # belongs to the deployment subnet and it does"},{"line_number":434,"context_line":"                                # not have the right tags"},{"line_number":435,"context_line":"                                # NOTE(gryf): OpenstackSDK will not give any"},{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_91b6d788","line":436,"range":{"start_line":436,"start_character":34,"end_line":436,"end_character":46},"in_reply_to":"3fa7e38b_a4019309","updated":"2019-11-26 15:12:44.000000000","message":"Nope.\n\n  In [30]: os.network.delete_port(\u0027meh\u0027)\n  In [31]: \n\nNo error in response, no exception thrown, nothing. Just None.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                                # delete the port if it has binding details, it"},{"line_number":433,"context_line":"                                # belongs to the deployment subnet and it does"},{"line_number":434,"context_line":"                                # not have the right tags"},{"line_number":435,"context_line":"                                # NOTE(gryf): OpenstackSDK will not give any"},{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                try:"},{"line_number":440,"context_line":"                                    os_net.delete_port(port.id)"},{"line_number":441,"context_line":"                                except os_exc.SDKException:"},{"line_number":442,"context_line":"                                    LOG.debug(\"Problem deleting leftover port \""},{"line_number":443,"context_line":"                                              \"%s. Skipping.\", port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0d3a15cc","line":440,"range":{"start_line":435,"start_character":0,"end_line":440,"end_character":63},"updated":"2019-11-19 17:02:16.000000000","message":"Damn, that\u0027s a pity, we desperately need to reduce numbers of calls to Neutron. Fortunately it seems like having multiple tags isn\u0027t that common.\n\nCan we make this a TODO?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                                # delete the port if it has binding details, it"},{"line_number":433,"context_line":"                                # belongs to the deployment subnet and it does"},{"line_number":434,"context_line":"                                # not have the right tags"},{"line_number":435,"context_line":"                                # NOTE(gryf): OpenstackSDK will not give any"},{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                try:"},{"line_number":440,"context_line":"                                    os_net.delete_port(port.id)"},{"line_number":441,"context_line":"                                except os_exc.SDKException:"},{"line_number":442,"context_line":"                                    LOG.debug(\"Problem deleting leftover port \""},{"line_number":443,"context_line":"                                              \"%s. Skipping.\", port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_6d9e2907","line":440,"range":{"start_line":435,"start_character":0,"end_line":440,"end_character":63},"in_reply_to":"3fa7e38b_0d3a15cc","updated":"2019-11-19 17:25:40.000000000","message":"Ack. What about bulk delete? Maybe there is a way for calling neutron with a list of ids of port to remove?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"b7afe4b2f2b3f75105f01385eee29c9555ea0fd4","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                                # delete the port if it has binding details, it"},{"line_number":433,"context_line":"                                # belongs to the deployment subnet and it does"},{"line_number":434,"context_line":"                                # not have the right tags"},{"line_number":435,"context_line":"                                # NOTE(gryf): OpenstackSDK will not give any"},{"line_number":436,"context_line":"                                # information if port exists or not. So that"},{"line_number":437,"context_line":"                                # we have to traverse entire list of ports"},{"line_number":438,"context_line":"                                # here."},{"line_number":439,"context_line":"                                try:"},{"line_number":440,"context_line":"                                    os_net.delete_port(port.id)"},{"line_number":441,"context_line":"                                except os_exc.SDKException:"},{"line_number":442,"context_line":"                                    LOG.debug(\"Problem deleting leftover port \""},{"line_number":443,"context_line":"                                              \"%s. Skipping.\", port[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_1fc6b89d","line":440,"range":{"start_line":435,"start_character":0,"end_line":440,"end_character":63},"in_reply_to":"3fa7e38b_6d9e2907","updated":"2019-11-19 17:39:01.000000000","message":"Nope and we already asked Neutron for that. ;)","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                    else:"},{"line_number":446,"context_line":"                        # delete port if they have no binding but belong to the"},{"line_number":447,"context_line":"                        # deployment networks, regardless of their tagging"},{"line_number":448,"context_line":"                        os_net.delete_port(port.id)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        else:"},{"line_number":451,"context_line":"            for port in existing_ports:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_2440435f","line":448,"range":{"start_line":448,"start_character":24,"end_line":448,"end_character":51},"updated":"2019-11-20 07:46:38.000000000","message":"Can\u0027t this still raise an exception?","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                    else:"},{"line_number":446,"context_line":"                        # delete port if they have no binding but belong to the"},{"line_number":447,"context_line":"                        # deployment networks, regardless of their tagging"},{"line_number":448,"context_line":"                        os_net.delete_port(port.id)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        else:"},{"line_number":451,"context_line":"            for port in existing_ports:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_515a9f4f","line":448,"range":{"start_line":448,"start_character":24,"end_line":448,"end_character":51},"in_reply_to":"3fa7e38b_2440435f","updated":"2019-11-26 15:12:44.000000000","message":"Yes. Possibly.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        args \u003d {}"},{"line_number":671,"context_line":"        if config.CONF.neutron_defaults.resource_tags:"},{"line_number":672,"context_line":"            args[\u0027tags\u0027] \u003d config.CONF.neutron_defaults.resource_tags"},{"line_number":673,"context_line":"        trunks \u003d os_net.list_trunks(**args)"},{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0d68d5b7","line":673,"range":{"start_line":673,"start_character":24,"end_line":673,"end_character":35},"updated":"2019-11-19 17:02:16.000000000","message":"I don\u0027t see that method defined on openstacksdk? We need to be more careful here - this code is not tested in the gate (technical limitations).","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        args \u003d {}"},{"line_number":671,"context_line":"        if config.CONF.neutron_defaults.resource_tags:"},{"line_number":672,"context_line":"            args[\u0027tags\u0027] \u003d config.CONF.neutron_defaults.resource_tags"},{"line_number":673,"context_line":"        trunks \u003d os_net.list_trunks(**args)"},{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8d612514","line":673,"range":{"start_line":673,"start_character":24,"end_line":673,"end_character":35},"in_reply_to":"3fa7e38b_0d68d5b7","updated":"2019-11-19 17:25:40.000000000","message":"Will double check.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        args \u003d {}"},{"line_number":671,"context_line":"        if config.CONF.neutron_defaults.resource_tags:"},{"line_number":672,"context_line":"            args[\u0027tags\u0027] \u003d config.CONF.neutron_defaults.resource_tags"},{"line_number":673,"context_line":"        trunks \u003d os_net.list_trunks(**args)"},{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ccbef8d2","line":673,"range":{"start_line":673,"start_character":24,"end_line":673,"end_character":35},"in_reply_to":"3fa7e38b_8d612514","updated":"2019-11-26 15:12:44.000000000","message":"This is definitely wrong.\n\nI can get a list of all trunks, by issuing:\n\n   os.network.trunks()\n\nalthough, if I pass an argument tags\u003d[...], I\u0027ll get an error: InvalidResourceQuery: Invalid query params: tags. So we have missing query attribute in OpenStackSDK.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"},{"line_number":677,"context_line":"                    # TODO(gryf): check if this isn\u0027t port object inseatd of"},{"line_number":678,"context_line":"                    # port id"},{"line_number":679,"context_line":"                    return trunk.port_id"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0d3f75b5","line":678,"range":{"start_line":677,"start_character":0,"end_line":678,"end_character":29},"updated":"2019-11-19 17:02:16.000000000","message":"I\u0027d rather not merge it as long as we haven\u0027t checked.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"},{"line_number":677,"context_line":"                    # TODO(gryf): check if this isn\u0027t port object inseatd of"},{"line_number":678,"context_line":"                    # port id"},{"line_number":679,"context_line":"                    return trunk.port_id"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_cda5dd49","line":678,"range":{"start_line":677,"start_character":0,"end_line":678,"end_character":29},"in_reply_to":"3fa7e38b_0d3f75b5","updated":"2019-11-19 17:25:40.000000000","message":"Ack.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"b378969ff6aacf2beeff8f2154c0ace6ba203814","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        for trunk in trunks:"},{"line_number":675,"context_line":"            for sp in trunk.sub_ports:"},{"line_number":676,"context_line":"                if sp.port_id \u003d\u003d vif.id:"},{"line_number":677,"context_line":"                    # TODO(gryf): check if this isn\u0027t port object inseatd of"},{"line_number":678,"context_line":"                    # port id"},{"line_number":679,"context_line":"                    return trunk.port_id"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0c2c1091","line":678,"range":{"start_line":677,"start_character":0,"end_line":678,"end_character":29},"in_reply_to":"3fa7e38b_cda5dd49","updated":"2019-11-26 15:12:44.000000000","message":"Nope. It\u0027s a list of dicts:\n\n    In [41]: trunks \u003d list(os.network.trunks())\n    \n    In [42]: trunk \u003d trunks[0]\n    \n    In [43]: trunk.sub_ports\n    Out[43]: \n    [{u\u0027port_id\u0027: u\u00270a6754ff-5680-4ba8-8590-8699cbe310cf\u0027,\n      u\u0027segmentation_id\u0027: 190,\n      u\u0027segmentation_type\u0027: u\u0027vlan\u0027}]","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":737,"context_line":"            os_net.update_port(port_id, security_groups\u003dlist(security_groups))"},{"line_number":738,"context_line":"        if config.CONF.kubernetes.port_debug:"},{"line_number":739,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":740,"context_line":"            os_net.update_port(port_id, name\u003dc_utils.get_port_name(pod))"},{"line_number":741,"context_line":"        # check if the pool needs to be populated"},{"line_number":742,"context_line":"        if (self._get_pool_size(pool_key) \u003c"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_edaf79dd","line":739,"range":{"start_line":739,"start_character":12,"end_line":739,"end_character":49},"updated":"2019-11-19 17:02:16.000000000","message":"Let\u0027s not get it again.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":736,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":737,"context_line":"            os_net.update_port(port_id, security_groups\u003dlist(security_groups))"},{"line_number":738,"context_line":"        if config.CONF.kubernetes.port_debug:"},{"line_number":739,"context_line":"            os_net \u003d clients.get_network_client()"},{"line_number":740,"context_line":"            os_net.update_port(port_id, name\u003dc_utils.get_port_name(pod))"},{"line_number":741,"context_line":"        # check if the pool needs to be populated"},{"line_number":742,"context_line":"        if (self._get_pool_size(pool_key) \u003c"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_0d5e9544","line":739,"range":{"start_line":739,"start_character":12,"end_line":739,"end_character":49},"in_reply_to":"3fa7e38b_edaf79dd","updated":"2019-11-19 17:25:40.000000000","message":"It doesn\u0027t hurt, but right. Also, I\u0027d like to have it during class initialization rather, than creating it every time on calling those methods. Even if it\u0027s a singleton.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"}],"kuryr_kubernetes/os_vif_util.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"8c4fe29c6048a56ee4ba4db4c988703f36ce8d0f","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"},{"line_number":218,"context_line":"    :return: os-vif VIF object"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    # TODO(gryf): check wehre it is used and what exactly is neutron_port now."},{"line_number":221,"context_line":"    profile \u003d osv_vif.VIFPortProfileOpenVSwitch("},{"line_number":222,"context_line":"        interface_id\u003dneutron_port[\u0027id\u0027])"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_87602437","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":78},"updated":"2019-11-19 17:02:16.000000000","message":"This most likely goes into next patch in the chain.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":13692,"name":"Roman Dobosz","email":"gryf73@gmail.com","username":"gryf"},"change_message_id":"d1b9cc16ee4ed43f47d58902c1c1f57fc675c914","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"},{"line_number":218,"context_line":"    :return: os-vif VIF object"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    # TODO(gryf): check wehre it is used and what exactly is neutron_port now."},{"line_number":221,"context_line":"    profile \u003d osv_vif.VIFPortProfileOpenVSwitch("},{"line_number":222,"context_line":"        interface_id\u003dneutron_port[\u0027id\u0027])"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ad3421fc","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":78},"in_reply_to":"3fa7e38b_87602437","updated":"2019-11-19 17:25:40.000000000","message":"Yup.","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"},{"author":{"_account_id":27032,"name":"Maysa de Macedo Souza","email":"maysa.macedo95@gmail.com","username":"maysa"},"change_message_id":"ae7ecf8f26957032b377fe88e0fe103c7df40088","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    :param subnets: subnet mapping as returned by PodSubnetsDriver.get_subnets"},{"line_number":218,"context_line":"    :return: os-vif VIF object"},{"line_number":219,"context_line":"    \"\"\""},{"line_number":220,"context_line":"    # TODO(gryf): check wehre it is used and what exactly is neutron_port now."},{"line_number":221,"context_line":"    profile \u003d osv_vif.VIFPortProfileOpenVSwitch("},{"line_number":222,"context_line":"        interface_id\u003dneutron_port[\u0027id\u0027])"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_aa087d26","line":220,"range":{"start_line":220,"start_character":0,"end_line":220,"end_character":78},"in_reply_to":"3fa7e38b_ad3421fc","updated":"2019-11-20 07:46:38.000000000","message":"typo: where","commit_id":"a4a708de8a97c96c7dc33232a7498468eea3eb36"}]}
