)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"6cb8a4f9c75d0413eea92310aa6443b37762b3c6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"to the network. It should then configure the provider network id in"},{"line_number":13,"context_line":"tempest.conf (as network.provider_network_id) for tempest to read"},{"line_number":14,"context_line":"the information."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: Ibead1aae82b65d0a8d4bf73bb816d6b2c322ebfd"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_70261f18","line":15,"updated":"2014-07-01 19:11:53.000000000","message":"This needs the following line, since I just looked at the BP in launchpad and didn\u0027t see this review linked in the whiteboard:\n\nImplements blueprint neutron-provider-networking","commit_id":"8af21390a31cad04329dbde3256c6b0fb8b06fe4"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"8e27358568ee54007d44b6fbc2f0fc7f068b13c1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     sridhargaddam \u003csridhar.gaddam@enovance.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-12 15:28:00 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add IPv4/IPv6 Provider Network Scenario tests"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch implements provider network scenario test cases for both"},{"line_number":10,"context_line":"IPv4 and IPv6 subnets. For the tests to run, devstack should create"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1abeadc6_4e2b6994","line":7,"updated":"2014-08-25 13:08:49.000000000","message":"I think \"Provider\" is the wrong term here.\nI believe you are referring to a pre-created \"Shared\" network (with, optional, provider attribute). If this is the case, please replace \"Provider\" with \"Shared\" anywhere in your patch. If I got this wrong, please provide a better detailed commit message and docstrings explaining what exactly \"Provider\" network is.","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"}],"tempest/common/utils/linux/remote_client.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        cmd \u003d \u0027ping -c1 -w1 %s\u0027 % host"},{"line_number":90,"context_line":"        return self.exec_command(cmd)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def ping6_host(self, iface, host):"},{"line_number":93,"context_line":"        cmd \u003d \u0027ping6 -I %s -c1 -w1 %s\u0027 % (iface, host)"},{"line_number":94,"context_line":"        return self.exec_command(cmd)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a8722747","line":92,"updated":"2014-07-09 08:51:50.000000000","message":"Please don\u0027t create a new method.\nEdit ping so the command string \"ping\" / \"ping6\" is a positional argument and by default is decided based on the ip address (like you did in manager)\n\nI suggest setting iface\u003d\"eth0\" as default. assuming cirros image is used\n\nping_host(self, host, iface\u003dNone, command\u003dNone):","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        cmd \u003d \u0027ping -c1 -w1 %s\u0027 % host"},{"line_number":90,"context_line":"        return self.exec_command(cmd)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def ping6_host(self, iface, host):"},{"line_number":93,"context_line":"        cmd \u003d \u0027ping6 -I %s -c1 -w1 %s\u0027 % (iface, host)"},{"line_number":94,"context_line":"        return self.exec_command(cmd)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_da4dba94","line":92,"in_reply_to":"baada198_a8722747","updated":"2014-08-11 15:42:18.000000000","message":"Done","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"}],"tempest/scenario/manager.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def _check_remote_connectivity(self, source, dest,"},{"line_number":1017,"context_line":"                                   should_succeed\u003dTrue,"},{"line_number":1018,"context_line":"                                   iface\u003dNone):"},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":"        check ping server via source ssh connection"},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_a8c0672b","line":1018,"updated":"2014-07-09 08:51:50.000000000","message":"Please add to docstring as well","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":1015,"context_line":""},{"line_number":1016,"context_line":"    def _check_remote_connectivity(self, source, dest,"},{"line_number":1017,"context_line":"                                   should_succeed\u003dTrue,"},{"line_number":1018,"context_line":"                                   iface\u003dNone):"},{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":"        check ping server via source ssh connection"},{"line_number":1021,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6d66baef","line":1018,"in_reply_to":"baada198_a8c0672b","updated":"2014-08-11 15:42:18.000000000","message":"Done","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        def ping_remote():"},{"line_number":1029,"context_line":"            try:"},{"line_number":1030,"context_line":"                if iface:"},{"line_number":1031,"context_line":"                    source.ping6_host(iface, dest)"},{"line_number":1032,"context_line":"                else:"},{"line_number":1033,"context_line":"                    source.ping_host(dest)"},{"line_number":1034,"context_line":"            except exceptions.SSHExecCommandFailed:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_085a3383","line":1031,"updated":"2014-07-09 08:51:50.000000000","message":"see comment in previous module","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":1028,"context_line":"        def ping_remote():"},{"line_number":1029,"context_line":"            try:"},{"line_number":1030,"context_line":"                if iface:"},{"line_number":1031,"context_line":"                    source.ping6_host(iface, dest)"},{"line_number":1032,"context_line":"                else:"},{"line_number":1033,"context_line":"                    source.ping_host(dest)"},{"line_number":1034,"context_line":"            except exceptions.SSHExecCommandFailed:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_8d614ed6","line":1031,"in_reply_to":"baada198_085a3383","updated":"2014-08-11 15:42:18.000000000","message":"Done","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        return network, subnet, router"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"    def _get_ipv6_addr_by_EUI64(self, prefix, mac):"},{"line_number":1279,"context_line":"        try:"},{"line_number":1280,"context_line":"            eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":1281,"context_line":"            prefix \u003d netaddr.IPNetwork(prefix)"},{"line_number":1282,"context_line":"            return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_68080f2e","line":1279,"updated":"2014-07-09 08:51:50.000000000","message":"There are 3 lines here. which of them is the problematic one you want to try?\nPlease use try,except,else,finally so only the specific dangerous code is handled","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":1276,"context_line":"        return network, subnet, router"},{"line_number":1277,"context_line":""},{"line_number":1278,"context_line":"    def _get_ipv6_addr_by_EUI64(self, prefix, mac):"},{"line_number":1279,"context_line":"        try:"},{"line_number":1280,"context_line":"            eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":1281,"context_line":"            prefix \u003d netaddr.IPNetwork(prefix)"},{"line_number":1282,"context_line":"            return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2d53e2de","line":1279,"in_reply_to":"baada198_68080f2e","updated":"2014-08-11 15:42:18.000000000","message":"@Yair, this code is taken from Neutron[1] and is included here only as a temporary measure.  Once this utility api is merged in Oslo, it would be removed both from Neutron and Tempest. \n\nThanks for your review comments.\n\n[1] - https://github.com/openstack/neutron/blob/master/neutron/common/ipv6_utils.py\nhttps://review.openstack.org/#/c/101494/","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"        try:"},{"line_number":1280,"context_line":"            eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":1281,"context_line":"            prefix \u003d netaddr.IPNetwork(prefix)"},{"line_number":1282,"context_line":"            return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"},{"line_number":1283,"context_line":"        except (ValueError, netaddr.AddrFormatError):"},{"line_number":1284,"context_line":"            raise TypeError(\u0027Bad prefix or mac format for generating IPv6 \u0027"},{"line_number":1285,"context_line":"                            \u0027address by EUI-64: %(prefix)s, %(mac)s:\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_2849b78b","line":1282,"updated":"2014-07-09 08:51:50.000000000","message":"This is not \"self documenting\".\nCould you please add a short explanation of this calculation?","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"        try:"},{"line_number":1280,"context_line":"            eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":1281,"context_line":"            prefix \u003d netaddr.IPNetwork(prefix)"},{"line_number":1282,"context_line":"            return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"},{"line_number":1283,"context_line":"        except (ValueError, netaddr.AddrFormatError):"},{"line_number":1284,"context_line":"            raise TypeError(\u0027Bad prefix or mac format for generating IPv6 \u0027"},{"line_number":1285,"context_line":"                            \u0027address by EUI-64: %(prefix)s, %(mac)s:\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ed03aabb","line":1282,"in_reply_to":"baada198_2849b78b","updated":"2014-08-11 15:42:18.000000000","message":"Done","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":1231,"context_line":"            )"},{"line_number":1232,"context_line":"        ]"},{"line_number":1233,"context_line":"        if CONF.network_feature_enabled.ipv6:"},{"line_number":1234,"context_line":"            rulesets.append(dict("},{"line_number":1235,"context_line":"                # ssh"},{"line_number":1236,"context_line":"                protocol\u003d\u0027tcp\u0027,"},{"line_number":1237,"context_line":"                port_range_min\u003d22,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_3b4826b4","line":1234,"updated":"2014-08-13 08:35:38.000000000","message":"maybe it would be better if you used the already existing rules as base instead of explicitly duplicating them?\n\nsomething like:\nipv6_rulesets \u003d [dict(etherype\u003d\u0027IPv6\u0027, **r) for r in rulesets]\nrulesets.extend(ipv6_rulesets)","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":1242,"context_line":"                # ping"},{"line_number":1243,"context_line":"                protocol\u003d\u0027icmp\u0027,"},{"line_number":1244,"context_line":"                ethertype\u003d\u0027IPv6\u0027,"},{"line_number":1245,"context_line":"                remote_ip_prefix\u003d\u0027::/0\u0027,"},{"line_number":1246,"context_line":"            ))"},{"line_number":1247,"context_line":""},{"line_number":1248,"context_line":"        for ruleset in rulesets:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_dbd00acb","line":1245,"updated":"2014-08-13 08:35:38.000000000","message":"is this really needed? what\u0027s the default? don\u0027t we wan\u0027t to allow traffic from all addresses?","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":1336,"context_line":"        subnet.add_to_router(router.id)"},{"line_number":1337,"context_line":"        return network, subnet, router"},{"line_number":1338,"context_line":""},{"line_number":1339,"context_line":"    def _get_ipv6_addr_by_EUI64(self, prefix, mac):"},{"line_number":1340,"context_line":"        # NOTE(sridhargaddam): This utility API can be removed once"},{"line_number":1341,"context_line":"        # its merged in Oslo"},{"line_number":1342,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_fb1eae74","line":1339,"updated":"2014-08-13 08:35:38.000000000","message":"could you please provide a patch or bp related to the oslo change?","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":1339,"context_line":"    def _get_ipv6_addr_by_EUI64(self, prefix, mac):"},{"line_number":1340,"context_line":"        # NOTE(sridhargaddam): This utility API can be removed once"},{"line_number":1341,"context_line":"        # its merged in Oslo"},{"line_number":1342,"context_line":"        try:"},{"line_number":1343,"context_line":"            eui64 \u003d int(netaddr.EUI(mac).eui64())"},{"line_number":1344,"context_line":"            prefix \u003d netaddr.IPNetwork(prefix)"},{"line_number":1345,"context_line":"            return netaddr.IPAddress(prefix.first + eui64 ^ (1 \u003c\u003c 57))"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d608df29","line":1342,"updated":"2014-08-13 08:35:38.000000000","message":"Please provide a short doc explaining what this section does.\nI see this is some sort of address calculation, but not all of us are fluent in IPv6","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"}],"tempest/scenario/test_provider_net_ops.py":[{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cls.set_network_resources()"},{"line_number":58,"context_line":"        super(TestProviderNetworkBasicOps, cls).setUpClass()"},{"line_number":59,"context_line":"        # Skip the tests if the required extensions are missing"},{"line_number":60,"context_line":"        for ext in [\u0027provider\u0027, \u0027security-group\u0027]:"},{"line_number":61,"context_line":"            if not test.is_extension_enabled(ext, \u0027network\u0027):"},{"line_number":62,"context_line":"                msg \u003d \"%s extension not enabled.\" % ext"},{"line_number":63,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_63caf06f","line":60,"updated":"2014-07-09 08:51:50.000000000","message":"IMO this section should go in check_preconditions as well","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        cls.set_network_resources()"},{"line_number":58,"context_line":"        super(TestProviderNetworkBasicOps, cls).setUpClass()"},{"line_number":59,"context_line":"        # Skip the tests if the required extensions are missing"},{"line_number":60,"context_line":"        for ext in [\u0027provider\u0027, \u0027security-group\u0027]:"},{"line_number":61,"context_line":"            if not test.is_extension_enabled(ext, \u0027network\u0027):"},{"line_number":62,"context_line":"                msg \u003d \"%s extension not enabled.\" % ext"},{"line_number":63,"context_line":"                raise cls.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0d8a9e19","line":60,"in_reply_to":"baada198_63caf06f","updated":"2014-08-11 15:42:18.000000000","message":"Done","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                client\u003dself.network_client, **s)"},{"line_number":97,"context_line":"            self.provider_subnets.append(subnet)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _check_network_connectivity(self, server,"},{"line_number":100,"context_line":"                                    keypair, should_connect\u003dTrue):"},{"line_number":101,"context_line":"        # Verify connectivity using ping and ssh"},{"line_number":102,"context_line":"        ssh_login \u003d CONF.compute.image_ssh_user"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6eac9736","line":99,"updated":"2014-07-09 08:51:50.000000000","message":"see my comment on _create_server","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                client\u003dself.network_client, **s)"},{"line_number":97,"context_line":"            self.provider_subnets.append(subnet)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _check_network_connectivity(self, server,"},{"line_number":100,"context_line":"                                    keypair, should_connect\u003dTrue):"},{"line_number":101,"context_line":"        # Verify connectivity using ping and ssh"},{"line_number":102,"context_line":"        ssh_login \u003d CONF.compute.image_ssh_user"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3077b58f","line":99,"in_reply_to":"baada198_6eac9736","updated":"2014-08-11 15:42:18.000000000","message":"Pls see my comment in _create_server. Here in this api we are validating the connectivity for multiple networks.","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           mac_addr)"},{"line_number":147,"context_line":"            self.assertIn(str(ipv6_eui64_addr), fixed_ips)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _create_server(self, name, network, security_groups, tenant_id):"},{"line_number":150,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":151,"context_line":"        self.addCleanup(self.cleanup_wrapper, keypair)"},{"line_number":152,"context_line":"        create_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_6392f0a0","line":149,"updated":"2014-07-09 08:51:50.000000000","message":"this is almost identical to the method in network_basic_ops\nplease move this to manager, instead of duplicating the code","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           mac_addr)"},{"line_number":147,"context_line":"            self.assertIn(str(ipv6_eui64_addr), fixed_ips)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _create_server(self, name, network, security_groups, tenant_id):"},{"line_number":150,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":151,"context_line":"        self.addCleanup(self.cleanup_wrapper, keypair)"},{"line_number":152,"context_line":"        create_kwargs \u003d {"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_70112d52","line":149,"in_reply_to":"baada198_6392f0a0","updated":"2014-08-11 15:42:18.000000000","message":"@Yair, the _create_server method in this class and the one in network_basic_ops do have some differences in terms of the arguments that are passed and also the return value. As you know, this is a small API without much logic in it. It just frames the kwargs and requests the server creation. IMHO by merging, we will have to introduce couple of checks like (tenant_id is passed or not, security_groups is passed or not etc) - the current API looks more readable. I can merge it if you strongly feel its necessary. Thanks.","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.addCleanup(self.cleanup_wrapper, access_sg)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        # Security Group rule to allow inbound SSH connection"},{"line_number":207,"context_line":"        ssh_rule \u003d dict("},{"line_number":208,"context_line":"            protocol\u003d\u0027tcp\u0027,"},{"line_number":209,"context_line":"            port_range_min\u003d22,"},{"line_number":210,"context_line":"            port_range_max\u003d22,"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_ee3507f8","line":207,"updated":"2014-07-09 08:51:50.000000000","message":"you don\u0027t need to create the dict. just send the values to the create_rule method as arguments","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"676abe9f00ab6e9f2edc4c322a9681f391e2af8e","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            ssh_rule[\u0027ethertype\u0027] \u003d ethertype"},{"line_number":215,"context_line":"            try:"},{"line_number":216,"context_line":"                rule \u003d self._create_security_group_rule(secgroup\u003daccess_sg,"},{"line_number":217,"context_line":"                                                        **ssh_rule)"},{"line_number":218,"context_line":"            except exc.NeutronClientException as ex:"},{"line_number":219,"context_line":"                # Ignore if the rule already exists."},{"line_number":220,"context_line":"                if not (ex.status_code is 409 and \u0027Security group rule\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_43e6cc17","line":217,"updated":"2014-07-09 08:51:50.000000000","message":"replace \"**ssh_rule\" with\n            protocol\u003d\u0027tcp\u0027,\n            port_range_min\u003d22,\n            port_range_max\u003d22,\n            direction\u003d\u0027ingress\u0027)","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":10257,"name":"Sridhar Gaddam","email":"sgaddam@redhat.com","username":"sridhargaddam"},"change_message_id":"26f5f7cdb0cbb479d76730d1fc845ce83a758708","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            ssh_rule[\u0027ethertype\u0027] \u003d ethertype"},{"line_number":215,"context_line":"            try:"},{"line_number":216,"context_line":"                rule \u003d self._create_security_group_rule(secgroup\u003daccess_sg,"},{"line_number":217,"context_line":"                                                        **ssh_rule)"},{"line_number":218,"context_line":"            except exc.NeutronClientException as ex:"},{"line_number":219,"context_line":"                # Ignore if the rule already exists."},{"line_number":220,"context_line":"                if not (ex.status_code is 409 and \u0027Security group rule\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b099057c","line":217,"in_reply_to":"baada198_43e6cc17","updated":"2014-08-11 15:42:18.000000000","message":"Thanks Yair, but as you see I tried to follow the same convention that is suggested in the description of the API - \"_create_security_group_rule\" and used across all the other files like - test_security_groups_basic_ops.py/test_load_balancer_basic.py\nDo you see any issue with the current approach?","commit_id":"5cf2c06b763196520bb11376ca2ac969e35ea13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class TestProviderNetworkBasicOps(manager.NetworkScenarioTest):"},{"line_number":32,"context_line":"    \"\"\"Test case to validate provider network scenarios."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This smoke test suite assumes that Nova has been configured to"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_60b58d18","line":31,"updated":"2014-08-13 08:35:38.000000000","message":"I think it would be better if this was split to 2 classes for each ip version\nimplement the test with ipv4 and then inherit it with changing the ip versions and overriding just the specific methods/properties needed for ipv6 (like done in API tests with \u0027json\u0027 and \u0027xml\u0027 interface) this way, the skipping would show up on test log and not debug log, and the logic of the various methods would not be so complicated","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        and list_subnets."},{"line_number":73,"context_line":"        \"\"\""},{"line_number":74,"context_line":"        self.provider_net \u003d None"},{"line_number":75,"context_line":"        seen_nets \u003d self._list_networks()"},{"line_number":76,"context_line":"        for n in seen_nets:"},{"line_number":77,"context_line":"            if CONF.network.provider_network_id \u003d\u003d n[\u0027id\u0027]:"},{"line_number":78,"context_line":"                self.provider_net \u003d net_common.DeletableNetwork("}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_56b5af17","line":75,"updated":"2014-08-13 08:35:38.000000000","message":"I think self.network_client.show_network(provider_net_id) is better.","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        msg \u003d \"Subnet not configured for provider network.\""},{"line_number":89,"context_line":"        self.assertNotEqual(0, len(subnets), msg)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        for s in subnets:"},{"line_number":92,"context_line":"            subnet \u003d net_common.DeletableSubnet("},{"line_number":93,"context_line":"                client\u003dself.network_client, **s)"},{"line_number":94,"context_line":"            self.provider_subnets.append(subnet)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d698df6b","line":91,"updated":"2014-08-13 08:35:38.000000000","message":"self.provider_subnets \u003d [net_common.DeletableSubnet(client, **s) for s in subnets]","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                client\u003dself.network_client, **s)"},{"line_number":94,"context_line":"            self.provider_subnets.append(subnet)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _check_network_connectivity(self, server,"},{"line_number":97,"context_line":"                                    keypair, should_connect\u003dTrue):"},{"line_number":98,"context_line":"        # Verify connectivity using ping and ssh"},{"line_number":99,"context_line":"        ssh_login \u003d CONF.compute.image_ssh_user"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_604cad40","line":96,"updated":"2014-08-13 08:35:38.000000000","message":"see response on patchset 4","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                                                           mac_addr)"},{"line_number":144,"context_line":"            self.assertIn(str(ipv6_eui64_addr), fixed_ips)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _create_server(self, name, network, security_groups, tenant_id):"},{"line_number":147,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":148,"context_line":"        create_kwargs \u003d {"},{"line_number":149,"context_line":"            \u0027nics\u0027: ["}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e057ddc7","line":146,"updated":"2014-08-13 08:35:38.000000000","message":"since tenant_ is always self.tenant_id, it\u0027s redundant.\nI\u0027m not sure the rest of these arguments are needed as well. at most, you could add secgroup to base method with default of self.secgroup\n\nI\u0027d prefer to minimize code duplication. Especially in light of the various refactoring efforts done and planned. hunting each scenario for its own slightly different version of each operation is bad practice","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            self.assertIn(str(ipv6_eui64_addr), fixed_ips)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def _create_server(self, name, network, security_groups, tenant_id):"},{"line_number":147,"context_line":"        keypair \u003d self.create_keypair(name\u003d\u0027keypair-%s\u0027 % name)"},{"line_number":148,"context_line":"        create_kwargs \u003d {"},{"line_number":149,"context_line":"            \u0027nics\u0027: ["},{"line_number":150,"context_line":"                {\u0027net-id\u0027: network.id},"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_a00405c6","line":147,"updated":"2014-08-13 08:35:38.000000000","message":"what happened to cleanup?","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            \u0027security_groups\u0027: security_groups,"},{"line_number":154,"context_line":"            \u0027tenant_id\u0027: tenant_id"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        server \u003d self.create_server(name\u003dname, create_kwargs\u003dcreate_kwargs)"},{"line_number":157,"context_line":"        return (server, keypair)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _check_provider_net_connectivity(self, server, keypair,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_00f3f1e8","line":156,"updated":"2014-08-13 08:35:38.000000000","message":"what happened to cleanup?","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            \u0027tenant_id\u0027: tenant_id"},{"line_number":155,"context_line":"        }"},{"line_number":156,"context_line":"        server \u003d self.create_server(name\u003dname, create_kwargs\u003dcreate_kwargs)"},{"line_number":157,"context_line":"        return (server, keypair)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _check_provider_net_connectivity(self, server, keypair,"},{"line_number":160,"context_line":"                                         tenant_id, secgroup):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_60faedbb","line":157,"updated":"2014-08-13 08:35:38.000000000","message":"braces are not needed.","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            raise"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    def _check_in_tenant_connectivity(self):"},{"line_number":283,"context_line":"        name \u003d data_utils.rand_name(\u0027server-smoke\u0027)"},{"line_number":284,"context_line":"        tenant_id \u003d self.tenant_id"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        # Create an access SG with inbound rule to allow SSH"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e0251d5c","line":283,"updated":"2014-08-13 08:35:38.000000000","message":"this should go in create server","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"0396bb5e58b90691081126ee2ada5e918b150a2f","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        - VM is able to reach the external ip address (by pinging the"},{"line_number":322,"context_line":"          default gateway of the provider network)."},{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        name \u003d data_utils.rand_name(\u0027server-smoke\u0027)"},{"line_number":325,"context_line":"        tenant_id \u003d self.tenant_id"},{"line_number":326,"context_line":"        secgroup \u003d self._create_empty_security_group(namestart\u003dname,"},{"line_number":327,"context_line":"                                                     tenant_id\u003dtenant_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_001a1119","line":324,"updated":"2014-08-13 08:35:38.000000000","message":"this should go in create server","commit_id":"b74588933b86a3ca9cbdcb77f45eda02439e6200"}]}
