)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28486,"name":"Tee Ngo","email":"tee.ngo@windriver.com","username":"teewrs"},"change_message_id":"e28093d6080c115983f003fbc4dca7b75c1a3718","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"9ccc3898_8f66aebd","updated":"2022-01-26 14:04:03.000000000","message":"Vague test plan. I will start the review after commit message is updated with concrete test cases. Thanks.","commit_id":"1da6455e9befc2b823421a353cf1fa6ef1eeed04"},{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"8789e7ed7f181c47338cfb5805a0e8981ef578f1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5a55722e_5ef17205","updated":"2022-01-28 18:21:28.000000000","message":"recheck","commit_id":"5b990f5b68c591fe3e9a9281323d3547c7bead1b"},{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"f1e4a0c987586fa144e1eccadab65278fa4ee908","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"cbc9dae7_93b5fe3a","updated":"2022-01-28 17:21:40.000000000","message":"recheck","commit_id":"5b990f5b68c591fe3e9a9281323d3547c7bead1b"},{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"9dcc34c1973834255922adcbb0d23f8cd0ee4fb5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a86ba906_c481c1ae","updated":"2022-01-28 18:21:18.000000000","message":"the depends-on just passed zuul.  now we can re-attempt zuul","commit_id":"5b990f5b68c591fe3e9a9281323d3547c7bead1b"},{"author":{"_account_id":28486,"name":"Tee Ngo","email":"tee.ngo@windriver.com","username":"teewrs"},"change_message_id":"7433c74730756adb5249f87971315fe51ba677c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"7ff53226_85160285","updated":"2022-01-31 15:20:53.000000000","message":"Just check","commit_id":"2e4d15147f6e060a41f7b340ef36107d2935592c"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"42e330d6dea23bcb10c0af854ee7dfed7ec08cae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"16317324_46d0f216","updated":"2022-01-31 21:45:02.000000000","message":"lgtm","commit_id":"284b1682f2a13c0cdf04440548d0d4d34705c6cc"}],"distributedcloud-client/dcmanagerclient/api/v1/subcloud_deploy_manager.py":[{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":6,"id":"dba767b7_2304f346","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"updated":"2022-01-27 15:41:53.000000000","message":"2022","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\");"}],"source_content_type":"text/x-python","patch_set":6,"id":"41930bc4_3cb346c0","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"in_reply_to":"dba767b7_2304f346","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"20dcb07effb3615c18d160d463d6af1485ca7e64","unresolved":true,"context_lines":[{"line_number":75,"context_line":"        json_object \u003d get_json(resp)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        resource \u003d list()"},{"line_number":78,"context_line":"        if \u0027prestage_images\u0027 not in json_object:"},{"line_number":79,"context_line":"            resource.append("},{"line_number":80,"context_line":"                self.resource_class("},{"line_number":81,"context_line":"                    deploy_playbook\u003djson_object[\u0027deploy_playbook\u0027],"},{"line_number":82,"context_line":"                    deploy_overrides\u003djson_object[\u0027deploy_overrides\u0027],"},{"line_number":83,"context_line":"                    deploy_chart\u003djson_object[\u0027deploy_chart\u0027]))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            if \u0027deploy_playbook\u0027 in json_object:"},{"line_number":87,"context_line":"                resource.append("},{"line_number":88,"context_line":"                    self.resource_class("},{"line_number":89,"context_line":"                        deploy_playbook\u003djson_object[\u0027deploy_playbook\u0027],"},{"line_number":90,"context_line":"                        deploy_overrides\u003djson_object[\u0027deploy_overrides\u0027],"},{"line_number":91,"context_line":"                        deploy_chart\u003djson_object[\u0027deploy_chart\u0027],"},{"line_number":92,"context_line":"                        prestage_images\u003djson_object[\u0027prestage_images\u0027]))"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                resource.append("},{"line_number":95,"context_line":"                    self.resource_class("},{"line_number":96,"context_line":"                        prestage_images\u003djson_object[\u0027prestage_images\u0027]))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return resource"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9b58199b_ecf50e82","line":96,"range":{"start_line":78,"start_character":0,"end_line":96,"end_character":72},"updated":"2022-01-27 14:02:23.000000000","message":"this could be factored into a common method, as it\u0027s repeated","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"451b60e5e09bbca4d11870aea8a91ef459349d4d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        json_object \u003d get_json(resp)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        resource \u003d list()"},{"line_number":78,"context_line":"        if \u0027prestage_images\u0027 not in json_object:"},{"line_number":79,"context_line":"            resource.append("},{"line_number":80,"context_line":"                self.resource_class("},{"line_number":81,"context_line":"                    deploy_playbook\u003djson_object[\u0027deploy_playbook\u0027],"},{"line_number":82,"context_line":"                    deploy_overrides\u003djson_object[\u0027deploy_overrides\u0027],"},{"line_number":83,"context_line":"                    deploy_chart\u003djson_object[\u0027deploy_chart\u0027]))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            if \u0027deploy_playbook\u0027 in json_object:"},{"line_number":87,"context_line":"                resource.append("},{"line_number":88,"context_line":"                    self.resource_class("},{"line_number":89,"context_line":"                        deploy_playbook\u003djson_object[\u0027deploy_playbook\u0027],"},{"line_number":90,"context_line":"                        deploy_overrides\u003djson_object[\u0027deploy_overrides\u0027],"},{"line_number":91,"context_line":"                        deploy_chart\u003djson_object[\u0027deploy_chart\u0027],"},{"line_number":92,"context_line":"                        prestage_images\u003djson_object[\u0027prestage_images\u0027]))"},{"line_number":93,"context_line":"            else:"},{"line_number":94,"context_line":"                resource.append("},{"line_number":95,"context_line":"                    self.resource_class("},{"line_number":96,"context_line":"                        prestage_images\u003djson_object[\u0027prestage_images\u0027]))"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return resource"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7035ea76_2a5cd85d","line":96,"range":{"start_line":78,"start_character":0,"end_line":96,"end_character":72},"in_reply_to":"9b58199b_ecf50e82","updated":"2022-01-28 19:01:49.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":15435,"name":"Al Bailey","email":"albailey1974@gmail.com","username":"albailey"},"change_message_id":"faa0435891a9637a593619f1988e8a2c77f98e87","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        json_object \u003d json_response_key[\u0027subcloud_deploy\u0027]"},{"line_number":44,"context_line":"        resource \u003d list()"},{"line_number":45,"context_line":"        try:"},{"line_number":46,"context_line":"            deploy_playbook \u003d json_object[\u0027deploy_playbook\u0027]"},{"line_number":47,"context_line":"        except Exception:"},{"line_number":48,"context_line":"            deploy_playbook \u003d None"},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"df427697_e20891da","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":41},"updated":"2022-01-31 20:43:34.000000000","message":"as a minor comment.  If json_object is a dictionary,  you could eliminate a lot of code by doing deploy_playbook \u003d json_object.get(\u0027deploy_playbook\u0027)  since \u0027get\u0027 will automatically return None if the key is not found.","commit_id":"e7f31c3793a03f9660991a87c5c9a8d151138eaa"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"98113d2c0b0932159e189bdf3c0a1a7363bc5c6c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        json_object \u003d json_response_key[\u0027subcloud_deploy\u0027]"},{"line_number":44,"context_line":"        resource \u003d list()"},{"line_number":45,"context_line":"        try:"},{"line_number":46,"context_line":"            deploy_playbook \u003d json_object[\u0027deploy_playbook\u0027]"},{"line_number":47,"context_line":"        except Exception:"},{"line_number":48,"context_line":"            deploy_playbook \u003d None"},{"line_number":49,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fdfb6fad_5742057b","line":46,"range":{"start_line":46,"start_character":30,"end_line":46,"end_character":41},"in_reply_to":"df427697_e20891da","updated":"2022-01-31 21:10:14.000000000","message":"Done","commit_id":"e7f31c3793a03f9660991a87c5c9a8d151138eaa"},{"author":{"_account_id":28486,"name":"Tee Ngo","email":"tee.ngo@windriver.com","username":"teewrs"},"change_message_id":"1f3c90cf4c195376e19486350db351d96228986f","unresolved":true,"context_lines":[{"line_number":72,"context_line":"        enc \u003d MultipartEncoder(fields\u003dfields)"},{"line_number":73,"context_line":"        headers \u003d {\u0027content-type\u0027: enc.content_type}"},{"line_number":74,"context_line":"        resp \u003d self.http_client.post(url, enc, headers\u003dheaders)"},{"line_number":75,"context_line":"        if resp.status_code !\u003d 200:"},{"line_number":76,"context_line":"            self._raise_api_exception(resp)"},{"line_number":77,"context_line":"        json_object \u003d get_json(resp)"},{"line_number":78,"context_line":"        resource \u003d list()"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            deploy_playbook \u003d json_object[\u0027deploy_playbook\u0027]"},{"line_number":81,"context_line":"        except Exception:"},{"line_number":82,"context_line":"            deploy_playbook \u003d None"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            deploy_overrides \u003d json_object[\u0027deploy_overrides\u0027]"},{"line_number":85,"context_line":"        except Exception:"},{"line_number":86,"context_line":"            deploy_overrides \u003d None"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            deploy_chart \u003d json_object[\u0027deploy_chart\u0027]"},{"line_number":89,"context_line":"        except Exception:"},{"line_number":90,"context_line":"            deploy_chart \u003d None"},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            prestage_images \u003d json_object[\u0027prestage_images\u0027]"},{"line_number":93,"context_line":"        except Exception:"},{"line_number":94,"context_line":"            prestage_images \u003d None"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        resource.append("},{"line_number":97,"context_line":"            self.resource_class(deploy_playbook, deploy_overrides,"},{"line_number":98,"context_line":"                                deploy_chart, prestage_images))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return resource"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def subcloud_deploy_show(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"97a1ec67_f238b63d","line":99,"range":{"start_line":75,"start_character":0,"end_line":99,"end_character":0},"updated":"2022-01-31 20:53:15.000000000","message":"create a common method to handle response for both _deploy_upload and _subcloud_deploy_detail","commit_id":"e7f31c3793a03f9660991a87c5c9a8d151138eaa"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"98113d2c0b0932159e189bdf3c0a1a7363bc5c6c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        enc \u003d MultipartEncoder(fields\u003dfields)"},{"line_number":73,"context_line":"        headers \u003d {\u0027content-type\u0027: enc.content_type}"},{"line_number":74,"context_line":"        resp \u003d self.http_client.post(url, enc, headers\u003dheaders)"},{"line_number":75,"context_line":"        if resp.status_code !\u003d 200:"},{"line_number":76,"context_line":"            self._raise_api_exception(resp)"},{"line_number":77,"context_line":"        json_object \u003d get_json(resp)"},{"line_number":78,"context_line":"        resource \u003d list()"},{"line_number":79,"context_line":"        try:"},{"line_number":80,"context_line":"            deploy_playbook \u003d json_object[\u0027deploy_playbook\u0027]"},{"line_number":81,"context_line":"        except Exception:"},{"line_number":82,"context_line":"            deploy_playbook \u003d None"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            deploy_overrides \u003d json_object[\u0027deploy_overrides\u0027]"},{"line_number":85,"context_line":"        except Exception:"},{"line_number":86,"context_line":"            deploy_overrides \u003d None"},{"line_number":87,"context_line":"        try:"},{"line_number":88,"context_line":"            deploy_chart \u003d json_object[\u0027deploy_chart\u0027]"},{"line_number":89,"context_line":"        except Exception:"},{"line_number":90,"context_line":"            deploy_chart \u003d None"},{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            prestage_images \u003d json_object[\u0027prestage_images\u0027]"},{"line_number":93,"context_line":"        except Exception:"},{"line_number":94,"context_line":"            prestage_images \u003d None"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        resource.append("},{"line_number":97,"context_line":"            self.resource_class(deploy_playbook, deploy_overrides,"},{"line_number":98,"context_line":"                                deploy_chart, prestage_images))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return resource"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def subcloud_deploy_show(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"123325f7_180c2bc2","line":99,"range":{"start_line":75,"start_character":0,"end_line":99,"end_character":0},"in_reply_to":"97a1ec67_f238b63d","updated":"2022-01-31 21:10:14.000000000","message":"Done","commit_id":"e7f31c3793a03f9660991a87c5c9a8d151138eaa"}],"distributedcloud-client/dcmanagerclient/commands/v1/subcloud_deploy_manager.py":[{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"#    you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"#    You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"7d106f0d_1c3090a5","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"updated":"2022-01-27 15:41:53.000000000","message":"2022","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"#    you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"#    You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"a60b7160_8db5abee","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"in_reply_to":"7d106f0d_1c3090a5","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # If the prestaging image was not provided then the other"},{"line_number":93,"context_line":"        # arguments must all be provided"},{"line_number":94,"context_line":"        if parsed_args.prestage_images is None:"},{"line_number":95,"context_line":"            if not os.path.isfile(parsed_args.deploy_playbook):"},{"line_number":96,"context_line":"                error_msg \u003d \"deploy-playbook does not exist: %s\" % \\"},{"line_number":97,"context_line":"                            parsed_args.deploy_playbook"},{"line_number":98,"context_line":"                raise exceptions.DCManagerClientException(error_msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fff9c389_17da7574","line":95,"range":{"start_line":94,"start_character":0,"end_line":95,"end_character":63},"updated":"2022-01-27 15:41:53.000000000","message":"What if parsed_args.deploy_playbook is also None, will os.path.isfile(None) raise an exception? Would prefer to raise an exception with a meaningful error msg in this case. Same comment apply to deploy_overrides and deploy_chart","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        # If the prestaging image was not provided then the other"},{"line_number":93,"context_line":"        # arguments must all be provided"},{"line_number":94,"context_line":"        if parsed_args.prestage_images is None:"},{"line_number":95,"context_line":"            if not os.path.isfile(parsed_args.deploy_playbook):"},{"line_number":96,"context_line":"                error_msg \u003d \"deploy-playbook does not exist: %s\" % \\"},{"line_number":97,"context_line":"                            parsed_args.deploy_playbook"},{"line_number":98,"context_line":"                raise exceptions.DCManagerClientException(error_msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a7c3f7c_ad9ddc82","line":95,"range":{"start_line":94,"start_character":0,"end_line":95,"end_character":63},"in_reply_to":"fff9c389_17da7574","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":9926,"name":"John Kung","email":"john.kung@windriver.com","username":"jkung"},"change_message_id":"20dcb07effb3615c18d160d463d6af1485ca7e64","unresolved":true,"context_lines":[{"line_number":118,"context_line":"            if (parsed_args.deploy_playbook or parsed_args.deploy_overrides"},{"line_number":119,"context_line":"                    or parsed_args.deploy_chart):"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"                if not os.path.isfile(parsed_args.deploy_playbook):"},{"line_number":122,"context_line":"                    error_msg \u003d \"deploy-playbook does not exist: %s\" % \\"},{"line_number":123,"context_line":"                                parsed_args.deploy_playbook"},{"line_number":124,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                kwargs[\u0027deploy_playbook\u0027] \u003d parsed_args.deploy_playbook"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                if not os.path.isfile(parsed_args.deploy_overrides):"},{"line_number":129,"context_line":"                    error_msg \u003d \"deploy-overrides does not exist: %s\" % \\"},{"line_number":130,"context_line":"                                parsed_args.deploy_overrides"},{"line_number":131,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"                kwargs[\u0027deploy_overrides\u0027] \u003d parsed_args.deploy_overrides"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if not os.path.isfile(parsed_args.deploy_chart):"},{"line_number":136,"context_line":"                    error_msg \u003d \"deploy-chart does not exist: %s\" % \\"},{"line_number":137,"context_line":"                                parsed_args.deploy_chart"},{"line_number":138,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                kwargs[\u0027deploy_chart\u0027] \u003d parsed_args.deploy_chart"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"05396e52_838fa3c7","line":139,"range":{"start_line":121,"start_character":1,"end_line":139,"end_character":0},"updated":"2022-01-27 14:02:23.000000000","message":"this can be factored into common method","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            if (parsed_args.deploy_playbook or parsed_args.deploy_overrides"},{"line_number":119,"context_line":"                    or parsed_args.deploy_chart):"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"                if not os.path.isfile(parsed_args.deploy_playbook):"},{"line_number":122,"context_line":"                    error_msg \u003d \"deploy-playbook does not exist: %s\" % \\"},{"line_number":123,"context_line":"                                parsed_args.deploy_playbook"},{"line_number":124,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                kwargs[\u0027deploy_playbook\u0027] \u003d parsed_args.deploy_playbook"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                if not os.path.isfile(parsed_args.deploy_overrides):"},{"line_number":129,"context_line":"                    error_msg \u003d \"deploy-overrides does not exist: %s\" % \\"},{"line_number":130,"context_line":"                                parsed_args.deploy_overrides"},{"line_number":131,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"                kwargs[\u0027deploy_overrides\u0027] \u003d parsed_args.deploy_overrides"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"                if not os.path.isfile(parsed_args.deploy_chart):"},{"line_number":136,"context_line":"                    error_msg \u003d \"deploy-chart does not exist: %s\" % \\"},{"line_number":137,"context_line":"                                parsed_args.deploy_chart"},{"line_number":138,"context_line":"                    raise exceptions.DCManagerClientException(error_msg)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"                kwargs[\u0027deploy_chart\u0027] \u003d parsed_args.deploy_chart"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"74e115b3_965ce3ba","line":139,"range":{"start_line":121,"start_character":1,"end_line":139,"end_character":0},"in_reply_to":"05396e52_838fa3c7","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":28486,"name":"Tee Ngo","email":"tee.ngo@windriver.com","username":"teewrs"},"change_message_id":"7433c74730756adb5249f87971315fe51ba677c3","unresolved":true,"context_lines":[{"line_number":96,"context_line":"    def _get_resources(self, parsed_args):"},{"line_number":97,"context_line":"        dcmanager_client \u003d self.app.client_manager.subcloud_deploy_manager"},{"line_number":98,"context_line":"        kwargs \u003d dict()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # An error is raised if the following condition is not met"},{"line_number":101,"context_line":"        # 1. All directory provided must not valid"},{"line_number":102,"context_line":"        # 2. playbook, overrides and chart must be provided"},{"line_number":103,"context_line":"        # or not provided all together"},{"line_number":104,"context_line":"        # 3. If prestage_image is not provided, then playbook,"},{"line_number":105,"context_line":"        # overrides and chart must be prescent"},{"line_number":106,"context_line":"        provided_options \u003d dict()"},{"line_number":107,"context_line":"        missing_options \u003d set()"},{"line_number":108,"context_line":"        variable_dict \u003d {\u0027deploy_playbook\u0027: parsed_args.deploy_playbook,"},{"line_number":109,"context_line":"                         \u0027deploy_overrides\u0027: parsed_args.deploy_overrides,"},{"line_number":110,"context_line":"                         \u0027deploy_chart\u0027: parsed_args.deploy_chart,"},{"line_number":111,"context_line":"                         \u0027prestage_images\u0027: parsed_args.prestage_images}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        for key, val in variable_dict.items():"},{"line_number":114,"context_line":"            if val is None:"},{"line_number":115,"context_line":"                missing_options.add(key)"},{"line_number":116,"context_line":"            elif not os.path.isfile(val):"},{"line_number":117,"context_line":"                error_msg \u003d \"error: argument --%s directory %s not valid\" \\"},{"line_number":118,"context_line":"                            % (key, val)"},{"line_number":119,"context_line":"                print(error_msg)"},{"line_number":120,"context_line":"                return"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"            else:"},{"line_number":123,"context_line":"                provided_options[key] \u003d val"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if len(missing_options) \u003d\u003d 0 or \\"},{"line_number":126,"context_line":"            (len(missing_options) \u003d\u003d 1 and"},{"line_number":127,"context_line":"                \u0027prestage_images\u0027 in missing_options) or \\"},{"line_number":128,"context_line":"            (len(missing_options) \u003d\u003d 3 and"},{"line_number":129,"context_line":"                \u0027prestage_images\u0027not in missing_options):"},{"line_number":130,"context_line":"            for key, val in provided_options.items():"},{"line_number":131,"context_line":"                kwargs[key] \u003d val"},{"line_number":132,"context_line":"        else:"},{"line_number":133,"context_line":"            missing_str \u003d str()"},{"line_number":134,"context_line":"            for missing in missing_options:"},{"line_number":135,"context_line":"                missing_str +\u003d \u0027--%s \u0027 % missing"},{"line_number":136,"context_line":"            error_msg \u003d \"error: argument %s is required\" % missing_str.rstrip()"},{"line_number":137,"context_line":"            print(error_msg)"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        try:"},{"line_number":141,"context_line":"            return dcmanager_client.subcloud_deploy_manager.\\"},{"line_number":142,"context_line":"                subcloud_deploy_upload(**kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a47304ff_ea87c23f","line":139,"range":{"start_line":99,"start_character":0,"end_line":139,"end_character":0},"updated":"2022-01-31 15:20:53.000000000","message":"Why is this required? Just ensure that if a parameter is specified, the corresponding file must exist and let dcmanager API handle other semantic checks the way it sees fit.","commit_id":"2e4d15147f6e060a41f7b340ef36107d2935592c"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"4a1c14e0d91a763221e6311007ac7c4dee4bc8e4","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def _get_resources(self, parsed_args):"},{"line_number":97,"context_line":"        dcmanager_client \u003d self.app.client_manager.subcloud_deploy_manager"},{"line_number":98,"context_line":"        kwargs \u003d dict()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        # An error is raised if the following condition is not met"},{"line_number":101,"context_line":"        # 1. All directory provided must not valid"},{"line_number":102,"context_line":"        # 2. playbook, overrides and chart must be provided"},{"line_number":103,"context_line":"        # or not provided all together"},{"line_number":104,"context_line":"        # 3. If prestage_image is not provided, then playbook,"},{"line_number":105,"context_line":"        # overrides and chart must be prescent"},{"line_number":106,"context_line":"        provided_options \u003d dict()"},{"line_number":107,"context_line":"        missing_options \u003d set()"},{"line_number":108,"context_line":"        variable_dict \u003d {\u0027deploy_playbook\u0027: parsed_args.deploy_playbook,"},{"line_number":109,"context_line":"                         \u0027deploy_overrides\u0027: parsed_args.deploy_overrides,"},{"line_number":110,"context_line":"                         \u0027deploy_chart\u0027: parsed_args.deploy_chart,"},{"line_number":111,"context_line":"                         \u0027prestage_images\u0027: parsed_args.prestage_images}"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        for key, val in variable_dict.items():"},{"line_number":114,"context_line":"            if val is None:"},{"line_number":115,"context_line":"                missing_options.add(key)"},{"line_number":116,"context_line":"            elif not os.path.isfile(val):"},{"line_number":117,"context_line":"                error_msg \u003d \"error: argument --%s directory %s not valid\" \\"},{"line_number":118,"context_line":"                            % (key, val)"},{"line_number":119,"context_line":"                print(error_msg)"},{"line_number":120,"context_line":"                return"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"            else:"},{"line_number":123,"context_line":"                provided_options[key] \u003d val"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if len(missing_options) \u003d\u003d 0 or \\"},{"line_number":126,"context_line":"            (len(missing_options) \u003d\u003d 1 and"},{"line_number":127,"context_line":"                \u0027prestage_images\u0027 in missing_options) or \\"},{"line_number":128,"context_line":"            (len(missing_options) \u003d\u003d 3 and"},{"line_number":129,"context_line":"                \u0027prestage_images\u0027not in missing_options):"},{"line_number":130,"context_line":"            for key, val in provided_options.items():"},{"line_number":131,"context_line":"                kwargs[key] \u003d val"},{"line_number":132,"context_line":"        else:"},{"line_number":133,"context_line":"            missing_str \u003d str()"},{"line_number":134,"context_line":"            for missing in missing_options:"},{"line_number":135,"context_line":"                missing_str +\u003d \u0027--%s \u0027 % missing"},{"line_number":136,"context_line":"            error_msg \u003d \"error: argument %s is required\" % missing_str.rstrip()"},{"line_number":137,"context_line":"            print(error_msg)"},{"line_number":138,"context_line":"            return"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        try:"},{"line_number":141,"context_line":"            return dcmanager_client.subcloud_deploy_manager.\\"},{"line_number":142,"context_line":"                subcloud_deploy_upload(**kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"61542fc8_3f6e74a9","line":139,"range":{"start_line":99,"start_character":0,"end_line":139,"end_character":0},"in_reply_to":"a47304ff_ea87c23f","updated":"2022-01-31 18:31:20.000000000","message":"Done","commit_id":"2e4d15147f6e060a41f7b340ef36107d2935592c"}],"distributedcloud-client/dcmanagerclient/tests/v1/test_subcloud_deploy_manager.py":[{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"#    You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"2023e953_abb39a0b","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"updated":"2022-01-27 15:41:53.000000000","message":"2022","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020-2021 Wind River Systems, Inc."},{"line_number":2,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":3,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":4,"context_line":"#    You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"d00ac86b_5ab9a582","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":26},"in_reply_to":"2023e953_abb39a0b","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[{"line_number":24,"context_line":"DEPLOY_PLAYBOOK \u003d \u0027deployment-manager-playbook.yaml\u0027"},{"line_number":25,"context_line":"DEPLOY_OVERRIDES \u003d \u0027deployment-manager-overrides-subcloud.yaml\u0027"},{"line_number":26,"context_line":"DEPLOY_CHART \u003d \u0027deployment-manager.tgz\u0027"},{"line_number":27,"context_line":"DEPLOY_PRESTAGE \u003d \u0027prebuilt-images.lst\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUBCLOUD_DEPLOY_DICT \u003d {"},{"line_number":30,"context_line":"    \u0027DEPLOY_PLAYBOOK\u0027: DEPLOY_PLAYBOOK,"}],"source_content_type":"text/x-python","patch_set":6,"id":"aab7a2c1_0135a7fd","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":16},"updated":"2022-01-27 15:41:53.000000000","message":"nit: \"DEPLOY_PRESTAGE_IMAGES\" would be better to understand.","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"c3e4b6f9bf0c2ea5ca54be59105d9c7ba1398136","unresolved":false,"context_lines":[{"line_number":24,"context_line":"DEPLOY_PLAYBOOK \u003d \u0027deployment-manager-playbook.yaml\u0027"},{"line_number":25,"context_line":"DEPLOY_OVERRIDES \u003d \u0027deployment-manager-overrides-subcloud.yaml\u0027"},{"line_number":26,"context_line":"DEPLOY_CHART \u003d \u0027deployment-manager.tgz\u0027"},{"line_number":27,"context_line":"DEPLOY_PRESTAGE \u003d \u0027prebuilt-images.lst\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUBCLOUD_DEPLOY_DICT \u003d {"},{"line_number":30,"context_line":"    \u0027DEPLOY_PLAYBOOK\u0027: DEPLOY_PLAYBOOK,"}],"source_content_type":"text/x-python","patch_set":6,"id":"c92b8705_f7f33329","line":27,"range":{"start_line":27,"start_character":0,"end_line":27,"end_character":16},"in_reply_to":"aab7a2c1_0135a7fd","updated":"2022-01-27 18:13:00.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":31954,"name":"Yuxing Jiang","email":"Yuxing.Jiang@windriver.com","username":"yuxing"},"change_message_id":"c5a8aedc5c70301908fe995adddfd9c6a388993b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8305badb_2c52ca33","line":87,"updated":"2022-01-27 15:41:53.000000000","message":"Please add test cases cover the cases that missing some of the deploy files.","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"},{"author":{"_account_id":34221,"name":"Bo Yuan Chang","email":"boyuan.chang@windriver.com","username":"bchang"},"change_message_id":"d7ab278ba6cdb3dc6d613a0cf360c43569d28bb8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1136cca4_a78d6448","line":87,"in_reply_to":"8305badb_2c52ca33","updated":"2022-01-27 23:41:26.000000000","message":"Done","commit_id":"d8ed4964e4a9bf48fabc5b3270b0920951069b46"}]}
