)]}'
{"ironic/drivers/modules/redfish/boot.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ba3ac8efbb8218cd4024e747a95a11222611afe1","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_82d092f9","line":263,"range":{"start_line":263,"start_character":43,"end_line":263,"end_character":63},"updated":"2019-09-18 10:03:30.000000000","message":"nit: maybe create a subdir to make it a bit cleaner?","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"d6fcc168272ad97058eca2153e6272fcb21c12c7","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_b9d05c52","line":263,"range":{"start_line":263,"start_character":43,"end_line":263,"end_character":63},"in_reply_to":"3fa7e38b_82d092f9","updated":"2019-09-18 16:06:41.000000000","message":"Done","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ba3ac8efbb8218cd4024e747a95a11222611afe1","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_22e2fed6","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":55},"updated":"2019-09-18 10:03:30.000000000","message":"Maybe try hardlinking the file, and if it fails (e.g. different file system), then resort to copying?","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"df4a7b7c093d4eb294e5a4c85a2be89af36db6e6","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_a2526e66","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":55},"in_reply_to":"3fa7e38b_22e2fed6","updated":"2019-09-18 10:09:12.000000000","message":"I somehow assumed that this happens under the hood. I just realized that I though of `move` [1]. May be we should better use it...?\n\n1. https://github.com/python/cpython/blob/3.7/Lib/shutil.py#L528","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"d6fcc168272ad97058eca2153e6272fcb21c12c7","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f9d6d44f","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":55},"in_reply_to":"3fa7e38b_6f69be23","updated":"2019-09-18 16:06:41.000000000","message":"Done","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ca91f49c4993b7bd81d9f5cd0b493e17e4e1284a","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        else:"},{"line_number":263,"context_line":"            published_file \u003d os.path.join(CONF.deploy.http_root, object_name)"},{"line_number":264,"context_line":"            shutil.copyfile(image_file, published_file)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_6f69be23","line":264,"range":{"start_line":264,"start_character":0,"end_line":264,"end_character":55},"in_reply_to":"3fa7e38b_a2526e66","updated":"2019-09-18 12:14:12.000000000","message":"The swift version does not delete the original file, we may want to keep these consistent.","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ba3ac8efbb8218cd4024e747a95a11222611afe1","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            try:"},{"line_number":307,"context_line":"                os.unlink(published_file)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            except Exception as exc:"},{"line_number":310,"context_line":"                LOG.warning(\"Failed to clean up image %(image)s. Error: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_42da9a17","line":307,"range":{"start_line":307,"start_character":0,"end_line":307,"end_character":41},"updated":"2019-09-18 10:03:30.000000000","message":"I think we have something like utils.unlink_without_raise","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"d6fcc168272ad97058eca2153e6272fcb21c12c7","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"            try:"},{"line_number":307,"context_line":"                os.unlink(published_file)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            except Exception as exc:"},{"line_number":310,"context_line":"                LOG.warning(\"Failed to clean up image %(image)s. Error: \""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_d9c67817","line":307,"range":{"start_line":307,"start_character":0,"end_line":307,"end_character":41},"in_reply_to":"3fa7e38b_42da9a17","updated":"2019-09-18 16:06:41.000000000","message":"Done","commit_id":"b722eea9016eb5cc03548a96dff03fcbf26814ba"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ca67ac4fe4642afe3fc4f6e989aaa853fd65687c","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            public_dir \u003d os.path.join(CONF.deploy.http_root, cls.IMAGE_SUBDIR)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if not os.path.exists(public_dir):"},{"line_number":269,"context_line":"                os.mkdir(public_dir, 0x755)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            published_file \u003d os.path.join(public_dir, object_name)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d930b80a","line":269,"range":{"start_line":268,"start_character":0,"end_line":269,"end_character":43},"updated":"2019-09-18 16:08:44.000000000","message":"nit: this can be done in __init__","commit_id":"de438a590b25659717c643e25d20ae2c762a2b1d"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b18cda01069f0d8f976c05094eaaf6da72edad18","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        else:"},{"line_number":266,"context_line":"            public_dir \u003d os.path.join(CONF.deploy.http_root, cls.IMAGE_SUBDIR)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"            if not os.path.exists(public_dir):"},{"line_number":269,"context_line":"                os.mkdir(public_dir, 0x755)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"            published_file \u003d os.path.join(public_dir, object_name)"},{"line_number":272,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_94b525f1","line":269,"range":{"start_line":268,"start_character":0,"end_line":269,"end_character":43},"in_reply_to":"3fa7e38b_d930b80a","updated":"2019-09-18 16:23:56.000000000","message":"Let\u0027s leave it here for sake of easier testing...","commit_id":"de438a590b25659717c643e25d20ae2c762a2b1d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ca67ac4fe4642afe3fc4f6e989aaa853fd65687c","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"                shutil.copyfile(image_file, published_file)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        image_url \u003d cls._append_filename_param("},{"line_number":289,"context_line":"            image_url, os.path.basename(image_file))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_993a40e5","line":286,"updated":"2019-09-18 16:08:44.000000000","message":"you need to add subdir here as well","commit_id":"de438a590b25659717c643e25d20ae2c762a2b1d"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b18cda01069f0d8f976c05094eaaf6da72edad18","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"                shutil.copyfile(image_file, published_file)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"            image_url \u003d urlparse.urljoin(CONF.deploy.http_url, object_name)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        image_url \u003d cls._append_filename_param("},{"line_number":289,"context_line":"            image_url, os.path.basename(image_file))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_741e690d","line":286,"in_reply_to":"3fa7e38b_993a40e5","updated":"2019-09-18 16:23:56.000000000","message":"Ah! Too much of coding!","commit_id":"de438a590b25659717c643e25d20ae2c762a2b1d"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a4c0af007fb1d832b36e18f68fdcd369af0b9219","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    `[instance_info]image_source` node property."},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    IMAGE_SUBDIR \u003d \u0027redfish\u0027"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    capabilities \u003d [\u0027iscsi_volume_boot\u0027, \u0027ramdisk_boot\u0027]"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_ba47e01d","line":110,"range":{"start_line":110,"start_character":4,"end_line":110,"end_character":28},"updated":"2019-09-19 07:52:18.000000000","message":"Can we use [deploy]/http_image_subdir [1] instead? Or http_image_subdir is only for instance images? \n[1] https://github.com/openstack/ironic/blob/master/ironic/conf/deploy.py#L109-L115","commit_id":"199a218f5c2436ce822da8f4d2719f3d012cfb34"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"092333c022d84fd69c0f765fb0a43e89d7f52473","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    `[instance_info]image_source` node property."},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    IMAGE_SUBDIR \u003d \u0027redfish\u0027"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    capabilities \u003d [\u0027iscsi_volume_boot\u0027, \u0027ramdisk_boot\u0027]"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_5548fdca","line":110,"range":{"start_line":110,"start_character":4,"end_line":110,"end_character":28},"in_reply_to":"3fa7e38b_1a2b94eb","updated":"2019-09-19 09:14:49.000000000","message":"Yes, if need be we can introduce a config later.","commit_id":"199a218f5c2436ce822da8f4d2719f3d012cfb34"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b229132f94a0ca758da9bfac0bc81ad7074e6790","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    `[instance_info]image_source` node property."},{"line_number":108,"context_line":"    \"\"\""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    IMAGE_SUBDIR \u003d \u0027redfish\u0027"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    capabilities \u003d [\u0027iscsi_volume_boot\u0027, \u0027ramdisk_boot\u0027]"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_1a2b94eb","line":110,"range":{"start_line":110,"start_character":4,"end_line":110,"end_character":28},"in_reply_to":"3fa7e38b_ba47e01d","updated":"2019-09-19 08:13:54.000000000","message":"My concern is that if we share the dir, we could accidentally override ramdisk/user images [1]. Or we should keep an eye on that going forward, which can become a nuisance...\n\nWe could probably introduce another image dir option, if that is important to have configurable...?\n\nWDYT?","commit_id":"199a218f5c2436ce822da8f4d2719f3d012cfb34"}]}
