)]}'
{"template/capsule/capsule-volume.yaml":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#capsule_template_version: 2017-12-20"},{"line_number":2,"context_line":"# use \"-\" because that the fields have many items"},{"line_number":3,"context_line":"capsule_version: beta"},{"line_number":4,"context_line":"kind: capsule"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f91af0f_dcb88077","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":2},"updated":"2018-01-05 06:46:17.000000000","message":"Why this is commented out? If this is intentional, it is better to add an inline comment to explain the rationals.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"b9669ca02c0c7757ac282c98121506bb9f8f0eb5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#capsule_template_version: 2017-12-20"},{"line_number":2,"context_line":"# use \"-\" because that the fields have many items"},{"line_number":3,"context_line":"capsule_version: beta"},{"line_number":4,"context_line":"kind: capsule"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f91af0f_70c6354b","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":2},"in_reply_to":"9f91af0f_95a3ab9e","updated":"2018-01-05 09:36:02.000000000","message":"Done","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"11978f5283a7a8aebf46e55d9712dbd5d2d78533","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#capsule_template_version: 2017-12-20"},{"line_number":2,"context_line":"# use \"-\" because that the fields have many items"},{"line_number":3,"context_line":"capsule_version: beta"},{"line_number":4,"context_line":"kind: capsule"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f91af0f_f217ad50","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":2},"in_reply_to":"9f91af0f_dcb88077","updated":"2018-01-05 08:22:07.000000000","message":"Hi Hongbin,\nI find that for Kubernetes Pod yaml, they don\u0027t have a template version, also I don\u0027t find any usage for the template version. If you agree, I prefer to delete the template version in capsule yaml.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"95845745d2733ae1600baa29ad2565d7b37ea479","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#capsule_template_version: 2017-12-20"},{"line_number":2,"context_line":"# use \"-\" because that the fields have many items"},{"line_number":3,"context_line":"capsule_version: beta"},{"line_number":4,"context_line":"kind: capsule"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"9f91af0f_95a3ab9e","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":2},"in_reply_to":"9f91af0f_f217ad50","updated":"2018-01-05 08:45:32.000000000","message":"Sure, let\u0027s delete it for now.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"}],"zun/common/utils.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        if \u0027image\u0027 not in container_spec.keys():"},{"line_number":373,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Container \""},{"line_number":374,"context_line":"                                                   \"image is needed\")"},{"line_number":375,"context_line":"        # Remap the field from Kubernetes type to OpenStack locally."},{"line_number":376,"context_line":"        for key in container_spec.keys():"},{"line_number":377,"context_line":"            container_spec[VALID_CONTAINER_FILED[key]] \u003d \\"},{"line_number":378,"context_line":"                container_spec.pop(key)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_9ff98ac9","line":375,"range":{"start_line":375,"start_character":10,"end_line":375,"end_character":67},"updated":"2018-01-05 06:46:17.000000000","message":"How about re-writing this comment as:\n\n  # Remap the Capsule\u0027s container fields to native Zun container fields.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"b9669ca02c0c7757ac282c98121506bb9f8f0eb5","unresolved":false,"context_lines":[{"line_number":372,"context_line":"        if \u0027image\u0027 not in container_spec.keys():"},{"line_number":373,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Container \""},{"line_number":374,"context_line":"                                                   \"image is needed\")"},{"line_number":375,"context_line":"        # Remap the field from Kubernetes type to OpenStack locally."},{"line_number":376,"context_line":"        for key in container_spec.keys():"},{"line_number":377,"context_line":"            container_spec[VALID_CONTAINER_FILED[key]] \u003d \\"},{"line_number":378,"context_line":"                container_spec.pop(key)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_10eb29b0","line":375,"range":{"start_line":375,"start_character":10,"end_line":375,"end_character":67},"in_reply_to":"9f91af0f_9ff98ac9","updated":"2018-01-05 09:36:02.000000000","message":"Done","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"028e2241ab1282924c3782b4232bde2e1a2e7b2c","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Container \""},{"line_number":394,"context_line":"                                                   \"image is needed\")"},{"line_number":395,"context_line":"        # Remap the Capsule\u0027s container fields to native Zun container fields."},{"line_number":396,"context_line":"        for key in container_spec.keys():"},{"line_number":397,"context_line":"            container_spec[VALID_CONTAINER_FILED[key]] \u003d \\"},{"line_number":398,"context_line":"                container_spec.pop(key)"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_7813c867","line":396,"range":{"start_line":396,"start_character":19,"end_line":396,"end_character":40},"updated":"2018-01-11 16:40:29.000000000","message":"In order to make it compatible with python 2 \u0026 3, do this instead:\n\n  for key in list(container_spec.keys()):\n      ...\n\nSee here for details: https://stackoverflow.com/questions/16819222/how-to-return-dictionary-keys-as-a-list-in-python","commit_id":"b4195bbdec60a6bb58ab2b049fc569959a9c901d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"a6ffc1921f7d9619fa5dc6c810b83a10b5699a3e","unresolved":false,"context_lines":[{"line_number":393,"context_line":"            raise exception.InvalidCapsuleTemplate(\"Container \""},{"line_number":394,"context_line":"                                                   \"image is needed\")"},{"line_number":395,"context_line":"        # Remap the Capsule\u0027s container fields to native Zun container fields."},{"line_number":396,"context_line":"        for key in container_spec.keys():"},{"line_number":397,"context_line":"            container_spec[VALID_CONTAINER_FILED[key]] \u003d \\"},{"line_number":398,"context_line":"                container_spec.pop(key)"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7f96bb07_133cd791","line":396,"range":{"start_line":396,"start_character":19,"end_line":396,"end_character":40},"in_reply_to":"7f96bb07_7813c867","updated":"2018-01-12 02:31:40.000000000","message":"Thanks Hongbin！","commit_id":"b4195bbdec60a6bb58ab2b049fc569959a9c901d"}],"zun/common/validation/parameter_types.py":[{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":281,"context_line":"}"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"capsule_container_command \u003d {"},{"line_number":284,"context_line":"    \u0027type\u0027: [\u0027array\u0027, \u0027null\u0027],"},{"line_number":285,"context_line":"    \u0027items\u0027: command"},{"line_number":286,"context_line":"}"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_5f78e228","line":284,"range":{"start_line":284,"start_character":23,"end_line":284,"end_character":27},"updated":"2018-01-05 06:46:17.000000000","message":"I wonder if we can remove \u0027null\u0027 from all capsule fields. I couldn\u0027t imagine if any capsule field can be of value \u0027null\u0027.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"95845745d2733ae1600baa29ad2565d7b37ea479","unresolved":false,"context_lines":[{"line_number":281,"context_line":"}"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"capsule_container_command \u003d {"},{"line_number":284,"context_line":"    \u0027type\u0027: [\u0027array\u0027, \u0027null\u0027],"},{"line_number":285,"context_line":"    \u0027items\u0027: command"},{"line_number":286,"context_line":"}"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_b5ccaf61","line":284,"range":{"start_line":284,"start_character":23,"end_line":284,"end_character":27},"in_reply_to":"9f91af0f_35889f6f","updated":"2018-01-05 08:45:32.000000000","message":"I think \u0027null\u0027 means the string \u0027null\u0027 is valid. For example, the following content is valid on a container creation request:\n\n  {\u0027command\u0027: \u0027null\u0027, ...}\n\nIn the case of capsule, it means below is valid:\n\n    spec:\n      containers:\n      - image: ubuntu:trusty\n        command: null\n        ...\n\nI am not sure if this is valid in k8s as well. If it is not, we\u0027d better to do the same in capsule.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"11978f5283a7a8aebf46e55d9712dbd5d2d78533","unresolved":false,"context_lines":[{"line_number":281,"context_line":"}"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"capsule_container_command \u003d {"},{"line_number":284,"context_line":"    \u0027type\u0027: [\u0027array\u0027, \u0027null\u0027],"},{"line_number":285,"context_line":"    \u0027items\u0027: command"},{"line_number":286,"context_line":"}"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_35889f6f","line":284,"range":{"start_line":284,"start_character":23,"end_line":284,"end_character":27},"in_reply_to":"9f91af0f_5f78e228","updated":"2018-01-05 08:22:07.000000000","message":"I\u0027ve question here.\nPer my understanding, the \"null\" means that the this field could be null?","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"b9669ca02c0c7757ac282c98121506bb9f8f0eb5","unresolved":false,"context_lines":[{"line_number":281,"context_line":"}"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"capsule_container_command \u003d {"},{"line_number":284,"context_line":"    \u0027type\u0027: [\u0027array\u0027, \u0027null\u0027],"},{"line_number":285,"context_line":"    \u0027items\u0027: command"},{"line_number":286,"context_line":"}"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_500a118a","line":284,"range":{"start_line":284,"start_character":23,"end_line":284,"end_character":27},"in_reply_to":"9f91af0f_70b9552c","updated":"2018-01-05 09:36:02.000000000","message":"Done","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"25add3f198f477d2c4254dfa937866627bfe6a1c","unresolved":false,"context_lines":[{"line_number":281,"context_line":"}"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"capsule_container_command \u003d {"},{"line_number":284,"context_line":"    \u0027type\u0027: [\u0027array\u0027, \u0027null\u0027],"},{"line_number":285,"context_line":"    \u0027items\u0027: command"},{"line_number":286,"context_line":"}"},{"line_number":287,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_70b9552c","line":284,"range":{"start_line":284,"start_character":23,"end_line":284,"end_character":27},"in_reply_to":"9f91af0f_b5ccaf61","updated":"2018-01-05 09:11:55.000000000","message":"OK I see,\nSo that I think null is not an available item. I will remove all the null check.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":369,"context_line":"}"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"volume_size \u003d {"},{"line_number":372,"context_line":"    \u0027type\u0027: [\u0027number\u0027, \u0027string\u0027, \u0027null\u0027],"},{"line_number":373,"context_line":"    \u0027pattern\u0027: \u0027^[0-9]*$\u0027,"},{"line_number":374,"context_line":"    \u0027minLength\u0027: 1"},{"line_number":375,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_1f8b3a1f","line":372,"range":{"start_line":372,"start_character":24,"end_line":372,"end_character":30},"updated":"2018-01-05 06:46:17.000000000","message":"I think volume size is always a number. It cannot be a string.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"b9669ca02c0c7757ac282c98121506bb9f8f0eb5","unresolved":false,"context_lines":[{"line_number":369,"context_line":"}"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"volume_size \u003d {"},{"line_number":372,"context_line":"    \u0027type\u0027: [\u0027number\u0027, \u0027string\u0027, \u0027null\u0027],"},{"line_number":373,"context_line":"    \u0027pattern\u0027: \u0027^[0-9]*$\u0027,"},{"line_number":374,"context_line":"    \u0027minLength\u0027: 1"},{"line_number":375,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_f00ec58b","line":372,"range":{"start_line":372,"start_character":24,"end_line":372,"end_character":30},"in_reply_to":"9f91af0f_1f8b3a1f","updated":"2018-01-05 09:36:02.000000000","message":"Done","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":375,"context_line":"}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_auto_remove \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"volume_uuid \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_5ff1c2cc","line":378,"range":{"start_line":378,"start_character":14,"end_line":378,"end_character":20},"updated":"2018-01-05 06:46:17.000000000","message":"Should this field be a boolean?","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"b9669ca02c0c7757ac282c98121506bb9f8f0eb5","unresolved":false,"context_lines":[{"line_number":375,"context_line":"}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_auto_remove \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"volume_uuid \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_101249b2","line":378,"range":{"start_line":378,"start_character":14,"end_line":378,"end_character":20},"in_reply_to":"9f91af0f_35edff24","updated":"2018-01-05 09:36:02.000000000","message":"Done","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"11978f5283a7a8aebf46e55d9712dbd5d2d78533","unresolved":false,"context_lines":[{"line_number":375,"context_line":"}"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"volume_auto_remove \u003d {"},{"line_number":378,"context_line":"    \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":379,"context_line":"}"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"volume_uuid \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_35edff24","line":378,"range":{"start_line":378,"start_character":14,"end_line":378,"end_character":20},"in_reply_to":"9f91af0f_5ff1c2cc","updated":"2018-01-05 08:22:07.000000000","message":"Yeah I make a mistake here.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"b48d1d6557fd37e33a8ffdbffb0d19874fcf0ef8","unresolved":false,"context_lines":[{"line_number":387,"context_line":"capsule_cinder_volume \u003d {"},{"line_number":388,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":389,"context_line":"    \u0027properties\u0027: {"},{"line_number":390,"context_line":"        \u0027volumeID\u0027: volume_uuid,"},{"line_number":391,"context_line":"        \u0027size\u0027: volume_size,"},{"line_number":392,"context_line":"        \u0027autoRemove\u0027: boolean,"},{"line_number":393,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_5f1c6211","line":390,"range":{"start_line":390,"start_character":9,"end_line":390,"end_character":17},"updated":"2018-01-05 06:46:17.000000000","message":"Two questions:\n\n* Can this property be required?\n* How about using volume name instead of uuid?","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":22076,"name":"Kevin Zhao","email":"kevin.zhao@linaro.org","username":"KevinZhao"},"change_message_id":"11978f5283a7a8aebf46e55d9712dbd5d2d78533","unresolved":false,"context_lines":[{"line_number":387,"context_line":"capsule_cinder_volume \u003d {"},{"line_number":388,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":389,"context_line":"    \u0027properties\u0027: {"},{"line_number":390,"context_line":"        \u0027volumeID\u0027: volume_uuid,"},{"line_number":391,"context_line":"        \u0027size\u0027: volume_size,"},{"line_number":392,"context_line":"        \u0027autoRemove\u0027: boolean,"},{"line_number":393,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_b5c10f83","line":390,"range":{"start_line":390,"start_character":9,"end_line":390,"end_character":17},"in_reply_to":"9f91af0f_5f1c6211","updated":"2018-01-05 08:22:07.000000000","message":"Can this property be required?\n  If set the size, there will create a new volume.\n  Or just set volumeID will use the existed volume.\n\nHow about using volume name instead of uuid?\n Several volumes can have a same name, so I think uuid is better here.","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"},{"author":{"_account_id":11536,"name":"hongbin","email":"hongbin034@gmail.com","username":"hongbin"},"change_message_id":"8bbd92cc36b886adc18150016cc604d25a6d1f9c","unresolved":false,"context_lines":[{"line_number":387,"context_line":"capsule_cinder_volume \u003d {"},{"line_number":388,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":389,"context_line":"    \u0027properties\u0027: {"},{"line_number":390,"context_line":"        \u0027volumeID\u0027: volume_uuid,"},{"line_number":391,"context_line":"        \u0027size\u0027: volume_size,"},{"line_number":392,"context_line":"        \u0027autoRemove\u0027: boolean,"},{"line_number":393,"context_line":"    },"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f91af0f_157a3bf0","line":390,"range":{"start_line":390,"start_character":9,"end_line":390,"end_character":17},"in_reply_to":"9f91af0f_b5c10f83","updated":"2018-01-05 08:47:46.000000000","message":"ACK","commit_id":"595353b757ee4bc31400bb5ebf3fc3c2e040ee4d"}]}
