)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Julia Kreger \u003cjuliaashleykreger@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-07-24 08:10:52 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"ramdisk deploy driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a pxe deploy driver to support the concept"},{"line_number":10,"context_line":"of a deployment just consisting of a ramdisk."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_703649e2","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":7},"updated":"2018-07-25 12:59:05.000000000","message":"nit: the conventional commit message should read like `Add ramdisk deploy driver`","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":21,"context_line":"There may be additional features realistically"},{"line_number":22,"context_line":"needed for this to be beyond minimally useful,"},{"line_number":23,"context_line":"but that would also depend on the contents of"},{"line_number":24,"context_line":"the ramdisk that is deployed."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id7067527cba27ed49753736f33ccb35e9b35bcba"},{"line_number":27,"context_line":"Story: 1753842"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_50646de6","line":24,"range":{"start_line":24,"start_character":17,"end_line":24,"end_character":20},"updated":"2018-07-25 12:59:05.000000000","message":"tell me, should it be `is being deployed` or `to be deployed`?\n\n/me needs to really learn English","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":21,"context_line":"There may be additional features realistically"},{"line_number":22,"context_line":"needed for this to be beyond minimally useful,"},{"line_number":23,"context_line":"but that would also depend on the contents of"},{"line_number":24,"context_line":"the ramdisk that is deployed."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Id7067527cba27ed49753736f33ccb35e9b35bcba"},{"line_number":27,"context_line":"Story: 1753842"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"5f7c97a3_aebf9da9","line":24,"range":{"start_line":24,"start_character":17,"end_line":24,"end_character":20},"in_reply_to":"5f7c97a3_50646de6","updated":"2018-07-25 14:45:42.000000000","message":"In english, I was wording it as an active tense. \"is being deployed\" would be present active tense, but that can\u0027t be now as nobody would be doing so while the patch is being applied.  To be deployed, seems, at least to me that it is future active and might be the best fit...","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"SUPPORTED_CAPABILITIES \u003d {"},{"line_number":61,"context_line":"    \u0027boot_option\u0027: (\u0027local\u0027, \u0027netboot\u0027, \u0027pxe\u0027),"},{"line_number":62,"context_line":"    \u0027boot_mode\u0027: (\u0027bios\u0027, \u0027uefi\u0027),"},{"line_number":63,"context_line":"    \u0027secure_boot\u0027: (\u0027true\u0027, \u0027false\u0027),"},{"line_number":64,"context_line":"    \u0027trusted_boot\u0027: (\u0027true\u0027, \u0027false\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_4b8172f9","line":61,"range":{"start_line":61,"start_character":41,"end_line":61,"end_character":44},"updated":"2018-07-10 16:15:19.000000000","message":"Should this be \u0027ramdisk\u0027?","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"SUPPORTED_CAPABILITIES \u003d {"},{"line_number":61,"context_line":"    \u0027boot_option\u0027: (\u0027local\u0027, \u0027netboot\u0027, \u0027pxe\u0027),"},{"line_number":62,"context_line":"    \u0027boot_mode\u0027: (\u0027bios\u0027, \u0027uefi\u0027),"},{"line_number":63,"context_line":"    \u0027secure_boot\u0027: (\u0027true\u0027, \u0027false\u0027),"},{"line_number":64,"context_line":"    \u0027trusted_boot\u0027: (\u0027true\u0027, \u0027false\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_1c40a25e","line":61,"range":{"start_line":61,"start_character":41,"end_line":61,"end_character":44},"in_reply_to":"5f7c97a3_4b8172f9","updated":"2018-07-10 22:44:12.000000000","message":"++","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        partition table has not changed)."},{"line_number":370,"context_line":"    :param configdrive: Optional. Base64 encoded Gzipped configdrive content"},{"line_number":371,"context_line":"                        or configdrive HTTP URL."},{"line_number":372,"context_line":"    :param boot_option: Can be \"local\" or \"netboot\", or \"pxe\"."},{"line_number":373,"context_line":"                        \"netboot\" by default."},{"line_number":374,"context_line":"    :param boot_mode: Can be \"bios\" or \"uefi\". \"bios\" by default."},{"line_number":375,"context_line":"    :param disk_label: The disk label to be used when creating the"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_abea86d5","line":372,"range":{"start_line":372,"start_character":53,"end_line":372,"end_character":61},"updated":"2018-07-10 16:15:19.000000000","message":"I suppose this method will not get called for PXERamdiskDeploy.\n\ns/ \"pxe\" / \"ramdisk\" /","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        partition table has not changed)."},{"line_number":370,"context_line":"    :param configdrive: Optional. Base64 encoded Gzipped configdrive content"},{"line_number":371,"context_line":"                        or configdrive HTTP URL."},{"line_number":372,"context_line":"    :param boot_option: Can be \"local\" or \"netboot\", or \"pxe\"."},{"line_number":373,"context_line":"                        \"netboot\" by default."},{"line_number":374,"context_line":"    :param boot_mode: Can be \"bios\" or \"uefi\". \"bios\" by default."},{"line_number":375,"context_line":"    :param disk_label: The disk label to be used when creating the"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_78ef5d86","line":372,"range":{"start_line":372,"start_character":53,"end_line":372,"end_character":61},"in_reply_to":"5f7c97a3_abea86d5","updated":"2018-07-10 22:44:12.000000000","message":"I guess unlikely, but you never know? :)","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        is_whole_disk_image and trusted_boot are mutually exclusive. You can"},{"line_number":328,"context_line":"        have one or neither, but not both."},{"line_number":329,"context_line":"    :param iscsi_boot: if boot is from an iSCSI volume or not."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if not ramdisk_boot:"},{"line_number":332,"context_line":"        if not is_whole_disk_image:"},{"line_number":333,"context_line":"            _replace_root_uuid(path, root_uuid_or_disk_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2bd060f4","line":330,"range":{"start_line":330,"start_character":4,"end_line":330,"end_character":7},"updated":"2018-07-25 12:59:05.000000000","message":":param ramdisk_boot:","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        is_whole_disk_image and trusted_boot are mutually exclusive. You can"},{"line_number":328,"context_line":"        have one or neither, but not both."},{"line_number":329,"context_line":"    :param iscsi_boot: if boot is from an iSCSI volume or not."},{"line_number":330,"context_line":"    \"\"\""},{"line_number":331,"context_line":"    if not ramdisk_boot:"},{"line_number":332,"context_line":"        if not is_whole_disk_image:"},{"line_number":333,"context_line":"            _replace_root_uuid(path, root_uuid_or_disk_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_0ec6d142","line":330,"range":{"start_line":330,"start_character":4,"end_line":330,"end_character":7},"in_reply_to":"5f7c97a3_2bd060f4","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    :param configdrive: Optional. Base64 encoded Gzipped configdrive content"},{"line_number":372,"context_line":"                        or configdrive HTTP URL."},{"line_number":373,"context_line":"    :param boot_option: Can be \"local\" or \"netboot\", or \"ramdisk\"."},{"line_number":374,"context_line":"                        \"netboot\" by default."},{"line_number":375,"context_line":"    :param boot_mode: Can be \"bios\" or \"uefi\". \"bios\" by default."},{"line_number":376,"context_line":"    :param disk_label: The disk label to be used when creating the"},{"line_number":377,"context_line":"        partition table. Valid values are: \"msdos\", \"gpt\" or None; If None"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_4b9329a5","line":374,"updated":"2018-07-27 07:39:49.000000000","message":"Can it really be ramdisk? It looks like this function should not be called with the ramdisk deploy. Nothing in it makes sense for this deploy method.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":371,"context_line":"    :param configdrive: Optional. Base64 encoded Gzipped configdrive content"},{"line_number":372,"context_line":"                        or configdrive HTTP URL."},{"line_number":373,"context_line":"    :param boot_option: Can be \"local\" or \"netboot\", or \"ramdisk\"."},{"line_number":374,"context_line":"                        \"netboot\" by default."},{"line_number":375,"context_line":"    :param boot_mode: Can be \"bios\" or \"uefi\". \"bios\" by default."},{"line_number":376,"context_line":"    :param disk_label: The disk label to be used when creating the"},{"line_number":377,"context_line":"        partition table. Valid values are: \"msdos\", \"gpt\" or None; If None"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_c410835b","line":374,"in_reply_to":"5f7c97a3_4b9329a5","updated":"2018-07-27 15:30:00.000000000","message":"Here, no, easy to remove.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        raise exception.InstanceDeployFailure(msg)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    with _iscsi_setup_and_handle_errors(address, port, iqn, lun) as dev:"},{"line_number":397,"context_line":"        uuid_dict_returned \u003d disk_utils.work_on_disk("},{"line_number":398,"context_line":"            dev, root_mb, swap_mb, ephemeral_mb, ephemeral_format, image_path,"},{"line_number":399,"context_line":"            node_uuid, preserve_ephemeral\u003dpreserve_ephemeral,"},{"line_number":400,"context_line":"            configdrive\u003dconfigdrive, boot_option\u003dboot_option,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_6b906597","line":397,"updated":"2018-07-27 07:39:49.000000000","message":"are you sure this function works with boot_option \u003d\u003d \"ramdisk\"?","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":394,"context_line":"        raise exception.InstanceDeployFailure(msg)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"    with _iscsi_setup_and_handle_errors(address, port, iqn, lun) as dev:"},{"line_number":397,"context_line":"        uuid_dict_returned \u003d disk_utils.work_on_disk("},{"line_number":398,"context_line":"            dev, root_mb, swap_mb, ephemeral_mb, ephemeral_format, image_path,"},{"line_number":399,"context_line":"            node_uuid, preserve_ephemeral\u003dpreserve_ephemeral,"},{"line_number":400,"context_line":"            configdrive\u003dconfigdrive, boot_option\u003dboot_option,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_a40b072b","line":397,"in_reply_to":"5f7c97a3_6b906597","updated":"2018-07-27 15:30:00.000000000","message":"Shouldn\u0027t matter, this shouldn\u0027t be called.... I wonder if I was just going through looking for boot_option doc strings and didn\u0027t look further down because of the couple places where we just directly pass them through for config swapping.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5669a1e751156594190dcce8b05f473ce09647c5","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                True)"},{"line_number":610,"context_line":"            boot_device \u003d boot_devices.PXE"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":613,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":614,"context_line":"                task.node, task.context)"},{"line_number":615,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_b2c84475","line":612,"updated":"2018-06-20 10:02:40.000000000","message":"pxe?","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cb2bbd5619cdcddc51893d53f75112ee05dc4d1c","unresolved":false,"context_lines":[{"line_number":609,"context_line":"                True)"},{"line_number":610,"context_line":"            boot_device \u003d boot_devices.PXE"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":613,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":614,"context_line":"                task.node, task.context)"},{"line_number":615,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_216f69fb","line":612,"in_reply_to":"5f7c97a3_b2c84475","updated":"2018-06-27 20:38:36.000000000","message":"My thought was to standardize on ramdisk because then we could support vmedia boot interfaces doing the same with some additional logic.","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"5669a1e751156594190dcce8b05f473ce09647c5","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        node \u003d task.node"},{"line_number":740,"context_line":"        # Explicitly mark the node to network boot"},{"line_number":741,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":742,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"},{"line_number":743,"context_line":"        node.instance_info \u003d i_info"},{"line_number":744,"context_line":"        node.save()"},{"line_number":745,"context_line":"        deploy_utils.populate_storage_driver_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_92cd0888","line":742,"updated":"2018-06-20 10:02:40.000000000","message":"Should the boot option be pxe?","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cb2bbd5619cdcddc51893d53f75112ee05dc4d1c","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        node \u003d task.node"},{"line_number":740,"context_line":"        # Explicitly mark the node to network boot"},{"line_number":741,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":742,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"},{"line_number":743,"context_line":"        node.instance_info \u003d i_info"},{"line_number":744,"context_line":"        node.save()"},{"line_number":745,"context_line":"        deploy_utils.populate_storage_driver_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_2158c955","line":742,"in_reply_to":"5f7c97a3_92cd0888","updated":"2018-06-27 20:38:36.000000000","message":"My though twas that we add another flag... existing flags are \"local\", \"netboot\".","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bc542e493c5043bc69847e6cbf3d4b61707860d8","unresolved":false,"context_lines":[{"line_number":419,"context_line":""},{"line_number":420,"context_line":"class PXEBoot(base.BootInterface):"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"    capabilities \u003d [\u0027iscsi_volume_boot\u0027]"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def __init__(self):"},{"line_number":425,"context_line":"        if CONF.pxe.ipxe_enabled:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_4b383cd3","line":422,"updated":"2018-07-02 12:45:32.000000000","message":"We should add a ramdisk_boot value here, and then the ramdisk\ndriver can validate that the boot interface supports it. If not, we can fail deploy validate.","commit_id":"12feb5dcc444d155720eb9eadf20020799f3f51c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                task.node, task.context)"},{"line_number":625,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":626,"context_line":"                                  instance_image_info)"},{"line_number":627,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":628,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"},{"line_number":629,"context_line":"            provider.update_dhcp(task, dhcp_opts)"},{"line_number":630,"context_line":"            pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":631,"context_line":"                task.node.uuid)"},{"line_number":632,"context_line":"            deploy_utils.switch_pxe_config("},{"line_number":633,"context_line":"                pxe_config_path, None,"},{"line_number":634,"context_line":"                boot_mode_utils.get_boot_mode_for_deploy(node), False,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_682f94a6","line":631,"range":{"start_line":627,"start_character":11,"end_line":631,"end_character":31},"updated":"2018-07-10 16:15:19.000000000","message":"These are few of the common steps between iscsi boot and ramdisk boot. May be those can be moved out of conditional blocks.","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":624,"context_line":"                task.node, task.context)"},{"line_number":625,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":626,"context_line":"                                  instance_image_info)"},{"line_number":627,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":628,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"},{"line_number":629,"context_line":"            provider.update_dhcp(task, dhcp_opts)"},{"line_number":630,"context_line":"            pxe_config_path \u003d pxe_utils.get_pxe_config_file_path("},{"line_number":631,"context_line":"                task.node.uuid)"},{"line_number":632,"context_line":"            deploy_utils.switch_pxe_config("},{"line_number":633,"context_line":"                pxe_config_path, None,"},{"line_number":634,"context_line":"                boot_mode_utils.get_boot_mode_for_deploy(node), False,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_f87fedb9","line":631,"range":{"start_line":627,"start_character":11,"end_line":631,"end_character":31},"in_reply_to":"5f7c97a3_682f94a6","updated":"2018-07-10 22:44:12.000000000","message":"We still have the elif... Maybe get this in place and see if we can refactor all three? :\\","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":633,"context_line":"                pxe_config_path, None,"},{"line_number":634,"context_line":"                boot_mode_utils.get_boot_mode_for_deploy(node), False,"},{"line_number":635,"context_line":"                iscsi_boot\u003dFalse, ramdisk_boot\u003dTrue)"},{"line_number":636,"context_line":"            boot_device \u003d boot_devices.PXE"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"        elif boot_option !\u003d \"local\":"},{"line_number":639,"context_line":"            if task.driver.storage.should_write_image(task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_e822c4b9","line":636,"range":{"start_line":636,"start_character":12,"end_line":636,"end_character":42},"updated":"2018-07-10 16:15:19.000000000","message":"ditto","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                err\u003d(\u0027Invalid configuration: The ramdisk deploy \u0027"},{"line_number":734,"context_line":"                     \u0027interface requires the pxe boot interface.\u0027))"},{"line_number":735,"context_line":"        # Eventually we should be doing this."},{"line_number":736,"context_line":"        if \u0027ramdisk_boot\u0027 not in task.driver.boot.capabilities:"},{"line_number":737,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":738,"context_line":"                err\u003d(\u0027Invalid configuration: The deloy interface \u0027"},{"line_number":739,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_7ed42e1f","line":736,"range":{"start_line":736,"start_character":8,"end_line":736,"end_character":63},"updated":"2018-07-10 16:15:19.000000000","message":"Need to add a testcase for this path.","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                err\u003d(\u0027Invalid configuration: The ramdisk deploy \u0027"},{"line_number":734,"context_line":"                     \u0027interface requires the pxe boot interface.\u0027))"},{"line_number":735,"context_line":"        # Eventually we should be doing this."},{"line_number":736,"context_line":"        if \u0027ramdisk_boot\u0027 not in task.driver.boot.capabilities:"},{"line_number":737,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":738,"context_line":"                err\u003d(\u0027Invalid configuration: The deloy interface \u0027"},{"line_number":739,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9e16e14a","line":736,"range":{"start_line":736,"start_character":8,"end_line":736,"end_character":63},"in_reply_to":"5f7c97a3_7ed42e1f","updated":"2018-07-10 22:44:12.000000000","message":"I\u0027ve not thought of a good way to test this. Turns out we never did for the storage interface :\\","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        # Eventually we should be doing this."},{"line_number":736,"context_line":"        if \u0027ramdisk_boot\u0027 not in task.driver.boot.capabilities:"},{"line_number":737,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":738,"context_line":"                err\u003d(\u0027Invalid configuration: The deloy interface \u0027"},{"line_number":739,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"},{"line_number":740,"context_line":"                     \u0027Not found.\u0027))"},{"line_number":741,"context_line":"        task.driver.boot.validate(task)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_8b4eaa6b","line":738,"range":{"start_line":738,"start_character":49,"end_line":738,"end_character":54},"updated":"2018-07-10 16:15:19.000000000","message":"Should this be boot?\ns/ deloy / boot /","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":735,"context_line":"        # Eventually we should be doing this."},{"line_number":736,"context_line":"        if \u0027ramdisk_boot\u0027 not in task.driver.boot.capabilities:"},{"line_number":737,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":738,"context_line":"                err\u003d(\u0027Invalid configuration: The deloy interface \u0027"},{"line_number":739,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"},{"line_number":740,"context_line":"                     \u0027Not found.\u0027))"},{"line_number":741,"context_line":"        task.driver.boot.validate(task)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_d870f1de","line":738,"range":{"start_line":738,"start_character":49,"end_line":738,"end_character":54},"in_reply_to":"5f7c97a3_8b4eaa6b","updated":"2018-07-10 22:44:12.000000000","message":"Done","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a3ba70b12ef3321a40a9239cc17db35facbd4c2b","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        # Set the ramdisk boot_option in order to enable"},{"line_number":770,"context_line":"        # the proper jinja2 template processing... otherwise we need"},{"line_number":771,"context_line":"        # to make the pxe driver be driver aware."},{"line_number":772,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"},{"line_number":773,"context_line":"        node.instance_info \u003d i_info"},{"line_number":774,"context_line":"        node.save()"},{"line_number":775,"context_line":"        deploy_utils.populate_storage_driver_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9eb90a17","line":772,"range":{"start_line":772,"start_character":8,"end_line":772,"end_character":67},"updated":"2018-07-10 16:15:19.000000000","message":"Do we need to error out if there is another boot_option set by the user in instance_info?","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fb767c002a9e13cfaed41bcb7a7e991e0f4c12a4","unresolved":false,"context_lines":[{"line_number":769,"context_line":"        # Set the ramdisk boot_option in order to enable"},{"line_number":770,"context_line":"        # the proper jinja2 template processing... otherwise we need"},{"line_number":771,"context_line":"        # to make the pxe driver be driver aware."},{"line_number":772,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"},{"line_number":773,"context_line":"        node.instance_info \u003d i_info"},{"line_number":774,"context_line":"        node.save()"},{"line_number":775,"context_line":"        deploy_utils.populate_storage_driver_internal_info(task)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_386c8506","line":772,"range":{"start_line":772,"start_character":8,"end_line":772,"end_character":67},"in_reply_to":"5f7c97a3_9eb90a17","updated":"2018-07-10 22:44:12.000000000","message":"Great question, I\u0027m unsure... With this we at least have some compatibility without modifying what the nova virt driver ships because the operator has explicitly chosen that the node will ramdisk \"deploy\"  If we fail, then we would need to make the virt driver aware of it, and I\u0027m unsure if that is a great idea.","commit_id":"8839d1c027b9af0c4ad7c44e8ab71e7cdad9b62a"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    pxe_opts.setdefault(\u0027aki_path\u0027, \u0027no_kernel\u0027)"},{"line_number":213,"context_line":"    pxe_opts.setdefault(\u0027ari_path\u0027, \u0027no_ramdisk\u0027)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    # TODO(TheJulia): We should only do this if we have a ramdisk interface."},{"line_number":216,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":217,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":218,"context_line":"        if \u0027ramdisk_kernel_arguments\u0027 in i_info:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_492dba43","line":215,"updated":"2018-07-25 09:26:42.000000000","message":"Check the boot interface\u0027s capabilities?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    pxe_opts.setdefault(\u0027aki_path\u0027, \u0027no_kernel\u0027)"},{"line_number":213,"context_line":"    pxe_opts.setdefault(\u0027ari_path\u0027, \u0027no_ramdisk\u0027)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    # TODO(TheJulia): We should only do this if we have a ramdisk interface."},{"line_number":216,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":217,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":218,"context_line":"        if \u0027ramdisk_kernel_arguments\u0027 in i_info:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_cb220ca7","line":215,"in_reply_to":"5f7c97a3_492dba43","updated":"2018-07-25 14:45:42.000000000","message":"Ohh, good point, that works, although 216 effectively does that for now. I\u0027m going to put a TODO note to do it next cycle since we will need to begin splitting this apart for pxe/ipxe split.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    # TODO(TheJulia): We should only do this if we have a ramdisk interface."},{"line_number":216,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":217,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":218,"context_line":"        if \u0027ramdisk_kernel_arguments\u0027 in i_info:"},{"line_number":219,"context_line":"            ramdisk_opts \u003d {"},{"line_number":220,"context_line":"                \u0027ramdisk_opts\u0027: i_info.get(\u0027ramdisk_kernel_arguments\u0027)}"},{"line_number":221,"context_line":"            pxe_opts.update(ramdisk_opts)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    return pxe_opts"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2b8860c1","line":221,"range":{"start_line":218,"start_character":8,"end_line":221,"end_character":41},"updated":"2018-07-25 12:59:05.000000000","message":"Can also be rephrased like this:\n\ntry:\n  pxe_opts[\u0027ramdisk_opts\u0027] \u003d i_info[\u0027ramdisk_kernel_arguments\u0027]\n\nexcept KeyError:\n  pass\n\nbecause `ask forgiveness not permission` ;)","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    # TODO(TheJulia): We should only do this if we have a ramdisk interface."},{"line_number":216,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":217,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":218,"context_line":"        if \u0027ramdisk_kernel_arguments\u0027 in i_info:"},{"line_number":219,"context_line":"            ramdisk_opts \u003d {"},{"line_number":220,"context_line":"                \u0027ramdisk_opts\u0027: i_info.get(\u0027ramdisk_kernel_arguments\u0027)}"},{"line_number":221,"context_line":"            pxe_opts.update(ramdisk_opts)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    return pxe_opts"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2e7dcde5","line":221,"range":{"start_line":218,"start_character":8,"end_line":221,"end_character":41},"in_reply_to":"5f7c97a3_2b8860c1","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":631,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":632,"context_line":"                task.node, task.context)"},{"line_number":633,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":634,"context_line":"                                  instance_image_info)"},{"line_number":635,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":636,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_cb5d2c55","line":633,"range":{"start_line":633,"start_character":12,"end_line":633,"end_character":33},"updated":"2018-07-25 12:59:05.000000000","message":"This might be out of scope of this patch, but I still wanted to know your opinion on this.\n\nIs it feasible/reasonable/useful to allow chain-loading stock .iso/whole-disk images into RAM [1]? If so, we might want to cache the final image in the boot chain as well....\n\n1. https://www.syslinux.org/wiki/index.php?title\u003dMEMDISK","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9ff07ec282266a54cc52140a454f0941c82cc0c1","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":631,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":632,"context_line":"                task.node, task.context)"},{"line_number":633,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":634,"context_line":"                                  instance_image_info)"},{"line_number":635,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":636,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_c3089081","line":633,"range":{"start_line":633,"start_character":12,"end_line":633,"end_character":33},"in_reply_to":"5f7c97a3_6d43b4b1","updated":"2018-07-26 17:20:27.000000000","message":"Well, we prefer iPXE, and many card vendors already ship with ipxe support burned internally. But I don\u0027t remember if we ship both parameters over to neutron.\n\niPXE -\u003e PXE Loader (tftp?) to fire up sysliux -\u003e get config file -\u003e get iso file, store in memory, try and boot file.\n\nWe wouldn\u0027t be able to go direct from glance, we _could_ from swift possibly via http, but we would need to support https (which ipxe has some support for....)\n\nDefinitely worth some pondering.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"dafc7898a7819ec09bf6ce3e0404556f4faa32f4","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":631,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":632,"context_line":"                task.node, task.context)"},{"line_number":633,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":634,"context_line":"                                  instance_image_info)"},{"line_number":635,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":636,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_6d43b4b1","line":633,"range":{"start_line":633,"start_character":12,"end_line":633,"end_character":33},"in_reply_to":"5f7c97a3_8e2e61a8","updated":"2018-07-26 10:19:23.000000000","message":"Hold on, is iPXE involved in this at all?\n\nMy understanding is that syslinux/memdisk works like this:\n\npxe -\u003e boot syslinux/memdisk + .iso -\u003e partially replace BIOS and reboot from memory-resident .iso\n\nCould we serve some universal syslinux/memdisk kernel + existing .iso\u0027s from glance as a ramdisk? That way operators won\u0027t have to craft special ramdisk images (for as long as their .iso fits in RAM).\n\nThis idea definitely needs more research if it makes sense at all. ;)","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"6c69cba1a9b71226c2c4aac761f87143ce848726","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":631,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":632,"context_line":"                task.node, task.context)"},{"line_number":633,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":634,"context_line":"                                  instance_image_info)"},{"line_number":635,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":636,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f4dd3613","line":633,"range":{"start_line":633,"start_character":12,"end_line":633,"end_character":33},"in_reply_to":"5f7c97a3_c3089081","updated":"2018-07-27 10:51:31.000000000","message":"\u003e iPXE -\u003e PXE Loader (tftp?) to fire up sysliux -\u003e get config file -\u003e get iso file, store in memory, try and boot file.\n\nWell, my impression is that syslinux/memdisk does not require anything fancy like https. I think everything can be booted over vanilla TFTP like in good old times. The difference is that (cpio) ramdisk image is replaced by .iso image which memdisk can handle. The other difference is that the initial kernel (syslinux) is probably replaced with whatever kernel/OS resides on .iso.\n\nMy non-educated understanding of the syslinux/memdisk boot process is this:\n\n1. i/PXE boot loader fetches the kernel (e.g. syslinux/memdisk) from TFTP server\n2. syslinux boots, memdisk kernel module unpacks .iso into RAM\n3. memdisk kernel module puts some disk driver code into RAM and repoints IBM PC I/O interrupt(s) that serve BIOS I/O onto  the disk driver code\n4. memdisk calls BIOS boot procedure effectively ceasing running syslinux/memdisk\n5. BIOS boots from local drive which is actually a RAM disk\n\n\u003e We wouldn\u0027t be able to go direct from glance, we _could_ from swift possibly via http, but we would need to support https (which ipxe has some support for....)\n\nYes, what I mean is that ironic could fetch .iso from whatever (I am not sure if there is any problem for conductor to pull images from glance), and host them on its TFTP for PXE to pull.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        elif boot_option \u003d\u003d \"ramdisk\":"},{"line_number":631,"context_line":"            instance_image_info \u003d _get_instance_image_info("},{"line_number":632,"context_line":"                task.node, task.context)"},{"line_number":633,"context_line":"            _cache_ramdisk_kernel(task.context, task.node,"},{"line_number":634,"context_line":"                                  instance_image_info)"},{"line_number":635,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"},{"line_number":636,"context_line":"            provider \u003d dhcp_factory.DHCPFactory()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_8e2e61a8","line":633,"range":{"start_line":633,"start_character":12,"end_line":633,"end_character":33},"in_reply_to":"5f7c97a3_cb5d2c55","updated":"2018-07-25 14:45:42.000000000","message":"I like the idea, there would need to be some caveats wrapped around that... I think it is out of scope for this individual patch, but possibly something we should consider next cycle. That being said, we can do lots of this with ipxe... and it looks like, at least based upon the syslinux docs, that is where their implementation came from.\n\nPerhaps this: lets inquire with the ppc64le folks if their embedded parser supports such actions. If so, I think that would be useful.\n\nThe other thing to consider is that syslinux is only available for x86 machines, and some vendors cards ship with some form of ipxe support already.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                       base.DeployInterface):"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def validate(self, task):"},{"line_number":736,"context_line":"        # Initially this is likely okay, we can iterrate on this and"},{"line_number":737,"context_line":"        # enable other drivers that have similar functionality that"},{"line_number":738,"context_line":"        # be invoked in a ramdisk friendly way."},{"line_number":739,"context_line":"        if not isinstance(task.driver.boot, PXEBoot):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_0b7b24bf","line":736,"range":{"start_line":736,"start_character":48,"end_line":736,"end_character":56},"updated":"2018-07-25 12:59:05.000000000","message":"typo","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":733,"context_line":"                       base.DeployInterface):"},{"line_number":734,"context_line":""},{"line_number":735,"context_line":"    def validate(self, task):"},{"line_number":736,"context_line":"        # Initially this is likely okay, we can iterrate on this and"},{"line_number":737,"context_line":"        # enable other drivers that have similar functionality that"},{"line_number":738,"context_line":"        # be invoked in a ramdisk friendly way."},{"line_number":739,"context_line":"        if not isinstance(task.driver.boot, PXEBoot):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_4e3849ec","line":736,"range":{"start_line":736,"start_character":48,"end_line":736,"end_character":56},"in_reply_to":"5f7c97a3_0b7b24bf","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # require explicit security postures."},{"line_number":767,"context_line":"        task.driver.network.configure_tenant_networks(task)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Prepare the instance will also set PXE boot"},{"line_number":770,"context_line":"        # calling prepare_instance in order to leverage"},{"line_number":771,"context_line":"        # the capability to change the flags around."},{"line_number":772,"context_line":"        task.driver.boot.prepare_instance(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_0b548421","line":769,"range":{"start_line":769,"start_character":18,"end_line":769,"end_character":21},"updated":"2018-07-25 12:59:05.000000000","message":"nit: probably needs to refer to function name?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":766,"context_line":"        # require explicit security postures."},{"line_number":767,"context_line":"        task.driver.network.configure_tenant_networks(task)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Prepare the instance will also set PXE boot"},{"line_number":770,"context_line":"        # calling prepare_instance in order to leverage"},{"line_number":771,"context_line":"        # the capability to change the flags around."},{"line_number":772,"context_line":"        task.driver.boot.prepare_instance(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_3178d27c","line":769,"range":{"start_line":769,"start_character":18,"end_line":769,"end_character":21},"in_reply_to":"5f7c97a3_0b548421","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        task.driver.network.configure_tenant_networks(task)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Prepare the instance will also set PXE boot"},{"line_number":770,"context_line":"        # calling prepare_instance in order to leverage"},{"line_number":771,"context_line":"        # the capability to change the flags around."},{"line_number":772,"context_line":"        task.driver.boot.prepare_instance(task)"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_eb2ee8a8","line":770,"range":{"start_line":770,"start_character":10,"end_line":770,"end_character":17},"updated":"2018-07-25 12:59:05.000000000","message":"nit: new sentence?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":767,"context_line":"        task.driver.network.configure_tenant_networks(task)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Prepare the instance will also set PXE boot"},{"line_number":770,"context_line":"        # calling prepare_instance in order to leverage"},{"line_number":771,"context_line":"        # the capability to change the flags around."},{"line_number":772,"context_line":"        task.driver.boot.prepare_instance(task)"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_9181a64f","line":770,"range":{"start_line":770,"start_character":10,"end_line":770,"end_character":17},"in_reply_to":"5f7c97a3_eb2ee8a8","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":775,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":776,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":777,"context_line":"        return states.DEPLOYDONE"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def prepare(self, task):"},{"line_number":780,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2b6a9fb4","line":777,"range":{"start_line":777,"start_character":22,"end_line":777,"end_character":32},"updated":"2018-07-25 12:59:05.000000000","message":"This feels ambitious... The instance might never come up for one reason or the other.\n\nJust thinking outloud:\n\n* May be we can be more explicit in the log/status not to driver operator to the conclusion that deployment is done/successful?\n* May be we can accommodate the possibility for the instance to call us back once it\u0027s actually booted? Definitely out of scope, though.\n* May be we can ICMP ping the instance somehow before transitioning to the \u0027done\u0027 state? This should probably be configurable as the instance may not respond.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"6c69cba1a9b71226c2c4aac761f87143ce848726","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":775,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":776,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":777,"context_line":"        return states.DEPLOYDONE"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def prepare(self, task):"},{"line_number":780,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_d426fa22","line":777,"range":{"start_line":777,"start_character":22,"end_line":777,"end_character":32},"in_reply_to":"5f7c97a3_2377040a","updated":"2018-07-27 10:51:31.000000000","message":"\u003e Perhaps an optional checker?\n\nYeah, serial console may not universally work. BTW, did you know that even Windows is trying to look like a real server [1]?\n\n;-)\n\n1. https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-parameters-to-enable-ems-redirection","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":775,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":776,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":777,"context_line":"        return states.DEPLOYDONE"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def prepare(self, task):"},{"line_number":780,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_312f72f6","line":777,"range":{"start_line":777,"start_character":22,"end_line":777,"end_character":32},"in_reply_to":"5f7c97a3_2b6a9fb4","updated":"2018-07-25 14:45:42.000000000","message":"Well, It does need to be changed for deploysteps, but I\u0027m putting a todo in for next cycle since we\u0027re crunched on time (and why not get tempest working before making that change.)\n\nYour right, it is ambitious, but we\u0027re in the same exact boat with all boot including whole disk image, boot from volumes... here we just have nothing else to do.\n\nAs for callbacks or pinging, that does somewhat violate the boundary that we have with the node and implies that we must have that level of access. I guess in a sense, the same is true with VMs, although most hypervisors look for user space tools or internally on the virtual network ping the instance. Neither of us we can really do.","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b293655d0bd1338380f5f70c3f1f4356e72d607e","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":775,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":776,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":777,"context_line":"        return states.DEPLOYDONE"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def prepare(self, task):"},{"line_number":780,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_3447457d","line":777,"range":{"start_line":777,"start_character":22,"end_line":777,"end_character":32},"in_reply_to":"5f7c97a3_312f72f6","updated":"2018-07-26 13:47:37.000000000","message":"Just thinking this over...\n\nTheoretically, may be we wait the login prompt/hostname to show up on the console (like SOL)...\n\nVMs might pull something from the metadata service which could potentially serve as a hint that the instance is more alive than dead....\n\nAll this is infinitely hacky indeed. :(\n\nThanks for the explanation!","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9ff07ec282266a54cc52140a454f0941c82cc0c1","unresolved":false,"context_lines":[{"line_number":774,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":775,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":776,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":777,"context_line":"        return states.DEPLOYDONE"},{"line_number":778,"context_line":""},{"line_number":779,"context_line":"    def prepare(self, task):"},{"line_number":780,"context_line":"        node \u003d task.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2377040a","line":777,"range":{"start_line":777,"start_character":22,"end_line":777,"end_character":32},"in_reply_to":"5f7c97a3_3447457d","updated":"2018-07-26 17:20:27.000000000","message":"It is GREAT that your asking these questions! :)\n\nI kind of like the serial console idea, but we\u0027re going to need some more console work.... except that won\u0027t work in all cases including the graphical ones. Perhaps an optional checker?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"167fbe9eabaf14954e993be4e6eb62af973327a5","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":778,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":779,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":780,"context_line":"        # TODO(TheJulia): Update this in stein to support deploy steps."},{"line_number":781,"context_line":"        return states.DEPLOYDONE"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def prepare(self, task):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_3a8187fb","line":780,"updated":"2018-07-25 16:16:20.000000000","message":"Isn\u0027t this as simple as adding a decorator and returning None? Could be a follow up.","commit_id":"a31176785b7ba0e7fc5f5422571e44d9dfabc263"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fdfb88a0cc6b10817a27de05bcb2aad20a4b001f","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":778,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":779,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":780,"context_line":"        # TODO(TheJulia): Update this in stein to support deploy steps."},{"line_number":781,"context_line":"        return states.DEPLOYDONE"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def prepare(self, task):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_23c5c409","line":780,"in_reply_to":"5f7c97a3_3a8187fb","updated":"2018-07-26 17:23:07.000000000","message":"Yeah, that was what I was planning on doing.","commit_id":"a31176785b7ba0e7fc5f5422571e44d9dfabc263"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    # of a pain for unit testing. We can sort this out in Stein since we will"},{"line_number":218,"context_line":"    # need to revisit a major portion of this file to effetively begin the"},{"line_number":219,"context_line":"    # ipxe boot interface promotion."},{"line_number":220,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":221,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            pxe_opts[\u0027ramdisk_opts\u0027] \u003d i_info[\u0027ramdisk_kernel_arguments\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_aba19df8","line":220,"updated":"2018-07-27 07:39:49.000000000","message":"I think we can drop this check. In case of non-ramdisk deploy, ramdisk_opts just won\u0027t be used by the template.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    # of a pain for unit testing. We can sort this out in Stein since we will"},{"line_number":218,"context_line":"    # need to revisit a major portion of this file to effetively begin the"},{"line_number":219,"context_line":"    # ipxe boot interface promotion."},{"line_number":220,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":221,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            pxe_opts[\u0027ramdisk_opts\u0027] \u003d i_info[\u0027ramdisk_kernel_arguments\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_386f1862","line":220,"in_reply_to":"5f7c97a3_670e5134","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    # of a pain for unit testing. We can sort this out in Stein since we will"},{"line_number":218,"context_line":"    # need to revisit a major portion of this file to effetively begin the"},{"line_number":219,"context_line":"    # ipxe boot interface promotion."},{"line_number":220,"context_line":"    if isinstance(task.driver.deploy, PXERamdiskDeploy):"},{"line_number":221,"context_line":"        i_info \u003d task.node.instance_info"},{"line_number":222,"context_line":"        try:"},{"line_number":223,"context_line":"            pxe_opts[\u0027ramdisk_opts\u0027] \u003d i_info[\u0027ramdisk_kernel_arguments\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_670e5134","line":220,"in_reply_to":"5f7c97a3_aba19df8","updated":"2018-07-27 15:30:00.000000000","message":"I\u0027m good with that. Less headaches later on with the pxe/ipxe split (yes, this actually causes python2 problems, imagine that!)\n\nI\u0027ll leave a note saying \"we should swap this for an interface capabilities check.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # Initially this is likely okay, we can iterate on this and"},{"line_number":741,"context_line":"        # enable other drivers that have similar functionality that"},{"line_number":742,"context_line":"        # be invoked in a ramdisk friendly way."},{"line_number":743,"context_line":"        if not isinstance(task.driver.boot, PXEBoot):"},{"line_number":744,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":745,"context_line":"                err\u003d(\u0027Invalid configuration: The ramdisk deploy \u0027"},{"line_number":746,"context_line":"                     \u0027interface requires the pxe boot interface.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_4baa49d3","line":743,"updated":"2018-07-27 07:39:49.000000000","message":"why do we need this if the next check will cover it anyway?","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # Initially this is likely okay, we can iterate on this and"},{"line_number":741,"context_line":"        # enable other drivers that have similar functionality that"},{"line_number":742,"context_line":"        # be invoked in a ramdisk friendly way."},{"line_number":743,"context_line":"        if not isinstance(task.driver.boot, PXEBoot):"},{"line_number":744,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":745,"context_line":"                err\u003d(\u0027Invalid configuration: The ramdisk deploy \u0027"},{"line_number":746,"context_line":"                     \u0027interface requires the pxe boot interface.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_e7482163","line":743,"in_reply_to":"5f7c97a3_4baa49d3","updated":"2018-07-27 15:30:00.000000000","message":"I guess we just don\u0027t need to really.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":740,"context_line":"        # Initially this is likely okay, we can iterate on this and"},{"line_number":741,"context_line":"        # enable other drivers that have similar functionality that"},{"line_number":742,"context_line":"        # be invoked in a ramdisk friendly way."},{"line_number":743,"context_line":"        if not isinstance(task.driver.boot, PXEBoot):"},{"line_number":744,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":745,"context_line":"                err\u003d(\u0027Invalid configuration: The ramdisk deploy \u0027"},{"line_number":746,"context_line":"                     \u0027interface requires the pxe boot interface.\u0027))"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d88064f9","line":743,"in_reply_to":"5f7c97a3_e7482163","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":749,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":750,"context_line":"                err\u003d(\u0027Invalid configuration: The boot interface \u0027"},{"line_number":751,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"},{"line_number":752,"context_line":"                     \u0027Not found.\u0027))"},{"line_number":753,"context_line":"        task.driver.boot.validate(task)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # Validate node capabilities"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_6ba7050b","line":752,"updated":"2018-07-27 07:39:49.000000000","message":"s/Not found/You are using an incompatible boot interface/","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":749,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":750,"context_line":"                err\u003d(\u0027Invalid configuration: The boot interface \u0027"},{"line_number":751,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"},{"line_number":752,"context_line":"                     \u0027Not found.\u0027))"},{"line_number":753,"context_line":"        task.driver.boot.validate(task)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # Validate node capabilities"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_87628dd8","line":752,"in_reply_to":"5f7c97a3_6ba7050b","updated":"2018-07-27 15:30:00.000000000","message":"I like!","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":749,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":750,"context_line":"                err\u003d(\u0027Invalid configuration: The boot interface \u0027"},{"line_number":751,"context_line":"                     \u0027must have the `ramdisk_boot` capability. \u0027"},{"line_number":752,"context_line":"                     \u0027Not found.\u0027))"},{"line_number":753,"context_line":"        task.driver.boot.validate(task)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"        # Validate node capabilities"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_98766c3f","line":752,"in_reply_to":"5f7c97a3_87628dd8","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":778,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":779,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":780,"context_line":"        # TODO(TheJulia): Update this in stein to support deploy steps."},{"line_number":781,"context_line":"        return states.DEPLOYDONE"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def prepare(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_0bb0d140","line":780,"updated":"2018-07-27 07:39:49.000000000","message":"Why in Stein? We\u0027re ending up with a deprecating warning this way, no? And converting to deploy steps is quite trivial.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":778,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":779,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":780,"context_line":"        # TODO(TheJulia): Update this in stein to support deploy steps."},{"line_number":781,"context_line":"        return states.DEPLOYDONE"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def prepare(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_4758f523","line":780,"in_reply_to":"5f7c97a3_0bb0d140","updated":"2018-07-27 15:30:00.000000000","message":"I\u0027ve got a follow-up to do it already.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":777,"context_line":"        # Power-on the instance, with PXE prepared, we\u0027re done."},{"line_number":778,"context_line":"        manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":779,"context_line":"        LOG.info(\u0027Deployment setup for node %s done\u0027, task.node.uuid)"},{"line_number":780,"context_line":"        # TODO(TheJulia): Update this in stein to support deploy steps."},{"line_number":781,"context_line":"        return states.DEPLOYDONE"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def prepare(self, task):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_988d0c37","line":780,"in_reply_to":"5f7c97a3_4758f523","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a4acce2ab724454d8e052cc0bb083cc91fcf7407","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        # otherwise reset it."},{"line_number":787,"context_line":"        if deploy_utils.get_boot_option(node) !\u003d \u0027ramdisk\u0027:"},{"line_number":788,"context_line":"            LOG.warning(\u0027Incorrect \"boot_option\" set for node %(node)s \u0027"},{"line_number":789,"context_line":"                        \u0027and will be overridden to \"ramdisk\" as the \u0027"},{"line_number":790,"context_line":"                        \u0027to match the deploy interface.\u0027,"},{"line_number":791,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":792,"context_line":"            i_info \u003d task.node.instance_info"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_0513e203","line":789,"range":{"start_line":789,"start_character":64,"end_line":789,"end_character":67},"updated":"2018-07-27 05:33:31.000000000","message":"s/ the //","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        # otherwise reset it."},{"line_number":787,"context_line":"        if deploy_utils.get_boot_option(node) !\u003d \u0027ramdisk\u0027:"},{"line_number":788,"context_line":"            LOG.warning(\u0027Incorrect \"boot_option\" set for node %(node)s \u0027"},{"line_number":789,"context_line":"                        \u0027and will be overridden to \"ramdisk\" as the \u0027"},{"line_number":790,"context_line":"                        \u0027to match the deploy interface.\u0027,"},{"line_number":791,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":792,"context_line":"            i_info \u003d task.node.instance_info"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_78903050","line":789,"range":{"start_line":789,"start_character":64,"end_line":789,"end_character":67},"in_reply_to":"5f7c97a3_0513e203","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        if deploy_utils.get_boot_option(node) !\u003d \u0027ramdisk\u0027:"},{"line_number":788,"context_line":"            LOG.warning(\u0027Incorrect \"boot_option\" set for node %(node)s \u0027"},{"line_number":789,"context_line":"                        \u0027and will be overridden to \"ramdisk\" as the \u0027"},{"line_number":790,"context_line":"                        \u0027to match the deploy interface.\u0027,"},{"line_number":791,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":792,"context_line":"            i_info \u003d task.node.instance_info"},{"line_number":793,"context_line":"            i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2bad8de6","line":790,"updated":"2018-07-27 07:39:49.000000000","message":"nit: I\u0027d log the incorrect value","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5b63dd7d54b1188ebab895cd79907b01b3800876","unresolved":false,"context_lines":[{"line_number":787,"context_line":"        if deploy_utils.get_boot_option(node) !\u003d \u0027ramdisk\u0027:"},{"line_number":788,"context_line":"            LOG.warning(\u0027Incorrect \"boot_option\" set for node %(node)s \u0027"},{"line_number":789,"context_line":"                        \u0027and will be overridden to \"ramdisk\" as the \u0027"},{"line_number":790,"context_line":"                        \u0027to match the deploy interface.\u0027,"},{"line_number":791,"context_line":"                        {\u0027node\u0027: node.uuid})"},{"line_number":792,"context_line":"            i_info \u003d task.node.instance_info"},{"line_number":793,"context_line":"            i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027ramdisk\u0027}})"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_b8a248ab","line":790,"in_reply_to":"5f7c97a3_2bad8de6","updated":"2018-07-27 18:19:42.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"}],"ironic/tests/unit/drivers/modules/test_pxe.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":"class PXEBootDeployTestCase(db_base.DbTestCase):"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"    driver \u003d \u0027fake-hardware\u0027"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"    def setUp(self):"},{"line_number":1475,"context_line":"        super(PXEBootDeployTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_cb7f3967","line":1472,"updated":"2018-07-27 07:39:49.000000000","message":"This seems not needed","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e605b71134c2ff491b302e91d53cb46ee43d52ed","unresolved":false,"context_lines":[{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":"class PXEBootDeployTestCase(db_base.DbTestCase):"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"    driver \u003d \u0027fake-hardware\u0027"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"    def setUp(self):"},{"line_number":1475,"context_line":"        super(PXEBootDeployTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_f8744006","line":1472,"in_reply_to":"5f7c97a3_07eafd0c","updated":"2018-07-27 20:07:52.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":1469,"context_line":""},{"line_number":1470,"context_line":"class PXEBootDeployTestCase(db_base.DbTestCase):"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"    driver \u003d \u0027fake-hardware\u0027"},{"line_number":1473,"context_line":""},{"line_number":1474,"context_line":"    def setUp(self):"},{"line_number":1475,"context_line":"        super(PXEBootDeployTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_07eafd0c","line":1472,"in_reply_to":"5f7c97a3_cb7f3967","updated":"2018-07-27 15:30:00.000000000","message":"Same as below, but it could just go on the node creation line.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        self.config(images_path\u003dself.temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":1480,"context_line":"        self.config(enabled_deploy_interfaces\u003d[\u0027ramdisk\u0027])"},{"line_number":1481,"context_line":"        self.config(enabled_boot_interfaces\u003d[\u0027pxe\u0027])"},{"line_number":1482,"context_line":"        for iface in drivers_base.ALL_INTERFACES:"},{"line_number":1483,"context_line":"            impl \u003d \u0027fake\u0027"},{"line_number":1484,"context_line":"            if iface \u003d\u003d \u0027network\u0027:"},{"line_number":1485,"context_line":"                impl \u003d \u0027noop\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_eb84755f","line":1482,"updated":"2018-07-27 07:39:49.000000000","message":"This does not look needed, it duplicates what you have above and in the base setUp","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"        self.config(images_path\u003dself.temp_dir, group\u003d\u0027pxe\u0027)"},{"line_number":1480,"context_line":"        self.config(enabled_deploy_interfaces\u003d[\u0027ramdisk\u0027])"},{"line_number":1481,"context_line":"        self.config(enabled_boot_interfaces\u003d[\u0027pxe\u0027])"},{"line_number":1482,"context_line":"        for iface in drivers_base.ALL_INTERFACES:"},{"line_number":1483,"context_line":"            impl \u003d \u0027fake\u0027"},{"line_number":1484,"context_line":"            if iface \u003d\u003d \u0027network\u0027:"},{"line_number":1485,"context_line":"                impl \u003d \u0027noop\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_c77ac574","line":1482,"in_reply_to":"5f7c97a3_eb84755f","updated":"2018-07-27 15:30:00.000000000","message":"We need it to fire tasks that will initialize correctly.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            driver_internal_info\u003dDRV_INTERNAL_INFO_DICT)"},{"line_number":1501,"context_line":"        self.port \u003d obj_utils.create_test_port(self.context,"},{"line_number":1502,"context_line":"                                               node_id\u003dself.node.id)"},{"line_number":1503,"context_line":"        self.config(group\u003d\u0027conductor\u0027, api_url\u003d\u0027http://127.0.0.1:1234/\u0027)"},{"line_number":1504,"context_line":""},{"line_number":1505,"context_line":"    @mock.patch.object(manager_utils, \u0027node_set_boot_device\u0027, autospec\u003dTrue)"},{"line_number":1506,"context_line":"    @mock.patch.object(deploy_utils, \u0027switch_pxe_config\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_8b75c188","line":1503,"updated":"2018-07-27 07:39:49.000000000","message":"this option is deprecated","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e605b71134c2ff491b302e91d53cb46ee43d52ed","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"            driver_internal_info\u003dDRV_INTERNAL_INFO_DICT)"},{"line_number":1501,"context_line":"        self.port \u003d obj_utils.create_test_port(self.context,"},{"line_number":1502,"context_line":"                                               node_id\u003dself.node.id)"},{"line_number":1503,"context_line":"        self.config(group\u003d\u0027conductor\u0027, api_url\u003d\u0027http://127.0.0.1:1234/\u0027)"},{"line_number":1504,"context_line":""},{"line_number":1505,"context_line":"    @mock.patch.object(manager_utils, \u0027node_set_boot_device\u0027, autospec\u003dTrue)"},{"line_number":1506,"context_line":"    @mock.patch.object(deploy_utils, \u0027switch_pxe_config\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_78235007","line":1503,"in_reply_to":"5f7c97a3_8b75c188","updated":"2018-07-27 20:07:52.000000000","message":"Done","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"05478f643ec5f44193c78af31687f0af5a376ad8","unresolved":false,"context_lines":[{"line_number":1592,"context_line":"        node.save()"},{"line_number":1593,"context_line":"        with task_manager.acquire(self.context, node.uuid) as task:"},{"line_number":1594,"context_line":"            task.driver.deploy.prepare(task)"},{"line_number":1595,"context_line":"            mock_prepare_instance.assert_called_once_with(mock.ANY, task)"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"    @mock.patch.object(pxe.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":1598,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_instance\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_ab7afd72","line":1595,"updated":"2018-07-27 07:39:49.000000000","message":"this test should be split into 3 (using reset_mock is nearly always an indicator of it)","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b2dca5363478413d2528d23e11e37cb90edd6378","unresolved":false,"context_lines":[{"line_number":1592,"context_line":"        node.save()"},{"line_number":1593,"context_line":"        with task_manager.acquire(self.context, node.uuid) as task:"},{"line_number":1594,"context_line":"            task.driver.deploy.prepare(task)"},{"line_number":1595,"context_line":"            mock_prepare_instance.assert_called_once_with(mock.ANY, task)"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"    @mock.patch.object(pxe.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":1598,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_instance\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_87d5ad49","line":1595,"in_reply_to":"5f7c97a3_ab7afd72","updated":"2018-07-27 15:30:00.000000000","message":"Seems easy to do in a follow-up.","commit_id":"731af401290a1eaad19bbe89ae227fe4c2b5816b"}],"releasenotes/notes/adds-ramdisk-deploy-interface-39fc61bc77b57beb.yaml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to PXE/iPXE boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_c9c6aa6a","line":5,"updated":"2018-07-25 09:26:42.000000000","message":"Probably only one of network boot or PXE/iPXE is required","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to PXE/iPXE boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_d16b9e19","line":5,"in_reply_to":"5f7c97a3_c9c6aa6a","updated":"2018-07-25 14:45:42.000000000","message":"++ to just network boot","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to PXE/iPXE boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_69c3d659","line":7,"updated":"2018-07-25 09:26:42.000000000","message":"use cases?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to PXE/iPXE boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_31569260","line":7,"in_reply_to":"5f7c97a3_69c3d659","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_299b9e79","line":9,"updated":"2018-07-25 09:26:42.000000000","message":"users","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_d1f2be69","line":9,"in_reply_to":"5f7c97a3_299b9e79","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"9e0ad5e324d0fc471c9b07304d72d74db87fa396","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_abb22f49","line":10,"range":{"start_line":10,"start_character":45,"end_line":10,"end_character":53},"updated":"2018-07-25 12:59:05.000000000","message":"the users?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    scientific cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_11d036c6","line":10,"range":{"start_line":10,"start_character":45,"end_line":10,"end_character":53},"in_reply_to":"5f7c97a3_abb22f49","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_09dca243","line":11,"updated":"2018-07-25 09:26:42.000000000","message":"configuration","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_f1d49abe","line":11,"in_reply_to":"5f7c97a3_09dca243","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"9d422c241abb582ff29b580ee4d1c325fe25c384","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_89e75210","line":12,"updated":"2018-07-25 09:26:42.000000000","message":"and the inability to use configuration drives?","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5223f79382bc6eb8d2e6be62c64f283cebcecf67","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_d1d95ef1","line":12,"in_reply_to":"5f7c97a3_89e75210","updated":"2018-07-25 14:45:42.000000000","message":"Done","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"167fbe9eabaf14954e993be4e6eb62af973327a5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    The ``ramdisk`` deploy interface is intended for advanced user and has"},{"line_number":10,"context_line":"    some particular operational caveats that any user should be aware of"},{"line_number":11,"context_line":"    prior to use, such as network access list requirements and confiugation"},{"line_number":12,"context_line":"    drive architectural restrictions."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"5f7c97a3_fac0ef2e","line":12,"in_reply_to":"5f7c97a3_d1d95ef1","updated":"2018-07-25 16:16:20.000000000","message":"Was thinking this would replace \u0027and configuration drive architectural restrictions\u0027, but nvm :)","commit_id":"cf9438dc22af30af76bb97a5e72a0e03ff54aa0e"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"167fbe9eabaf14954e993be4e6eb62af973327a5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to network boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific use cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f7c97a3_5ab243ea","line":5,"updated":"2018-07-25 16:16:20.000000000","message":"to network boot to network boot :)","commit_id":"a31176785b7ba0e7fc5f5422571e44d9dfabc263"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fdfb88a0cc6b10817a27de05bcb2aad20a4b001f","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds a ``ramdisk`` deploy interface for deployments that wish to network"},{"line_number":5,"context_line":"    boot to network boot to a ramdisk, as opposed to perform a complete"},{"line_number":6,"context_line":"    traditional deployment to a physical media. This may be useful in"},{"line_number":7,"context_line":"    scientific use cases or where ephemeral baremetal machines are desired."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5f7c97a3_43dfa0d6","line":5,"in_reply_to":"5f7c97a3_5ab243ea","updated":"2018-07-26 17:23:07.000000000","message":"doh!","commit_id":"a31176785b7ba0e7fc5f5422571e44d9dfabc263"}],"setup.cfg":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8657cac61457a753450044e581ba0b787da40937","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    iscsi \u003d ironic.drivers.modules.iscsi_deploy:ISCSIDeploy"},{"line_number":114,"context_line":"    oneview-direct \u003d ironic.drivers.modules.oneview.deploy:OneViewAgentDeploy"},{"line_number":115,"context_line":"    oneview-iscsi \u003d ironic.drivers.modules.oneview.deploy:OneViewIscsiDeploy"},{"line_number":116,"context_line":"    pxe \u003d ironic.drivers.modules.pxe:PXEDeploy"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"ironic.hardware.interfaces.inspect \u003d"},{"line_number":119,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeInspect"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"5f7c97a3_0af2879c","line":116,"updated":"2018-06-27 18:24:16.000000000","message":"Can we name this something different? The name pxe (and PXEDeploy) has way too many historical connotations IMO.","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7e2b7d983548e52f025573bca58df04323c3e3b9","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    iscsi \u003d ironic.drivers.modules.iscsi_deploy:ISCSIDeploy"},{"line_number":114,"context_line":"    oneview-direct \u003d ironic.drivers.modules.oneview.deploy:OneViewAgentDeploy"},{"line_number":115,"context_line":"    oneview-iscsi \u003d ironic.drivers.modules.oneview.deploy:OneViewIscsiDeploy"},{"line_number":116,"context_line":"    pxe \u003d ironic.drivers.modules.pxe:PXEDeploy"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"ironic.hardware.interfaces.inspect \u003d"},{"line_number":119,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeInspect"}],"source_content_type":"text/x-ttcn-cfg","patch_set":1,"id":"5f7c97a3_01682d20","line":116,"in_reply_to":"5f7c97a3_0af2879c","updated":"2018-06-27 20:05:58.000000000","message":"I\u0027ve proposed it as \"ramdisk\"","commit_id":"d6c9606cd53a276a3b87f9ca73e346c118ee0530"}]}
