)]}'
{"karbor/services/protection/protection_plugins/pod/pod_protection_plugin.py":[{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"159628cdee4c16cff8dd553f19c652065e19d118","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            resource_definition[\"resource_name\"] \u003d pod_name"},{"line_number":58,"context_line":"            resource_definition[\"namespace\"] \u003d pod_namespace"},{"line_number":59,"context_line":"            mounted_volumes_list \u003d []"},{"line_number":60,"context_line":"            for volume in pod.spec.volumes:"},{"line_number":61,"context_line":"                volume_pvc \u003d volume.persistent_volume_claim"},{"line_number":62,"context_line":"                volume_cinder \u003d volume.cinder"},{"line_number":63,"context_line":"                volume_pvc_name \u003d volume.name"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"                if volume_pvc:"},{"line_number":66,"context_line":"                    pvc_name \u003d volume_pvc.claim_name"},{"line_number":67,"context_line":"                    pvc \u003d k8s_client.read_namespaced_persistent_volume_claim("},{"line_number":68,"context_line":"                        pvc_name, pod_namespace)"},{"line_number":69,"context_line":"                    pv_name \u003d pvc.spec.volume_name"},{"line_number":70,"context_line":"                    if pv_name:"},{"line_number":71,"context_line":"                        pv \u003d k8s_client.read_persistent_volume(pv_name)"},{"line_number":72,"context_line":"                        if pv.spec.cinder:"},{"line_number":73,"context_line":"                            pod_cinder_volume \u003d {"},{"line_number":74,"context_line":"                                \u0027name\u0027: volume_pvc_name,"},{"line_number":75,"context_line":"                                \u0027cinder\u0027: {"},{"line_number":76,"context_line":"                                    \"volumeID\": pv.spec.cinder.volume_id,"},{"line_number":77,"context_line":"                                    \"fsType\": pv.spec.cinder.fs_type,"},{"line_number":78,"context_line":"                                    \"readOnly\": pv.spec.cinder.read_only"},{"line_number":79,"context_line":"                                }"},{"line_number":80,"context_line":"                            }"},{"line_number":81,"context_line":"                            mounted_volumes_list.append(pod_cinder_volume)"},{"line_number":82,"context_line":"                elif volume_cinder:"},{"line_number":83,"context_line":"                    pod_cinder_volume \u003d {"},{"line_number":84,"context_line":"                        \u0027name\u0027: volume_pvc_name,"},{"line_number":85,"context_line":"                        \u0027cinder\u0027: {"},{"line_number":86,"context_line":"                            \"volumeID\": volume_cinder.volume_id,"},{"line_number":87,"context_line":"                            \"fsType\": volume_cinder.fs_type,"},{"line_number":88,"context_line":"                            \"readOnly\": volume_cinder.read_only"},{"line_number":89,"context_line":"                        }"},{"line_number":90,"context_line":"                    }"},{"line_number":91,"context_line":"                    mounted_volumes_list.append(pod_cinder_volume)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"            containers_list \u003d []"},{"line_number":94,"context_line":"            for spec_container in pod.spec.containers:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f2577a7_28d165ce","line":91,"range":{"start_line":60,"start_character":12,"end_line":91,"end_character":66},"updated":"2017-09-13 01:19:54.000000000","message":"IMO, extract this to a private method may be better.","commit_id":"6f16d71d39cf2cc88b74e1968e6d6941171f8a8c"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"159628cdee4c16cff8dd553f19c652065e19d118","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                    }"},{"line_number":91,"context_line":"                    mounted_volumes_list.append(pod_cinder_volume)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"            containers_list \u003d []"},{"line_number":94,"context_line":"            for spec_container in pod.spec.containers:"},{"line_number":95,"context_line":"                resources \u003d (spec_container.resources.to_dict()"},{"line_number":96,"context_line":"                             if spec_container.resources else None)"},{"line_number":97,"context_line":"                volume_mounts_list \u003d []"},{"line_number":98,"context_line":"                if spec_container.volume_mounts:"},{"line_number":99,"context_line":"                    for spec_volume_mount in spec_container.volume_mounts:"},{"line_number":100,"context_line":"                        if \u0027serviceaccount\u0027 in spec_volume_mount.mount_path:"},{"line_number":101,"context_line":"                            continue"},{"line_number":102,"context_line":"                        volume_mount \u003d {"},{"line_number":103,"context_line":"                            \u0027name\u0027: spec_volume_mount.name,"},{"line_number":104,"context_line":"                            \u0027mountPath\u0027: spec_volume_mount.mount_path,"},{"line_number":105,"context_line":"                            \u0027readOnly\u0027: spec_volume_mount.read_only,"},{"line_number":106,"context_line":"                        }"},{"line_number":107,"context_line":"                        volume_mounts_list.append(volume_mount)"},{"line_number":108,"context_line":"                container \u003d {"},{"line_number":109,"context_line":"                    \u0027command\u0027: spec_container.command,"},{"line_number":110,"context_line":"                    \u0027image\u0027: spec_container.image,"},{"line_number":111,"context_line":"                    \u0027name\u0027: spec_container.name,"},{"line_number":112,"context_line":"                    \u0027resources\u0027: resources,"},{"line_number":113,"context_line":"                    \u0027volumeMounts\u0027: volume_mounts_list"},{"line_number":114,"context_line":"                }"},{"line_number":115,"context_line":"                containers_list.append(container)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            # save all pod\u0027s metadata"},{"line_number":118,"context_line":"            pod_metadata \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f2577a7_e8da3de7","line":115,"range":{"start_line":93,"start_character":12,"end_line":115,"end_character":49},"updated":"2017-09-13 01:19:54.000000000","message":"IMO, extract this to a private method may be better.","commit_id":"6f16d71d39cf2cc88b74e1968e6d6941171f8a8c"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"b19ec257babf898573a25857e67a5f9b5a6fd1e1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                    }"},{"line_number":91,"context_line":"                    mounted_volumes_list.append(pod_cinder_volume)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"            containers_list \u003d []"},{"line_number":94,"context_line":"            for spec_container in pod.spec.containers:"},{"line_number":95,"context_line":"                resources \u003d (spec_container.resources.to_dict()"},{"line_number":96,"context_line":"                             if spec_container.resources else None)"},{"line_number":97,"context_line":"                volume_mounts_list \u003d []"},{"line_number":98,"context_line":"                if spec_container.volume_mounts:"},{"line_number":99,"context_line":"                    for spec_volume_mount in spec_container.volume_mounts:"},{"line_number":100,"context_line":"                        if \u0027serviceaccount\u0027 in spec_volume_mount.mount_path:"},{"line_number":101,"context_line":"                            continue"},{"line_number":102,"context_line":"                        volume_mount \u003d {"},{"line_number":103,"context_line":"                            \u0027name\u0027: spec_volume_mount.name,"},{"line_number":104,"context_line":"                            \u0027mountPath\u0027: spec_volume_mount.mount_path,"},{"line_number":105,"context_line":"                            \u0027readOnly\u0027: spec_volume_mount.read_only,"},{"line_number":106,"context_line":"                        }"},{"line_number":107,"context_line":"                        volume_mounts_list.append(volume_mount)"},{"line_number":108,"context_line":"                container \u003d {"},{"line_number":109,"context_line":"                    \u0027command\u0027: spec_container.command,"},{"line_number":110,"context_line":"                    \u0027image\u0027: spec_container.image,"},{"line_number":111,"context_line":"                    \u0027name\u0027: spec_container.name,"},{"line_number":112,"context_line":"                    \u0027resources\u0027: resources,"},{"line_number":113,"context_line":"                    \u0027volumeMounts\u0027: volume_mounts_list"},{"line_number":114,"context_line":"                }"},{"line_number":115,"context_line":"                containers_list.append(container)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            # save all pod\u0027s metadata"},{"line_number":118,"context_line":"            pod_metadata \u003d {"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f2577a7_2c1cabbf","line":115,"range":{"start_line":93,"start_character":12,"end_line":115,"end_character":49},"in_reply_to":"5f2577a7_e8da3de7","updated":"2017-09-15 15:41:34.000000000","message":"sound good. I will update it ASAP.","commit_id":"6f16d71d39cf2cc88b74e1968e6d6941171f8a8c"}]}
