)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"1b951a95a71443e2eeb60c898d736201077d1340","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     TimurNurlygayanov \u003ctnurlygayanov@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-05-30 16:29:36 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added NeutronNetwork context"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Ifa37c2d529df9027be7823a0544fe5ee977d0ab1"},{"line_number":10,"context_line":"implements blueprint create-neutron-networks-for-generated-tenants"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"1ae5cdf2_dc92d757","line":7,"updated":"2014-06-16 11:50:17.000000000","message":"Could you add some description? thanks","commit_id":"24871f0a6167a3660f6321490ab8272716cdcf82"}],"rally/benchmark/context/neutron_network.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"f8a22f205be063cf093170330b28041bf2ba5e69","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.config.setdefault(\"network_ip_version\", 4)"},{"line_number":52,"context_line":"        self.config.setdefault(\"network_cidr\", \"10.0.0.0/24\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _get_neutron_client(cls, endpoint):"},{"line_number":55,"context_line":"        return osclients.Clients(endpoint).neutron()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_95262415","line":54,"updated":"2014-05-28 23:55:32.000000000","message":"I would prefer to avoid such methods. imho:\n\n  NeutronNetwork._get_neutron_client(endpoint)\nvs\n  osclients.Clients(endpoint).neutron()\n\nit\u0027s even shorter..","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"f5a140897babbb4cc6923c48c3dbae95f8454eff","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        self.config.setdefault(\"network_ip_version\", 4)"},{"line_number":52,"context_line":"        self.config.setdefault(\"network_cidr\", \"10.0.0.0/24\")"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _get_neutron_client(cls, endpoint):"},{"line_number":55,"context_line":"        return osclients.Clients(endpoint).neutron()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_e0b9682f","line":54,"in_reply_to":"3ae8d1ca_95262415","updated":"2014-05-29 00:20:07.000000000","message":"Done","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0742c6a9331549a88842500abc64972809427196","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def _generate_network(cls, neutron, args):"},{"line_number":74,"context_line":"        net_ip_version, net_cidr \u003d args"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        \"\"\" Find the external network. \"\"\""},{"line_number":77,"context_line":"        for net in neutron.list_networks()[\u0027networks\u0027]:"},{"line_number":78,"context_line":"            if net.get(\u0027router:external\u0027):"},{"line_number":79,"context_line":"                external_network \u003d net"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_d5fc2c41","line":76,"updated":"2014-05-29 00:01:22.000000000","message":"you shouldn\u0027t use docstrings inside code, especially in case of commenting one line.\n\n\nInstead of \"\"\" use #\n\ne.g.\n\n# Find the external network\n\n\nfix other places as well","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"f5a140897babbb4cc6923c48c3dbae95f8454eff","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    def _generate_network(cls, neutron, args):"},{"line_number":74,"context_line":"        net_ip_version, net_cidr \u003d args"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        \"\"\" Find the external network. \"\"\""},{"line_number":77,"context_line":"        for net in neutron.list_networks()[\u0027networks\u0027]:"},{"line_number":78,"context_line":"            if net.get(\u0027router:external\u0027):"},{"line_number":79,"context_line":"                external_network \u003d net"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_a0968092","line":76,"in_reply_to":"3ae8d1ca_d5fc2c41","updated":"2014-05-29 00:20:07.000000000","message":"Done","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0742c6a9331549a88842500abc64972809427196","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        neutron.create_router(router_info)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        \"\"\" Create internal network. \"\"\""},{"line_number":89,"context_line":"        internal_network \u003d {\u0027network\u0027: {\u0027name\u0027: cls.NETWORK_NAME}}"},{"line_number":90,"context_line":"        neutron.create_network(internal_network)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        \"\"\" Get dictionary of new elements. \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_55a01c43","line":89,"updated":"2014-05-29 00:01:22.000000000","message":"we don\u0027t use \u0027 in our code. Use always \"","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"f5a140897babbb4cc6923c48c3dbae95f8454eff","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        neutron.create_router(router_info)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        \"\"\" Create internal network. \"\"\""},{"line_number":89,"context_line":"        internal_network \u003d {\u0027network\u0027: {\u0027name\u0027: cls.NETWORK_NAME}}"},{"line_number":90,"context_line":"        neutron.create_network(internal_network)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        \"\"\" Get dictionary of new elements. \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_c091cc9b","line":89,"in_reply_to":"3ae8d1ca_55a01c43","updated":"2014-05-29 00:20:07.000000000","message":"Done","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"79b478d5e03241a014e85f180a8999d412bd3ae2","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            args \u003d (self.config[\u0027network_ip_version\u0027],"},{"line_number":115,"context_line":"                    self.config[\u0027network_cidr\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            neutron \u003d self._get_neutron_client(user[\u0027endpoint\u0027])"},{"line_number":118,"context_line":"            network \u003d self._generate_network(neutron, args)"},{"line_number":119,"context_line":"            user[\"network\"] \u003d network"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_15c85421","line":117,"updated":"2014-05-28 23:57:34.000000000","message":"the code will be much cleaner if you make next:\n\n  user[\"network\"] \u003d self._generate_network(user[\"endpoint\",] args)\n\nImho one clear line instead of 3 unclear","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"f5a140897babbb4cc6923c48c3dbae95f8454eff","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            args \u003d (self.config[\u0027network_ip_version\u0027],"},{"line_number":115,"context_line":"                    self.config[\u0027network_cidr\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            neutron \u003d self._get_neutron_client(user[\u0027endpoint\u0027])"},{"line_number":118,"context_line":"            network \u003d self._generate_network(neutron, args)"},{"line_number":119,"context_line":"            user[\"network\"] \u003d network"},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_80f7c4f4","line":117,"in_reply_to":"3ae8d1ca_15c85421","updated":"2014-05-29 00:20:07.000000000","message":"Rewrited with two lines, because I don\u0027t want to initialize neutron client in _generate_network method - it is simple to mock and control.","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"0742c6a9331549a88842500abc64972809427196","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                neutron \u003d self._get_neutron_client(endpoint)"},{"line_number":127,"context_line":"                self._network_remove(neutron)"},{"line_number":128,"context_line":"            except Exception as e:"},{"line_number":129,"context_line":"                LOG.warning(\"Unable to delete router: %(rname)s for user \""},{"line_number":130,"context_line":"                            \"%(tenant)s/%(user)s: %(message)s\""},{"line_number":131,"context_line":"                            % {\u0027rname\u0027: self.ROUTER_NAME,"},{"line_number":132,"context_line":"                               \u0027tenant\u0027: endpoint.tenant_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_159694f0","line":129,"updated":"2014-05-29 00:01:22.000000000","message":"I think thsi should be translated as well","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"f5a140897babbb4cc6923c48c3dbae95f8454eff","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                neutron \u003d self._get_neutron_client(endpoint)"},{"line_number":127,"context_line":"                self._network_remove(neutron)"},{"line_number":128,"context_line":"            except Exception as e:"},{"line_number":129,"context_line":"                LOG.warning(\"Unable to delete router: %(rname)s for user \""},{"line_number":130,"context_line":"                            \"%(tenant)s/%(user)s: %(message)s\""},{"line_number":131,"context_line":"                            % {\u0027rname\u0027: self.ROUTER_NAME,"},{"line_number":132,"context_line":"                               \u0027tenant\u0027: endpoint.tenant_name,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_a0dda072","line":129,"in_reply_to":"3ae8d1ca_159694f0","updated":"2014-05-29 00:20:07.000000000","message":"Done","commit_id":"8a7707e09c6d852147c25dc897bb7db982455996"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"4025cd62692f298059566d5d6849e0d55178f716","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        router_info \u003d {\"router\": {\"name\": router_name,"},{"line_number":87,"context_line":"                                  \"external_gateway_info\": gw_info,"},{"line_number":88,"context_line":"                                  \"tenant_id\": tenant_id}}"},{"line_number":89,"context_line":"        neutron.create_router(router_info)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Create internal network."},{"line_number":92,"context_line":"        internal_network \u003d {\"network\": {\"name\": network_name,"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_0f6da498","line":89,"updated":"2014-07-02 14:08:22.000000000","message":"Is it necessary to create router\u0026interfaces attached to it? IMO, we can only ensure that there is valid network\u0026subnet for tenant to use, right? You can create router only if you want the vms to be sshed via floatingip.","commit_id":"24871f0a6167a3660f6321490ab8272716cdcf82"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"34b82bb0e6178f42f7b82f2dad89596db38e9e5b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            # Generate CIDR for new network"},{"line_number":120,"context_line":"            args \u003d (tenant[\"id\"],"},{"line_number":121,"context_line":"                    self.config[\"network_ip_version\"],"},{"line_number":122,"context_line":"                    self.config[\"network_cidr\"] % index)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            neutron_client \u003d osclients.Clients(admin_endpoint).neutron()"},{"line_number":125,"context_line":"            self._generate_network(neutron_client, args)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1ae5cdf2_6a14f9e8","line":122,"updated":"2014-06-12 09:30:24.000000000","message":"...\n net \u003d netaddr.IPNetwork(self.config[\"network_cidr_start\"])\n net \u003d net.next()\n net \u003d net.next()\n...\nsuch approach will work for much more number of networks (not limited to 255)","commit_id":"24871f0a6167a3660f6321490ab8272716cdcf82"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"67437b06ec41169d983fd7eb9805f9acb4c27f3a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        router_info \u003d {\"router\": {\"name\": router_name,"},{"line_number":87,"context_line":"                                  \"external_gateway_info\": gw_info,"},{"line_number":88,"context_line":"                                  \"tenant_id\": tenant_id}}"},{"line_number":89,"context_line":"        neutron.create_router(router_info)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        # Create internal network."},{"line_number":92,"context_line":"        internal_network \u003d {\"network\": {\"name\": network_name,"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_f03d4890","line":89,"updated":"2014-07-05 16:55:04.000000000","message":"do we really need to create a router? I think it\u0027s ok to just create a network and corresponding subnet to it.","commit_id":"0945930a2e36b8c7cab9927f02bdce166a8a82df"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"955f7b9e07df4a2fddd4afa5d23a2bee7657638b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    def setup(self):"},{"line_number":116,"context_line":"        admin_endpoint \u003d self.context[\"admin\"][\"endpoint\"]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        for index, tenant in enumerate(self.context[\"tenants\"]):"},{"line_number":119,"context_line":"            # Generate CIDR for new network"},{"line_number":120,"context_line":"            args \u003d (tenant[\"id\"],"},{"line_number":121,"context_line":"                    self.config[\"network_ip_version\"],"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_93114006","line":118,"updated":"2014-07-08 05:15:22.000000000","message":"Please use \"self.context.get(\u0027tenants\u0027, [])\" in L118, to avoid exception if \"tenants\" key does not exist in context.","commit_id":"0945930a2e36b8c7cab9927f02bdce166a8a82df"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"67437b06ec41169d983fd7eb9805f9acb4c27f3a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                    self.config[\"network_ip_version\"],"},{"line_number":122,"context_line":"                    self.config[\"network_cidr\"] % index)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"            neutron_client \u003d osclients.Clients(admin_endpoint).neutron()"},{"line_number":125,"context_line":"            self._generate_network(neutron_client, args)"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Exit context: `neutron_network`\"))"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_90bdec04","line":124,"updated":"2014-07-05 16:55:04.000000000","message":"IMO, you\u0027d better put this line out of the loop.","commit_id":"0945930a2e36b8c7cab9927f02bdce166a8a82df"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"955f7b9e07df4a2fddd4afa5d23a2bee7657638b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        admin_endpoint \u003d self.context[\"admin\"][\"endpoint\"]"},{"line_number":130,"context_line":"        neutron_client \u003d osclients.Clients(admin_endpoint).neutron()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        for tenant in self.context[\"tenants\"]:"},{"line_number":133,"context_line":"            try:"},{"line_number":134,"context_line":"                self._network_remove(neutron_client, tenant[\"id\"])"},{"line_number":135,"context_line":"            except Exception as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"baada198_136610bb","line":132,"updated":"2014-07-08 05:15:22.000000000","message":"Please use \"self.context.get(\u0027tenants\u0027, [])\" in L132, to avoid exception if \"tenants\" key does not exist in context.","commit_id":"0945930a2e36b8c7cab9927f02bdce166a8a82df"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"49826d48df6a62904d5a8000ba6db32efc74897d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                external_network \u003d network"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create router and add external network to this router."},{"line_number":84,"context_line":"        gw_info \u003d {\"network_id\": external_network[\"id\"],"},{"line_number":85,"context_line":"                   \"enable_snat\": True}"},{"line_number":86,"context_line":"        router_info \u003d {\"router\": {\"name\": router_name,"},{"line_number":87,"context_line":"                                  \"external_gateway_info\": gw_info,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_4c031c73","line":84,"updated":"2014-08-16 05:51:47.000000000","message":"what happens if there is no external network?","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"361cbb266d43242121f199548e4d62c36da35ce4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                external_network \u003d network"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        # Create router and add external network to this router."},{"line_number":84,"context_line":"        gw_info \u003d {\"network_id\": external_network[\"id\"],"},{"line_number":85,"context_line":"                   \"enable_snat\": True}"},{"line_number":86,"context_line":"        router_info \u003d {\"router\": {\"name\": router_name,"},{"line_number":87,"context_line":"                                  \"external_gateway_info\": gw_info,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_7f64fce4","line":84,"in_reply_to":"7ac7a964_4c031c73","updated":"2014-08-16 07:00:05.000000000","message":"In the correctly configured OpenStack cloud with Neutron we should have at least one external network for all tenants.\n\nAnd yes, we need to check that we have external network to avoid errors.","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"49826d48df6a62904d5a8000ba6db32efc74897d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        neutron.create_network(internal_network)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        # Get dictionary of new elements."},{"line_number":97,"context_line":"        network \u003d neutron.list_networks(name\u003dnetwork_name)[\"networks\"][0]"},{"line_number":98,"context_line":"        router \u003d neutron.list_routers(name\u003drouter_name)[\"routers\"][0]"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # Create subnet for internal network."}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_ccee4cb4","line":97,"updated":"2014-08-16 05:51:47.000000000","message":"the network object can be retrieved from the function \u0027neutron.create_network(internal_network)\u0027","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"49826d48df6a62904d5a8000ba6db32efc74897d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        neutron.create_subnet(subnet)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # Get subnet dictionary."},{"line_number":108,"context_line":"        subnet \u003d neutron.list_subnets(network_id\u003dnetwork[\"id\"])[\"subnets\"][0]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Add subnet to the router."},{"line_number":111,"context_line":"        neutron.add_interface_router(router[\"id\"],"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_2c37c04f","line":108,"updated":"2014-08-16 05:51:47.000000000","message":"same with comments in L97","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"49826d48df6a62904d5a8000ba6db32efc74897d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        subnet \u003d neutron.list_subnets(network_id\u003dnetwork[\"id\"])[\"subnets\"][0]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Add subnet to the router."},{"line_number":111,"context_line":"        neutron.add_interface_router(router[\"id\"],"},{"line_number":112,"context_line":"                                     {\"subnet_id\": subnet[\"id\"]})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `neutron_network`\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_8c3b7437","line":111,"updated":"2014-08-16 05:51:47.000000000","message":"as I mentioned in patch 14, we just want to create networks and subnets for the tenants, so, is it necessary to create router and attach interface here?","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"361cbb266d43242121f199548e4d62c36da35ce4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        subnet \u003d neutron.list_subnets(network_id\u003dnetwork[\"id\"])[\"subnets\"][0]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Add subnet to the router."},{"line_number":111,"context_line":"        neutron.add_interface_router(router[\"id\"],"},{"line_number":112,"context_line":"                                     {\"subnet_id\": subnet[\"id\"]})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `neutron_network`\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_df27d0b4","line":111,"in_reply_to":"7ac7a964_8c3b7437","updated":"2014-08-16 07:00:05.000000000","message":"Yes, we need to create router and assign network to this router if we want to allow traffic from the Internet to the VMs and from VMs to the Internet.\n\nIf we will create just network and subnet, VMs will get the IP adresses, but it will be impossible to ping/login via ssh to this VM.","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"},{"author":{"_account_id":6732,"name":"Lingxian Kong","email":"anlin.kong@gmail.com","username":"kong"},"change_message_id":"6bf00f34449f8b564101d6f4d54c2af0901e63d3","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        subnet \u003d neutron.list_subnets(network_id\u003dnetwork[\"id\"])[\"subnets\"][0]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        # Add subnet to the router."},{"line_number":111,"context_line":"        neutron.add_interface_router(router[\"id\"],"},{"line_number":112,"context_line":"                                     {\"subnet_id\": subnet[\"id\"]})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @utils.log_task_wrapper(LOG.info, _(\"Enter context: `neutron_network`\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"7ac7a964_d802860a","line":111,"in_reply_to":"7ac7a964_df27d0b4","updated":"2014-08-16 14:48:57.000000000","message":"Actually, this patch is very similar to my patch https://review.openstack.org/103306, but my original thought is just ensure there is available networks for tenants, no matter neutron or nova-network is used as networking, or the server creation will fail. As far as I know, ssh or ping is tested only in the vm scenario test.\n\nSo, maybe we can participate in the NetworkContext implementation, to avoid duplication of effort, thoughts?","commit_id":"c92c426b485a7a6282ef6137574a58e6b9a2c2d1"}]}
