)]}'
{"template/capsule/capsule-volume.yaml":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"7b851e96d8589c40d489c6fec5ce88a3629c40cc","unresolved":false,"context_lines":[{"line_number":9,"context_line":"restart_policy: always"},{"line_number":10,"context_line":"spec:"},{"line_number":11,"context_line":"  containers:"},{"line_number":12,"context_line":"  - image: test"},{"line_number":13,"context_line":"    command:"},{"line_number":14,"context_line":"      - \"/bin/bash\""},{"line_number":15,"context_line":"    workdir: /root"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9f91af0f_2def3385","line":12,"range":{"start_line":12,"start_character":11,"end_line":12,"end_character":15},"updated":"2018-01-02 21:05:50.000000000","message":"Nit: It seems this is a custom-built image? I think it is better to use another well-known image in here.","commit_id":"04572ebb8c0944d142de65210fc6253bef41e1ac"}],"template/capsule/capsule.yaml":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  - name: volume1"},{"line_number":67,"context_line":"    cinder:"},{"line_number":68,"context_line":"      size: 5"},{"line_number":69,"context_line":"      autoRemove: {}"},{"line_number":70,"context_line":"  - name: volume2"},{"line_number":71,"context_line":"    cinder:"},{"line_number":72,"context_line":"      volumeID: 1111111-2222-3333-4444-5555555555555"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"bf8cb3f7_98a2224b","line":69,"range":{"start_line":69,"start_character":18,"end_line":69,"end_character":20},"updated":"2017-12-25 12:56:52.000000000","message":"I think autoRemove is either True or False. If yes, we don\u0027t need to use a dict here.","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"}],"zun/api/controllers/experimental/capsules.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                utils.check_for_restart_policy(container_dict)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"            if container_dict.get(\u0027volumeMounts\u0027):"},{"line_number":220,"context_line":"                volume_mounts \u003d container_dict.get(\u0027volumeMounts\u0027)"},{"line_number":221,"context_line":"                for volume in volume_mounts:"},{"line_number":222,"context_line":"                    volume[\u0027container_name\u0027] \u003d name"},{"line_number":223,"context_line":"                    container_volume_requests.append(volume)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_386d1632","line":221,"range":{"start_line":220,"start_character":16,"end_line":221,"end_character":44},"updated":"2017-12-25 12:56:52.000000000","message":"Nit: you can rewrite this as:\n\n  for volume in container_dict[\u0027volumeMounts\u0027]:\n      ...","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                utils.check_for_restart_policy(container_dict)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"            if container_dict.get(\u0027volumeMounts\u0027):"},{"line_number":220,"context_line":"                volume_mounts \u003d container_dict.get(\u0027volumeMounts\u0027)"},{"line_number":221,"context_line":"                for volume in volume_mounts:"},{"line_number":222,"context_line":"                    volume[\u0027container_name\u0027] \u003d name"},{"line_number":223,"context_line":"                    container_volume_requests.append(volume)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_adc284e8","line":221,"range":{"start_line":220,"start_character":16,"end_line":221,"end_character":44},"in_reply_to":"bf8cb3f7_386d1632","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            container_dict[field] \u003d dict"},{"line_number":326,"context_line":"        return container_dict"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def _build_requested_volumes(self, context, mounts, volume_info):"},{"line_number":329,"context_line":"        # NOTE(hongbin): We assume cinder is the only volume provider here."},{"line_number":330,"context_line":"        # The logic needs to be re-visited if a second volume provider"},{"line_number":331,"context_line":"        # (i.e. Manila) is introduced."}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_f8e48eae","line":328,"range":{"start_line":328,"start_character":48,"end_line":328,"end_character":54},"updated":"2017-12-25 12:56:52.000000000","message":"I see this parameter is a \u0027volumes_spec\u0027. The name \u0027mounts\u0027 might look a bit confused because it can be interpreted as either \u0027volumes\u0027 or \u0027volumeMounts\u0027 element in the yaml file.","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            container_dict[field] \u003d dict"},{"line_number":326,"context_line":"        return container_dict"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def _build_requested_volumes(self, context, mounts, volume_info):"},{"line_number":329,"context_line":"        # NOTE(hongbin): We assume cinder is the only volume provider here."},{"line_number":330,"context_line":"        # The logic needs to be re-visited if a second volume provider"},{"line_number":331,"context_line":"        # (i.e. Manila) is introduced."}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_388996c9","line":328,"range":{"start_line":328,"start_character":56,"end_line":328,"end_character":67},"updated":"2017-12-25 12:56:52.000000000","message":"It looks this parameter is derived from \u0027volumeMounts\u0027. Perhaps rename it to \u0027mounts\u0027 or \u0027volume_mounts\u0027 is more clear.","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            container_dict[field] \u003d dict"},{"line_number":326,"context_line":"        return container_dict"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def _build_requested_volumes(self, context, mounts, volume_info):"},{"line_number":329,"context_line":"        # NOTE(hongbin): We assume cinder is the only volume provider here."},{"line_number":330,"context_line":"        # The logic needs to be re-visited if a second volume provider"},{"line_number":331,"context_line":"        # (i.e. Manila) is introduced."}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_6dbc7c69","line":328,"range":{"start_line":328,"start_character":56,"end_line":328,"end_character":67},"in_reply_to":"bf8cb3f7_388996c9","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            container_dict[field] \u003d dict"},{"line_number":326,"context_line":"        return container_dict"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def _build_requested_volumes(self, context, mounts, volume_info):"},{"line_number":329,"context_line":"        # NOTE(hongbin): We assume cinder is the only volume provider here."},{"line_number":330,"context_line":"        # The logic needs to be re-visited if a second volume provider"},{"line_number":331,"context_line":"        # (i.e. Manila) is introduced."}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_0db13090","line":328,"range":{"start_line":328,"start_character":48,"end_line":328,"end_character":54},"in_reply_to":"bf8cb3f7_f8e48eae","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        for mount in mounts:"},{"line_number":339,"context_line":"            mount_driver \u003d mount[volume_driver]"},{"line_number":340,"context_line":"            auto_remove \u003d False"},{"line_number":341,"context_line":"            if mount_driver.get(\"volumeID\", None):"},{"line_number":342,"context_line":"                uuid \u003d mount_driver.get(\"volumeID\", None)"},{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_b895a6e6","line":341,"range":{"start_line":341,"start_character":44,"end_line":341,"end_character":48},"updated":"2017-12-25 12:56:52.000000000","message":"Nit: this is the same as:\n\n  mount_driver.get(\"volumeID\"):","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        for mount in mounts:"},{"line_number":339,"context_line":"            mount_driver \u003d mount[volume_driver]"},{"line_number":340,"context_line":"            auto_remove \u003d False"},{"line_number":341,"context_line":"            if mount_driver.get(\"volumeID\", None):"},{"line_number":342,"context_line":"                uuid \u003d mount_driver.get(\"volumeID\", None)"},{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_2dae742e","line":341,"range":{"start_line":341,"start_character":44,"end_line":341,"end_character":48},"in_reply_to":"bf8cb3f7_b895a6e6","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            mount_driver \u003d mount[volume_driver]"},{"line_number":340,"context_line":"            auto_remove \u003d False"},{"line_number":341,"context_line":"            if mount_driver.get(\"volumeID\", None):"},{"line_number":342,"context_line":"                uuid \u003d mount_driver.get(\"volumeID\", None)"},{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"},{"line_number":345,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_d898aa1c","line":342,"range":{"start_line":342,"start_character":52,"end_line":342,"end_character":56},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            mount_driver \u003d mount[volume_driver]"},{"line_number":340,"context_line":"            auto_remove \u003d False"},{"line_number":341,"context_line":"            if mount_driver.get(\"volumeID\", None):"},{"line_number":342,"context_line":"                uuid \u003d mount_driver.get(\"volumeID\", None)"},{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"},{"line_number":345,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_cdaa6818","line":342,"range":{"start_line":342,"start_character":52,"end_line":342,"end_character":56},"in_reply_to":"bf8cb3f7_d898aa1c","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"},{"line_number":345,"context_line":"            else:"},{"line_number":346,"context_line":"                size \u003d mount_driver.get(\"size\", None)"},{"line_number":347,"context_line":"                volume \u003d cinder_api.create_volume(size)"},{"line_number":348,"context_line":"                if \"autoRemove\" in mount_driver.keys():"},{"line_number":349,"context_line":"                    auto_remove \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_789f1e03","line":346,"range":{"start_line":346,"start_character":48,"end_line":346,"end_character":52},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                volume \u003d cinder_api.search_volume(uuid)"},{"line_number":344,"context_line":"                cinder_api.ensure_volume_usable(volume)"},{"line_number":345,"context_line":"            else:"},{"line_number":346,"context_line":"                size \u003d mount_driver.get(\"size\", None)"},{"line_number":347,"context_line":"                volume \u003d cinder_api.create_volume(size)"},{"line_number":348,"context_line":"                if \"autoRemove\" in mount_driver.keys():"},{"line_number":349,"context_line":"                    auto_remove \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_eda72c4f","line":346,"range":{"start_line":346,"start_character":48,"end_line":346,"end_character":52},"in_reply_to":"bf8cb3f7_789f1e03","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    auto_remove \u003d True"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"            mount_destination \u003d None"},{"line_number":352,"context_line":"            mount_name \u003d None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"            for item in volume_info:"},{"line_number":355,"context_line":"                if item[\u0027name\u0027] \u003d\u003d mount[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_387756d7","line":352,"range":{"start_line":352,"start_character":12,"end_line":352,"end_character":22},"updated":"2017-12-25 12:56:52.000000000","message":"I think rename it as \u0027container_name\u0027 is more clear.","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    auto_remove \u003d True"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"            mount_destination \u003d None"},{"line_number":352,"context_line":"            mount_name \u003d None"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"            for item in volume_info:"},{"line_number":355,"context_line":"                if item[\u0027name\u0027] \u003d\u003d mount[\u0027name\u0027]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_ad67e425","line":352,"range":{"start_line":352,"start_character":12,"end_line":352,"end_character":22},"in_reply_to":"bf8cb3f7_387756d7","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    mount_name \u003d item[\u0027container_name\u0027]"},{"line_number":358,"context_line":"                    break"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"            if mount_destination and mount_name:"},{"line_number":361,"context_line":"                volmapp \u003d objects.VolumeMapping("},{"line_number":362,"context_line":"                    context,"},{"line_number":363,"context_line":"                    volume_id\u003dvolume.id, volume_provider\u003dvolume_driver,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_d84f4a90","line":360,"range":{"start_line":360,"start_character":12,"end_line":360,"end_character":48},"updated":"2017-12-25 12:56:52.000000000","message":"I think it is better to throw a 400 exception if either mount_destination or mount_name is evaluated to False because it means users provided an invalid yaml file.","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                    mount_name \u003d item[\u0027container_name\u0027]"},{"line_number":358,"context_line":"                    break"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"            if mount_destination and mount_name:"},{"line_number":361,"context_line":"                volmapp \u003d objects.VolumeMapping("},{"line_number":362,"context_line":"                    context,"},{"line_number":363,"context_line":"                    volume_id\u003dvolume.id, volume_provider\u003dvolume_driver,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_0d0db03d","line":360,"range":{"start_line":360,"start_character":12,"end_line":360,"end_character":48},"in_reply_to":"bf8cb3f7_d84f4a90","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"7b851e96d8589c40d489c6fec5ce88a3629c40cc","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            # if volume search or created failed, will remove all"},{"line_number":378,"context_line":"            # the created volume.The existed volume will remain."},{"line_number":379,"context_line":"            for volume in volume_created:"},{"line_number":380,"context_line":"                cinder_api.delete_volume(volume.id)"},{"line_number":381,"context_line":"            raise e"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        return requested_volumes"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_091fc46c","line":380,"range":{"start_line":380,"start_character":27,"end_line":380,"end_character":40},"updated":"2018-01-02 21:05:50.000000000","message":"This might throw exception in several cases. For example, if the volume is created by Zun, it won\u0027t be immediately available (it will stay on \u0027Creating\u0027 in a few seconds). Deleting a \"create in progress\" volume raise an exception in here. However, the cleanup should continue regardless of any exception.\n\nSuggest to wrap this in a try-catch block and tolerate any potential exception in deleting volumes.","commit_id":"04572ebb8c0944d142de65210fc6253bef41e1ac"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ba6c10e8c8746b054ca8a13e2558594197e608c4","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            # if volume search or created failed, will remove all"},{"line_number":378,"context_line":"            # the created volume.The existed volume will remain."},{"line_number":379,"context_line":"            for volume in volume_created:"},{"line_number":380,"context_line":"                cinder_api.delete_volume(volume.id)"},{"line_number":381,"context_line":"            raise e"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        return requested_volumes"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_dc0ca195","line":380,"range":{"start_line":380,"start_character":27,"end_line":380,"end_character":40},"in_reply_to":"9f91af0f_091fc46c","updated":"2018-01-10 02:52:02.000000000","message":"Uploaded a new patchset to fix this.","commit_id":"04572ebb8c0944d142de65210fc6253bef41e1ac"}],"zun/common/utils.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"def capsule_get_volume_spec(spec_field):"},{"line_number":367,"context_line":"    volumes_spec \u003d spec_field.get(\u0027volumes\u0027, None)"},{"line_number":368,"context_line":"    if not volumes_spec:"},{"line_number":369,"context_line":"        return []"},{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_9849c28c","line":367,"range":{"start_line":367,"start_character":45,"end_line":367,"end_character":49},"updated":"2017-12-25 12:56:52.000000000","message":"Nit: this is the same as:\n\n  volumes_spec \u003d spec_field.get(\u0027volumes\u0027)","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"def capsule_get_volume_spec(spec_field):"},{"line_number":367,"context_line":"    volumes_spec \u003d spec_field.get(\u0027volumes\u0027, None)"},{"line_number":368,"context_line":"    if not volumes_spec:"},{"line_number":369,"context_line":"        return []"},{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_7108d627","line":367,"range":{"start_line":367,"start_character":45,"end_line":367,"end_character":49},"in_reply_to":"bf8cb3f7_9849c28c","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        return []"},{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    for i in range(0, volumes_num):"},{"line_number":373,"context_line":"        volume_name \u003d volumes_spec[i].get(\u0027name\u0027, None)"},{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_f859ee59","line":372,"range":{"start_line":372,"start_character":4,"end_line":372,"end_character":35},"updated":"2017-12-25 12:56:52.000000000","message":"Nit: this is the same as:\n\n  for i in range(volumes_num):\n      ...","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        return []"},{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    for i in range(0, volumes_num):"},{"line_number":373,"context_line":"        volume_name \u003d volumes_spec[i].get(\u0027name\u0027, None)"},{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_d12c429b","line":372,"range":{"start_line":372,"start_character":4,"end_line":372,"end_character":35},"in_reply_to":"bf8cb3f7_f859ee59","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    for i in range(0, volumes_num):"},{"line_number":373,"context_line":"        volume_name \u003d volumes_spec[i].get(\u0027name\u0027, None)"},{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_1855b21d","line":373,"range":{"start_line":373,"start_character":50,"end_line":373,"end_character":54},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    volumes_num \u003d len(volumes_spec)"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"    for i in range(0, volumes_num):"},{"line_number":373,"context_line":"        volume_name \u003d volumes_spec[i].get(\u0027name\u0027, None)"},{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_7121b69f","line":373,"range":{"start_line":373,"start_character":50,"end_line":373,"end_character":54},"in_reply_to":"bf8cb3f7_1855b21d","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_983ea2d8","line":377,"range":{"start_line":377,"start_character":41,"end_line":377,"end_character":45},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        if volume_name is None:"},{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_9126bab7","line":377,"range":{"start_line":377,"start_character":41,"end_line":377,"end_character":45},"in_reply_to":"bf8cb3f7_983ea2d8","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_182a928f","line":378,"range":{"start_line":378,"start_character":56,"end_line":378,"end_character":60},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":375,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Volume name \""},{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_313b2ed2","line":378,"range":{"start_line":378,"start_character":56,"end_line":378,"end_character":60},"in_reply_to":"bf8cb3f7_182a928f","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"},{"line_number":382,"context_line":"                if volume_size is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_b81a867a","line":379,"range":{"start_line":379,"start_character":54,"end_line":379,"end_character":58},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":376,"context_line":"                                                   \"is needed\")"},{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"},{"line_number":382,"context_line":"                if volume_size is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_513832d2","line":379,"range":{"start_line":379,"start_character":54,"end_line":379,"end_character":58},"in_reply_to":"bf8cb3f7_b81a867a","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"ad0b23b7a74b803138bd49450ac2284b9a6d3a82","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"},{"line_number":382,"context_line":"                if volume_size is None:"},{"line_number":383,"context_line":"                    raise exception.InvalidCapsuleTemplate(\"Volume size \""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf8cb3f7_d81d0a74","line":380,"range":{"start_line":380,"start_character":50,"end_line":380,"end_character":54},"updated":"2017-12-25 12:56:52.000000000","message":"Ditto","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"505ba3c8ba375af06e4ae1e9edf24b26d3bd4370","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        if volumes_spec[i].get(\u0027cinder\u0027, None):"},{"line_number":378,"context_line":"            cinder_spec \u003d volumes_spec[i].get(\u0027cinder\u0027, None)"},{"line_number":379,"context_line":"            volume_uuid \u003d cinder_spec.get(\u0027volumeID\u0027, None)"},{"line_number":380,"context_line":"            volume_size \u003d cinder_spec.get(\u0027size\u0027, None)"},{"line_number":381,"context_line":"            if not volume_uuid:"},{"line_number":382,"context_line":"                if volume_size is None:"},{"line_number":383,"context_line":"                    raise exception.InvalidCapsuleTemplate(\"Volume size \""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_f134e6e0","line":380,"range":{"start_line":380,"start_character":50,"end_line":380,"end_character":54},"in_reply_to":"bf8cb3f7_d81d0a74","updated":"2017-12-29 07:30:25.000000000","message":"Done","commit_id":"9234839ff862e40c20e265e6797ccd3f28d22585"}]}
