)]}'
{"neutron/agent/linux/iptables_firewall.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3e49ad8039bb0f2b7574c7a700a0a6e593a133ee","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        return port_rules"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _expand_sg_rule_with_remote_ips(self, rule, port, direction):"},{"line_number":311,"context_line":"        \"\"\"Expand security group rule into several per remote group ips.\"\"\""},{"line_number":312,"context_line":"        remote_group_id \u003d rule.get(\u0027remote_group_id\u0027)"},{"line_number":313,"context_line":"        if not remote_group_id:"},{"line_number":314,"context_line":"            return [rule]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6be3b634","line":311,"updated":"2015-01-20 12:59:19.000000000","message":"\"security group rule\" sounds generic too. \"per\" takes a singular form noun, so \"per IP\" looks good. How about the following?\n\n  Expand a remote group rule to rules per remote group IP.","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a8b02489faa8114fb0ab80e90b4ae94a55128965","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        return port_rules"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"    def _expand_sg_rule_with_remote_ips(self, rule, port, direction):"},{"line_number":311,"context_line":"        \"\"\"Expand security group rule into several per remote group ips.\"\"\""},{"line_number":312,"context_line":"        remote_group_id \u003d rule.get(\u0027remote_group_id\u0027)"},{"line_number":313,"context_line":"        if not remote_group_id:"},{"line_number":314,"context_line":"            return [rule]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_6bc49660","line":311,"in_reply_to":"3a961159_6be3b634","updated":"2015-01-20 13:12:13.000000000","message":"oupps, \n\nYes, sounds better like that, I will change it. :) Thanks.","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"7225e728ac7b2b074799f791e67c3d9d080c9ea1","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                ip_rule \u003d rule.copy()"},{"line_number":323,"context_line":"                direction_ip_prefix \u003d DIRECTION_IP_PREFIX[direction]"},{"line_number":324,"context_line":"                ip_rule[direction_ip_prefix] \u003d str(netaddr.IPNetwork(ip).cidr)"},{"line_number":325,"context_line":"                expanded_rules.append(ip_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return expanded_rules"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_4038be9f","line":325,"updated":"2015-01-19 11:58:52.000000000","message":"what about using yield here to avoid creating an extra list? and the extend above^ L307.","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3e49ad8039bb0f2b7574c7a700a0a6e593a133ee","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                ip_rule \u003d rule.copy()"},{"line_number":323,"context_line":"                direction_ip_prefix \u003d DIRECTION_IP_PREFIX[direction]"},{"line_number":324,"context_line":"                ip_rule[direction_ip_prefix] \u003d str(netaddr.IPNetwork(ip).cidr)"},{"line_number":325,"context_line":"                expanded_rules.append(ip_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return expanded_rules"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0bccf2ba","line":325,"in_reply_to":"3a961159_22164f4a","updated":"2015-01-20 12:59:19.000000000","message":"+1","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"6f661a974bfcd51e034afb73dadb19b358d0f469","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                ip_rule \u003d rule.copy()"},{"line_number":323,"context_line":"                direction_ip_prefix \u003d DIRECTION_IP_PREFIX[direction]"},{"line_number":324,"context_line":"                ip_rule[direction_ip_prefix] \u003d str(netaddr.IPNetwork(ip).cidr)"},{"line_number":325,"context_line":"                expanded_rules.append(ip_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return expanded_rules"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_a76ed1fe","line":325,"in_reply_to":"3a961159_4038be9f","updated":"2015-01-19 16:04:52.000000000","message":"I like this idea :)","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"53c7b4c7c3fec8abb4cc990af28ced2980f1c386","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                ip_rule \u003d rule.copy()"},{"line_number":323,"context_line":"                direction_ip_prefix \u003d DIRECTION_IP_PREFIX[direction]"},{"line_number":324,"context_line":"                ip_rule[direction_ip_prefix] \u003d str(netaddr.IPNetwork(ip).cidr)"},{"line_number":325,"context_line":"                expanded_rules.append(ip_rule)"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        return expanded_rules"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_22164f4a","line":325,"in_reply_to":"3a961159_a76ed1fe","updated":"2015-01-19 16:08:59.000000000","message":"Thanks for the feedback :)","commit_id":"65074331eac7245e3670e1093b8473761940c90c"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"e2b7c092f2d0919a1907d9c4453c2799341044a2","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                    if self.enable_ipset:"},{"line_number":302,"context_line":"                        port_rules.append(rule)"},{"line_number":303,"context_line":"                    else:"},{"line_number":304,"context_line":"                        expanded_rules \u003d self._expand_sg_rule_with_remote_ips("},{"line_number":305,"context_line":"                            rule, port, direction)"},{"line_number":306,"context_line":"                        port_rules.extend(expanded_rules)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_513dc0dc","line":304,"updated":"2015-01-20 16:44:36.000000000","message":"Then I guess expanded_rules can be removed too.\n\nport_rules.extend(self._expand_sg_rule_with_remote_ips(rule, port, direction))\n\nIt\u0027s longer but it\u0027s more clear in my opinion, since after the last changes _expand_sg_rule_with_remote_ips is a generator . What do you think?","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"31ef7bbee3865a3c60823b2d964bda673cfce02c","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                    if self.enable_ipset:"},{"line_number":302,"context_line":"                        port_rules.append(rule)"},{"line_number":303,"context_line":"                    else:"},{"line_number":304,"context_line":"                        expanded_rules \u003d self._expand_sg_rule_with_remote_ips("},{"line_number":305,"context_line":"                            rule, port, direction)"},{"line_number":306,"context_line":"                        port_rules.extend(expanded_rules)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_8c82aea3","line":304,"in_reply_to":"3a961159_513dc0dc","updated":"2015-01-20 18:01:41.000000000","message":"sounds good, I\u0027ll do it.","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8d7d13ec1ed124a04b921625a2d60728ac7c8478","unresolved":false,"context_lines":[{"line_number":301,"context_line":"                    if self.enable_ipset:"},{"line_number":302,"context_line":"                        port_rules.append(rule)"},{"line_number":303,"context_line":"                    else:"},{"line_number":304,"context_line":"                        expanded_rules \u003d self._expand_sg_rule_with_remote_ips("},{"line_number":305,"context_line":"                            rule, port, direction)"},{"line_number":306,"context_line":"                        port_rules.extend(expanded_rules)"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_9ab6793c","line":304,"in_reply_to":"3a961159_8c82aea3","updated":"2015-01-28 12:08:00.000000000","message":"Done","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"}],"neutron/tests/unit/test_iptables_firewall.py":[{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"e2b7c092f2d0919a1907d9c4453c2799341044a2","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"        self.firewall.ipset.assert_has_calls(calls, True)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    def test_sg_rule_expansion_with_remote_ips(self):"},{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_7c6453e6","line":1536,"updated":"2015-01-20 16:44:36.000000000","message":"the name \u0027no_fake_port_ips\u0027 is confusing to me. Maybe \u0027additional_fake_port_ips\u0027 would be more clear, what do you think?","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8d7d13ec1ed124a04b921625a2d60728ac7c8478","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"        self.firewall.ipset.assert_has_calls(calls, True)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    def test_sg_rule_expansion_with_remote_ips(self):"},{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_1aab69d9","line":1536,"in_reply_to":"1a930d6b_c9e9191c","updated":"2015-01-28 12:08:00.000000000","message":"Done","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"5dab5dafc084151645831abda8ea59aa728e9811","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"        self.firewall.ipset.assert_has_calls(calls, True)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    def test_sg_rule_expansion_with_remote_ips(self):"},{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_c9e9191c","line":1536,"in_reply_to":"3a961159_0cf07e65","updated":"2015-01-21 17:51:09.000000000","message":"other_ips sounds good!","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"31ef7bbee3865a3c60823b2d964bda673cfce02c","unresolved":false,"context_lines":[{"line_number":1533,"context_line":"        self.firewall.ipset.assert_has_calls(calls, True)"},{"line_number":1534,"context_line":""},{"line_number":1535,"context_line":"    def test_sg_rule_expansion_with_remote_ips(self):"},{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_0cf07e65","line":1536,"in_reply_to":"3a961159_7c6453e6","updated":"2015-01-20 18:01:41.000000000","message":"what about other_ips ? those are IPs in the SG, but not the one of the port.","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"e2b7c092f2d0919a1907d9c4453c2799341044a2","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"},{"line_number":1540,"context_line":"        port \u003d self._fake_port()"},{"line_number":1541,"context_line":"        rule \u003d self._fake_sg_rule_for_ethertype(\u0027IPv4\u0027)"},{"line_number":1542,"context_line":"        rules \u003d self.firewall._expand_sg_rule_with_remote_ips("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_3c1d6b63","line":1539,"updated":"2015-01-20 16:44:36.000000000","message":"please don\u0027t hardcode \u0027IPv6\u0027: [\u0027fe80::1\u0027] , you can use \u0027IPv6\u0027: [FAKE_IP[\u0027IPv6\u0027]]","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"8d7d13ec1ed124a04b921625a2d60728ac7c8478","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"},{"line_number":1540,"context_line":"        port \u003d self._fake_port()"},{"line_number":1541,"context_line":"        rule \u003d self._fake_sg_rule_for_ethertype(\u0027IPv4\u0027)"},{"line_number":1542,"context_line":"        rules \u003d self.firewall._expand_sg_rule_with_remote_ips("}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_3aaf4de5","line":1539,"in_reply_to":"3a961159_0c979eec","updated":"2015-01-28 12:08:00.000000000","message":"Done","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"31ef7bbee3865a3c60823b2d964bda673cfce02c","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"        no_fake_port_ips \u003d [\u002710.0.0.2\u0027, \u002710.0.0.3\u0027, \u002710.0.0.4\u0027]"},{"line_number":1537,"context_line":"        self.firewall.sg_members \u003d {\u0027fake_sgid\u0027: {"},{"line_number":1538,"context_line":"            \u0027IPv4\u0027: [FAKE_IP[\u0027IPv4\u0027]] + no_fake_port_ips,"},{"line_number":1539,"context_line":"            \u0027IPv6\u0027: [\u0027fe80::1\u0027]}}"},{"line_number":1540,"context_line":"        port \u003d self._fake_port()"},{"line_number":1541,"context_line":"        rule \u003d self._fake_sg_rule_for_ethertype(\u0027IPv4\u0027)"},{"line_number":1542,"context_line":"        rules \u003d self.firewall._expand_sg_rule_with_remote_ips("}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_0c979eec","line":1539,"in_reply_to":"3a961159_3c1d6b63","updated":"2015-01-20 18:01:41.000000000","message":"I was a pioneer with FAKE_IP[\u0027IPv4\u0027] (look the code above), but I see that you like it! ;)\n\n+1","commit_id":"640d2a36c140f079068d570152945bbbfbcbc28a"}]}
