)]}'
{"devstack/common_settings":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"07d504deaa24211faceb4d6e38ea004678a9edc5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# because UEFI is the only and implicit way of booting there."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"# WARNING: UEFI is EXPERIMENTAL. The CirrOS images uploaded by DevStack by"},{"line_number":16,"context_line":"# default WILL NOT WORK with UEFI."},{"line_number":17,"context_line":"IRONIC_BOOT_MODE\u003d${IRONIC_BOOT_MODE:-bios}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"IRONIC_DEFAULT_IMAGE_NAME\u003dcirros-${CIRROS_VERSION}-x86_64-uec"}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_361fd608","line":16,"updated":"2019-07-22 14:22:47.000000000","message":"We should do something about this because it would be easy to say redfish is also experimental. Besides, I think we\u0027re well past experimental.","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# because UEFI is the only and implicit way of booting there."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":"# WARNING: UEFI is EXPERIMENTAL. The CirrOS images uploaded by DevStack by"},{"line_number":16,"context_line":"# default WILL NOT WORK with UEFI."},{"line_number":17,"context_line":"IRONIC_BOOT_MODE\u003d${IRONIC_BOOT_MODE:-bios}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"IRONIC_DEFAULT_IMAGE_NAME\u003dcirros-${CIRROS_VERSION}-x86_64-uec"}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_e0194522","line":16,"in_reply_to":"7faddb67_361fd608","updated":"2019-07-26 10:30:57.000000000","message":"In the follow up patch enabling legacy boot the above comment is gone.","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"}],"devstack/files/debs/ironic":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0e18bf516d0a24ede1e2e407ed5754a0df7b0f4d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"libvirt-bin # dist:xenial,bionic NOPRIME"},{"line_number":23,"context_line":"open-iscsi"},{"line_number":24,"context_line":"openssh-client"},{"line_number":25,"context_line":"ovmf"},{"line_number":26,"context_line":"pxelinux # dist:xenial,bionic"},{"line_number":27,"context_line":"python-libguestfs"},{"line_number":28,"context_line":"qemu"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"9fb8cfa7_f051520f","line":25,"updated":"2019-07-01 10:04:03.000000000","message":"this package is currently downgraded with the xenial version since the bionic version won\u0027t work\nmaybe comment it out and add a note ?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"06c1a7dc6c712969c8bc614517575c48fe920222","unresolved":false,"context_lines":[{"line_number":22,"context_line":"libvirt-bin # dist:xenial,bionic NOPRIME"},{"line_number":23,"context_line":"open-iscsi"},{"line_number":24,"context_line":"openssh-client"},{"line_number":25,"context_line":"ovmf"},{"line_number":26,"context_line":"pxelinux # dist:xenial,bionic"},{"line_number":27,"context_line":"python-libguestfs"},{"line_number":28,"context_line":"qemu"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"9fb8cfa7_c7c255e9","line":25,"in_reply_to":"9fb8cfa7_a41b9f7e","updated":"2019-07-01 11:24:04.000000000","message":"what we\u0027re doing at the moment is pinning it to an older version\ncheck devstack/lib/ironic L982-993\nisn\u0027t that enough ?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"c5e82a2226771042861c032b00568dd2016139b4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"libvirt-bin # dist:xenial,bionic NOPRIME"},{"line_number":23,"context_line":"open-iscsi"},{"line_number":24,"context_line":"openssh-client"},{"line_number":25,"context_line":"ovmf"},{"line_number":26,"context_line":"pxelinux # dist:xenial,bionic"},{"line_number":27,"context_line":"python-libguestfs"},{"line_number":28,"context_line":"qemu"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"7faddb67_9840f037","line":25,"in_reply_to":"9fb8cfa7_c7c255e9","updated":"2019-07-08 16:28:04.000000000","message":"Makes sense, commenting it out for now.","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b50dedcd8a4c87094357b06970bc41d0ef9c7233","unresolved":false,"context_lines":[{"line_number":22,"context_line":"libvirt-bin # dist:xenial,bionic NOPRIME"},{"line_number":23,"context_line":"open-iscsi"},{"line_number":24,"context_line":"openssh-client"},{"line_number":25,"context_line":"ovmf"},{"line_number":26,"context_line":"pxelinux # dist:xenial,bionic"},{"line_number":27,"context_line":"python-libguestfs"},{"line_number":28,"context_line":"qemu"}],"source_content_type":"application/octet-stream","patch_set":30,"id":"9fb8cfa7_a41b9f7e","line":25,"in_reply_to":"9fb8cfa7_f051520f","updated":"2019-07-01 10:47:22.000000000","message":"Hmm, but is not it required for devstack vmedia emulation to work? Is there any way we could have the working version in debs?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":11929,"name":"Michael Turek","email":"mjturek@linux.vnet.ibm.com","username":"mjturek"},"change_message_id":"848770b5f2330e407045c1dd0b8909e3f3cdd636","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# as distros can not be pinned with \u0027if-later-than\u0027 specified."},{"line_number":13,"context_line":"apparmor"},{"line_number":14,"context_line":"docker.io"},{"line_number":15,"context_line":"grub-efi"},{"line_number":16,"context_line":"ipmitool"},{"line_number":17,"context_line":"iptables"},{"line_number":18,"context_line":"ipxe"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"7faddb67_82c144e7","line":15,"updated":"2019-07-09 18:24:54.000000000","message":"This package is only available on x86 [0]\n\nWould you be willing to move this to the architecture specific package install section in lib/ironic? [1]\n\n[0] https://packages.ubuntu.com/eoan/grub-efi|\n[1] https://github.com/openstack/ironic/blob/master/devstack/lib/ironic#L510","commit_id":"88b34add59f085b1e5923ff8ca42c126c6dbf187"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5712870f30ef3ae18e9d96e1dde3e80d61ef6f46","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# as distros can not be pinned with \u0027if-later-than\u0027 specified."},{"line_number":13,"context_line":"apparmor"},{"line_number":14,"context_line":"docker.io"},{"line_number":15,"context_line":"grub-efi"},{"line_number":16,"context_line":"ipmitool"},{"line_number":17,"context_line":"iptables"},{"line_number":18,"context_line":"ipxe"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"7faddb67_88d63a27","line":15,"in_reply_to":"7faddb67_82c144e7","updated":"2019-07-10 11:54:48.000000000","message":"Done","commit_id":"88b34add59f085b1e5923ff8ca42c126c6dbf187"}],"devstack/files/rpms/ironic":[{"author":{"_account_id":11929,"name":"Michael Turek","email":"mjturek@linux.vnet.ibm.com","username":"mjturek"},"change_message_id":"848770b5f2330e407045c1dd0b8909e3f3cdd636","unresolved":false,"context_lines":[{"line_number":4,"context_line":"ipxe-bootimgs"},{"line_number":5,"context_line":"gnupg"},{"line_number":6,"context_line":"grub2"},{"line_number":7,"context_line":"grub2-efi"},{"line_number":8,"context_line":"libguestfs"},{"line_number":9,"context_line":"libguestfs-tools"},{"line_number":10,"context_line":"libvirt"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"7faddb67_824f0491","line":7,"updated":"2019-07-09 18:24:54.000000000","message":"This one would doesn\u0027t break us, since our CI currently uses Ubuntu devstack VMs. There are other RPMs here that would break us if we moved to an RPM managed OS so we\u0027d handle that when the time came.","commit_id":"88b34add59f085b1e5923ff8ca42c126c6dbf187"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"5712870f30ef3ae18e9d96e1dde3e80d61ef6f46","unresolved":false,"context_lines":[{"line_number":4,"context_line":"ipxe-bootimgs"},{"line_number":5,"context_line":"gnupg"},{"line_number":6,"context_line":"grub2"},{"line_number":7,"context_line":"grub2-efi"},{"line_number":8,"context_line":"libguestfs"},{"line_number":9,"context_line":"libguestfs-tools"},{"line_number":10,"context_line":"libvirt"}],"source_content_type":"application/octet-stream","patch_set":33,"id":"7faddb67_a8f0d6ca","line":7,"in_reply_to":"7faddb67_824f0491","updated":"2019-07-10 11:54:48.000000000","message":"Done","commit_id":"88b34add59f085b1e5923ff8ca42c126c6dbf187"}],"devstack/lib/ironic":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"    local interface_info"},{"line_number":1968,"context_line":""},{"line_number":1969,"context_line":"    common_node_options\u003d\"\\"},{"line_number":1970,"context_line":"        --driver-info bootloader\u003d$IRONIC_EFIBOOT_ID \\"},{"line_number":1971,"context_line":"        --driver-info deploy_kernel\u003d$IRONIC_DEPLOY_KERNEL_ID \\"},{"line_number":1972,"context_line":"        --driver-info deploy_ramdisk\u003d$IRONIC_DEPLOY_RAMDISK_ID \\"},{"line_number":1973,"context_line":"        --driver-info rescue_kernel\u003d$IRONIC_DEPLOY_KERNEL_ID \\"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"9fb8cfa7_6428de85","line":1970,"range":{"start_line":1970,"start_character":22,"end_line":1970,"end_character":32},"updated":"2019-06-05 22:28:52.000000000","message":"side note: I\u0027m sure this is going to cause confusion, but there is minimal sense to triplicating this.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":1967,"context_line":"    local interface_info"},{"line_number":1968,"context_line":""},{"line_number":1969,"context_line":"    common_node_options\u003d\"\\"},{"line_number":1970,"context_line":"        --driver-info bootloader\u003d$IRONIC_EFIBOOT_ID \\"},{"line_number":1971,"context_line":"        --driver-info deploy_kernel\u003d$IRONIC_DEPLOY_KERNEL_ID \\"},{"line_number":1972,"context_line":"        --driver-info deploy_ramdisk\u003d$IRONIC_DEPLOY_RAMDISK_ID \\"},{"line_number":1973,"context_line":"        --driver-info rescue_kernel\u003d$IRONIC_DEPLOY_KERNEL_ID \\"}],"source_content_type":"application/x-shellscript","patch_set":29,"id":"9fb8cfa7_b111b65f","line":1970,"range":{"start_line":1970,"start_character":22,"end_line":1970,"end_character":32},"in_reply_to":"9fb8cfa7_6428de85","updated":"2019-06-28 17:45:08.000000000","message":"Triplicating? Well, my plan is to add some docs explaining the boot process and the place of this boot loader in it.\n\nMay be there could be a better name for this property?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11929,"name":"Michael Turek","email":"mjturek@linux.vnet.ibm.com","username":"mjturek"},"change_message_id":"27aea231fb736cb6102513aac3c00495391a8afd","unresolved":false,"context_lines":[{"line_number":2666,"context_line":"    fi"},{"line_number":2667,"context_line":""},{"line_number":2668,"context_line":"    upload_baremetal_ironic_deploy"},{"line_number":2669,"context_line":"    upload_baremetal_ironic_efiboot"},{"line_number":2670,"context_line":"    configure_tftpd"},{"line_number":2671,"context_line":"    configure_iptables"},{"line_number":2672,"context_line":"    enroll_nodes"}],"source_content_type":"application/x-shellscript","patch_set":34,"id":"7faddb67_4a69fe88","line":2669,"updated":"2019-07-11 14:38:28.000000000","message":"Can you do this conditionally on \"$IRONIC_BOOT_MODE\" \u003d\u003d \"uefi\"?","commit_id":"1c65f9906e30d24cdff84020a8bd7a719628231a"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2b51655327debc5a20c090a236cbc7373114482c","unresolved":false,"context_lines":[{"line_number":2666,"context_line":"    fi"},{"line_number":2667,"context_line":""},{"line_number":2668,"context_line":"    upload_baremetal_ironic_deploy"},{"line_number":2669,"context_line":"    upload_baremetal_ironic_efiboot"},{"line_number":2670,"context_line":"    configure_tftpd"},{"line_number":2671,"context_line":"    configure_iptables"},{"line_number":2672,"context_line":"    enroll_nodes"}],"source_content_type":"application/x-shellscript","patch_set":34,"id":"7faddb67_408f8f74","line":2669,"in_reply_to":"7faddb67_4a69fe88","updated":"2019-07-12 10:45:36.000000000","message":"Oh, absolutely!\n\nWe should better have it depend on virtual media boot because this is when EFI boot partition image is actually used (for building ISOs). But I fair that would require more devstack revamping.\n\nOn the other hand, virtual media boot implies UEFI so it is good to set it properly anyway. I left a comment in the settings.","commit_id":"1c65f9906e30d24cdff84020a8bd7a719628231a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fdb546d54c7563846c99a4838b7ee5f6a1e72323","unresolved":false,"context_lines":[{"line_number":2666,"context_line":"    fi"},{"line_number":2667,"context_line":""},{"line_number":2668,"context_line":"    upload_baremetal_ironic_deploy"},{"line_number":2669,"context_line":"    upload_baremetal_ironic_efiboot"},{"line_number":2670,"context_line":"    configure_tftpd"},{"line_number":2671,"context_line":"    configure_iptables"},{"line_number":2672,"context_line":"    enroll_nodes"}],"source_content_type":"application/x-shellscript","patch_set":34,"id":"7faddb67_dc8b751c","line":2669,"in_reply_to":"7faddb67_4a69fe88","updated":"2019-07-11 23:36:55.000000000","message":"Seems reasonable to skip if not UEFI.","commit_id":"1c65f9906e30d24cdff84020a8bd7a719628231a"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"2b51655327debc5a20c090a236cbc7373114482c","unresolved":false,"context_lines":[{"line_number":2666,"context_line":"    fi"},{"line_number":2667,"context_line":""},{"line_number":2668,"context_line":"    upload_baremetal_ironic_deploy"},{"line_number":2669,"context_line":"    upload_baremetal_ironic_efiboot"},{"line_number":2670,"context_line":"    configure_tftpd"},{"line_number":2671,"context_line":"    configure_iptables"},{"line_number":2672,"context_line":"    enroll_nodes"}],"source_content_type":"application/x-shellscript","patch_set":34,"id":"7faddb67_608c0b7f","line":2669,"in_reply_to":"7faddb67_dc8b751c","updated":"2019-07-12 10:45:36.000000000","message":"Done","commit_id":"1c65f9906e30d24cdff84020a8bd7a719628231a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":2533,"context_line":"    local efiboot_name"},{"line_number":2534,"context_line":"    efiboot_name\u003d$(basename $IRONIC_EFIBOOT)"},{"line_number":2535,"context_line":""},{"line_number":2536,"context_line":"    echo_summary \"Building and uploading EFI boot image for ironic\""},{"line_number":2537,"context_line":""},{"line_number":2538,"context_line":"    if [ ! -e \"$IRONIC_EFIBOOT\" ]; then"},{"line_number":2539,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_30df7a3b","line":2536,"updated":"2019-07-26 08:36:09.000000000","message":"Side note: make sure we document or automated this somewhere","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":2533,"context_line":"    local efiboot_name"},{"line_number":2534,"context_line":"    efiboot_name\u003d$(basename $IRONIC_EFIBOOT)"},{"line_number":2535,"context_line":""},{"line_number":2536,"context_line":"    echo_summary \"Building and uploading EFI boot image for ironic\""},{"line_number":2537,"context_line":""},{"line_number":2538,"context_line":"    if [ ! -e \"$IRONIC_EFIBOOT\" ]; then"},{"line_number":2539,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_8b62bfd7","line":2536,"in_reply_to":"7faddb67_30df7a3b","updated":"2019-07-26 10:30:57.000000000","message":"I am planning on adding ironic user doc on virtual media boot in a follow up patch. Do you mean to document devstack specifically?","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":2572,"context_line":"            $efiboot_name \\"},{"line_number":2573,"context_line":"            --public --disk-format\u003draw \\"},{"line_number":2574,"context_line":"            --container-format\u003dbare \\"},{"line_number":2575,"context_line":"            \u003c $efiboot_path  | grep \u0027 id \u0027 | get_field 2)"},{"line_number":2576,"context_line":"        die_if_not_set $LINENO IRONIC_EFIBOOT_ID \"Failed to load EFI bootloader image into glance\""},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"        mv $efiboot_path $IRONIC_EFIBOOT"}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_d0e5c60b","line":2575,"updated":"2019-07-26 08:36:09.000000000","message":"nit: please use `-f value -c id` instead of grep/get_field","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":2572,"context_line":"            $efiboot_name \\"},{"line_number":2573,"context_line":"            --public --disk-format\u003draw \\"},{"line_number":2574,"context_line":"            --container-format\u003dbare \\"},{"line_number":2575,"context_line":"            \u003c $efiboot_path  | grep \u0027 id \u0027 | get_field 2)"},{"line_number":2576,"context_line":"        die_if_not_set $LINENO IRONIC_EFIBOOT_ID \"Failed to load EFI bootloader image into glance\""},{"line_number":2577,"context_line":""},{"line_number":2578,"context_line":"        mv $efiboot_path $IRONIC_EFIBOOT"}],"source_content_type":"application/x-shellscript","patch_set":38,"id":"7faddb67_ab8bfb65","line":2575,"in_reply_to":"7faddb67_d0e5c60b","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"705eb0905d9d8c5fe0713010f81af2c611d1896e","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if is_arch \"x86_64\"; then"},{"line_number":535,"context_line":"        if is_ubuntu; then"},{"line_number":536,"context_line":"            install_package grub-efi"},{"line_number":537,"context_line":"        elif is_fedora; then"},{"line_number":538,"context_line":"            install_package grub2 grub2-efi"},{"line_number":539,"context_line":"        fi"},{"line_number":540,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":41,"id":"7faddb67_8ce1cb9e","line":537,"updated":"2019-08-07 08:19:48.000000000","message":"what about centos/rhel?","commit_id":"9fdd094843591d78e5feb2cb23c8b24bcf1d124e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8b65b39ea3615ffc0f6361b372a40405ed640f1","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if is_arch \"x86_64\"; then"},{"line_number":535,"context_line":"        if is_ubuntu; then"},{"line_number":536,"context_line":"            install_package grub-efi"},{"line_number":537,"context_line":"        elif is_fedora; then"},{"line_number":538,"context_line":"            install_package grub2 grub2-efi"},{"line_number":539,"context_line":"        fi"},{"line_number":540,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":42,"id":"7faddb67_409299a1","line":537,"range":{"start_line":537,"start_character":8,"end_line":537,"end_character":28},"updated":"2019-08-08 14:01:25.000000000","message":"same question re centos/rhel","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1b535803a977a57bdb3b0714ccc7c9aadeb36160","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if is_arch \"x86_64\"; then"},{"line_number":535,"context_line":"        if is_ubuntu; then"},{"line_number":536,"context_line":"            install_package grub-efi"},{"line_number":537,"context_line":"        elif is_fedora; then"},{"line_number":538,"context_line":"            install_package grub2 grub2-efi"},{"line_number":539,"context_line":"        fi"},{"line_number":540,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":42,"id":"7faddb67_fb25695d","line":537,"range":{"start_line":537,"start_character":8,"end_line":537,"end_character":28},"in_reply_to":"7faddb67_409299a1","updated":"2019-08-09 09:50:47.000000000","message":"It seems, devstack treats fedora/rhel and centos in the same way [1]. Or I misunderstood your comment - please, clarify!\n\n1. https://github.com/openstack/devstack/blob/master/functions-common#L445","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8b65b39ea3615ffc0f6361b372a40405ed640f1","unresolved":false,"context_lines":[{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        mv $efiboot_path $IRONIC_EFIBOOT"},{"line_number":2582,"context_line":""},{"line_number":2583,"context_line":"        iniset $IRONIC_CONF_FILE conductor bootloader $IRONIC_EFIBOOT_ID"},{"line_number":2584,"context_line":"    fi"},{"line_number":2585,"context_line":"}"},{"line_number":2586,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":42,"id":"7faddb67_c039a9a3","line":2583,"range":{"start_line":2583,"start_character":0,"end_line":2583,"end_character":72},"updated":"2019-08-08 14:01:25.000000000","message":"Is this option used? It looks like only driver_info is recognized.","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1b535803a977a57bdb3b0714ccc7c9aadeb36160","unresolved":false,"context_lines":[{"line_number":2580,"context_line":""},{"line_number":2581,"context_line":"        mv $efiboot_path $IRONIC_EFIBOOT"},{"line_number":2582,"context_line":""},{"line_number":2583,"context_line":"        iniset $IRONIC_CONF_FILE conductor bootloader $IRONIC_EFIBOOT_ID"},{"line_number":2584,"context_line":"    fi"},{"line_number":2585,"context_line":"}"},{"line_number":2586,"context_line":""}],"source_content_type":"application/x-shellscript","patch_set":42,"id":"7faddb67_db8f4d2c","line":2583,"range":{"start_line":2583,"start_character":0,"end_line":2583,"end_character":72},"in_reply_to":"7faddb67_c039a9a3","updated":"2019-08-09 09:50:47.000000000","message":"Done","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"54f27484f99959c5421c32ec01f2e1e8c79f9818","unresolved":false,"context_lines":[{"line_number":534,"context_line":"    if is_arch \"x86_64\"; then"},{"line_number":535,"context_line":"        if is_ubuntu; then"},{"line_number":536,"context_line":"            install_package grub-efi"},{"line_number":537,"context_line":"        elif is_fedora; then"},{"line_number":538,"context_line":"            install_package grub2 grub2-efi"},{"line_number":539,"context_line":"        fi"},{"line_number":540,"context_line":"    fi"}],"source_content_type":"application/x-shellscript","patch_set":43,"id":"7faddb67_6d7e97b0","line":537,"updated":"2019-08-09 15:19:50.000000000","message":"Thanks for explanation!","commit_id":"bfb7193d01d88a7476763cb8692372f41202b635"}],"ironic/conf/conductor.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"54f27484f99959c5421c32ec01f2e1e8c79f9818","unresolved":false,"context_lines":[{"line_number":240,"context_line":"               mutable\u003dTrue,"},{"line_number":241,"context_line":"               help\u003d_(\u0027Glance ID, http:// or file:// URL of the initramfs of \u0027"},{"line_number":242,"context_line":"                      \u0027the default rescue image.\u0027)),"},{"line_number":243,"context_line":"    cfg.StrOpt(\u0027bootloader\u0027,"},{"line_number":244,"context_line":"               mutable\u003dTrue,"},{"line_number":245,"context_line":"               help\u003d_(\u0027Glance ID, http:// or file:// URL of the EFI system \u0027"},{"line_number":246,"context_line":"                      \u0027partition image containing EFI boot loader. This image \u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"7faddb67_cd71cbe0","line":243,"updated":"2019-08-09 15:19:50.000000000","message":"Is the new option used somewhere? I cannot find after a quick skimming through the code.","commit_id":"bfb7193d01d88a7476763cb8692372f41202b635"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"0aed2cfccf0447533828c697607e795a77867a9e","unresolved":false,"context_lines":[{"line_number":240,"context_line":"               mutable\u003dTrue,"},{"line_number":241,"context_line":"               help\u003d_(\u0027Glance ID, http:// or file:// URL of the initramfs of \u0027"},{"line_number":242,"context_line":"                      \u0027the default rescue image.\u0027)),"},{"line_number":243,"context_line":"    cfg.StrOpt(\u0027bootloader\u0027,"},{"line_number":244,"context_line":"               mutable\u003dTrue,"},{"line_number":245,"context_line":"               help\u003d_(\u0027Glance ID, http:// or file:// URL of the EFI system \u0027"},{"line_number":246,"context_line":"                      \u0027partition image containing EFI boot loader. This image \u0027"}],"source_content_type":"text/x-python","patch_set":43,"id":"7faddb67_832623ba","line":243,"in_reply_to":"7faddb67_cd71cbe0","updated":"2019-08-12 17:58:14.000000000","message":"Oh, that\u0027s a super good point! I somehow assumed that this is being done already somewhere else.\n\nI ended up merging HEAD and one of the follow up patched into this patch.","commit_id":"bfb7193d01d88a7476763cb8692372f41202b635"}],"ironic/conf/redfish.py":[{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\u0027kernel_append_params\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027nofb nomodeset vga\u003dnormal\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Additional kernel parameters for baremetal \u0027"},{"line_number":57,"context_line":"                      \u0027Redfish boot.\u0027)),"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_729b4117","line":57,"range":{"start_line":57,"start_character":23,"end_line":57,"end_character":30},"updated":"2019-06-13 08:46:54.000000000","message":"s/ \u0027Redfish\u0027 / \u0027Virtual Media\u0027 /","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\u0027kernel_append_params\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027nofb nomodeset vga\u003dnormal\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Additional kernel parameters for baremetal \u0027"},{"line_number":57,"context_line":"                      \u0027Redfish boot.\u0027)),"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_e17cc021","line":57,"range":{"start_line":57,"start_character":23,"end_line":57,"end_character":30},"in_reply_to":"9fb8cfa7_729b4117","updated":"2019-06-20 14:55:56.000000000","message":"++","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\u0027kernel_append_params\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027nofb nomodeset vga\u003dnormal\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Additional kernel parameters for baremetal \u0027"},{"line_number":57,"context_line":"                      \u0027Redfish boot.\u0027)),"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_66613e05","line":57,"range":{"start_line":57,"start_character":23,"end_line":57,"end_character":30},"in_reply_to":"9fb8cfa7_729b4117","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    cfg.StrOpt(\u0027kernel_append_params\u0027,"},{"line_number":55,"context_line":"               default\u003d\u0027nofb nomodeset vga\u003dnormal\u0027,"},{"line_number":56,"context_line":"               help\u003d_(\u0027Additional kernel parameters for baremetal \u0027"},{"line_number":57,"context_line":"                      \u0027Redfish boot.\u0027)),"},{"line_number":58,"context_line":"]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_865c724b","line":57,"range":{"start_line":57,"start_character":23,"end_line":57,"end_character":30},"in_reply_to":"9fb8cfa7_e17cc021","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"}],"ironic/drivers/modules/redfish/boot.py":[{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9488d679225ac5f78fc7d51b907827fb32f71d86","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9fdfeff1_d374f2d2","updated":"2019-02-21 23:09:17.000000000","message":"I get a feeling there is a lot of stuff that could be common for any VirtualMediaBoot interface? Would much more than the inject/eject virtual media methods be different?\n\nShould we have a base.VirtualMediaBoot interface?","commit_id":"c95bf6bf58b05d82a0e3839a5d5b97fc53a7f250"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9488d679225ac5f78fc7d51b907827fb32f71d86","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        return \"image-%s\" % node.uuid"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @classmethod"},{"line_number":167,"context_line":"    def _prepare_floppy_image(cls, task, params):"},{"line_number":168,"context_line":"        \"\"\"Prepares the floppy image for passing the parameters."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        This method prepares a temporary vfat filesystem image. Then it adds"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_f34ed6c0","line":167,"range":{"start_line":167,"start_character":8,"end_line":167,"end_character":29},"updated":"2019-02-21 23:09:17.000000000","message":"Creating a floppy image would be the same for any VirtualMedia driver? Could this be moved out of the redfish driver? So that other VirtualMedia drivers could pick it up?","commit_id":"c95bf6bf58b05d82a0e3839a5d5b97fc53a7f250"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9488d679225ac5f78fc7d51b907827fb32f71d86","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        return \"boot-%s\" % node.uuid"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    @classmethod"},{"line_number":218,"context_line":"    def _prepare_iso_image(cls, task, kernel_href, ramdisk_href,"},{"line_number":219,"context_line":"                           bootloader_href, root_uuid\u003dNone):"},{"line_number":220,"context_line":"        \"\"\"Prepare an ISO to boot the node."},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_934d0ac6","line":218,"range":{"start_line":218,"start_character":8,"end_line":218,"end_character":26},"updated":"2019-02-21 23:09:17.000000000","message":"Creating a ISO image would be the same for any VirtualMedia driver? Could this be moved out of the redfish driver? So that other VirtualMedia drivers could pick it up?","commit_id":"c95bf6bf58b05d82a0e3839a5d5b97fc53a7f250"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9488d679225ac5f78fc7d51b907827fb32f71d86","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                          {\u0027node\u0027: task.node.uuid, \u0027error\u0027: e})"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    @classmethod"},{"line_number":305,"context_line":"    def _prepare_deploy_iso(cls, task):"},{"line_number":306,"context_line":"        \"\"\"Prepare deploy ISO image"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        Build bootable ISO out of `[driver_info]/deploy_kernel`,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_73c8a620","line":305,"range":{"start_line":305,"start_character":8,"end_line":305,"end_character":27},"updated":"2019-02-21 23:09:17.000000000","message":"ditto","commit_id":"c95bf6bf58b05d82a0e3839a5d5b97fc53a7f250"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"9488d679225ac5f78fc7d51b907827fb32f71d86","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            task, kernel_href, ramdisk_href, bootloader_href)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    @classmethod"},{"line_number":331,"context_line":"    def _prepare_boot_iso(cls, task, root_uuid\u003dNone):"},{"line_number":332,"context_line":"        \"\"\"Prepare boot ISO image"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        Build UEFI bootable ISO out of `[instance_info]/kernel`,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_13cfda29","line":331,"range":{"start_line":331,"start_character":8,"end_line":331,"end_character":25},"updated":"2019-02-21 23:09:17.000000000","message":"ditto","commit_id":"c95bf6bf58b05d82a0e3839a5d5b97fc53a7f250"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027deploy_kernel\u0027: _(\"UUID (from Glance) of the deployment kernel. \""},{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"UUID (from Glance) of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"UUID (from Glance) of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_6dca66a1","line":40,"updated":"2019-05-31 07:20:49.000000000","message":"Strictly speaking, these can be http links","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    \u0027deploy_kernel\u0027: _(\"UUID (from Glance) of the deployment kernel. \""},{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"UUID (from Glance) of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"UUID (from Glance) of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_cec34937","line":40,"in_reply_to":"bfb3d3c7_6dca66a1","updated":"2019-05-31 10:01:54.000000000","message":"Done","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"UUID (from Glance) of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"UUID (from Glance) of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_8dcd5ab8","line":41,"updated":"2019-05-31 07:20:49.000000000","message":"I hope this can be an HTTP link as well","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"UUID (from Glance) of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"UUID (from Glance) of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_eebe4dac","line":41,"in_reply_to":"bfb3d3c7_8dcd5ab8","updated":"2019-05-31 10:01:54.000000000","message":"Indeed!","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027config_via_floppy\u0027: _(\"Boolean value to indicate whether or not the \""},{"line_number":50,"context_line":"                           \"driver should use virtual media Floppy device \""},{"line_number":51,"context_line":"                           \"for passing configuration information to the \""},{"line_number":52,"context_line":"                           \"ramdisk. Defaults to False. Optional.\")"},{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_2dc8eea3","line":52,"updated":"2019-05-31 07:20:49.000000000","message":"Why would anyone set this to True? I think we should mention what the benefits are. If there are none, I think we should not support it at all.","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027config_via_floppy\u0027: _(\"Boolean value to indicate whether or not the \""},{"line_number":50,"context_line":"                           \"driver should use virtual media Floppy device \""},{"line_number":51,"context_line":"                           \"for passing configuration information to the \""},{"line_number":52,"context_line":"                           \"ramdisk. Defaults to False. Optional.\")"},{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_2eda2577","line":52,"in_reply_to":"bfb3d3c7_2dc8eea3","updated":"2019-05-31 10:01:54.000000000","message":"For small discreet items that play well with kernel cmdline I do not see much of the benefits so far.\n\nHowever I can imagine situations when one wants to pass a large blob or the entire configuration file or a complex data structure (e.g. JSON) to the ramdisk. In that case using floppy may become the only possible way...\n\nThat reminds me of DHCP-less boot - the original idea was to append user blob carrying whatever to the boot iso. Floppy seems more straightforward.\n\nDoes it make sense?","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"sushy \u003d importutils.try_import(\u0027sushy\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class RedfishVirtualMediaBoot(base.BaseInterface):"},{"line_number":71,"context_line":"    \"\"\"Virtual media boot interface over Redfish."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    Virtual Media allows booting the system from the \"virtual\""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_4dc3e289","line":70,"updated":"2019-05-31 07:20:49.000000000","message":"should be BootInterface","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"sushy \u003d importutils.try_import(\u0027sushy\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class RedfishVirtualMediaBoot(base.BaseInterface):"},{"line_number":71,"context_line":"    \"\"\"Virtual media boot interface over Redfish."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    Virtual Media allows booting the system from the \"virtual\""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_cebd8902","line":70,"in_reply_to":"bfb3d3c7_4dc3e289","updated":"2019-05-31 10:01:54.000000000","message":"Ah, autocomplete fails me on every single computer large and small!","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        if params:"},{"line_number":308,"context_line":"            if kernel_params:"},{"line_number":309,"context_line":"                kernel_params +\u003d \u0027 \u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"            kernel_params +\u003d \u0027 \u0027.join(\u0027%s\u003d%s\u0027 % kv for kv in params.items())"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_edbdf601","line":309,"updated":"2019-05-31 07:20:49.000000000","message":"nit: I\u0027d do it by first populating the whole list in params, then just joining it, instead of string concatenations","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"        if params:"},{"line_number":308,"context_line":"            if kernel_params:"},{"line_number":309,"context_line":"                kernel_params +\u003d \u0027 \u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"            kernel_params +\u003d \u0027 \u0027.join(\u0027%s\u003d%s\u0027 % kv for kv in params.items())"},{"line_number":312,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_ee140deb","line":309,"in_reply_to":"bfb3d3c7_edbdf601","updated":"2019-05-31 10:01:54.000000000","message":"Trouble is that here we have to deal with two kinds of params \u003d tuples and literal avpairs. I\u0027ve changed the code for join, but it\u0027s probably harder to read...","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":343,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_0db96a13","line":340,"updated":"2019-05-31 07:20:49.000000000","message":"Mostly thinking aloud, but can we somehow make swift optional? Standalone use cases are becoming increasingly popular (our Metal3 included).","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":343,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_eee96de2","line":340,"in_reply_to":"bfb3d3c7_0db96a13","updated":"2019-05-31 10:01:54.000000000","message":"Perhaps we can give ironic a share to write these images there. Then the user can configure their own HTTP server over that share to serve ironic images. Something like that? Or any better idea?","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"9ba60c5b207441ec2c4d3356ddf0f0eeb1c041f1","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":343,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_23955687","line":340,"in_reply_to":"bfb3d3c7_118bc0c2","updated":"2019-05-31 14:55:35.000000000","message":"I\u0027m fine with any reasonable solution that avoids a hard dependency on swift. Probably the local HTTP server is the best idea..","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1dfa52b5603c7651cd4158bfae4de65698faf3cc","unresolved":false,"context_lines":[{"line_number":337,"context_line":""},{"line_number":338,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":343,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_118bc0c2","line":340,"in_reply_to":"bfb3d3c7_eee96de2","updated":"2019-05-31 11:14:51.000000000","message":"The other thought is that if we also respect user-built ISO images (deploy/rescue/boot), those can potentially be pulled directly from where ever user has them (for as long as connectivity allows).\n\nI still feel like it\u0027s a nuisance having to build/update all these images. It\u0027s so much user friendlier to let ironic taking care of that.","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0f33f9f83fa3716b8fbc3d8d858bffaa0c46b87c","unresolved":false,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"                v_media.insert_media(boot_url, inserted\u003dTrue)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"                LOG.debug(\"Inserted boot media %(boot_url)s into \""},{"line_number":738,"context_line":"                          \"%(boot_device)s for node \""},{"line_number":739,"context_line":"                          \"%(node)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":740,"context_line":"                                       \u0027boot_url\u0027: boot_url,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_ad393ea4","line":737,"updated":"2019-05-31 07:20:49.000000000","message":"nit: s/debug/info/ (seems an important step to log)","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1140529e7d527c940fa340b30119f878558535a0","unresolved":false,"context_lines":[{"line_number":734,"context_line":""},{"line_number":735,"context_line":"                v_media.insert_media(boot_url, inserted\u003dTrue)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"                LOG.debug(\"Inserted boot media %(boot_url)s into \""},{"line_number":738,"context_line":"                          \"%(boot_device)s for node \""},{"line_number":739,"context_line":"                          \"%(node)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":740,"context_line":"                                       \u0027boot_url\u0027: boot_url,"}],"source_content_type":"text/x-python","patch_set":22,"id":"bfb3d3c7_6eb7bdf6","line":737,"in_reply_to":"bfb3d3c7_ad393ea4","updated":"2019-05-31 10:01:54.000000000","message":"Done","commit_id":"bb72eba8d6fac4d53cd80a5b8e6ebfb502e09a1f"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"URL or Glance UUID of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"URL or Glance UUID  of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_2d11ec04","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":15},"updated":"2019-06-13 08:46:54.000000000","message":"Should this be an optional property as it is not required in case of \u0027Legacy BIOS\u0027 boot mode?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"URL or Glance UUID of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"URL or Glance UUID  of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_940fc02c","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":15},"in_reply_to":"9fb8cfa7_2d11ec04","updated":"2019-06-28 17:45:08.000000000","message":"\u003e Should this be an optional property as it is not required in case of \u0027Legacy BIOS\u0027 boot mode?\n\nNo, that\u0027s impossible because virtual media boot implies UEFI. Legacy BIOS boot is not supported by the standard.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"URL or Glance UUID of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"URL or Glance UUID  of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_3d0d1a3e","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":15},"in_reply_to":"9fb8cfa7_2d11ec04","updated":"2019-06-20 14:55:56.000000000","message":"I _feel_ like we shouldn\u0027t worry about this too much. Realistically Legacy BIOS support is starting to disappear and I think trying to support both paths is kind of silly, especially in this patch set.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                       \"Required.\"),"},{"line_number":39,"context_line":"    \u0027deploy_ramdisk\u0027: _(\"URL or Glance UUID of the ramdisk that is \""},{"line_number":40,"context_line":"                        \"mounted at boot time. Required.\"),"},{"line_number":41,"context_line":"    \u0027bootloader\u0027: _(\"URL or Glance UUID  of the EFI system partition \""},{"line_number":42,"context_line":"                    \"image containing EFI boot loader. This image will be \""},{"line_number":43,"context_line":"                    \"used by ironic when building UEFI-bootable ISO \""},{"line_number":44,"context_line":"                    \"out of kernel and ramdisk. Required for UEFI \""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_743d6cc2","line":41,"range":{"start_line":41,"start_character":5,"end_line":41,"end_character":15},"in_reply_to":"9fb8cfa7_3d0d1a3e","updated":"2019-06-28 17:45:08.000000000","message":"Yes, plus compliant hardware should not support BIOS boot over virtual media.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027config_via_floppy\u0027: _(\"Boolean value to indicate whether or not the \""},{"line_number":50,"context_line":"                           \"driver should use virtual media Floppy device \""},{"line_number":51,"context_line":"                           \"for passing configuration information to the \""},{"line_number":52,"context_line":"                           \"ramdisk. Defaults to False. Optional.\")"},{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_e43b6ece","line":52,"updated":"2019-06-05 22:28:52.000000000","message":"Awesome feature. Thanks!","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    \u0027config_via_floppy\u0027: _(\"Boolean value to indicate whether or not the \""},{"line_number":50,"context_line":"                           \"driver should use virtual media Floppy device \""},{"line_number":51,"context_line":"                           \"for passing configuration information to the \""},{"line_number":52,"context_line":"                           \"ramdisk. Defaults to False. Optional.\")"},{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_f4007c03","line":52,"in_reply_to":"9fb8cfa7_e43b6ece","updated":"2019-06-28 17:45:08.000000000","message":"\\o/\n\nWe still need to make IPA and may be overcloud instances consuming this.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :raises: DriverLoadError if the driver can\u0027t be loaded due to"},{"line_number":104,"context_line":"            missing dependencies"},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        super(RedfishVirtualMediaBoot, self).__init__()"},{"line_number":107,"context_line":"        if not sushy:"},{"line_number":108,"context_line":"            raise exception.DriverLoadError("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_843152a5","line":105,"updated":"2019-06-05 22:28:52.000000000","message":"Since ramdisk is supported, it looks like you\u0027ll want to add a CAPABILITIES flag to convey that like the PXE interfaces use.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        :raises: DriverLoadError if the driver can\u0027t be loaded due to"},{"line_number":104,"context_line":"            missing dependencies"},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        super(RedfishVirtualMediaBoot, self).__init__()"},{"line_number":107,"context_line":"        if not sushy:"},{"line_number":108,"context_line":"            raise exception.DriverLoadError("}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_546628bd","line":105,"in_reply_to":"9fb8cfa7_843152a5","updated":"2019-06-28 17:45:08.000000000","message":"Ah, yes!","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        deploy_info \u003d {option: d_info.get(option)"},{"line_number":130,"context_line":"                       for option in REQUIRED_PROPERTIES}"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        error_msg \u003d (_(\"Error validating Redfish virtual media. Some \""},{"line_number":133,"context_line":"                       \"parameters were missing in node\u0027s driver_info\"))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        deploy_utils.check_for_missing_params(deploy_info, error_msg)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_2d0b2c24","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":21},"updated":"2019-06-13 08:46:54.000000000","message":"nit: Can remove these extra () (brackets)","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        deploy_info \u003d {option: d_info.get(option)"},{"line_number":130,"context_line":"                       for option in REQUIRED_PROPERTIES}"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        error_msg \u003d (_(\"Error validating Redfish virtual media. Some \""},{"line_number":133,"context_line":"                       \"parameters were missing in node\u0027s driver_info\"))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        deploy_utils.check_for_missing_params(deploy_info, error_msg)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_140af0d0","line":132,"range":{"start_line":132,"start_character":20,"end_line":132,"end_character":21},"in_reply_to":"9fb8cfa7_2d0b2c24","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return \"boot-%s\" % node.uuid"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @classmethod"},{"line_number":276,"context_line":"    def _cleanup_iso_image(cls, task):"},{"line_number":277,"context_line":"        \"\"\"Deletes the ISO if it was created for the instance."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_2d432c15","line":276,"range":{"start_line":276,"start_character":8,"end_line":276,"end_character":26},"updated":"2019-06-13 08:46:54.000000000","message":"This method and _cleanup_floppy_image() have similar functionality. may be you can have one single method that takes floppy or cdrom as input.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return \"boot-%s\" % node.uuid"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    @classmethod"},{"line_number":276,"context_line":"    def _cleanup_iso_image(cls, task):"},{"line_number":277,"context_line":"        \"\"\"Deletes the ISO if it was created for the instance."},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_f4d4fc21","line":276,"range":{"start_line":276,"start_character":8,"end_line":276,"end_character":26},"in_reply_to":"9fb8cfa7_2d432c15","updated":"2019-06-28 17:45:08.000000000","message":"Refactored to merge common parts","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            return"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":331,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"},{"line_number":332,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":333,"context_line":"                      \"for node %(node)s\","},{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_8d1a5814","line":334,"range":{"start_line":331,"start_character":7,"end_line":334,"end_character":47},"updated":"2019-06-13 08:46:54.000000000","message":"Oh! We don\u0027t support BIOS boot mode? This needs to be captured in releasenotes.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            return"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":331,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"},{"line_number":332,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":333,"context_line":"                      \"for node %(node)s\","},{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_3757f628","line":334,"range":{"start_line":331,"start_character":7,"end_line":334,"end_character":47},"in_reply_to":"9fb8cfa7_61753098","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            return"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":331,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"},{"line_number":332,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":333,"context_line":"                      \"for node %(node)s\","},{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_61753098","line":334,"range":{"start_line":331,"start_character":7,"end_line":334,"end_character":47},"in_reply_to":"9fb8cfa7_8d1a5814","updated":"2019-06-20 14:55:56.000000000","message":"We should also throw an error in validation because that will prevent deployments with invalid configurations which I think makes this not needed in the grand scheme of the universe.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            return"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":331,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"},{"line_number":332,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":333,"context_line":"                      \"for node %(node)s\","},{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_37e296a1","line":334,"range":{"start_line":331,"start_character":7,"end_line":334,"end_character":47},"in_reply_to":"9fb8cfa7_8d1a5814","updated":"2019-06-28 17:45:08.000000000","message":"Well,UEFI is implicit with Redfish virtual media boot. That just can\u0027t be different. Does it make sense to note that in release notes?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"},{"line_number":338,"context_line":"            i_info \u003d task.node.instance_info"},{"line_number":339,"context_line":"            kernel_params \u003d \"root\u003d/dev/ram0 text \""},{"line_number":340,"context_line":"            kernel_params +\u003d i_info.get(\"ramdisk_kernel_arguments\", \"\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c4450a45","line":337,"updated":"2019-06-05 22:28:52.000000000","message":"Interesting! :)","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":335,"context_line":"            return"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"},{"line_number":338,"context_line":"            i_info \u003d task.node.instance_info"},{"line_number":339,"context_line":"            kernel_params \u003d \"root\u003d/dev/ram0 text \""},{"line_number":340,"context_line":"            kernel_params +\u003d i_info.get(\"ramdisk_kernel_arguments\", \"\")"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_b738c6ed","line":337,"in_reply_to":"9fb8cfa7_c4450a45","updated":"2019-06-28 17:45:08.000000000","message":"\\o/","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                self._insert_vmedia("},{"line_number":591,"context_line":"                    task, floppy_ref, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"                LOG.debug(\u0027Inserted 1.44\" diskette with configuration for node\u0027"},{"line_number":594,"context_line":"                          \u0027 %(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_d1eb0a75","line":593,"range":{"start_line":593,"start_character":36,"end_line":593,"end_character":50},"updated":"2019-06-13 08:46:54.000000000","message":"nit: This looks like something physical being inserted.\ns/ \u00271.44\" diskette\u0027 / \u0027virtual floppy\u0027 /","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":590,"context_line":"                self._insert_vmedia("},{"line_number":591,"context_line":"                    task, floppy_ref, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"                LOG.debug(\u0027Inserted 1.44\" diskette with configuration for node\u0027"},{"line_number":594,"context_line":"                          \u0027 %(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":595,"context_line":""},{"line_number":596,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_d7145a4f","line":593,"range":{"start_line":593,"start_character":36,"end_line":593,"end_character":50},"in_reply_to":"9fb8cfa7_d1eb0a75","updated":"2019-06-28 17:45:08.000000000","message":"Bingo! That\u0027s the Easter egg intended to reveal careful reviewers! ;-)","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_e4ae0ee6","line":599,"updated":"2019-06-05 22:28:52.000000000","message":"Wouldn\u0027t this be fatal for the deploy?\n\nI guess not, but then I\u0027m curious why floppy support other than behavioral parity.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_3a1a7b6e","line":599,"in_reply_to":"9fb8cfa7_9101123b","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c18bbc65","line":599,"in_reply_to":"9fb8cfa7_9101123b","updated":"2019-06-20 14:55:56.000000000","message":"I guess with mdns based configuration discovery, the world is not lost if this occurs.... *shrugs*","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_7a7f9314","line":599,"in_reply_to":"9fb8cfa7_c18bbc65","updated":"2019-06-28 17:45:08.000000000","message":"+1","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_9101123b","line":599,"in_reply_to":"9fb8cfa7_e4ae0ee6","updated":"2019-06-13 08:46:54.000000000","message":"+1","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":596,"context_line":"            else:"},{"line_number":597,"context_line":"                LOG.warning(\u0027Config via floppy is requested, but \u0027"},{"line_number":598,"context_line":"                            \u0027Floppy drive is not available on node \u0027"},{"line_number":599,"context_line":"                            \u0027%(node)s\u0027, {\u0027node\u0027: task.node.uuid})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":602,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_7a147344","line":599,"in_reply_to":"9fb8cfa7_e4ae0ee6","updated":"2019-06-28 17:45:08.000000000","message":"Perhaps that depends if IPA image can remain reasonably operational without floppy-based configuration... Failing hard may be too pessimistic, no?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        :param task: A task from TaskManager."},{"line_number":621,"context_line":"        :returns: None"},{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":"        LOG.debug(\"Cleaning up failed deploy boot for \""},{"line_number":624,"context_line":"                  \"%(node)s\", {\u0027node\u0027: task.node.uuid})"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_a46d7699","line":623,"range":{"start_line":623,"start_character":31,"end_line":623,"end_character":37},"updated":"2019-06-05 22:28:52.000000000","message":"Do we really only call this when a deploy has failed? If we manage boot?  (Which we almost always do, we should ask the community about deprecating that conditional....)","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":620,"context_line":"        :param task: A task from TaskManager."},{"line_number":621,"context_line":"        :returns: None"},{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":"        LOG.debug(\"Cleaning up failed deploy boot for \""},{"line_number":624,"context_line":"                  \"%(node)s\", {\u0027node\u0027: task.node.uuid})"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_a5fdf06e","line":623,"range":{"start_line":623,"start_character":31,"end_line":623,"end_character":37},"in_reply_to":"9fb8cfa7_a46d7699","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"},{"line_number":627,"context_line":"        self._cleanup_iso_image(task)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        if self._has_vmedia_device(task, sushy.VIRTUAL_MEDIA_FLOPPY):"},{"line_number":630,"context_line":"            self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":631,"context_line":"            self._cleanup_floppy_image(task)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_1120c2ab","line":629,"range":{"start_line":629,"start_character":11,"end_line":629,"end_character":69},"updated":"2019-06-13 08:46:54.000000000","message":"This should be based on driver_info[\u0027config_via_floppy\u0027] rather than bare metal supporting virtual floppy.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":626,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"},{"line_number":627,"context_line":"        self._cleanup_iso_image(task)"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        if self._has_vmedia_device(task, sushy.VIRTUAL_MEDIA_FLOPPY):"},{"line_number":630,"context_line":"            self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":631,"context_line":"            self._cleanup_floppy_image(task)"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_3afb5b47","line":629,"range":{"start_line":629,"start_character":11,"end_line":629,"end_character":69},"in_reply_to":"9fb8cfa7_1120c2ab","updated":"2019-06-28 17:45:08.000000000","message":"Perhaps both - user may desire to do floppy, while bare metal may not have it...","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        if boot_option \u003d\u003d \u0027local\u0027:"},{"line_number":658,"context_line":"            manager_utils.node_set_boot_device("},{"line_number":659,"context_line":"                task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":660,"context_line":"            return"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        params \u003d {}"},{"line_number":663,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_f44f1c68","line":660,"range":{"start_line":660,"start_character":12,"end_line":660,"end_character":18},"updated":"2019-06-13 08:46:54.000000000","message":"Debug statement as in L694 come here as well.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":657,"context_line":"        if boot_option \u003d\u003d \u0027local\u0027:"},{"line_number":658,"context_line":"            manager_utils.node_set_boot_device("},{"line_number":659,"context_line":"                task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":660,"context_line":"            return"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"        params \u003d {}"},{"line_number":663,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_9a85a7af","line":660,"range":{"start_line":660,"start_character":12,"end_line":660,"end_character":18},"in_reply_to":"9fb8cfa7_f44f1c68","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_f42abc7c","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"updated":"2019-06-13 08:46:54.000000000","message":"Calling the core boot interface method does not seems right. Move the content of clean_up_instance() to a helper method and call it here and at clean_up_instance()","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_b4f1a403","line":680,"range":{"start_line":680,"start_character":16,"end_line":680,"end_character":44},"updated":"2019-06-13 08:46:54.000000000","message":"Need to cleanup vmedia irrespective of persistent boot device.  Better to do this at the beginning of this method.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"077f815a76f9a70bf7e68b49147ef9b0fde58b7b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_d9716446","line":680,"range":{"start_line":680,"start_character":16,"end_line":680,"end_character":44},"in_reply_to":"9fb8cfa7_41110c04","updated":"2019-06-21 04:57:09.000000000","message":"The comment was with assumption that the iso attached is a deploy iso when control comes here and needs to be ejected. If instance is going to boot from virtual media, its taken care at L686 where appropriate iso gets attached.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"077f815a76f9a70bf7e68b49147ef9b0fde58b7b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_f993085b","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_a15328e2","updated":"2019-06-21 04:57:09.000000000","message":"The clean_up_instance is to clean up the environment that was setup for booting the instance. Normally this would be done after consuming the instance.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_41110c04","line":680,"range":{"start_line":680,"start_character":16,"end_line":680,"end_character":44},"in_reply_to":"9fb8cfa7_b4f1a403","updated":"2019-06-20 14:55:56.000000000","message":"Regarding irrespective of boot device, not for ramdisk based deployments because those would persist, that is of course as long as the bmc can honor and continue to support the connection. I believe irmc driver has code for a case where a machine always boots from a virtual iso.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_a6af367b","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_f42abc7c","updated":"2019-06-28 17:45:08.000000000","message":"Could you please elaborate a bit on this comment? I am not certain I understand what you have in mind here. Thanks!","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_a15328e2","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_f42abc7c","updated":"2019-06-20 14:55:56.000000000","message":"Why does it not seem right?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_e6b9aecb","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_f993085b","updated":"2019-06-28 17:45:08.000000000","message":"I am not sure we are on the same page here...\n\nIn the present code, the instance can boot either from local drive or from small boot ISO containing just kernel and ramdisk. This is done in pretty much the same way as PXE works.\n\nMy understanding of the above workflow is that ironic once deployed a filesystem on a local drive, but the node can\u0027t boot from it. Instead ironic boots the node using kernel+ramdisk associated with the image.\n\nThis is why I think we should not clean up boot environment unless it\u0027s a local boot.\n\nDoes it make sense?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9d1be4d0a6683794e69bab779ea0f86d20e13784","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_d7afad27","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_f993085b","updated":"2019-06-26 06:51:22.000000000","message":"Indeed, and I think part of this ?confusion? is becasue this method is called by takeover as well, and since we\u0027re in the \"we\u0027re not \u0027ramdisk\u0027 booting an instance\", it seems like this is fine as-is. (Although maybe missing state aware logic for takeover calls, but that can always be added later.)","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9d1be4d0a6683794e69bab779ea0f86d20e13784","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                manager_utils.node_set_boot_device("},{"line_number":678,"context_line":"                    task, boot_devices.DISK, persistent\u003dTrue)"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"                self.clean_up_instance(task)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                return"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_d786cdb9","line":680,"range":{"start_line":680,"start_character":21,"end_line":680,"end_character":38},"in_reply_to":"9fb8cfa7_f993085b","updated":"2019-06-26 06:51:22.000000000","message":"Okay, well sine it is nested under the non-ramdisk logic, which means \"we deployed an image\" at least calling the method.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        :param task: A task from TaskManager."},{"line_number":705,"context_line":"        :returns: None"},{"line_number":706,"context_line":"        \"\"\""},{"line_number":707,"context_line":"        LOG.debug(\"Cleaning up failed instance boot for \""},{"line_number":708,"context_line":"                  \"%(node)s\", {\u0027node\u0027: task.node.uuid})"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c4166af2","line":707,"range":{"start_line":707,"start_character":31,"end_line":707,"end_character":37},"updated":"2019-06-05 22:28:52.000000000","message":"same as above, and called entering the rescue path as well.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        :param task: A task from TaskManager."},{"line_number":705,"context_line":"        :returns: None"},{"line_number":706,"context_line":"        \"\"\""},{"line_number":707,"context_line":"        LOG.debug(\"Cleaning up failed instance boot for \""},{"line_number":708,"context_line":"                  \"%(node)s\", {\u0027node\u0027: task.node.uuid})"},{"line_number":709,"context_line":""},{"line_number":710,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_25f10096","line":707,"range":{"start_line":707,"start_character":31,"end_line":707,"end_character":37},"in_reply_to":"9fb8cfa7_c4166af2","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":732,"context_line":"                if v_media.inserted:"},{"line_number":733,"context_line":"                    if v_media.image \u003d\u003d boot_url:"},{"line_number":734,"context_line":"                        LOG.debug(\"Boot media %(boot_url)s is already \""},{"line_number":735,"context_line":"                                  \"inserted into %(boot_device)s for node \""},{"line_number":736,"context_line":"                                  \"%(node)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":737,"context_line":"                                               \u0027boot_url\u0027: boot_url,"},{"line_number":738,"context_line":"                                               \u0027boot_device\u0027: boot_device})"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_04e24202","line":735,"updated":"2019-06-05 22:28:52.000000000","message":"Hmm, should we consider re-attaching? Definitely a follow-up thing... Just worried about swiftless and a failure to clean-up, but the code looks solid for that.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        :param boot_device: sushy boot device e.g. `VIRTUAL_MEDIA_CD`,"},{"line_number":761,"context_line":"            `VIRTUAL_MEDIA_DVD` or `VIRTUAL_MEDIA_FLOPPY` or `None` to"},{"line_number":762,"context_line":"            eject everything (default)."},{"line_number":763,"context_line":"        :raises: InvalidParameterValue, if no suitable virtual CD or DVD is"},{"line_number":764,"context_line":"            found on the node."},{"line_number":765,"context_line":"        \"\"\""},{"line_number":766,"context_line":"        system \u003d redfish_utils.get_system(task.node)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_744d6c3c","line":763,"range":{"start_line":763,"start_character":17,"end_line":763,"end_character":38},"updated":"2019-06-13 08:46:54.000000000","message":"I think code needs to be added throw if the requested boot_device is not found on the system.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        :param boot_device: sushy boot device e.g. `VIRTUAL_MEDIA_CD`,"},{"line_number":761,"context_line":"            `VIRTUAL_MEDIA_DVD` or `VIRTUAL_MEDIA_FLOPPY` or `None` to"},{"line_number":762,"context_line":"            eject everything (default)."},{"line_number":763,"context_line":"        :raises: InvalidParameterValue, if no suitable virtual CD or DVD is"},{"line_number":764,"context_line":"            found on the node."},{"line_number":765,"context_line":"        \"\"\""},{"line_number":766,"context_line":"        system \u003d redfish_utils.get_system(task.node)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c6834aca","line":763,"range":{"start_line":763,"start_character":17,"end_line":763,"end_character":38},"in_reply_to":"9fb8cfa7_744d6c3c","updated":"2019-06-28 17:45:08.000000000","message":"Would not it dead-lock the work flow? If the device disappear somehow, we still need to go on... If we keep failing at this step, the user would need to re-define the node perhaps? Does this sound about right?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        :param boot_device: sushy boot device e.g. `VIRTUAL_MEDIA_CD`,"},{"line_number":761,"context_line":"            `VIRTUAL_MEDIA_DVD` or `VIRTUAL_MEDIA_FLOPPY` or `None` to"},{"line_number":762,"context_line":"            eject everything (default)."},{"line_number":763,"context_line":"        :raises: InvalidParameterValue, if no suitable virtual CD or DVD is"},{"line_number":764,"context_line":"            found on the node."},{"line_number":765,"context_line":"        \"\"\""},{"line_number":766,"context_line":"        system \u003d redfish_utils.get_system(task.node)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_4186ec15","line":763,"range":{"start_line":763,"start_character":17,"end_line":763,"end_character":38},"in_reply_to":"9fb8cfa7_744d6c3c","updated":"2019-06-20 14:55:56.000000000","message":"Wouldn\u0027t the user have long failed well before reaching this point if the requested boot_device was not found?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                if inserted:"},{"line_number":776,"context_line":"                    v_media.eject_media()"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"                LOG.info(\"Boot media is%(already)s ejected from \""},{"line_number":779,"context_line":"                         \"%(boot_device)s for node %(node)s\""},{"line_number":780,"context_line":"                         \"\", {\u0027node\u0027: task.node.uuid,"},{"line_number":781,"context_line":"                              \u0027already\u0027: \u0027\u0027 if inserted else \u0027 already\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_74c80ca5","line":778,"range":{"start_line":778,"start_character":39,"end_line":778,"end_character":50},"updated":"2019-06-13 08:46:54.000000000","message":"This is not required. Or you meant to put this LOG statement in \u0027else\u0027 path of L775.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"92a078e9bbf0a0362fdec36d03f161cad48d7288","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                if inserted:"},{"line_number":776,"context_line":"                    v_media.eject_media()"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"                LOG.info(\"Boot media is%(already)s ejected from \""},{"line_number":779,"context_line":"                         \"%(boot_device)s for node %(node)s\""},{"line_number":780,"context_line":"                         \"\", {\u0027node\u0027: task.node.uuid,"},{"line_number":781,"context_line":"                              \u0027already\u0027: \u0027\u0027 if inserted else \u0027 already\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c1c3bc56","line":778,"range":{"start_line":778,"start_character":37,"end_line":778,"end_character":39},"updated":"2019-06-20 14:55:56.000000000","message":"s/is%/was\\ %/\n\nAlso this should likely be debug. I get it is enumerating through managerr paths, but it may be something to just log in debug instead.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                if inserted:"},{"line_number":776,"context_line":"                    v_media.eject_media()"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"                LOG.info(\"Boot media is%(already)s ejected from \""},{"line_number":779,"context_line":"                         \"%(boot_device)s for node %(node)s\""},{"line_number":780,"context_line":"                         \"\", {\u0027node\u0027: task.node.uuid,"},{"line_number":781,"context_line":"                              \u0027already\u0027: \u0027\u0027 if inserted else \u0027 already\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_c6d10ace","line":778,"range":{"start_line":778,"start_character":39,"end_line":778,"end_character":50},"in_reply_to":"9fb8cfa7_74c80ca5","updated":"2019-06-28 17:45:08.000000000","message":"I mean to inject \"already\" into the log message if media is absent.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                if inserted:"},{"line_number":776,"context_line":"                    v_media.eject_media()"},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"                LOG.info(\"Boot media is%(already)s ejected from \""},{"line_number":779,"context_line":"                         \"%(boot_device)s for node %(node)s\""},{"line_number":780,"context_line":"                         \"\", {\u0027node\u0027: task.node.uuid,"},{"line_number":781,"context_line":"                              \u0027already\u0027: \u0027\u0027 if inserted else \u0027 already\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_46f67a5f","line":778,"range":{"start_line":778,"start_character":37,"end_line":778,"end_character":39},"in_reply_to":"9fb8cfa7_c1c3bc56","updated":"2019-06-28 17:45:08.000000000","message":"Hmmm, then perhaps I should have two separate log messages for the \"already\" and non-already cases. Does it make sense from code compactness perspective?","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0e18bf516d0a24ede1e2e407ed5754a0df7b0f4d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return \"image-%s\" % node.uuid"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def _cleanup_floppy_image(cls, task):"},{"line_number":215,"context_line":"        \"\"\"Deletes the floppy image if it was created for the node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_30660abd","line":214,"updated":"2019-07-01 10:04:03.000000000","message":"_delete_floppy_image ?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b50dedcd8a4c87094357b06970bc41d0ef9c7233","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return \"image-%s\" % node.uuid"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def _cleanup_floppy_image(cls, task):"},{"line_number":215,"context_line":"        \"\"\"Deletes the floppy image if it was created for the node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_47abc5d4","line":214,"in_reply_to":"9fb8cfa7_30660abd","updated":"2019-07-01 10:47:22.000000000","message":"Similar method(s) seem to be called this way in other drivers (ilo, irmc). May be it\u0027s better to keep the naming uniform?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"06c1a7dc6c712969c8bc614517575c48fe920222","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return \"image-%s\" % node.uuid"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def _cleanup_floppy_image(cls, task):"},{"line_number":215,"context_line":"        \"\"\"Deletes the floppy image if it was created for the node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_a7640123","line":214,"in_reply_to":"9fb8cfa7_47abc5d4","updated":"2019-07-01 11:24:04.000000000","message":"for sake of uniformity let\u0027s keep it like the others\nalthough it really makes more sense to me to call it \"delete\" :)","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"c5e82a2226771042861c032b00568dd2016139b4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return \"image-%s\" % node.uuid"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    @classmethod"},{"line_number":214,"context_line":"    def _cleanup_floppy_image(cls, task):"},{"line_number":215,"context_line":"        \"\"\"Deletes the floppy image if it was created for the node."},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"7faddb67_3889bc74","line":214,"in_reply_to":"9fb8cfa7_a7640123","updated":"2019-07-08 16:28:04.000000000","message":"Done","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0e18bf516d0a24ede1e2e407ed5754a0df7b0f4d","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        This method prepares a temporary vfat filesystem image. Then it adds"},{"line_number":230,"context_line":"        a file into the image which contains the parameters to be passed to"},{"line_number":231,"context_line":"        the ramdisk. Then it then uploads the file to Swift"},{"line_number":232,"context_line":"        \u0027[redfish]swift_container\u0027, setting it to auto-expire after"},{"line_number":233,"context_line":"        \u0027[redfish]swift_object_expiry_timeout\u0027 seconds. Then it returns"},{"line_number":234,"context_line":"        the temp url for the Swift object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_70700273","line":231,"range":{"start_line":231,"start_character":29,"end_line":231,"end_character":33},"updated":"2019-07-01 10:04:03.000000000","message":"nit: remove duplicated \"then\"","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"c5e82a2226771042861c032b00568dd2016139b4","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        This method prepares a temporary vfat filesystem image. Then it adds"},{"line_number":230,"context_line":"        a file into the image which contains the parameters to be passed to"},{"line_number":231,"context_line":"        the ramdisk. Then it then uploads the file to Swift"},{"line_number":232,"context_line":"        \u0027[redfish]swift_container\u0027, setting it to auto-expire after"},{"line_number":233,"context_line":"        \u0027[redfish]swift_object_expiry_timeout\u0027 seconds. Then it returns"},{"line_number":234,"context_line":"        the temp url for the Swift object."}],"source_content_type":"text/x-python","patch_set":30,"id":"7faddb67_98c55091","line":231,"range":{"start_line":231,"start_character":29,"end_line":231,"end_character":33},"in_reply_to":"9fb8cfa7_70700273","updated":"2019-07-08 16:28:04.000000000","message":"Done","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0e18bf516d0a24ede1e2e407ed5754a0df7b0f4d","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        LOG.debug(\"Created floppy image %(name)s in Swift for node %(node)s,\""},{"line_number":267,"context_line":"                  \"exposed as temporary URL \""},{"line_number":268,"context_line":"                  \"%(url)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":269,"context_line":"                              \u0027name\u0027: object_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_d090ce45","line":266,"range":{"start_line":266,"start_character":76,"end_line":266,"end_character":77},"updated":"2019-07-01 10:04:03.000000000","message":"nit: missing blank space","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"c5e82a2226771042861c032b00568dd2016139b4","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        LOG.debug(\"Created floppy image %(name)s in Swift for node %(node)s,\""},{"line_number":267,"context_line":"                  \"exposed as temporary URL \""},{"line_number":268,"context_line":"                  \"%(url)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":269,"context_line":"                              \u0027name\u0027: object_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"7faddb67_383c5c92","line":266,"range":{"start_line":266,"start_character":76,"end_line":266,"end_character":77},"in_reply_to":"9fb8cfa7_277811c2","updated":"2019-07-08 16:28:04.000000000","message":"Done","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"06c1a7dc6c712969c8bc614517575c48fe920222","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        LOG.debug(\"Created floppy image %(name)s in Swift for node %(node)s,\""},{"line_number":267,"context_line":"                  \"exposed as temporary URL \""},{"line_number":268,"context_line":"                  \"%(url)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":269,"context_line":"                              \u0027name\u0027: object_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_277811c2","line":266,"range":{"start_line":266,"start_character":76,"end_line":266,"end_character":77},"in_reply_to":"9fb8cfa7_677b697a","updated":"2019-07-01 11:24:04.000000000","message":"wondering the same, maybe some pep8 option?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b50dedcd8a4c87094357b06970bc41d0ef9c7233","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        image_url \u003d swift_api.get_temp_url(container, object_name, timeout)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        LOG.debug(\"Created floppy image %(name)s in Swift for node %(node)s,\""},{"line_number":267,"context_line":"                  \"exposed as temporary URL \""},{"line_number":268,"context_line":"                  \"%(url)s\", {\u0027node\u0027: task.node.uuid,"},{"line_number":269,"context_line":"                              \u0027name\u0027: object_name,"}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_677b697a","line":266,"range":{"start_line":266,"start_character":76,"end_line":266,"end_character":77},"in_reply_to":"9fb8cfa7_d090ce45","updated":"2019-07-01 10:47:22.000000000","message":"Ah, I wonder if CI could be tweaked to catch such things...?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"0e18bf516d0a24ede1e2e407ed5754a0df7b0f4d","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        return \"boot-%s\" % node.uuid"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @classmethod"},{"line_number":283,"context_line":"    def _cleanup_iso_image(cls, task):"},{"line_number":284,"context_line":"        \"\"\"Deletes the ISO if it was created for the instance."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_f01872d3","line":283,"updated":"2019-07-01 10:04:03.000000000","message":"_delete_iso_image ?","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"b50dedcd8a4c87094357b06970bc41d0ef9c7233","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        return \"boot-%s\" % node.uuid"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    @classmethod"},{"line_number":283,"context_line":"    def _cleanup_iso_image(cls, task):"},{"line_number":284,"context_line":"        \"\"\"Deletes the ISO if it was created for the instance."},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        :param task: an ironic node object."}],"source_content_type":"text/x-python","patch_set":30,"id":"9fb8cfa7_2799f1c2","line":283,"in_reply_to":"9fb8cfa7_f01872d3","updated":"2019-07-01 10:47:22.000000000","message":"Ditto","commit_id":"5d5bc1c2ebe5fea857609837059adc110a97fee3"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"1c386462ce328011e547bf41b6142e62dbf9b4a9","unresolved":false,"context_lines":[{"line_number":676,"context_line":"            root_uuid \u003d node.driver_internal_info.get(\u0027root_uuid_or_disk_id\u0027)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"            if not root_uuid and task.driver.storage.should_write_image(task):"},{"line_number":679,"context_line":"                is_whole_disk \u003d node.driver_internal_info.get("},{"line_number":680,"context_line":"                    \u0027is_whole_disk_image\u0027)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                LOG.warning("},{"line_number":683,"context_line":"                    \"The %s could not be found for node %s. Booting \""}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_be7dad6f","line":680,"range":{"start_line":679,"start_character":16,"end_line":680,"end_character":42},"updated":"2019-07-05 16:42:15.000000000","message":"This check should move outside as root_uuid could get returned for the whole disk image.\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/agent.py#L323-L339","commit_id":"687638df341e0c04f53faa886b47ca6cc3e73295"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"aa36483446879c7a4266d146daaabb05845968b0","unresolved":false,"context_lines":[{"line_number":676,"context_line":"            root_uuid \u003d node.driver_internal_info.get(\u0027root_uuid_or_disk_id\u0027)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":"            if not root_uuid and task.driver.storage.should_write_image(task):"},{"line_number":679,"context_line":"                is_whole_disk \u003d node.driver_internal_info.get("},{"line_number":680,"context_line":"                    \u0027is_whole_disk_image\u0027)"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"                LOG.warning("},{"line_number":683,"context_line":"                    \"The %s could not be found for node %s. Booting \""}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_4c52c115","line":680,"range":{"start_line":679,"start_character":16,"end_line":680,"end_character":42},"in_reply_to":"7faddb67_be7dad6f","updated":"2019-07-08 09:37:10.000000000","message":"Done","commit_id":"687638df341e0c04f53faa886b47ca6cc3e73295"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"1c386462ce328011e547bf41b6142e62dbf9b4a9","unresolved":false,"context_lines":[{"line_number":751,"context_line":""},{"line_number":752,"context_line":"                    continue"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"                v_media.insert_media(boot_url, inserted\u003dTrue)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"                LOG.info(\"Inserted boot media %(boot_url)s into \""},{"line_number":757,"context_line":"                         \"%(boot_device)s for node \""}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_1e896174","line":754,"range":{"start_line":754,"start_character":47,"end_line":754,"end_character":60},"updated":"2019-07-05 16:42:15.000000000","message":"Also need to pass \u0027write_protected\u003dTrue\u0027 for CDROM else its insertion fails. We could pass it unconditionally as it would not harm for floppy image as well.","commit_id":"687638df341e0c04f53faa886b47ca6cc3e73295"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"aa36483446879c7a4266d146daaabb05845968b0","unresolved":false,"context_lines":[{"line_number":751,"context_line":""},{"line_number":752,"context_line":"                    continue"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"                v_media.insert_media(boot_url, inserted\u003dTrue)"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"                LOG.info(\"Inserted boot media %(boot_url)s into \""},{"line_number":757,"context_line":"                         \"%(boot_device)s for node \""}],"source_content_type":"text/x-python","patch_set":31,"id":"7faddb67_ec560d07","line":754,"range":{"start_line":754,"start_character":47,"end_line":754,"end_character":60},"in_reply_to":"7faddb67_1e896174","updated":"2019-07-08 09:37:10.000000000","message":"Done","commit_id":"687638df341e0c04f53faa886b47ca6cc3e73295"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                driver\u003d\u0027redfish\u0027,"},{"line_number":112,"context_line":"                reason\u003d_(\u0027Unable to import the sushy library\u0027))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _parse_driver_info(node):"},{"line_number":116,"context_line":"        \"\"\"Gets the driver specific Node deployment info."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_90018eb2","line":114,"updated":"2019-07-26 08:36:09.000000000","message":"nit: nothing here is required to be a classmethod","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                driver\u003d\u0027redfish\u0027,"},{"line_number":112,"context_line":"                reason\u003d_(\u0027Unable to import the sushy library\u0027))"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @staticmethod"},{"line_number":115,"context_line":"    def _parse_driver_info(node):"},{"line_number":116,"context_line":"        \"\"\"Gets the driver specific Node deployment info."},{"line_number":117,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_4bd12757","line":114,"in_reply_to":"7faddb67_90018eb2","updated":"2019-07-26 10:30:57.000000000","message":"So this is static method because there seems to be no requirements for class/instance attribute access. Or what do you mean?","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            swift_api.delete_object(container, object_name)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        except exception.SwiftOperationError as e:"},{"line_number":200,"context_line":"            LOG.warning(\"Failed to clean up image  %(image)s for node \""},{"line_number":201,"context_line":"                        \"%(node)s. Error: %(error)s.\","},{"line_number":202,"context_line":"                        {\u0027node\u0027: task.node.uuid, \u0027image\u0027: object_name,"},{"line_number":203,"context_line":"                         \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_b0fccab5","line":200,"updated":"2019-07-26 08:36:09.000000000","message":"nit: redundant space before %","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            swift_api.delete_object(container, object_name)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        except exception.SwiftOperationError as e:"},{"line_number":200,"context_line":"            LOG.warning(\"Failed to clean up image  %(image)s for node \""},{"line_number":201,"context_line":"                        \"%(node)s. Error: %(error)s.\","},{"line_number":202,"context_line":"                        {\u0027node\u0027: task.node.uuid, \u0027image\u0027: object_name,"},{"line_number":203,"context_line":"                         \u0027error\u0027: e})"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_8bbe3ffd","line":200,"in_reply_to":"7faddb67_b0fccab5","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        floppy_object_name \u003d cls._get_floppy_image_name(task.node)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        container \u003d CONF.redfish.swift_container"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        cls._delete_from_swift(task, container, floppy_object_name)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_502d5644","line":221,"updated":"2019-07-26 08:36:09.000000000","message":"nit: redundant variable","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        \"\"\""},{"line_number":219,"context_line":"        floppy_object_name \u003d cls._get_floppy_image_name(task.node)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        container \u003d CONF.redfish.swift_container"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        cls._delete_from_swift(task, container, floppy_object_name)"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_cb499732","line":221,"in_reply_to":"7faddb67_502d5644","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        iso_object_name \u003d cls._get_iso_image_name(task.node)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        container \u003d CONF.redfish.swift_container"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        cls._delete_from_swift(task, container, iso_object_name)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_7030929f","line":291,"updated":"2019-07-26 08:36:09.000000000","message":"nit: redundant variable","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        iso_object_name \u003d cls._get_iso_image_name(task.node)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        container \u003d CONF.redfish.swift_container"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        cls._delete_from_swift(task, container, iso_object_name)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_8b539fe2","line":291,"in_reply_to":"7faddb67_7030929f","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            LOG.error(\"Unable to find kernel or ramdisk for \""},{"line_number":321,"context_line":"                      \"building ISO for %(node)s\","},{"line_number":322,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":323,"context_line":"            return"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":326,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_1027de66","line":323,"updated":"2019-07-26 08:36:09.000000000","message":"raise? otherwise it\u0027s going to blow up later because of returning None","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            LOG.error(\"Unable to find kernel or ramdisk for \""},{"line_number":321,"context_line":"                      \"building ISO for %(node)s\","},{"line_number":322,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":323,"context_line":"            return"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":326,"context_line":"        if boot_mode !\u003d \u0027uefi\u0027:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_6bd5031b","line":323,"in_reply_to":"7faddb67_1027de66","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":328,"context_line":"                      \"for node %(node)s\","},{"line_number":329,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":330,"context_line":"            return"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"},{"line_number":333,"context_line":"            i_info \u003d task.node.instance_info"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_302a1a2c","line":330,"updated":"2019-07-26 08:36:09.000000000","message":"ditto","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            LOG.error(\"Virtual media boot requires UEFI boot mode \""},{"line_number":328,"context_line":"                      \"for node %(node)s\","},{"line_number":329,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":330,"context_line":"            return"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if deploy_utils.get_boot_option(task.node) \u003d\u003d \"ramdisk\":"},{"line_number":333,"context_line":"            i_info \u003d task.node.instance_info"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_0bb56fee","line":330,"in_reply_to":"7faddb67_302a1a2c","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":375,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_d020664c","line":372,"updated":"2019-07-26 08:36:09.000000000","message":"side note: we should invent a way to avoid a hard dependency on swift. maybe a mode where these files are cached in the ironic\u0027s http server?","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d09071f0b7b2d12aef7daaafd01fcbe3104ed041","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":375,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_be42e63c","line":372,"in_reply_to":"7faddb67_6ba3c3b2","updated":"2019-08-02 22:03:49.000000000","message":"++1000","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"            object_headers \u003d {\u0027X-Delete-After\u0027: str(timeout)}"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"            swift_api.create_object(container, iso_object_name,"},{"line_number":375,"context_line":"                                    boot_iso_tmp_file,"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_6ba3c3b2","line":372,"in_reply_to":"7faddb67_d020664c","updated":"2019-07-26 10:30:57.000000000","message":"Possibly, perhaps another follow up.","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            LOG.error(\"Unable to find kernel or ramdisk for \""},{"line_number":463,"context_line":"                      \"to generate boot ISO for %(node)s\","},{"line_number":464,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":465,"context_line":"            return"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        bootloader_href \u003d d_info.get(\u0027bootloader\u0027)"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_f01b2219","line":465,"updated":"2019-07-26 08:36:09.000000000","message":"raise?","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            LOG.error(\"Unable to find kernel or ramdisk for \""},{"line_number":463,"context_line":"                      \"to generate boot ISO for %(node)s\","},{"line_number":464,"context_line":"                      {\u0027node\u0027: task.node.uuid})"},{"line_number":465,"context_line":"            return"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"        bootloader_href \u003d d_info.get(\u0027bootloader\u0027)"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_eb8ed330","line":465,"in_reply_to":"7faddb67_f01b2219","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"4a52f8f1da5366c907d51cc7575639a293e57c62","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                                        states.RESCUING):"},{"line_number":570,"context_line":"            return"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        d_info \u003d self._parse_driver_info(node)"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_b8cae89d","line":572,"updated":"2019-07-18 13:44:18.000000000","message":"I wonder if we need this line at all? On the other hand, if fast track is enabled, the caller might not flip the power for us, so everything we configure here won\u0027t be used?\n\n/me needs to understand fast-track deployment","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"ec548dc5dd755fccf76fa4437e126251a3c157a0","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                                        states.RESCUING):"},{"line_number":570,"context_line":"            return"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        d_info \u003d self._parse_driver_info(node)"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_f8086092","line":572,"in_reply_to":"7faddb67_b8cae89d","updated":"2019-07-19 02:21:38.000000000","message":"The virtual media operations will fail if the node is in POST state. This safeguards it. It will not impact fast track. During fast track prepare_ramdisk is bypassed.","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"bb5f0fd8aa023bf96e176704532400702c59334b","unresolved":false,"context_lines":[{"line_number":569,"context_line":"                                        states.RESCUING):"},{"line_number":570,"context_line":"            return"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"        manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":573,"context_line":""},{"line_number":574,"context_line":"        d_info \u003d self._parse_driver_info(node)"},{"line_number":575,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_0ea644ac","line":572,"in_reply_to":"7faddb67_f8086092","updated":"2019-07-19 11:17:35.000000000","message":"I am not sure I fully understand what the POST state is, but I feel like the above mentioned line is good enough. Is it? ;-)","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                ramdisk_params[\u0027boot_method\u0027] \u003d \u0027vmedia\u0027"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"                floppy_ref \u003d self._prepare_floppy_image("},{"line_number":589,"context_line":"                    task, params\u003dramdisk_params)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"                self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":592,"context_line":"                self._insert_vmedia("}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_901aee14","line":589,"updated":"2019-07-26 08:36:09.000000000","message":"floppy_ref can be None","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                ramdisk_params[\u0027boot_method\u0027] \u003d \u0027vmedia\u0027"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"                floppy_ref \u003d self._prepare_floppy_image("},{"line_number":589,"context_line":"                    task, params\u003dramdisk_params)"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"                self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_FLOPPY)"},{"line_number":592,"context_line":"                self._insert_vmedia("}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_0b832f06","line":589,"in_reply_to":"7faddb67_901aee14","updated":"2019-07-26 10:30:57.000000000","message":"I think it should never be None.","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        iso_ref \u003d self._prepare_deploy_iso(task, ramdisk_params, mode)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"},{"line_number":608,"context_line":"        self._insert_vmedia(task, iso_ref, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_b015aae7","line":605,"updated":"2019-07-26 08:36:09.000000000","message":"iso_ref can be None (should be fixed there, I think)","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        mode \u003d deploy_utils.rescue_or_deploy_mode(node)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"        iso_ref \u003d self._prepare_deploy_iso(task, ramdisk_params, mode)"},{"line_number":606,"context_line":""},{"line_number":607,"context_line":"        self._eject_vmedia(task, sushy.VIRTUAL_MEDIA_CD)"},{"line_number":608,"context_line":"        self._insert_vmedia(task, iso_ref, sushy.VIRTUAL_MEDIA_CD)"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_2b862b15","line":605,"in_reply_to":"7faddb67_b015aae7","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":766,"context_line":"                                      \u0027boot_device\u0027: boot_device})"},{"line_number":767,"context_line":"                return"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":770,"context_line":"            _(\u0027No suitable virtual media device found\u0027))"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_50d23636","line":769,"updated":"2019-07-26 08:36:09.000000000","message":"It\u0027s not really InvalidParameterValue, but works for now","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":766,"context_line":"                                      \u0027boot_device\u0027: boot_device})"},{"line_number":767,"context_line":"                return"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        raise exception.InvalidParameterValue("},{"line_number":770,"context_line":"            _(\u0027No suitable virtual media device found\u0027))"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_8b6cff9c","line":769,"in_reply_to":"7faddb67_50d23636","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"b055ce2d57629a146feca1726c3ede4b629354a8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"},{"line_number":56,"context_line":"    \u0027rescue_kernel\u0027: _(\u0027URL or Glance UUID of the rescue kernel. This value \u0027"},{"line_number":57,"context_line":"                       \u0027is required for rescue mode.\u0027),"},{"line_number":58,"context_line":"    \u0027rescue_ramdisk\u0027: _(\u0027URL or Glance UUID of the rescue ramdisk with agent \u0027"},{"line_number":59,"context_line":"                        \u0027that is used at node rescue time. This value is \u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"7faddb67_0ce6be45","line":56,"updated":"2019-08-05 09:54:42.000000000","message":"nit: use double quotes in property description for consistency.","commit_id":"f5d5d0cee67dff16d14d3979e5abd810adc33ef8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"705eb0905d9d8c5fe0713010f81af2c611d1896e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        d_info \u003d node.driver_info"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        deploy_info \u003d {option: d_info.get(option)"},{"line_number":132,"context_line":"                       for option in REQUIRED_PROPERTIES}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        error_msg \u003d _(\"Error validating Redfish virtual media. Some \""}],"source_content_type":"text/x-python","patch_set":41,"id":"7faddb67_ecd4ffbd","line":131,"updated":"2019-08-07 08:19:48.000000000","message":"nit: we\u0027ll need to update this to support CONF.conductor.deploy_kernel and company","commit_id":"9fdd094843591d78e5feb2cb23c8b24bcf1d124e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8b65b39ea3615ffc0f6361b372a40405ed640f1","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        d_info \u003d node.driver_info"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        deploy_info \u003d {option: d_info.get(option)"},{"line_number":132,"context_line":"                       for option in REQUIRED_PROPERTIES}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        error_msg \u003d _(\"Error validating Redfish virtual media. Some \""},{"line_number":135,"context_line":"                      \"parameters were missing in node\u0027s driver_info\")"}],"source_content_type":"text/x-python","patch_set":42,"id":"7faddb67_e0bce507","line":132,"range":{"start_line":131,"start_character":0,"end_line":132,"end_character":57},"updated":"2019-08-08 14:01:25.000000000","message":"Same comment re CONF deploy_kernel/deploy_ramdiks","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":19604,"name":"ankit","email":"ankit.dhn31@gmail.com","username":"ankit"},"change_message_id":"679997dc086b34c441b4f9d195cba3d388745e13","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        LOG.debug(\"Trying to create %(boot_mode) ISO image for node %(node)s \""},{"line_number":354,"context_line":"                  \"with kernel %(kernel_href)s, ramdisk %(ramdisk_href)s, \""},{"line_number":355,"context_line":"                  \"bootloader %(bootloader_href)s and kernel params %(params)s\""},{"line_number":356,"context_line":"                  \"\", {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_c0de2d3d","line":353,"range":{"start_line":353,"start_character":35,"end_line":353,"end_character":48},"updated":"2019-08-14 11:59:06.000000000","message":"It should be %(boot_mode)s","commit_id":"26222835401f8c0fb08a1ab28673f4e7ea288261"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"db0a89ff6733a07d63baf388acda2d438cc49633","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        boot_mode \u003d boot_mode_utils.get_boot_mode_for_deploy(task.node)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        LOG.debug(\"Trying to create %(boot_mode) ISO image for node %(node)s \""},{"line_number":354,"context_line":"                  \"with kernel %(kernel_href)s, ramdisk %(ramdisk_href)s, \""},{"line_number":355,"context_line":"                  \"bootloader %(bootloader_href)s and kernel params %(params)s\""},{"line_number":356,"context_line":"                  \"\", {\u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_40f79d5a","line":353,"range":{"start_line":353,"start_character":35,"end_line":353,"end_character":48},"in_reply_to":"7faddb67_c0de2d3d","updated":"2019-08-14 12:19:58.000000000","message":"Ah, thanks!","commit_id":"26222835401f8c0fb08a1ab28673f4e7ea288261"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e9149be04ed480634198a22822b56846b73dfa96","unresolved":false,"context_lines":[{"line_number":53,"context_line":"}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"RESCUE_PROPERTIES \u003d {"},{"line_number":56,"context_line":"    \u0027rescue_kernel\u0027: _(\u0027URL or Glance UUID of the rescue kernel. This value \u0027"},{"line_number":57,"context_line":"                       \u0027is required for rescue mode.\u0027),"},{"line_number":58,"context_line":"    \u0027rescue_ramdisk\u0027: _(\u0027URL or Glance UUID of the rescue ramdisk with agent \u0027"},{"line_number":59,"context_line":"                        \u0027that is used at node rescue time. This value is \u0027"}],"source_content_type":"text/x-python","patch_set":46,"id":"7faddb67_801ef571","line":56,"range":{"start_line":56,"start_character":23,"end_line":56,"end_character":24},"updated":"2019-08-14 12:43:01.000000000","message":"must.... resist... being picky... on single/double quotes.....","commit_id":"9fab96fc3748dcdefb3a57bf40b8c9feb4a1981b"}],"ironic/drivers/redfish.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [redfish_boot.RedfishVirtualMediaBoot,"},{"line_number":56,"context_line":"                ipxe.iPXEBoot, pxe.PXEBoot]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_a107a81c","line":55,"updated":"2019-06-05 22:28:52.000000000","message":"Are we intentionally stating that virtual media should always be the first class method with redfish hardware? Seems like a fairly major default change and if we choose to head in that direction it is definitely a release note worthy item for upgrade.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [redfish_boot.RedfishVirtualMediaBoot,"},{"line_number":56,"context_line":"                ipxe.iPXEBoot, pxe.PXEBoot]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_066882f2","line":55,"in_reply_to":"9fb8cfa7_146670c2","updated":"2019-06-28 17:45:08.000000000","message":"Done","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"793618c05665351be1c7a366a8ce7cba3208aa1b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [redfish_boot.RedfishVirtualMediaBoot,"},{"line_number":56,"context_line":"                ipxe.iPXEBoot, pxe.PXEBoot]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_146670c2","line":55,"in_reply_to":"9fb8cfa7_a107a81c","updated":"2019-06-13 08:46:54.000000000","message":"+1","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @property"},{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [redfish_boot.RedfishVirtualMediaBoot,"},{"line_number":56,"context_line":"                ipxe.iPXEBoot, pxe.PXEBoot]"}],"source_content_type":"text/x-python","patch_set":29,"id":"9fb8cfa7_e6644e24","line":55,"in_reply_to":"9fb8cfa7_a107a81c","updated":"2019-06-28 17:45:08.000000000","message":"OK, let\u0027s be conservative.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [ipxe.iPXEBoot, pxe.PXEBoot,"},{"line_number":56,"context_line":"                redfish_boot.RedfishVirtualMediaBoot]"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_f0f242e3","line":56,"updated":"2019-07-26 08:36:09.000000000","message":"Shouldn\u0027t this go first? Then if an operator enables it, it will have priority","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [ipxe.iPXEBoot, pxe.PXEBoot,"},{"line_number":56,"context_line":"                redfish_boot.RedfishVirtualMediaBoot]"}],"source_content_type":"text/x-python","patch_set":38,"id":"7faddb67_cba19797","line":56,"in_reply_to":"7faddb67_f0f242e3","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d09071f0b7b2d12aef7daaafd01fcbe3104ed041","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def supported_boot_interfaces(self):"},{"line_number":54,"context_line":"        \"\"\"List of supported boot interfaces.\"\"\""},{"line_number":55,"context_line":"        return [redfish_boot.RedfishVirtualMediaBoot,"},{"line_number":56,"context_line":"                ipxe.iPXEBoot, pxe.PXEBoot]"}],"source_content_type":"text/x-python","patch_set":40,"id":"7faddb67_1e71baa8","line":56,"updated":"2019-08-02 22:03:49.000000000","message":"I guess the question becomes is virtual media first class for redfish or not. I\u0027m not sure we should make it the effective default if enabled system wide, but...  *shrugs*","commit_id":"f5d5d0cee67dff16d14d3979e5abd810adc33ef8"}],"ironic/tests/unit/drivers/modules/redfish/test_bios.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3be97f30a2cb9509a8e8efe2fe859dd29ab742e0","unresolved":false,"context_lines":[{"line_number":266,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":267,"context_line":"        node.save()"},{"line_number":268,"context_line":"        self._test_step_post_reboot()"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    def test_factory_reset_post_reboot_deploying(self):"},{"line_number":271,"context_line":"        self.node.deploy_step \u003d {\u0027priority\u0027: 100, \u0027interface\u0027: \u0027bios\u0027,"},{"line_number":272,"context_line":"                                 \u0027step\u0027: \u0027factory_reset\u0027, \u0027argsinfo\u0027: {}}"}],"source_content_type":"text/x-python","patch_set":45,"id":"7faddb67_408c7dd6","line":269,"updated":"2019-08-14 12:22:37.000000000","message":"Good parts to test through... the intermediate states often get... forgotten.","commit_id":"26222835401f8c0fb08a1ab28673f4e7ea288261"}],"releasenotes/notes/add-redfish-boot-interface-e7e05bdd2c894d80.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds boot interface to ``redfish`` hardware type supporting virtual media"},{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``refsigh`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"},{"line_number":8,"context_line":"    provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"9fb8cfa7_01ad5430","line":6,"range":{"start_line":6,"start_character":56,"end_line":6,"end_character":63},"updated":"2019-06-05 22:28:52.000000000","message":"???\n\n``redfish``","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds boot interface to ``redfish`` hardware type supporting virtual media"},{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``refsigh`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"},{"line_number":8,"context_line":"    provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"9fb8cfa7_66261ed1","line":6,"range":{"start_line":6,"start_character":56,"end_line":6,"end_character":63},"in_reply_to":"9fb8cfa7_01ad5430","updated":"2019-06-28 17:45:08.000000000","message":"Never hack on ironic from a cell phone!","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"54c6631876ca34d7a46f61fea100c1765071781d","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``refsigh`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"},{"line_number":8,"context_line":"    provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"9fb8cfa7_017234e4","line":8,"updated":"2019-06-05 22:28:52.000000000","message":"So we\u0027re constructing an ISO.... Interesting.  I always kind of thought we would take the path that the other drivers have taken and expect the users to supply a pre-mastered ISO. I guess the plus is we can embed configuration.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"fa5b92e997152824daeb1f3b2e054fed15b91e5a","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``refsigh`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"},{"line_number":8,"context_line":"    provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":29,"id":"9fb8cfa7_3a891674","line":8,"in_reply_to":"9fb8cfa7_017234e4","updated":"2019-06-28 17:45:08.000000000","message":"Right, I\u0027ve been contemplating this idea... I can see many benefits doing it this way.   \n\nOff the top of my head:\n\n* Usability: no hassle with re/building ISO version of the images\n* Uniformity: from user\u0027s perspective, it\u0027s the same as with non-virtual media boot methods\n* Building UEFI bootable ISOs by hand can be challenging. I mean the machine may not actually like your ISO and hang somewhere along the way.\n* Yes, we can hack on the images we build. Perhaps that can be something security or node identity related as well. Not just network configuration. The grub code is already in place for that.\n* May be we could extend this design to \"local instance boot from virtual media CD\"? Meaning that we pull user image + kernel/ramdisk, build ISO, insert it into virtual CD and boot the node. Could be useful for diskless nodes? Keep in mind, that virtual media could also be served over network protocols, not just HTTP pull.\n\nBuilding just kernel/ramdisk ISOs seems cheap.","commit_id":"9d4f7fa0de0651e4633ab262aef71d1d5f555964"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds boot interface to ``redfish`` hardware type supporting virtual media"},{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``redfish`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"7faddb67_70d5f21a","line":4,"updated":"2019-07-26 08:36:09.000000000","message":"nit: \"Adds a virtual media boot interface to the ``redfish`` hardware type.\"","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds boot interface to ``redfish`` hardware type supporting virtual media"},{"line_number":5,"context_line":"    boot. The ``redfish`` boot interface operates on the same kernel/ramdisk"},{"line_number":6,"context_line":"    as, for example, PXE boot interface does, however ``redfish`` boot"},{"line_number":7,"context_line":"    interface additionally requires EFI system partition (ESP) image to be"}],"source_content_type":"text/x-yaml","patch_set":38,"id":"7faddb67_cbcaf74d","line":4,"in_reply_to":"7faddb67_70d5f21a","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d09071f0b7b2d12aef7daaafd01fcbe3104ed041","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":40,"id":"7faddb67_3e9d96bb","line":5,"range":{"start_line":5,"start_character":30,"end_line":5,"end_character":37},"updated":"2019-08-02 22:03:49.000000000","message":"s/redfish/redfish-virtual-media/","commit_id":"f5d5d0cee67dff16d14d3979e5abd810adc33ef8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d09071f0b7b2d12aef7daaafd01fcbe3104ed041","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":40,"id":"7faddb67_fea29efb","line":7,"range":{"start_line":7,"start_character":6,"end_line":7,"end_character":13},"updated":"2019-08-02 22:03:49.000000000","message":"ditto","commit_id":"f5d5d0cee67dff16d14d3979e5abd810adc33ef8"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8b65b39ea3615ffc0f6361b372a40405ed640f1","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7faddb67_2048bd2c","line":5,"range":{"start_line":5,"start_character":30,"end_line":5,"end_character":37},"updated":"2019-08-08 14:01:25.000000000","message":"redfish-virtual-media","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1b535803a977a57bdb3b0714ccc7c9aadeb36160","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7faddb67_fb96c93e","line":5,"range":{"start_line":5,"start_character":30,"end_line":5,"end_character":37},"in_reply_to":"7faddb67_2048bd2c","updated":"2019-08-09 09:50:47.000000000","message":"Done","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a8b65b39ea3615ffc0f6361b372a40405ed640f1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7faddb67_004fc134","line":7,"range":{"start_line":7,"start_character":6,"end_line":7,"end_character":13},"updated":"2019-08-08 14:01:25.000000000","message":"ditto","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"1b535803a977a57bdb3b0714ccc7c9aadeb36160","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Adds virtual media boot interface to ``redfish`` hardware type supporting"},{"line_number":5,"context_line":"    virtual media boot. The ``redfish`` boot interface operates on the same"},{"line_number":6,"context_line":"    kernel/ramdisk as, for example, PXE boot interface does, however"},{"line_number":7,"context_line":"    ``redfish`` boot interface additionally requires EFI system partition (ESP)"},{"line_number":8,"context_line":"    image to be provided via ``[driver_info]/bootloader`` property."}],"source_content_type":"text/x-yaml","patch_set":42,"id":"7faddb67_bba05193","line":7,"range":{"start_line":7,"start_character":6,"end_line":7,"end_character":13},"in_reply_to":"7faddb67_004fc134","updated":"2019-08-09 09:50:47.000000000","message":"Done","commit_id":"c618cae52506c3ec8ec498c7aabb5e0daa990611"}],"setup.cfg":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"d0d2ad961f55642a967ad95db77fae378f1b4376","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    irmc-pxe \u003d ironic.drivers.modules.irmc.boot:IRMCPXEBoot"},{"line_number":70,"context_line":"    irmc-virtual-media \u003d ironic.drivers.modules.irmc.boot:IRMCVirtualMediaBoot"},{"line_number":71,"context_line":"    pxe \u003d ironic.drivers.modules.pxe:PXEBoot"},{"line_number":72,"context_line":"    redfish \u003d ironic.drivers.modules.redfish.boot:RedfishVirtualMediaBoot"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"ironic.hardware.interfaces.console \u003d"},{"line_number":75,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeConsole"}],"source_content_type":"text/x-ttcn-cfg","patch_set":38,"id":"7faddb67_10dcbe44","line":72,"updated":"2019-07-26 08:36:09.000000000","message":"let\u0027s call it redfish-virtual-media in case we have something like redfish-uefi-http later (and for consistency with irmc and ilo)","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"},{"author":{"_account_id":26340,"name":"Ilya Etingof","email":"etingof@gmail.com","username":"etingof"},"change_message_id":"e89ec8fdeb55022332f3a437adc1408b7e891775","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    irmc-pxe \u003d ironic.drivers.modules.irmc.boot:IRMCPXEBoot"},{"line_number":70,"context_line":"    irmc-virtual-media \u003d ironic.drivers.modules.irmc.boot:IRMCVirtualMediaBoot"},{"line_number":71,"context_line":"    pxe \u003d ironic.drivers.modules.pxe:PXEBoot"},{"line_number":72,"context_line":"    redfish \u003d ironic.drivers.modules.redfish.boot:RedfishVirtualMediaBoot"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"ironic.hardware.interfaces.console \u003d"},{"line_number":75,"context_line":"    fake \u003d ironic.drivers.modules.fake:FakeConsole"}],"source_content_type":"text/x-ttcn-cfg","patch_set":38,"id":"7faddb67_6b64234a","line":72,"in_reply_to":"7faddb67_10dcbe44","updated":"2019-07-26 10:30:57.000000000","message":"Done","commit_id":"265ed69ad3441a613d2737facd96858655ed5aa8"}]}
