)]}'
{"zun/compute/manager.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"036352ff8b7003d870fc4bf6cbad8a56b946c8e7","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            return"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        sandbox_id \u003d None"},{"line_number":84,"context_line":"        if \u0027NovaDockerDriver\u0027 in CONF.container_driver:"},{"line_number":85,"context_line":"            container.task_state \u003d consts.SANDBOX_CREATING"},{"line_number":86,"context_line":"            container.save(context)"},{"line_number":87,"context_line":"            sandbox_image \u003d CONF.sandbox_image"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_254c15c6","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":55},"updated":"2017-06-08 21:30:42.000000000","message":"I would suggest an alternative approach for this\n\n* Define a \u0027capabilites\u0027 attribute in driver class (like what nova did: https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L299) . \n* Do a check here like: if self.driver.capabilities[\"use_sandbox\"]:","commit_id":"e976322b0833302e090a40d9a9ac00a7e53819bf"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        sandbox_id \u003d None"},{"line_number":90,"context_line":"        if CONF.use_sandbox and self.driver.capabilities[\"support_sandbox\"]:"},{"line_number":91,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container, reraise)"},{"line_number":92,"context_line":"            if sandbox_id is None:"},{"line_number":93,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_15cb5972","line":90,"updated":"2017-07-03 07:07:02.000000000","message":"How are we going to handle the case of NovaDockerDriver because sandbox is tightly coupled in the driver?\n\nFor NovaDockerDriver, this config doesn\u0027t makes sense. I think we should also add a check here for the driver_type.","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        sandbox_id \u003d None"},{"line_number":90,"context_line":"        if CONF.use_sandbox and self.driver.capabilities[\"support_sandbox\"]:"},{"line_number":91,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container, reraise)"},{"line_number":92,"context_line":"            if sandbox_id is None:"},{"line_number":93,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_f09cd96a","line":90,"in_reply_to":"3f1d235d_15cb5972","updated":"2017-07-06 23:08:48.000000000","message":"Good point. I addressed this as following:\n* Introduce another capability: \"support_standalone\"\n* Introduce a validation for the \"use_sandbox\" config\n\nFor a driver that supports \"sandbox\" only (i.e. NovaDocker), it should set \"support_sandbox\" to True and set \"support_standalone\" to False. If the config \"use_sandbox\" is set to False and the capability \"support_standalone\" is False, an exception will be thrown. I tried to avoid hard-code the driver name since it doesn\u0027t work if the driver is out-of-tree.","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"dbadbe893169924f2038ebddaafb766982a5d518","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        sandbox_id \u003d None"},{"line_number":90,"context_line":"        if CONF.use_sandbox and self.driver.capabilities[\"support_sandbox\"]:"},{"line_number":91,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container, reraise)"},{"line_number":92,"context_line":"            if sandbox_id is None:"},{"line_number":93,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_69020d0c","line":90,"in_reply_to":"3f1d235d_97beb0d2","updated":"2017-07-07 15:23:12.000000000","message":"It seems We cannot because Kevin relies on it to implement the capsule feature: https://review.openstack.org/#/c/480456/ . What I can do is to setup a CI to verify both \"sandbox\" and \"standalone\" scenario and make sure it doesn\u0027t broke.","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"df7f0451542d68b3b1e9aa784e8cc61ce9b62a38","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            return"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        sandbox_id \u003d None"},{"line_number":90,"context_line":"        if CONF.use_sandbox and self.driver.capabilities[\"support_sandbox\"]:"},{"line_number":91,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container, reraise)"},{"line_number":92,"context_line":"            if sandbox_id is None:"},{"line_number":93,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_97beb0d2","line":90,"in_reply_to":"3f1d235d_f09cd96a","updated":"2017-07-07 07:04:55.000000000","message":"Yes this seems to handle the current situation well.\nHowever I have concern, do we really need to support the sandbox for Docker driver also? Can we remove this and get rid of this complexity?","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":15122,"name":"Kiseok Kim","email":"kiseok7@gmail.com","username":"Kiseok"},"change_message_id":"f78c2b77293ca6a5db1dfdc6cd8bba82300647b6","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        sandbox_id \u003d None"},{"line_number":94,"context_line":"        if self.use_sandbox():"},{"line_number":95,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container,"},{"line_number":96,"context_line":"                                              requested_networks, reraise)"},{"line_number":97,"context_line":"            if sandbox_id is None:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f1d235d_fdb38296","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":30},"updated":"2017-07-07 09:50:23.000000000","message":"If we verify use_sandbox() in init method,\nWe could get exception when it initialize \nand use_sandbox method could be called once.\n\nHow do you think? code like this:\n\ndef __init__(self):\n\n        if self._use_sandbox():\n            self.use_sandbox \u003d True\n        else:\n            self.use_sandbox \u003d False","commit_id":"6e24fa36a2a68e94e93833a29acad3d65961acdc"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"20e28e8b8e6fcedc4467f56c9a2503a84bcc5d12","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        sandbox_id \u003d None"},{"line_number":94,"context_line":"        if self.use_sandbox():"},{"line_number":95,"context_line":"            sandbox_id \u003d self._create_sandbox(context, container,"},{"line_number":96,"context_line":"                                              requested_networks, reraise)"},{"line_number":97,"context_line":"            if sandbox_id is None:"}],"source_content_type":"text/x-python","patch_set":31,"id":"3f1d235d_0e5eff44","line":94,"range":{"start_line":94,"start_character":8,"end_line":94,"end_character":30},"in_reply_to":"3f1d235d_fdb38296","updated":"2017-07-07 15:19:27.000000000","message":"Good suggestion. Will address it in the next patchset.","commit_id":"6e24fa36a2a68e94e93833a29acad3d65961acdc"}],"zun/conf/container_driver.py":[{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d\u0027Define the cpusets to be excluded from pinning\u0027),"},{"line_number":40,"context_line":"    cfg.BoolOpt(\u0027use_sandbox\u0027,"},{"line_number":41,"context_line":"                default\u003dFalse,"},{"line_number":42,"context_line":"                help\u003d\u0027Whether to create an infra container.\u0027)"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_23174254","line":42,"updated":"2017-07-03 07:07:02.000000000","message":"I think more details can be added here about the infra container, so that operators gets idea what is the use of infra container and  based on that they should enable it or not. Thoughts?","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":39,"context_line":"               help\u003d\u0027Define the cpusets to be excluded from pinning\u0027),"},{"line_number":40,"context_line":"    cfg.BoolOpt(\u0027use_sandbox\u0027,"},{"line_number":41,"context_line":"                default\u003dFalse,"},{"line_number":42,"context_line":"                help\u003d\u0027Whether to create an infra container.\u0027)"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_d0979d44","line":42,"in_reply_to":"3f1d235d_23174254","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"}],"zun/container/docker/driver.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"036352ff8b7003d870fc4bf6cbad8a56b946c8e7","unresolved":false,"context_lines":[{"line_number":531,"context_line":"            value \u003d unicode(value)"},{"line_number":532,"context_line":"        return value.encode(\u0027utf-8\u0027)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def create_sandbox(self, context, container, image\u003d\u0027kubernetes/pause\u0027,"},{"line_number":535,"context_line":"                       networks\u003dNone):"},{"line_number":536,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":537,"context_line":"            network_api \u003d zun_network.api(context\u003dcontext, docker_api\u003ddocker)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_40ac978b","line":534,"range":{"start_line":534,"start_character":8,"end_line":534,"end_character":22},"updated":"2017-06-08 21:30:42.000000000","message":"@miao,\n\nThe goal of the BP is removing sandbox from this driver, so this method needs to be removed. In addition, the following needs to be done:\n\n* Move the network creation/retrieve codes to \"def create\" (line #537 - #544).\n* Move security group codes to \"def create\" (line #549 - #552). \n* For line #556 - #558, it disconnect the infra container (sandbox) from bridge network and connect it to kuryr network. If sandbox is removed, we need to do that for the real container. In particular, you might want to port these network configuration logic (#556 - #558) to somewhere below line #114 (in which the real container is created).","commit_id":"e976322b0833302e090a40d9a9ac00a7e53819bf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"036352ff8b7003d870fc4bf6cbad8a56b946c8e7","unresolved":false,"context_lines":[{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        return docker_networks[0]"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"    def delete_sandbox(self, context, sandbox_id):"},{"line_number":605,"context_line":"        if sandbox_id is None:"},{"line_number":606,"context_line":"            return"},{"line_number":607,"context_line":"        with docker_utils.docker_client() as docker:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_4507091e","line":604,"range":{"start_line":604,"start_character":8,"end_line":604,"end_character":22},"updated":"2017-06-08 21:30:42.000000000","message":"I think simply removing this method would work as well.","commit_id":"e976322b0833302e090a40d9a9ac00a7e53819bf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"036352ff8b7003d870fc4bf6cbad8a56b946c8e7","unresolved":false,"context_lines":[{"line_number":616,"context_line":"                    return"},{"line_number":617,"context_line":"                raise"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"    def stop_sandbox(self, context, sandbox_id):"},{"line_number":620,"context_line":"        if sandbox_id is None:"},{"line_number":621,"context_line":"            return"},{"line_number":622,"context_line":"        with docker_utils.docker_client() as docker:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_0563511c","line":619,"range":{"start_line":619,"start_character":8,"end_line":619,"end_character":20},"updated":"2017-06-08 21:30:42.000000000","message":"I think simply removing this method would work as well.","commit_id":"e976322b0833302e090a40d9a9ac00a7e53819bf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"036352ff8b7003d870fc4bf6cbad8a56b946c8e7","unresolved":false,"context_lines":[{"line_number":646,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":647,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":648,"context_line":"            addresses \u003d {}"},{"line_number":649,"context_line":"            if sandbox_id is None:"},{"line_number":650,"context_line":"                response \u003d docker.inspect_container(container.container_id)"},{"line_number":651,"context_line":"            else:"},{"line_number":652,"context_line":"                response \u003d docker.inspect_container(sandbox_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_850d2140","line":649,"range":{"start_line":649,"start_character":15,"end_line":649,"end_character":25},"updated":"2017-06-08 21:30:42.000000000","message":"I think you can assume this driver has no sandbox, so simply remove this check and always do an inspect on container.container_id is enough.","commit_id":"e976322b0833302e090a40d9a9ac00a7e53819bf"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"267ca48632fc5f9ac77d27f95740a892e57b60d3","unresolved":false,"context_lines":[{"line_number":599,"context_line":""},{"line_number":600,"context_line":"    def delete_sandbox(self, context, sandbox_id):"},{"line_number":601,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":602,"context_line":"            network_api \u003d zun_network.api(context\u003dcontext, docker_api\u003ddocker)"},{"line_number":603,"context_line":"            sandbox \u003d docker.inspect_container(sandbox_id)"},{"line_number":604,"context_line":"            for network in sandbox[\"NetworkSettings\"][\"Networks\"]:"},{"line_number":605,"context_line":"                network_api.disconnect_container_from_network(sandbox, network)"},{"line_number":606,"context_line":"            try:"},{"line_number":607,"context_line":"                docker.remove_container(sandbox_id, force\u003dTrue)"},{"line_number":608,"context_line":"            except errors.APIError as api_error:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_32d96ef2","side":"PARENT","line":605,"range":{"start_line":602,"start_character":12,"end_line":605,"end_character":79},"updated":"2017-06-15 22:58:21.000000000","message":"If sandbox is not used, these logic would need to move to \"def delete()\" instead.","commit_id":"9fe36056b2591e8efd6558be17dd1e481bbc2b1b"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"267ca48632fc5f9ac77d27f95740a892e57b60d3","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            host_config \u003d {}"},{"line_number":110,"context_line":"            if sandbox_id is None:"},{"line_number":111,"context_line":"                host_config[\u0027network_mode\u0027] \u003d \u0027bridge\u0027"},{"line_number":112,"context_line":"                host_config[\u0027ipc_mode\u0027] \u003d \u0027host\u0027"},{"line_number":113,"context_line":"            else:"},{"line_number":114,"context_line":"                host_config[\u0027network_mode\u0027] \u003d \u0027container:%s\u0027 % sandbox_id"},{"line_number":115,"context_line":"                # TODO(hongbin): Uncomment this after docker-py add support for"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_f249b6b6","line":112,"range":{"start_line":111,"start_character":16,"end_line":112,"end_character":48},"updated":"2017-06-15 22:58:21.000000000","message":"Removed all these setting because we don\u0027t need to set them anymore.","commit_id":"66b2cae2fdc03e8e46572202ebaf13a9b3cf532a"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"2f8a46d3fc27ab7907d6a885a1ad241b1cbe04bb","unresolved":false,"context_lines":[{"line_number":621,"context_line":"                if not neutron_net_name:"},{"line_number":622,"context_line":"                    continue"},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"                v4_address \u003d network.get(\"IPAddress\", \"\")"},{"line_number":625,"context_line":"                v6_address \u003d network.get(\"GlobalIPv6Address\", \"\")"},{"line_number":626,"context_line":"                mac_address \u003d network[\"MacAddress\"]"},{"line_number":627,"context_line":"                ports \u003d neutron.list_ports(mac_address\u003dmac_address)[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_a6807df6","line":624,"range":{"start_line":624,"start_character":42,"end_line":624,"end_character":51},"updated":"2017-06-17 02:30:41.000000000","message":"These attributes are only available if the container is running. It will become empty when the container is stopped or created. Therefore, I retrieved the IP addresses from IPAM config instead.","commit_id":"66b2cae2fdc03e8e46572202ebaf13a9b3cf532a"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"1afad77703ee98810349cd159d212948b04aa95c","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            # Container connects to the bridge network by default so disconnect"},{"line_number":126,"context_line":"            # the container from it before connecting it to neutron network."},{"line_number":127,"context_line":"            # This avoids potential conflict between these two networks."},{"line_number":128,"context_line":"            network_api.disconnect_container_from_network(container, \u0027bridge\u0027)"},{"line_number":129,"context_line":"            addresses \u003d {}"},{"line_number":130,"context_line":"            for network in networks:"},{"line_number":131,"context_line":"                addrs \u003d network_api.connect_container_to_network("}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_16017f6a","line":128,"updated":"2017-06-19 16:37:06.000000000","message":"Can this raise error in any case? Would it be good to have this in try-catch block?","commit_id":"7f7573c333ed946e3294369fae542bcd117e1c33"},{"author":{"_account_id":23055,"name":"miaohb","email":"miao.hongbao@zte.com.cn","username":"miaohb"},"change_message_id":"433f4563fbdb81b2063e84f2a31bdaf759f7e468","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            # Container connects to the bridge network by default so disconnect"},{"line_number":126,"context_line":"            # the container from it before connecting it to neutron network."},{"line_number":127,"context_line":"            # This avoids potential conflict between these two networks."},{"line_number":128,"context_line":"            network_api.disconnect_container_from_network(container, \u0027bridge\u0027)"},{"line_number":129,"context_line":"            addresses \u003d {}"},{"line_number":130,"context_line":"            for network in networks:"},{"line_number":131,"context_line":"                addrs \u003d network_api.connect_container_to_network("}],"source_content_type":"text/x-python","patch_set":12,"id":"7f231b9d_44a16c95","line":128,"in_reply_to":"7f231b9d_16017f6a","updated":"2017-06-20 06:19:51.000000000","message":"@Kumari: How about add the try-catch block to disconnect_container_from_network?zun/network/kuryr_network.py@172","commit_id":"7f7573c333ed946e3294369fae542bcd117e1c33"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            response \u003d docker.images(repo, quiet)"},{"line_number":74,"context_line":"            return response"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create(self, context, container, image, networks\u003dNone):"},{"line_number":77,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":78,"context_line":"        network_standalone \u003d False if sandbox_id else True"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_958d2933","line":76,"range":{"start_line":76,"start_character":48,"end_line":76,"end_character":61},"updated":"2017-07-03 07:07:02.000000000","message":"In which case we pass this network? \nI think the network are always created inside this method call. Right?","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"df7f0451542d68b3b1e9aa784e8cc61ce9b62a38","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            response \u003d docker.images(repo, quiet)"},{"line_number":74,"context_line":"            return response"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create(self, context, container, image, networks\u003dNone):"},{"line_number":77,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":78,"context_line":"        network_standalone \u003d False if sandbox_id else True"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_b7b88c10","line":76,"range":{"start_line":76,"start_character":48,"end_line":76,"end_character":61},"in_reply_to":"3f1d235d_107bd527","updated":"2017-07-07 07:04:55.000000000","message":"I see. Thanks for the information.","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            response \u003d docker.images(repo, quiet)"},{"line_number":74,"context_line":"            return response"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def create(self, context, container, image, networks\u003dNone):"},{"line_number":77,"context_line":"        sandbox_id \u003d self.get_sandbox_id(container)"},{"line_number":78,"context_line":"        network_standalone \u003d False if sandbox_id else True"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_107bd527","line":76,"range":{"start_line":76,"start_character":48,"end_line":76,"end_character":61},"in_reply_to":"3f1d235d_958d2933","updated":"2017-07-06 23:08:48.000000000","message":"Shunli has implemented a feature to pass requested_networks from CLI .","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            teardown_network \u003d False"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":170,"context_line":"            network_api \u003d zun_network.api(context\u003dcontext, docker_api\u003ddocker)"},{"line_number":171,"context_line":"            if teardown_network:"},{"line_number":172,"context_line":"                self._cleanup_network_for_container(container, network_api)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_f8bfb4f8","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":77},"updated":"2017-07-03 07:07:02.000000000","message":"I suggest to move this line under the teardown_network check to L172","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            teardown_network \u003d False"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        with docker_utils.docker_client() as docker:"},{"line_number":170,"context_line":"            network_api \u003d zun_network.api(context\u003dcontext, docker_api\u003ddocker)"},{"line_number":171,"context_line":"            if teardown_network:"},{"line_number":172,"context_line":"                self._cleanup_network_for_container(container, network_api)"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_d070bd42","line":170,"range":{"start_line":170,"start_character":12,"end_line":170,"end_character":77},"in_reply_to":"3f1d235d_f8bfb4f8","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":741,"context_line":""},{"line_number":742,"context_line":"class NovaDockerDriver(DockerDriver):"},{"line_number":743,"context_line":"    capabilities \u003d {"},{"line_number":744,"context_line":"        \"use_sandbox\": True,"},{"line_number":745,"context_line":"    }"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def add_security_group(self, context, container, security_group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_75dded40","line":744,"range":{"start_line":744,"start_character":9,"end_line":744,"end_character":20},"updated":"2017-07-03 07:07:02.000000000","message":"Isn\u0027t this should be \"support_sandbox\"?","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":741,"context_line":""},{"line_number":742,"context_line":"class NovaDockerDriver(DockerDriver):"},{"line_number":743,"context_line":"    capabilities \u003d {"},{"line_number":744,"context_line":"        \"use_sandbox\": True,"},{"line_number":745,"context_line":"    }"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def add_security_group(self, context, container, security_group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_b091c149","line":744,"range":{"start_line":744,"start_character":9,"end_line":744,"end_character":20},"in_reply_to":"3f1d235d_75dded40","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"}],"zun/network/kuryr_network.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a1a4a4bad84ae40279bc2bcda67ce4c24b87140d","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        # TODO(hongbin): Use objects instead of an ad hoc dict."},{"line_number":155,"context_line":"        if \"NetworkSettings\" in container:"},{"line_number":156,"context_line":"            network \u003d container[\"NetworkSettings\"][\"Networks\"][network_name]"},{"line_number":157,"context_line":"            endpoint_id \u003d network[\"EndpointID\"]"},{"line_number":158,"context_line":"            # Kuryr set the port\u0027s device_id as endpoint_id so we leverge it"},{"line_number":159,"context_line":"            neutron_ports \u003d self.neutron.list_ports(device_id\u003dendpoint_id)"},{"line_number":160,"context_line":"            neutron_ports \u003d neutron_ports.get(\u0027ports\u0027, [])"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_060cd1a2","side":"PARENT","line":157,"range":{"start_line":157,"start_character":35,"end_line":157,"end_character":45},"updated":"2017-06-17 02:32:21.000000000","message":"FYI. This attribute won\u0027t be available if the container is not running. To work around, I use the \"port\" attribute in the \"addresses\" field of container instead.","commit_id":"ce49c2bf6f6d47d609ca8757badda1ec5a160449"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"a1a4a4bad84ae40279bc2bcda67ce4c24b87140d","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        neutron_ports \u003d None"},{"line_number":181,"context_line":"        if \"NetworkSettings\" in container:"},{"line_number":182,"context_line":"            network \u003d container[\"NetworkSettings\"][\"Networks\"][network_name]"},{"line_number":183,"context_line":"            endpoint_id \u003d network[\"EndpointID\"]"},{"line_number":184,"context_line":"            # Kuryr set the port\u0027s device_id as endpoint_id so we leverge it"},{"line_number":185,"context_line":"            neutron_ports \u003d self.neutron.list_ports(device_id\u003dendpoint_id)"},{"line_number":186,"context_line":"            neutron_ports \u003d neutron_ports.get(\u0027ports\u0027, [])"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f231b9d_c601396c","side":"PARENT","line":183,"range":{"start_line":183,"start_character":35,"end_line":183,"end_character":45},"updated":"2017-06-17 02:32:21.000000000","message":"Ditto.","commit_id":"ce49c2bf6f6d47d609ca8757badda1ec5a160449"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return self.docker.networks(**kwargs)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def connect_container_to_network(self, container, network_name,"},{"line_number":115,"context_line":"                                     container_id\u003dNone, security_groups\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Connect container to the network"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        This method will create a neutron port, retrieve the ip address(es)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_b805bcc4","line":115,"range":{"start_line":115,"start_character":37,"end_line":115,"end_character":54},"updated":"2017-07-03 07:07:02.000000000","message":"I think this param can be removed as this can be fetched from container object.","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        return self.docker.networks(**kwargs)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def connect_container_to_network(self, container, network_name,"},{"line_number":115,"context_line":"                                     container_id\u003dNone, security_groups\u003dNone):"},{"line_number":116,"context_line":"        \"\"\"Connect container to the network"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        This method will create a neutron port, retrieve the ip address(es)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_509a6d61","line":115,"range":{"start_line":115,"start_character":37,"end_line":115,"end_character":54},"in_reply_to":"3f1d235d_b805bcc4","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        return addresses"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def disconnect_container_from_network(self, container, network_name,"},{"line_number":165,"context_line":"                                          container_id\u003dNone):"},{"line_number":166,"context_line":"        if not container_id:"},{"line_number":167,"context_line":"            container_id \u003d container.container_id"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_780f24e1","line":165,"range":{"start_line":165,"start_character":42,"end_line":165,"end_character":54},"updated":"2017-07-03 07:07:02.000000000","message":"ditto","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":162,"context_line":"        return addresses"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def disconnect_container_from_network(self, container, network_name,"},{"line_number":165,"context_line":"                                          container_id\u003dNone):"},{"line_number":166,"context_line":"        if not container_id:"},{"line_number":167,"context_line":"            container_id \u003d container.container_id"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_30a5b1a2","line":165,"range":{"start_line":165,"start_character":42,"end_line":165,"end_character":54},"in_reply_to":"3f1d235d_780f24e1","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"e52b3a19d0f22a6e5e2d15bcb71fa0c0d3ebb3bb","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                            \u0027 not enabled.\u0027)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def add_security_groups_to_ports(self, container, security_group_ids,"},{"line_number":188,"context_line":"                                     container_id\u003dNone):"},{"line_number":189,"context_line":"        if not container_id:"},{"line_number":190,"context_line":"            container_id \u003d container.container_id"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_38f9acc7","line":188,"range":{"start_line":188,"start_character":37,"end_line":188,"end_character":49},"updated":"2017-07-03 07:07:02.000000000","message":"ditto","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"bfd9460f3c33f24010d8feeb49362c57e5bc7c00","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                            \u0027 not enabled.\u0027)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def add_security_groups_to_ports(self, container, security_group_ids,"},{"line_number":188,"context_line":"                                     container_id\u003dNone):"},{"line_number":189,"context_line":"        if not container_id:"},{"line_number":190,"context_line":"            container_id \u003d container.container_id"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3f1d235d_d0a55da0","line":188,"range":{"start_line":188,"start_character":37,"end_line":188,"end_character":49},"in_reply_to":"3f1d235d_38f9acc7","updated":"2017-07-06 23:08:48.000000000","message":"Done","commit_id":"ab3f049cff919426a92c0993fe333169064a406f"}]}
