)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"28acf2d2b818ce103dbed00b17b44e6da22245d2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"``agent`` deploy interface do not call ``boot.prepare_instance``"},{"line_number":10,"context_line":"if image being provisioned is whole disk image. This commit fixes"},{"line_number":11,"context_line":"that issue."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #1713916"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ibd49d65f4512f2fa417794b66f4007d82f02e2ac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"df7087c5_cb67f1e8","line":12,"updated":"2018-03-15 02:44:01.000000000","message":"If this can fix a bug in unrescue[1], please mention it here and the release note.\n\n[1] https://bugs.launchpad.net/ironic/+bug/1750958","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"465621680c32b9adc81038032f6d12972454a699","unresolved":false,"context_lines":[{"line_number":9,"context_line":"``agent`` deploy interface do not call ``boot.prepare_instance``"},{"line_number":10,"context_line":"if image being provisioned is whole disk image. This commit fixes"},{"line_number":11,"context_line":"that issue."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #1713916"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ibd49d65f4512f2fa417794b66f4007d82f02e2ac"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"df7087c5_c65eb5e8","line":12,"in_reply_to":"df7087c5_cb67f1e8","updated":"2018-03-19 09:37:53.000000000","message":"Done","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"}],"ironic/drivers/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3fe66b891af3e94be1fce57699cd80897c28ccb8","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"        \"\"\""},{"line_number":1151,"context_line":"        pass"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"    def validate_boot(self, task):"},{"line_number":1154,"context_line":"        \"\"\"Validates the network interface for boot operation."},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"        Validates that the boot options configured for the node are appropriate"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_4866e053","line":1153,"updated":"2018-03-28 09:26:01.000000000","message":"nit: move after validate() for better grouping","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":1150,"context_line":"        \"\"\""},{"line_number":1151,"context_line":"        pass"},{"line_number":1152,"context_line":""},{"line_number":1153,"context_line":"    def validate_boot(self, task):"},{"line_number":1154,"context_line":"        \"\"\"Validates the network interface for boot operation."},{"line_number":1155,"context_line":""},{"line_number":1156,"context_line":"        Validates that the boot options configured for the node are appropriate"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_3690584a","line":1153,"in_reply_to":"bf659307_4866e053","updated":"2018-04-02 04:42:30.000000000","message":"Done","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"3fe66b891af3e94be1fce57699cd80897c28ccb8","unresolved":false,"context_lines":[{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"        :param task: A TaskManager instance."},{"line_number":1160,"context_line":"        :raises: InvalidParameterValue if an inappropriate boot option is"},{"line_number":1161,"context_line":"                 specified."},{"line_number":1162,"context_line":"        \"\"\""},{"line_number":1163,"context_line":"        pass"},{"line_number":1164,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_e85c947f","line":1161,"updated":"2018-03-28 09:26:01.000000000","message":"also MissingParameterValue potentially?","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":1158,"context_line":""},{"line_number":1159,"context_line":"        :param task: A TaskManager instance."},{"line_number":1160,"context_line":"        :raises: InvalidParameterValue if an inappropriate boot option is"},{"line_number":1161,"context_line":"                 specified."},{"line_number":1162,"context_line":"        \"\"\""},{"line_number":1163,"context_line":"        pass"},{"line_number":1164,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_d6823c00","line":1161,"in_reply_to":"bf659307_e85c947f","updated":"2018-04-02 04:42:30.000000000","message":"Done","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"030df463891a664547e556dafa510388ec9e3d74","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                 specified."},{"line_number":1021,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":1022,"context_line":"        \"\"\""},{"line_number":1023,"context_line":"        pass"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"    @abc.abstractmethod"},{"line_number":1026,"context_line":"    def port_changed(self, task, port_obj):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_41a1f645","line":1023,"updated":"2018-04-09 15:06:16.000000000","message":"I don\u0027t see a reason why this should be / needs to be a separate function, in fact I think it would be better if the network interfaces normal validate function was used to ensure that when the node is validated the network interface reports as not valid in scenarios it knows it doesn\u0027t support.\n\nIt will also allow us to fail early when the deploy request is made because we should validate relevant interfaces using their normal validate methods at that point.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"18c381ab06d3d1a3749e82519ddc8c587499f47f","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"                 specified."},{"line_number":1021,"context_line":"        :raises: MissingParameterValue, if some parameters are missing."},{"line_number":1022,"context_line":"        \"\"\""},{"line_number":1023,"context_line":"        pass"},{"line_number":1024,"context_line":""},{"line_number":1025,"context_line":"    @abc.abstractmethod"},{"line_number":1026,"context_line":"    def port_changed(self, task, port_obj):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_5c1791a4","line":1023,"in_reply_to":"bf659307_41a1f645","updated":"2018-04-09 21:28:29.000000000","message":"I don\u0027t think we presently eval network interface from nova\u0027s standpoint when the pre-deploy validate is called. There is value there and it would provide faster feedback.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"2069bfbc38a527074edcdf7b9972296549d0a162","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":286,"context_line":"            task.node.save()"},{"line_number":287,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":288,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":289,"context_line":"        if iwdi:"},{"line_number":290,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_cb1483eb","line":288,"updated":"2017-08-31 05:25:14.000000000","message":"We should move this line after l292 because we don\u0027t know what driver does in prepare_instance().","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"b68c5d5ec9023c85aaba18c7ddbeee71689d6866","unresolved":false,"context_lines":[{"line_number":285,"context_line":"            task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":286,"context_line":"            task.node.save()"},{"line_number":287,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":288,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":289,"context_line":"        if iwdi:"},{"line_number":290,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_cbdda3dd","line":288,"in_reply_to":"7f287b81_cb1483eb","updated":"2017-08-31 05:53:23.000000000","message":"Done","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f195a3cb3519f08ed9c228a089a8226c533e9dc","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        if iwdi:"},{"line_number":290,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # NOTE(TheJulia): If we deployed a whole disk image, we"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_21669f2b","line":292,"updated":"2017-08-30 13:05:13.000000000","message":"This may be breaking change for custom drivers who do not check iwdi inside prepare_instance_to_boot method","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"80a571d74352d1f9d72ab40ccbf946d7582ea61a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        if iwdi:"},{"line_number":290,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # NOTE(TheJulia): If we deployed a whole disk image, we"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_84cd6186","line":292,"in_reply_to":"7f287b81_21669f2b","updated":"2017-08-30 13:53:51.000000000","message":"the prepare_instance_to_boot function should (and ours already does) handle the check for whole disk image so I think we should be ok making this change. Also if we move this here, we should remove L289-290 as that should be (and in our case are) handled by the prepare_instance_to_boot/prepare_instance functions.","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5d48a9e6250b0eda050ff53c8a1cd4d138600c1b","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        if iwdi:"},{"line_number":290,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        # NOTE(TheJulia): If we deployed a whole disk image, we"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_cb8a4362","line":292,"in_reply_to":"7f287b81_84cd6186","updated":"2017-08-31 05:40:45.000000000","message":"Yes, makes sense to remove L289-L290. Done.","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"62eb40d9173e130bcb5db50d07e1b3a760b4ac35","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":289,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":290,"context_line":"        if iwdi:"},{"line_number":291,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_91046c16","side":"PARENT","line":291,"updated":"2017-08-31 07:00:27.000000000","message":"There is small probability that removing of l290-291 can breaks 3-party drivers with custom method prepare_instance_to_boot(). Let\u0027s vendor\u0027s people looks at this change at least.","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"f6d0f22c36f67b600d32bb231bd2163e34906e63","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":289,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":290,"context_line":"        if iwdi:"},{"line_number":291,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_8f78c08f","side":"PARENT","line":291,"in_reply_to":"7f287b81_17586c85","updated":"2017-08-31 10:54:58.000000000","message":"Had a discussion with @sambetts, he is of the opinion that we should avoid unnecessary calls to BMC. Also, the boot device setting should be done in the boot.prepare_instance().\n\nLeaving it as is, for now.","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a4411559d1bcb78c849ebfcc9029b125dcb55e99","unresolved":false,"context_lines":[{"line_number":288,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":289,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":290,"context_line":"        if iwdi:"},{"line_number":291,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":294,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_17586c85","side":"PARENT","line":291,"in_reply_to":"7f287b81_91046c16","updated":"2017-08-31 09:10:53.000000000","message":"I checked the in-tree drivers. They are safe. Would it be safer to retain that code (For 3rd party vendor drivers)? \n\nMay be better to retain it for backward compatibility. Calling the set_boot_device twice would not cause much harm. WDYT?","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6685aebbeb4303df06267149cbd80b87f324a99","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":277,"context_line":"        root_uuid \u003d self._get_uuid_from_result(task, \u0027root_uuid\u0027)"},{"line_number":278,"context_line":"        driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":279,"context_line":"        efi_sys_uuid \u003d None"},{"line_number":280,"context_line":"        if not iwdi:"},{"line_number":281,"context_line":"            if deploy_utils.get_boot_mode_for_deploy(node) \u003d\u003d \u0027uefi\u0027:"},{"line_number":282,"context_line":"                efi_sys_uuid \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_8a896a27","line":279,"range":{"start_line":278,"start_character":7,"end_line":279,"end_character":27},"updated":"2017-09-05 16:33:05.000000000","message":"this shouldn\u0027t matter with a whole disk image. I think the previous logic of isolating it out of the path is appropriate.... I see we\u0027re collecting UUID\u0027s though, can we get a note or explanation as to why they are necessary.","commit_id":"2db57f556788c8d165d7197554b476e9aa64695b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"0134107a5227f503274067a5bd616e197cb77322","unresolved":false,"context_lines":[{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":277,"context_line":"        root_uuid \u003d self._get_uuid_from_result(task, \u0027root_uuid\u0027)"},{"line_number":278,"context_line":"        driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":279,"context_line":"        efi_sys_uuid \u003d None"},{"line_number":280,"context_line":"        if not iwdi:"},{"line_number":281,"context_line":"            if deploy_utils.get_boot_mode_for_deploy(node) \u003d\u003d \u0027uefi\u0027:"},{"line_number":282,"context_line":"                efi_sys_uuid \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_dba7380b","line":279,"range":{"start_line":278,"start_character":7,"end_line":279,"end_character":27},"in_reply_to":"7f287b81_8a896a27","updated":"2017-09-06 06:19:58.000000000","message":"Done.","commit_id":"2db57f556788c8d165d7197554b476e9aa64695b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"e6685aebbeb4303df06267149cbd80b87f324a99","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        task.node.save()"},{"line_number":287,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":292,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_2aadd69a","line":289,"updated":"2017-09-05 16:33:05.000000000","message":"Two things.\n\nFirst, we should put another debug log entry in stating that we are preparing to execute post tasks.\n\nSecond, we\u0027re going to need in-line notes to explain in detail why this needs to be called.","commit_id":"2db57f556788c8d165d7197554b476e9aa64695b"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"0134107a5227f503274067a5bd616e197cb77322","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        task.node.save()"},{"line_number":287,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":292,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f287b81_1b3140a3","line":289,"in_reply_to":"7f287b81_2aadd69a","updated":"2017-09-06 06:19:58.000000000","message":"Done","commit_id":"2db57f556788c8d165d7197554b476e9aa64695b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4ff23b5d8e2b25f9f10a855c20ae2ee8bf17b43c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        # have a boot interface. So include a check for now. Remove this"},{"line_number":300,"context_line":"        # check once all in-tree drivers have a boot interface."},{"line_number":301,"context_line":"        if task.driver.boot and iwdi:"},{"line_number":302,"context_line":"            task.driver.boot.clean_up_ramdisk(task)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class AgentDeploy(AgentDeployMixin, base.DeployInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_f21409eb","side":"PARENT","line":302,"updated":"2017-11-29 18:16:51.000000000","message":"so why is this removed? comment says to only remove the if task.driver.boot check","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1c1f43ef0f4d288e74bb68f45f87aece0aa26e31","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        # have a boot interface. So include a check for now. Remove this"},{"line_number":300,"context_line":"        # check once all in-tree drivers have a boot interface."},{"line_number":301,"context_line":"        if task.driver.boot and iwdi:"},{"line_number":302,"context_line":"            task.driver.boot.clean_up_ramdisk(task)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class AgentDeploy(AgentDeployMixin, base.DeployInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_d3d8cb1f","side":"PARENT","line":302,"in_reply_to":"ff82abbf_5ebe18d5","updated":"2017-11-30 18:31:21.000000000","message":"gotcha yeah it makes sense.","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"bf64988c7885ad1552c96f842912d39760264c49","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        # have a boot interface. So include a check for now. Remove this"},{"line_number":300,"context_line":"        # check once all in-tree drivers have a boot interface."},{"line_number":301,"context_line":"        if task.driver.boot and iwdi:"},{"line_number":302,"context_line":"            task.driver.boot.clean_up_ramdisk(task)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class AgentDeploy(AgentDeployMixin, base.DeployInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_5ebe18d5","side":"PARENT","line":302,"in_reply_to":"ff82abbf_7e2d1c93","updated":"2017-11-30 02:36:18.000000000","message":"PXE boot interface would always perform PXE boot (using chain loading for whole disk image) unless one specifies boot_option as \u0027local\u0027 https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/pxe.py#L548-L610","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"f4da2c7e03798cf18c4fdd61515770e84246a00c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        # have a boot interface. So include a check for now. Remove this"},{"line_number":300,"context_line":"        # check once all in-tree drivers have a boot interface."},{"line_number":301,"context_line":"        if task.driver.boot and iwdi:"},{"line_number":302,"context_line":"            task.driver.boot.clean_up_ramdisk(task)"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"class AgentDeploy(AgentDeployMixin, base.DeployInterface):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_7e2d1c93","side":"PARENT","line":302,"in_reply_to":"ff82abbf_f21409eb","updated":"2017-11-30 02:15:17.000000000","message":"This is no more required. This was assuming that agent only provisions whole disk image and would perform disk boot. This is not true any more. The prepare_instance() call added at https://review.openstack.org/#/c/499050/7/ironic/drivers/modules/agent.py#L306 would take care of necessary clean-up if required.","commit_id":"9daabbbb05b0d35ec1b1bcdd5274987ad89e8145"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"185784cfe0e2d949e6790a1b298228ef3d7d93ce","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # bootloader for local boot."},{"line_number":286,"context_line":"        driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":287,"context_line":"        root_uuid \u003d self._get_uuid_from_result(task, \u0027root_uuid\u0027)"},{"line_number":288,"context_line":"        driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        efi_sys_uuid \u003d None"},{"line_number":291,"context_line":"        if not iwdi:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_a410df4f","line":288,"updated":"2017-12-18 16:52:08.000000000","message":"We can\u0027t operationally expect this to always be here... which might be problematic. There is also no guarantee that a newer ramdisk can return a root_uuid to be stored.","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"2158b41f2c694d6af6d2af9cbe33c63e04c251c1","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # bootloader for local boot."},{"line_number":286,"context_line":"        driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":287,"context_line":"        root_uuid \u003d self._get_uuid_from_result(task, \u0027root_uuid\u0027)"},{"line_number":288,"context_line":"        driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        efi_sys_uuid \u003d None"},{"line_number":291,"context_line":"        if not iwdi:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_50ebbe76","line":288,"in_reply_to":"df87a7cf_a410df4f","updated":"2017-12-19 14:53:54.000000000","message":"True. Will push a patch that takes care of old and new ramdisk.","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":10206,"name":"Madhuri Kumari","email":"madhuri.kumari@intel.com","username":"Madhuri"},"change_message_id":"fa721944c3b90c167a14223d1e6089e44c42916b","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                               \u0027efi_system_partition_uuid\u0027))"},{"line_number":296,"context_line":"        task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":297,"context_line":"        task.node.save()"},{"line_number":298,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # It is necessary to invoke prepare_instance() of the node\u0027s"},{"line_number":301,"context_line":"        # boot interface, so that the any necessary configurations like"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_f424eb0e","line":298,"updated":"2017-11-30 05:04:45.000000000","message":"This log should be after prepare_instance_to_boot(). Isn\u0027t it?","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"912924060c8dbb477f8a896d0768d9e9252bcdb6","unresolved":false,"context_lines":[{"line_number":295,"context_line":"                                               \u0027efi_system_partition_uuid\u0027))"},{"line_number":296,"context_line":"        task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":297,"context_line":"        task.node.save()"},{"line_number":298,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        # It is necessary to invoke prepare_instance() of the node\u0027s"},{"line_number":301,"context_line":"        # boot interface, so that the any necessary configurations like"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_f122b2ba","line":298,"in_reply_to":"ff82abbf_f424eb0e","updated":"2017-11-30 14:02:20.000000000","message":"No, at this point image writting is complete.","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"d3deb9b61acf0a171a3304db7543d6e6eb94d576","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        # be done on node during deploy stage can be performed."},{"line_number":304,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":305,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":306,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":309,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_625ed6ea","line":306,"updated":"2017-11-30 09:07:59.000000000","message":"Isn\u0027t it necessary to see if the image is whole disk image or not here[1]? boot option is not set for whole disk image.\n\n[1] https://github.com/openstack/ironic/blob/217b3f84ac96497d6ea5871a8ea824170368026c/ironic/drivers/modules/pxe.py#L568","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"185784cfe0e2d949e6790a1b298228ef3d7d93ce","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        # be done on node during deploy stage can be performed."},{"line_number":304,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":305,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":306,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":309,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df87a7cf_e947a076","line":306,"in_reply_to":"ff82abbf_0b910cf2","updated":"2017-12-18 16:52:08.000000000","message":"It is kind of prdicated on line 276 that the operator is attempting to force netboot, however if a whole disk image is in use, we _really_ shouldn\u0027t honor a default operator boot option to pxe. It makes it more difficult to manage the system, error prone, possibly out of date software, where as a whole disk image booting system should be considered self-managing.","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"912924060c8dbb477f8a896d0768d9e9252bcdb6","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        # be done on node during deploy stage can be performed."},{"line_number":304,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":305,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":306,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":309,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_7c9999ce","line":306,"in_reply_to":"ff82abbf_625ed6ea","updated":"2017-11-30 14:02:20.000000000","message":"Not required. If boot option is not set whole disk image would boot with PXE boot device using chainloading feature of the boot loader.\nhttps://github.com/openstack/ironic/blob/master/ironic/drivers/modules/pxe_config.template#L14-L16","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"fbbb2cf5ae81740de3dd03d481c98ca0ebc09a9f","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        # be done on node during deploy stage can be performed."},{"line_number":304,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":305,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":306,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":309,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff82abbf_0b910cf2","line":306,"in_reply_to":"ff82abbf_7c9999ce","updated":"2017-12-01 04:38:15.000000000","message":"I was thinking of a case where neutron network interface is used for multi-tenancy. In this case, PXE doesn\u0027t work because the node is not connected to a provision network after rebooting. However, it seems that the node will boot from the disk after PXE gets timed out. It looks similar to the current implementation to just clean up RAM disk without setting boot device to disk. Though it might be better to fix to change boot device, this is out of scope of this fix.","commit_id":"180be5f70fa1626a2be6a977d71859380a51d538"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        elif iwdi:"},{"line_number":310,"context_line":"            # IPA version less than 3.0.0-22 will not return root_uuid for"},{"line_number":311,"context_line":"            # whole disk image. Need to fall back to older behavior for the"},{"line_number":312,"context_line":"            # same."},{"line_number":313,"context_line":"            LOG.warning(\"The behavior of booting the whole disk image with \""},{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_9b61fc3c","line":312,"updated":"2017-12-20 20:56:59.000000000","message":"3.0.0-22 introduced a requirement for hexdump that may not always be available, which is why we can\u0027t expect to have a root_uuid value.","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3614b64386bc55ace0bc16f9aa95fe34a5659141","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        elif iwdi:"},{"line_number":310,"context_line":"            # IPA version less than 3.0.0-22 will not return root_uuid for"},{"line_number":311,"context_line":"            # whole disk image. Need to fall back to older behavior for the"},{"line_number":312,"context_line":"            # same."},{"line_number":313,"context_line":"            LOG.warning(\"The behavior of booting the whole disk image with \""},{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_a2bf525f","line":312,"in_reply_to":"bf8cb3f7_9b61fc3c","updated":"2018-03-14 15:06:36.000000000","message":"Done","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            # IPA version less than 3.0.0-22 will not return root_uuid for"},{"line_number":311,"context_line":"            # whole disk image. Need to fall back to older behavior for the"},{"line_number":312,"context_line":"            # same."},{"line_number":313,"context_line":"            LOG.warning(\"The behavior of booting the whole disk image with \""},{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""},{"line_number":316,"context_line":"                        \"deploy ramdisk based on Ironic Python Agent version \""},{"line_number":317,"context_line":"                        \"3.0.0-22 and beyond, the drivers with agent based \""},{"line_number":318,"context_line":"                        \"deploy interface performs `netboot` or `local` boot \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_fba7e84e","line":315,"range":{"start_line":313,"start_character":26,"end_line":315,"end_character":67},"updated":"2017-12-20 20:56:59.000000000","message":"Deprecation of the behavior breaks the established contract with the overall perception created by the driver. I\u0027m -2 to deprecating default boot to disk unless there is some other qualifier that we can utilize to know that the boot loader does not exist locally.\n\nAdditionally, the question comes to mind if we should be stating \"direct\"  instead of agent.","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3614b64386bc55ace0bc16f9aa95fe34a5659141","unresolved":false,"context_lines":[{"line_number":310,"context_line":"            # IPA version less than 3.0.0-22 will not return root_uuid for"},{"line_number":311,"context_line":"            # whole disk image. Need to fall back to older behavior for the"},{"line_number":312,"context_line":"            # same."},{"line_number":313,"context_line":"            LOG.warning(\"The behavior of booting the whole disk image with \""},{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""},{"line_number":316,"context_line":"                        \"deploy ramdisk based on Ironic Python Agent version \""},{"line_number":317,"context_line":"                        \"3.0.0-22 and beyond, the drivers with agent based \""},{"line_number":318,"context_line":"                        \"deploy interface performs `netboot` or `local` boot \""}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_e28f8aca","line":315,"range":{"start_line":313,"start_character":26,"end_line":315,"end_character":67},"in_reply_to":"bf8cb3f7_fba7e84e","updated":"2018-03-14 15:06:36.000000000","message":"Done","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""},{"line_number":316,"context_line":"                        \"deploy ramdisk based on Ironic Python Agent version \""},{"line_number":317,"context_line":"                        \"3.0.0-22 and beyond, the drivers with agent based \""},{"line_number":318,"context_line":"                        \"deploy interface performs `netboot` or `local` boot \""},{"line_number":319,"context_line":"                        \"for whole disk image based on value of boot option \""},{"line_number":320,"context_line":"                        \"setting. When you upgrade Ironic Python Agent in \""}],"source_content_type":"text/x-python","patch_set":8,"id":"bf8cb3f7_3b523069","line":317,"updated":"2017-12-20 20:56:59.000000000","message":"We should likely detail that this functionality requires the ``hexdump`` command in the ramdisk.","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3614b64386bc55ace0bc16f9aa95fe34a5659141","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                        \"disk as a default boot device is deprecated for the \""},{"line_number":315,"context_line":"                        \"drivers with agent based deploy interface. With \""},{"line_number":316,"context_line":"                        \"deploy ramdisk based on Ironic Python Agent version \""},{"line_number":317,"context_line":"                        \"3.0.0-22 and beyond, the drivers with agent based \""},{"line_number":318,"context_line":"                        \"deploy interface performs `netboot` or `local` boot \""},{"line_number":319,"context_line":"                        \"for whole disk image based on value of boot option \""},{"line_number":320,"context_line":"                        \"setting. When you upgrade Ironic Python Agent in \""}],"source_content_type":"text/x-python","patch_set":8,"id":"df7087c5_c2c4c6f7","line":317,"in_reply_to":"bf8cb3f7_3b523069","updated":"2018-03-14 15:06:36.000000000","message":"Done","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"28acf2d2b818ce103dbed00b17b44e6da22245d2","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                        \"capability in node\u0027s `properties[\u0027capabilities\u0027]`. \""},{"line_number":324,"context_line":"                        \"Also please note that this functionality requires \""},{"line_number":325,"context_line":"                        \"`hexdump` command in the ramdisk.\", node.uuid)"},{"line_number":326,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":329,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_409bc016","line":326,"updated":"2018-03-15 02:44:01.000000000","message":"Why don\u0027t we always call prepare_instance_to_boot and add \"boot_device \u003d boot_devices.PXE\" here[1]? This can fix the bug even if an old IPA is used. It would be also enough for virtual media boot interfaces because they don\u0027t use root_uuid for whole disk image[2][3]. By fixing the pxe boot interface, we can also fix a bug for unresuce[4].\n\n[1] https://github.com/openstack/ironic/blob/8f2e487b2bd9168822268fcca1ab43ff93084afe/ironic/drivers/modules/pxe.py#L639\n[2] https://github.com/openstack/ironic/blob/8f2e487b2bd9168822268fcca1ab43ff93084afe/ironic/drivers/modules/ilo/boot.py#L513\n[3] https://github.com/openstack/ironic/blob/8f2e487b2bd9168822268fcca1ab43ff93084afe/ironic/drivers/modules/irmc/boot.py#L989\n[4] https://bugs.launchpad.net/ironic/+bug/1750958","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"465621680c32b9adc81038032f6d12972454a699","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                        \"capability in node\u0027s `properties[\u0027capabilities\u0027]`. \""},{"line_number":324,"context_line":"                        \"Also please note that this functionality requires \""},{"line_number":325,"context_line":"                        \"`hexdump` command in the ramdisk.\", node.uuid)"},{"line_number":326,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":329,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_0115a03f","line":326,"in_reply_to":"df7087c5_409bc016","updated":"2018-03-19 09:37:53.000000000","message":"@Hironori: I think you mean setting boot_device to boot_devices.DISK in https://github.com/openstack/ironic/blob/8f2e487b2bd9168822268fcca1ab43ff93084afe/ironic/drivers/modules/pxe.py#L639","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"831070443ec19b8ac8d174e66b4c08197a04d8e4","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                        \"capability in node\u0027s `properties[\u0027capabilities\u0027]`. \""},{"line_number":324,"context_line":"                        \"Also please note that this functionality requires \""},{"line_number":325,"context_line":"                        \"`hexdump` command in the ramdisk.\", node.uuid)"},{"line_number":326,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":329,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_de5d5e79","line":326,"in_reply_to":"df7087c5_409bc016","updated":"2018-03-15 15:18:17.000000000","message":"I agree I\u0027d like to see this code always call prepare_instance_to_boot, and the boot interface\u0027s prepare_instance function should handle the case when the root_id is missing (which it mostly already does)","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4ea2ec2c3fe7904e6ff9dc311f5b6c2ad5a5816c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                        \"capability in node\u0027s `properties[\u0027capabilities\u0027]`. \""},{"line_number":324,"context_line":"                        \"Also please note that this functionality requires \""},{"line_number":325,"context_line":"                        \"`hexdump` command in the ramdisk.\", node.uuid)"},{"line_number":326,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":329,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_fe09f494","line":326,"in_reply_to":"df7087c5_d690acf0","updated":"2018-03-19 18:03:04.000000000","message":"Yes, I meant \u0027DISK\u0027. My bad.","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"465621680c32b9adc81038032f6d12972454a699","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                        \"capability in node\u0027s `properties[\u0027capabilities\u0027]`. \""},{"line_number":324,"context_line":"                        \"Also please note that this functionality requires \""},{"line_number":325,"context_line":"                        \"`hexdump` command in the ramdisk.\", node.uuid)"},{"line_number":326,"context_line":"            manager_utils.node_set_boot_device(task, \u0027disk\u0027, persistent\u003dTrue)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":329,"context_line":"        self.reboot_and_finish_deploy(task)"}],"source_content_type":"text/x-python","patch_set":9,"id":"df7087c5_d690acf0","line":326,"in_reply_to":"df7087c5_de5d5e79","updated":"2018-03-19 09:37:53.000000000","message":"Done","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"298ac5908ef7de18f7fe2f0372c9372e32760216","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":323,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":324,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":327,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_cbe643b1","line":325,"updated":"2018-03-23 02:19:19.000000000","message":"I wonder if we should keep setting boot device to DISK here when CONF.agent.manage_agent_boot is False. It seems that this deploy interface shouldn\u0027t depend on boot interface in this case.","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3fb902070715c3cec2499ec63bc6898b82f97d0f","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        LOG.debug(\u0027Executing driver specific tasks before booting up the \u0027"},{"line_number":323,"context_line":"                  \u0027instance for node %s\u0027, node.uuid)"},{"line_number":324,"context_line":"        self.prepare_instance_to_boot(task, root_uuid, efi_sys_uuid)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        LOG.debug(\u0027Rebooting node %s to instance\u0027, node.uuid)"},{"line_number":327,"context_line":"        self.reboot_and_finish_deploy(task)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_6fa93a7a","line":325,"in_reply_to":"df7087c5_cbe643b1","updated":"2018-03-23 13:59:55.000000000","message":"Makes sense, it would take care of the scenario wherein one is provisioning whole disk image with CONF.agent.manage_agent_boot\u003dFalse","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"030df463891a664547e556dafa510388ec9e3d74","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":290,"context_line":"            task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":291,"context_line":"            task.node.save()"},{"line_number":292,"context_line":"        elif iwdi and CONF.agent.manage_agent_boot:"},{"line_number":293,"context_line":"            # IPA version less than 3.1.0 will not return root_uuid for"},{"line_number":294,"context_line":"            # whole disk image. Also IPA version introduced a requirement"},{"line_number":295,"context_line":"            # for hexdump utility that may not be always available. Need to"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_2c407907","line":292,"range":{"start_line":292,"start_character":22,"end_line":292,"end_character":51},"updated":"2018-04-09 15:06:16.000000000","message":"This config option isn\u0027t defined anywhere and so will result in config group agent has no option manage_agent_boot if this is ever called.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"174d2465e7107327040f49403173357b939733ce","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":290,"context_line":"            task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":291,"context_line":"            task.node.save()"},{"line_number":292,"context_line":"        elif iwdi and CONF.agent.manage_agent_boot:"},{"line_number":293,"context_line":"            # IPA version less than 3.1.0 will not return root_uuid for"},{"line_number":294,"context_line":"            # whole disk image. Also IPA version introduced a requirement"},{"line_number":295,"context_line":"            # for hexdump utility that may not be always available. Need to"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_872abe7b","line":292,"range":{"start_line":292,"start_character":22,"end_line":292,"end_character":51},"in_reply_to":"bf659307_0c71f5de","updated":"2018-04-09 15:13:35.000000000","message":"ah I assumed it was a new option... this config option\u0027s purpose is being heavily overloaded by this change...","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"130ee8fc2f8cbe381b9bb551c0614cb50cfa1920","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            driver_internal_info[\u0027root_uuid_or_disk_id\u0027] \u003d root_uuid"},{"line_number":290,"context_line":"            task.node.driver_internal_info \u003d driver_internal_info"},{"line_number":291,"context_line":"            task.node.save()"},{"line_number":292,"context_line":"        elif iwdi and CONF.agent.manage_agent_boot:"},{"line_number":293,"context_line":"            # IPA version less than 3.1.0 will not return root_uuid for"},{"line_number":294,"context_line":"            # whole disk image. Also IPA version introduced a requirement"},{"line_number":295,"context_line":"            # for hexdump utility that may not be always available. Need to"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_0c71f5de","line":292,"range":{"start_line":292,"start_character":22,"end_line":292,"end_character":51},"in_reply_to":"bf659307_2c407907","updated":"2018-04-09 15:11:17.000000000","message":"It is: https://github.com/openstack/ironic/blob/master/ironic/conf/agent.py#L23","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"030df463891a664547e556dafa510388ec9e3d74","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                                               \u0027efi_system_partition_uuid\u0027))"},{"line_number":316,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        if CONF.agent.manage_agent_boot:"},{"line_number":319,"context_line":"            # It is necessary to invoke prepare_instance() of the node\u0027s"},{"line_number":320,"context_line":"            # boot interface, so that the any necessary configurations like"},{"line_number":321,"context_line":"            # setting of the boot mode (e.g. UEFI secure boot) which cannot"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_a106d21f","line":318,"range":{"start_line":318,"start_character":8,"end_line":318,"end_character":40},"updated":"2018-04-09 15:06:16.000000000","message":"Shouldn\u0027t this be \u0027if not\u0027 ?? because manage_agent_boot to me means that the agent deploy driver is managing the boot device.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"130ee8fc2f8cbe381b9bb551c0614cb50cfa1920","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                                               \u0027efi_system_partition_uuid\u0027))"},{"line_number":316,"context_line":"        LOG.info(\u0027Image successfully written to node %s\u0027, node.uuid)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        if CONF.agent.manage_agent_boot:"},{"line_number":319,"context_line":"            # It is necessary to invoke prepare_instance() of the node\u0027s"},{"line_number":320,"context_line":"            # boot interface, so that the any necessary configurations like"},{"line_number":321,"context_line":"            # setting of the boot mode (e.g. UEFI secure boot) which cannot"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_6c4bd186","line":318,"range":{"start_line":318,"start_character":8,"end_line":318,"end_character":40},"in_reply_to":"bf659307_a106d21f","updated":"2018-04-09 15:11:17.000000000","message":"As the help for the config states, this is about ironic managing the agent boot process.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"}],"ironic/drivers/modules/agent_base_vendor.py":[{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"80a571d74352d1f9d72ab40ccbf946d7582ea61a","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        node \u003d task.node"},{"line_number":618,"context_line":"        iwdi \u003d task.node.driver_internal_info.get(\u0027is_whole_disk_image\u0027)"},{"line_number":619,"context_line":"        if (not iwdi) and (deploy_utils.get_boot_option(node) \u003d\u003d \"local\"):"},{"line_number":620,"context_line":"            # Install the boot loader"},{"line_number":621,"context_line":"            self.configure_local_boot("},{"line_number":622,"context_line":"                task, root_uuid\u003droot_uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_c485a908","line":619,"updated":"2017-08-30 13:53:51.000000000","message":"We don\u0027t need to modify the check here, the configure_local_boot function handles \"is whole disk\" itself if boot option \u003d local, and if boot option !\u003d local then prepare instance will handle what to do.","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"5d48a9e6250b0eda050ff53c8a1cd4d138600c1b","unresolved":false,"context_lines":[{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        node \u003d task.node"},{"line_number":618,"context_line":"        iwdi \u003d task.node.driver_internal_info.get(\u0027is_whole_disk_image\u0027)"},{"line_number":619,"context_line":"        if (not iwdi) and (deploy_utils.get_boot_option(node) \u003d\u003d \"local\"):"},{"line_number":620,"context_line":"            # Install the boot loader"},{"line_number":621,"context_line":"            self.configure_local_boot("},{"line_number":622,"context_line":"                task, root_uuid\u003droot_uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f287b81_abeb7710","line":619,"in_reply_to":"7f287b81_c485a908","updated":"2017-08-31 05:40:45.000000000","message":"Done","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"}],"ironic/drivers/modules/network/neutron.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"298ac5908ef7de18f7fe2f0372c9372e32760216","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d False"},{"line_number":269,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":270,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":271,"context_line":"            LOG.warning(\"The node %(node)s is configured with boot option of \""},{"line_number":272,"context_line":"                        \"`netboot`. The whole disk image cannot be booted \""},{"line_number":273,"context_line":"                        \"using `netboot` with `neutron` network interface. \""},{"line_number":274,"context_line":"                        \"The boot option can be set using configuration \""}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_069c32be","line":271,"updated":"2018-03-23 02:19:19.000000000","message":"It might be better to log this message only once[1]. However, I\u0027m not sure if this message should be logged for each node.\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/common/utils.py#L505","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3fb902070715c3cec2499ec63bc6898b82f97d0f","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d False"},{"line_number":269,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":270,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":271,"context_line":"            LOG.warning(\"The node %(node)s is configured with boot option of \""},{"line_number":272,"context_line":"                        \"`netboot`. The whole disk image cannot be booted \""},{"line_number":273,"context_line":"                        \"using `netboot` with `neutron` network interface. \""},{"line_number":274,"context_line":"                        \"The boot option can be set using configuration \""}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_8f428eaa","line":271,"in_reply_to":"df7087c5_069c32be","updated":"2018-03-23 13:59:55.000000000","message":"Done","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"076418cb7b470d8a8a50d4a2ca0a4e11b1821dc7","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"warn_deprecated_netboot_for_wdi \u003d False"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class NeutronNetwork(common.NeutronVIFPortIDMixin,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_2eb3634f","line":31,"updated":"2018-03-28 20:07:16.000000000","message":"Shouldn\u0027t this be True?\n\nOr maybe not upon further reading of the code....","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"warn_deprecated_netboot_for_wdi \u003d False"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class NeutronNetwork(common.NeutronVIFPortIDMixin,"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_1692f44c","line":31,"in_reply_to":"bf659307_2eb3634f","updated":"2018-04-02 04:42:30.000000000","message":"Yes its \u0027False\u0027 to begin with and is set to \u0027True\u0027 when warning is logged.","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"efe4671cdc34e4d03377a07e16461d564644a569","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        global warn_deprecated_netboot_for_wdi"},{"line_number":272,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":273,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":274,"context_line":"            if not warn_deprecated_netboot_for_wdi:"},{"line_number":275,"context_line":"                warn_deprecated_netboot_for_wdi \u003d True"},{"line_number":276,"context_line":"                LOG.warning(\"The `local` booting of whole disk image is \""},{"line_number":277,"context_line":"                            \"deprecated when node is using `neutron` network \""}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_11066c21","line":274,"updated":"2018-04-03 07:08:17.000000000","message":"It might be better to leave a TODO comment here to remind us to remove this support in the future.","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a00d874cee0a12978ef0dabb533336eb1a5a94a9","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        global warn_deprecated_netboot_for_wdi"},{"line_number":272,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":273,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":274,"context_line":"            if not warn_deprecated_netboot_for_wdi:"},{"line_number":275,"context_line":"                warn_deprecated_netboot_for_wdi \u003d True"},{"line_number":276,"context_line":"                LOG.warning(\"The `local` booting of whole disk image is \""},{"line_number":277,"context_line":"                            \"deprecated when node is using `neutron` network \""}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_bd3f4e85","line":274,"in_reply_to":"bf659307_11066c21","updated":"2018-04-03 10:50:02.000000000","message":"Done","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5068f0acf99642ff669b2f107d4603f3321f9984","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":268,"context_line":"        driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d False"},{"line_number":269,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":270,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":271,"context_line":"            driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d True"},{"line_number":272,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":273,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf659307_82622909","line":270,"updated":"2018-04-03 10:29:07.000000000","message":"Let\u0027s leave a TODO to fail here once the default boot mode is local. I think we can skip deprecation, because in that case it will be an explicit operators choice to set it to \u0027netboot\u0027.","commit_id":"4a088fa6064b9cdb0c712fc6c8988a1134d11366"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a00d874cee0a12978ef0dabb533336eb1a5a94a9","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        driver_internal_info \u003d node.driver_internal_info"},{"line_number":268,"context_line":"        driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d False"},{"line_number":269,"context_line":"        if (node.driver_internal_info.get(\u0027is_whole_disk_image\u0027) and"},{"line_number":270,"context_line":"            deploy_utils.get_boot_option(node) \u003d\u003d \u0027netboot\u0027):"},{"line_number":271,"context_line":"            driver_internal_info[\u0027force_boot_from_disk\u0027] \u003d True"},{"line_number":272,"context_line":"        node.driver_internal_info \u003d driver_internal_info"},{"line_number":273,"context_line":"        node.save()"}],"source_content_type":"text/x-python","patch_set":15,"id":"bf659307_fd3946a3","line":270,"in_reply_to":"bf659307_82622909","updated":"2018-04-03 10:50:02.000000000","message":"Done","commit_id":"4a088fa6064b9cdb0c712fc6c8988a1134d11366"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"8b11ed7b6b562efe4fb3cfd4cb4cb8980285c3c6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                           \u0027image when node is using \"neutron\" network \u0027"},{"line_number":68,"context_line":"                           \u0027interface and is configured with \"netboot\" boot \u0027"},{"line_number":69,"context_line":"                           \u0027option.\u0027) % node.uuid)"},{"line_number":70,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":73,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_e8d05b53","line":70,"updated":"2018-04-17 06:18:22.000000000","message":"We should raise this exception only if a provisioning state is DEPLOYING till local boot gets default. This causes an unexpected error because this validation is called in other cases than deploying.\n\nRegarding a gate error, \u0027driver_internal_info.is_whole_disk_image\u0027 is not removed when a node is unprovisioned. When a node is provisioned from nova after the node is once undeployed[1][2], attaching VIF fails at this network interface validation[3] due to the remaining parameter. \n\n[1] http://logs.openstack.org/50/499050/18/check/ironic-grenade-dsvm-multinode-multitenant/0ce06d5/logs/screen-n-cpu.txt.gz?#_Apr_16_23_27_14_253407\n[2] http://logs.openstack.org/50/499050/18/check/ironic-grenade-dsvm-multinode-multitenant/0ce06d5/logs/screen-n-cpu.txt.gz?#_Apr_16_23_27_43_606695\n[3] http://logs.openstack.org/50/499050/18/check/ironic-grenade-dsvm-multinode-multitenant/0ce06d5/logs/screen-n-cpu.txt.gz?#_Apr_16_23_50_32_577005","commit_id":"de2d0533c1fafc8673fd2e1009045ca02249f237"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"0c3b66c8948882eed8f50b6bb918c187567e8fd0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                           \u0027image when node is using \"neutron\" network \u0027"},{"line_number":68,"context_line":"                           \u0027interface and is configured with \"netboot\" boot \u0027"},{"line_number":69,"context_line":"                           \u0027option.\u0027) % node.uuid)"},{"line_number":70,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":73,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_fcc01c53","line":70,"in_reply_to":"9f6a8fd7_281f336d","updated":"2018-04-17 07:02:26.000000000","message":"I think adding the state check would make it more explicit as the boot_options are applicable only during deploy.","commit_id":"de2d0533c1fafc8673fd2e1009045ca02249f237"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"9f4c8d8ab8fd4737c144751dbfe7ac58cb5fa54e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                           \u0027image when node is using \"neutron\" network \u0027"},{"line_number":68,"context_line":"                           \u0027interface and is configured with \"netboot\" boot \u0027"},{"line_number":69,"context_line":"                           \u0027option.\u0027) % node.uuid)"},{"line_number":70,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":73,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_281f336d","line":70,"in_reply_to":"9f6a8fd7_e8d05b53","updated":"2018-04-17 06:39:14.000000000","message":"Alternatively, we can land a fix to remove is_whole_disk_image at tearing down[4] prior to this fix.\n\n[4] https://review.openstack.org/#/c/561289/","commit_id":"de2d0533c1fafc8673fd2e1009045ca02249f237"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"0c3b66c8948882eed8f50b6bb918c187567e8fd0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                           \u0027image when node is using \"neutron\" network \u0027"},{"line_number":68,"context_line":"                           \u0027interface and is configured with \"netboot\" boot \u0027"},{"line_number":69,"context_line":"                           \u0027option.\u0027) % node.uuid)"},{"line_number":70,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":73,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":18,"id":"9f6a8fd7_1c1b901b","line":70,"in_reply_to":"9f6a8fd7_e8d05b53","updated":"2018-04-17 07:02:26.000000000","message":"Yes. The stale data in driver_internal_info  is causing the failure.","commit_id":"de2d0533c1fafc8673fd2e1009045ca02249f237"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2386f0b379d3992129397a68ca81dfb680cbfd9a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                           \u0027whole disk image when node is using \"neutron\" \u0027"},{"line_number":70,"context_line":"                           \u0027network and is configured with \"netboot\" boot \u0027"},{"line_number":71,"context_line":"                           \u0027option.\u0027) % node.uuid)"},{"line_number":72,"context_line":"            raise exception.InvalidParameterValue(error_msg)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def add_provisioning_network(self, task):"},{"line_number":75,"context_line":"        \"\"\"Add the provisioning network to a node."}],"source_content_type":"text/x-python","patch_set":20,"id":"9f6a8fd7_8be08bce","line":72,"updated":"2018-04-18 16:11:16.000000000","message":"nit: I feel like we need a knob around this to allow this to not be a failure as depending on network architecture, it could actually be possible to do so. We\u0027re just leaning towards caution in suggesting that it will not since in most deployments it is unlikely to as there may be no routed access to the conductor still.","commit_id":"4fa1075b95e2e5262f98395275590dcd3833ab74"}],"ironic/drivers/modules/pxe.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"298ac5908ef7de18f7fe2f0372c9372e32760216","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        boot_device \u003d None"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # NOTE(stendulker) Ideally network.validate_boot() should be called"},{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_8ba36b9e","line":592,"updated":"2018-03-23 02:19:19.000000000","message":"Can we split validate_boot to validation and setting the flag? Then, we can call the validation in boot.validate() for early detection.","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"6259a5cff03c5053ad6b1aca06e930ff5fe97838","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        boot_device \u003d None"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # NOTE(stendulker) Ideally network.validate_boot() should be called"},{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bf659307_7698b369","line":592,"in_reply_to":"df7087c5_2fc82220","updated":"2018-03-26 02:05:47.000000000","message":"It might not be necessary to store this flag into database because this flag is used only in this method. My idea is get network.validate_boot to just raise an exception when misconfiguration is detected. Then, boot.validate would call it and ignore this exception during the deprecation window and, prepare_instance() would also call validate_boot and use \u0027force_boot_from_disk\u0027 as a local flag.\n\nHowever, I don\u0027t quite insist it.","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3fb902070715c3cec2499ec63bc6898b82f97d0f","unresolved":false,"context_lines":[{"line_number":589,"context_line":"        boot_device \u003d None"},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        # NOTE(stendulker) Ideally network.validate_boot() should be called"},{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df7087c5_2fc82220","line":592,"in_reply_to":"df7087c5_8ba36b9e","updated":"2018-03-23 13:59:55.000000000","message":"I thought about it. If we split, we would need an additional method in NetworkInterface to set the flag. Since this setting of flag  would remain for this release, I thought, may be we could live with the validate_boot() being called here. Once we remove the code of setting the flag we can move this method to boot.validate(). WDYT?","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"076418cb7b470d8a8a50d4a2ca0a4e11b1821dc7","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        # NOTE(stendulker) Ideally network.validate_boot() should be called"},{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_8e32af5d","line":594,"updated":"2018-03-28 20:07:16.000000000","message":"nice!","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"efe4671cdc34e4d03377a07e16461d564644a569","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_fc0aafcf","line":596,"updated":"2018-04-03 07:08:17.000000000","message":"Could we unset this parameter in this method or anywhere? This parameter will be no longer necessary after the deprecation period passes. It would be better that this flag won\u0027t remain in nodes then.\n\nIMHO, I wonder if we can use a local flag in this method instead of driver_internal_info.","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"a00d874cee0a12978ef0dabb533336eb1a5a94a9","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_023a9997","line":596,"in_reply_to":"bf659307_fc0aafcf","updated":"2018-04-03 10:50:02.000000000","message":"Done","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"030df463891a664547e556dafa510388ec9e3d74","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_4c5e0d77","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":47},"updated":"2018-04-09 15:06:16.000000000","message":"Personally I really dislike this extra function, I think we should move the logic to .network.validate(), and network.validate should be called by deploy.prepare() if it fails we should detect the failure try override the boot device in the instance_info to disk with a deprecation warning, then try to network.validate again, and if it passes move on, if it fails fail the deployment because it was obviously something else that was failing the validation.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"18c381ab06d3d1a3749e82519ddc8c587499f47f","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_dc5ac14e","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":47},"in_reply_to":"bf659307_4c5e0d77","updated":"2018-04-09 21:28:29.000000000","message":"I too dislike the extra function call and agree .network.validate() should be state aware to attempt to properly fail if the requested scenario is unsupported.\n\nI think though, this is not always deploy when network needs to be validated. Intermediate states require network validation capabilities. It seems like that is the very reason we started to head down the path of breaking it apart since interface level state aware validation logic starts to become complex and unweidly.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1595969036ac5f31ba9a4d42d4d4fe24ede334b0","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_18a0c8f3","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":47},"in_reply_to":"bf659307_72763109","updated":"2018-04-13 16:27:14.000000000","message":"And that point in time MAY also include a specific state. That is the only thing I\u0027m trying to point out there.\n\nI simply do not care what avenue we take, as long as we get there efficiently. Ideally, we update network.validate() and move on.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"fa77c6b181352267f3a43b9c89035713ed5cc950","unresolved":false,"context_lines":[{"line_number":592,"context_line":"        # from boot.validate(), but we set a flag in node\u0027s"},{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_72763109","line":595,"range":{"start_line":595,"start_character":8,"end_line":595,"end_character":47},"in_reply_to":"bf659307_dc5ac14e","updated":"2018-04-10 09:43:15.000000000","message":"I don\u0027t think the validate function needs to be state aware it just needs to validate whether it is able to do its job correctly at the point in time when validate is called.\n\nIf validate is called and there is no instance_info boot device then we look to what ever the capabilities boot device is and validate against that, and lastly fall back to the config file default, this ensures that we catch invalid node  configurations earlier in the process, because network.interface.validate will fail before the node even makes it to available if its configured wrong.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"030df463891a664547e556dafa510388ec9e3d74","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_cc98dd76","line":596,"updated":"2018-04-09 15:06:16.000000000","message":"I\u0027m pretty strongly against this flag, if we set anything it should be that we overwrite the instance_info boot device so that the boot interface isn\u0027t aware of what the capabilites of the network interface are.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1595969036ac5f31ba9a4d42d4d4fe24ede334b0","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_58b16043","line":596,"in_reply_to":"bf659307_52668d2b","updated":"2018-04-13 16:27:14.000000000","message":"Is there actually a user use case for an override knob when it can be explicitly set already? I don\u0027t see one.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"18c381ab06d3d1a3749e82519ddc8c587499f47f","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_fcd0e5cb","line":596,"in_reply_to":"bf659307_cc98dd76","updated":"2018-04-09 21:28:29.000000000","message":"I\u0027m -1 to overriding instance_info as it is the declaration by the user of what they desire.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"fa77c6b181352267f3a43b9c89035713ed5cc950","unresolved":false,"context_lines":[{"line_number":593,"context_line":"        # driver_internal_info in this method that necessiates that this"},{"line_number":594,"context_line":"        # method be called when we are holding exclusive lock."},{"line_number":595,"context_line":"        task.driver.network.validate_boot(task)"},{"line_number":596,"context_line":"        fbfd \u003d task.node.driver_internal_info.get(\u0027force_boot_from_disk\u0027)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"        if deploy_utils.is_iscsi_boot(task):"},{"line_number":599,"context_line":"            dhcp_opts \u003d pxe_utils.dhcp_options_for_instance(task)"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_52668d2b","line":596,"in_reply_to":"bf659307_fcd0e5cb","updated":"2018-04-10 09:43:15.000000000","message":"I\u0027m only suggesting adding it to instance_info if its not in there already.\n\nIf its already in instance_info then we should hard fail if its incompatible with our node, if its unspecified by the user then I think its fine to make it explict in the instance_info ourselves.\n\nThat also gives a user a place to find out how their instance is booting.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"3bfd593e6d4a99785850ac322196f4844a186031","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                iscsi_boot\u003dTrue)"},{"line_number":616,"context_line":"            boot_device \u003d boot_devices.PXE"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        elif fbfd:"},{"line_number":619,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":620,"context_line":"            boot_device \u003d boot_devices.DISK"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_7e8a451b","line":618,"updated":"2018-04-12 01:46:05.000000000","message":"For not adding a new method or a new flag, could we change this to \"elif iwdi:\"? It will work if there is no side effect to a node with iscsi deploy and netboot, which is eventually booted from a disk with PXE.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1595969036ac5f31ba9a4d42d4d4fe24ede334b0","unresolved":false,"context_lines":[{"line_number":615,"context_line":"                iscsi_boot\u003dTrue)"},{"line_number":616,"context_line":"            boot_device \u003d boot_devices.PXE"},{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        elif fbfd:"},{"line_number":619,"context_line":"            pxe_utils.clean_up_pxe_config(task)"},{"line_number":620,"context_line":"            boot_device \u003d boot_devices.DISK"},{"line_number":621,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"bf659307_38526cdf","line":618,"in_reply_to":"bf659307_7e8a451b","updated":"2018-04-13 16:27:14.000000000","message":"That seems reasonable, and that seems like what we were doing. I also feel like we may have come full circle in doing so. We already do that locally based upon what we are supplied and determine  (which I think does use boot_option as well, but I don\u0027t remember exactly on line 644\n\nIf we\u0027re going to make logic changes, we should just use the same flag otherwise we\u0027re going to make this even more difficult to change/update as time goes on.","commit_id":"3f2034d680df0f539ea91c620dd83ff41d117a98"}],"ironic/tests/unit/drivers/modules/network/test_neutron.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":"076418cb7b470d8a8a50d4a2ca0a4e11b1821dc7","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            self.interface.validate_boot(task)"},{"line_number":712,"context_line":"            driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":713,"context_line":"            self.assertTrue(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":714,"context_line":"            self.assertTrue(mock_log.called)"},{"line_number":715,"context_line":"            self.assertIn(\"`local` booting of whole disk image is deprecated\","},{"line_number":716,"context_line":"                          mock_log.call_args[0][0])"},{"line_number":717,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_ced3c75f","line":714,"updated":"2018-03-28 20:07:16.000000000","message":"This is where the unit tests are failing. I\u0027ve re-produced this on 27 and 35.","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":711,"context_line":"            self.interface.validate_boot(task)"},{"line_number":712,"context_line":"            driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":713,"context_line":"            self.assertTrue(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":714,"context_line":"            self.assertTrue(mock_log.called)"},{"line_number":715,"context_line":"            self.assertIn(\"`local` booting of whole disk image is deprecated\","},{"line_number":716,"context_line":"                          mock_log.call_args[0][0])"},{"line_number":717,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_96ce0461","line":714,"in_reply_to":"bf659307_ced3c75f","updated":"2018-04-02 04:42:30.000000000","message":"Done","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"076418cb7b470d8a8a50d4a2ca0a4e11b1821dc7","unresolved":false,"context_lines":[{"line_number":698,"context_line":"            self.assertFalse(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":699,"context_line":"            self.assertFalse(mock_log.called)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":702,"context_line":"    def test_validate_boot_iwdi_and_netboot(self, mock_log):"},{"line_number":703,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":704,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d True"},{"line_number":705,"context_line":"        self.node.driver_internal_info \u003d driver_internal_info"},{"line_number":706,"context_line":"        i_info \u003d self.node.instance_info"},{"line_number":707,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027netboot\u0027}})"},{"line_number":708,"context_line":"        self.node.instance_info \u003d i_info"},{"line_number":709,"context_line":"        self.node.save()"},{"line_number":710,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":711,"context_line":"            self.interface.validate_boot(task)"},{"line_number":712,"context_line":"            driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":713,"context_line":"            self.assertTrue(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":714,"context_line":"            self.assertTrue(mock_log.called)"},{"line_number":715,"context_line":"            self.assertIn(\"`local` booting of whole disk image is deprecated\","},{"line_number":716,"context_line":"                          mock_log.call_args[0][0])"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":719,"context_line":"    def test_validate_boot_iwdi_and_local(self, mock_log):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_4ed25702","line":716,"range":{"start_line":701,"start_character":0,"end_line":716,"end_character":51},"updated":"2018-03-28 20:07:16.000000000","message":"Looking at this entire test scenario of attempting to validate that we only logged a total of one time from with-in the same setup and class invocation... I don\u0027t think this test is going to work as expected without being in a separate class and setup so a different runner executes it.\n\nAlternatively, you could just override it directly for the test.","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":698,"context_line":"            self.assertFalse(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":699,"context_line":"            self.assertFalse(mock_log.called)"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":702,"context_line":"    def test_validate_boot_iwdi_and_netboot(self, mock_log):"},{"line_number":703,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":704,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d True"},{"line_number":705,"context_line":"        self.node.driver_internal_info \u003d driver_internal_info"},{"line_number":706,"context_line":"        i_info \u003d self.node.instance_info"},{"line_number":707,"context_line":"        i_info.update({\u0027capabilities\u0027: {\u0027boot_option\u0027: \u0027netboot\u0027}})"},{"line_number":708,"context_line":"        self.node.instance_info \u003d i_info"},{"line_number":709,"context_line":"        self.node.save()"},{"line_number":710,"context_line":"        with task_manager.acquire(self.context, self.node.id) as task:"},{"line_number":711,"context_line":"            self.interface.validate_boot(task)"},{"line_number":712,"context_line":"            driver_internal_info \u003d task.node.driver_internal_info"},{"line_number":713,"context_line":"            self.assertTrue(driver_internal_info[\u0027force_boot_from_disk\u0027])"},{"line_number":714,"context_line":"            self.assertTrue(mock_log.called)"},{"line_number":715,"context_line":"            self.assertIn(\"`local` booting of whole disk image is deprecated\","},{"line_number":716,"context_line":"                          mock_log.call_args[0][0])"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":719,"context_line":"    def test_validate_boot_iwdi_and_local(self, mock_log):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_b6c9c859","line":716,"range":{"start_line":701,"start_character":0,"end_line":716,"end_character":51},"in_reply_to":"bf659307_4ed25702","updated":"2018-04-02 04:42:30.000000000","message":"Done","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"29aa91943e95a8a8620136b5c81f2799cfe9d310","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            self.assertFalse(mock_log.called)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":734,"context_line":"    def test_warn_deprecated_netboot_for_wdi(self, mock_log):"},{"line_number":735,"context_line":"        neutron.warn_deprecated_netboot_for_wdi \u003d False"},{"line_number":736,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":737,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_3e6dadcb","line":734,"updated":"2018-03-30 02:54:07.000000000","message":"Alternatively, we can merge this test with test_validate_boot_iwdi_and_netboot() to avoid the race for the warn_deprecated_netboot_for_wdi. This allows only one test to set the flag to True.","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"626213972ad53c3800a05e999171a0ca6d68c736","unresolved":false,"context_lines":[{"line_number":731,"context_line":"            self.assertFalse(mock_log.called)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":734,"context_line":"    def test_warn_deprecated_netboot_for_wdi(self, mock_log):"},{"line_number":735,"context_line":"        neutron.warn_deprecated_netboot_for_wdi \u003d False"},{"line_number":736,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":737,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d True"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf659307_f6b3c0e7","line":734,"in_reply_to":"bf659307_3e6dadcb","updated":"2018-04-02 04:42:30.000000000","message":"Yes. This covers the scenario tested by test_validate_boot_iwdi_and_netboot.","commit_id":"fe0c6722c2fdece240873b9cfd5c2c431cc15de5"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f6544f0f7cd2f2da96c8b0bb60c948e788d3ecf5","unresolved":false,"context_lines":[{"line_number":686,"context_line":"             mock.call(pg.extra[\u0027vif_port_id\u0027], call2_body)]"},{"line_number":687,"context_line":"        )"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":690,"context_line":"    def test_validate_boot_iwdi_false(self, mock_log):"},{"line_number":691,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":692,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_88ad23ec","line":689,"updated":"2018-04-06 01:46:36.000000000","message":"This is no longer necessary.","commit_id":"b31dbc54192a47eb66142990551883721384624c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3f3215e5114c9a2a320e7b3eddd7f405cc8b8770","unresolved":false,"context_lines":[{"line_number":686,"context_line":"             mock.call(pg.extra[\u0027vif_port_id\u0027], call2_body)]"},{"line_number":687,"context_line":"        )"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"    @mock.patch.object(neutron.LOG, \u0027warning\u0027, autospec\u003dTrue)"},{"line_number":690,"context_line":"    def test_validate_boot_iwdi_false(self, mock_log):"},{"line_number":691,"context_line":"        driver_internal_info \u003d self.node.driver_internal_info"},{"line_number":692,"context_line":"        driver_internal_info[\u0027is_whole_disk_image\u0027] \u003d False"}],"source_content_type":"text/x-python","patch_set":16,"id":"bf659307_e9170151","line":689,"in_reply_to":"bf659307_88ad23ec","updated":"2018-04-06 05:51:17.000000000","message":"Oops.. Done","commit_id":"b31dbc54192a47eb66142990551883721384624c"}],"releasenotes/notes/fix-prepare-instance-for-agent-interface-56753bdf04dd581f.yaml":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f195a3cb3519f08ed9c228a089a8226c533e9dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes ``agent`` deploy interface to invoke ``boot.prepare_instance``"},{"line_number":5,"context_line":"    irrespective of image type being provisioned. It was calling"},{"line_number":6,"context_line":"    ``boot.prepare_instance`` only if the image being provisioned is a"},{"line_number":7,"context_line":"    partition image. See `bug 1713916"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"7f287b81_41de4bda","line":4,"updated":"2017-08-30 13:05:13.000000000","message":"This sounds odd to me that we call one interfaces methods from another.\n\nWe need to recheck approach proposed here https://review.openstack.org/#/c/468000/","commit_id":"6c2bf3b1416ddf6c2af64d8d4df0c692c1b1c3ca"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    The behavior of booting the whole disk image with disk as a default"},{"line_number":12,"context_line":"    boot device is deprecated for drivers using agent based deploy"},{"line_number":13,"context_line":"    interface. With deploy ramdisk based on Ironic Python Agent version"},{"line_number":14,"context_line":"    ``3.0.0-22`` and beyond, the drivers with agent based deploy"},{"line_number":15,"context_line":"    interface performs ``netboot`` or ``local`` boot for whole disk"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bf8cb3f7_9b301c0a","line":12,"range":{"start_line":12,"start_character":48,"end_line":12,"end_character":53},"updated":"2017-12-20 20:56:59.000000000","message":"s/agent/direct/ ?","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3614b64386bc55ace0bc16f9aa95fe34a5659141","unresolved":false,"context_lines":[{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    The behavior of booting the whole disk image with disk as a default"},{"line_number":12,"context_line":"    boot device is deprecated for drivers using agent based deploy"},{"line_number":13,"context_line":"    interface. With deploy ramdisk based on Ironic Python Agent version"},{"line_number":14,"context_line":"    ``3.0.0-22`` and beyond, the drivers with agent based deploy"},{"line_number":15,"context_line":"    interface performs ``netboot`` or ``local`` boot for whole disk"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"df7087c5_62437a6d","line":12,"range":{"start_line":12,"start_character":48,"end_line":12,"end_character":53},"in_reply_to":"bf8cb3f7_9b301c0a","updated":"2018-03-14 15:06:36.000000000","message":"Done","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    The behavior of booting the whole disk image with disk as a default"},{"line_number":12,"context_line":"    boot device is deprecated for drivers using agent based deploy"},{"line_number":13,"context_line":"    interface. With deploy ramdisk based on Ironic Python Agent version"},{"line_number":14,"context_line":"    ``3.0.0-22`` and beyond, the drivers with agent based deploy"},{"line_number":15,"context_line":"    interface performs ``netboot`` or ``local`` boot for whole disk"},{"line_number":16,"context_line":"    image based on boot option setting. One can configure the"},{"line_number":17,"context_line":"    ``boot_option`` in the node\u0027s ``properties[\u0027capabilities\u0027]`` or"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bf8cb3f7_fb2a888e","line":14,"range":{"start_line":14,"start_character":16,"end_line":14,"end_character":28},"updated":"2017-12-20 20:56:59.000000000","message":"only if hexdump is present in the image...","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3614b64386bc55ace0bc16f9aa95fe34a5659141","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    The behavior of booting the whole disk image with disk as a default"},{"line_number":12,"context_line":"    boot device is deprecated for drivers using agent based deploy"},{"line_number":13,"context_line":"    interface. With deploy ramdisk based on Ironic Python Agent version"},{"line_number":14,"context_line":"    ``3.0.0-22`` and beyond, the drivers with agent based deploy"},{"line_number":15,"context_line":"    interface performs ``netboot`` or ``local`` boot for whole disk"},{"line_number":16,"context_line":"    image based on boot option setting. One can configure the"},{"line_number":17,"context_line":"    ``boot_option`` in the node\u0027s ``properties[\u0027capabilities\u0027]`` or"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"df7087c5_6de7ebad","line":14,"range":{"start_line":14,"start_character":16,"end_line":14,"end_character":28},"in_reply_to":"bf8cb3f7_fb2a888e","updated":"2018-03-14 15:06:36.000000000","message":"Done","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c36b54ad44233d2269e97be192ba8679fb101896","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    interface performs ``netboot`` or ``local`` boot for whole disk"},{"line_number":16,"context_line":"    image based on boot option setting. One can configure the"},{"line_number":17,"context_line":"    ``boot_option`` in the node\u0027s ``properties[\u0027capabilities\u0027]`` or"},{"line_number":18,"context_line":"    set the configuration parameter ``[deploy]/default_boot_option``."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"bf8cb3f7_3b21d0b5","line":18,"updated":"2017-12-20 20:56:59.000000000","message":"I\u0027m basically -2 to deprecating the behavior as we\u0027ve established that as the standard behavior for whole disk images.","commit_id":"cbcfa22c898781aa88f472c7aa110ac93603a064"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"28acf2d2b818ce103dbed00b17b44e6da22245d2","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ for details."},{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.0.0-22"},{"line_number":12,"context_line":"    and beyond, the drivers using ``direct`` deploy interface performs"},{"line_number":13,"context_line":"    ``netboot`` or ``local`` boot for whole disk image based on value"},{"line_number":14,"context_line":"    of boot option setting. When you upgrade Ironic Python Agent in your"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"df7087c5_c074b0d1","line":11,"range":{"start_line":11,"start_character":65,"end_line":11,"end_character":73},"updated":"2018-03-15 02:44:01.000000000","message":"3.1.0 is visible to users.","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"465621680c32b9adc81038032f6d12972454a699","unresolved":false,"context_lines":[{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ for details."},{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.0.0-22"},{"line_number":12,"context_line":"    and beyond, the drivers using ``direct`` deploy interface performs"},{"line_number":13,"context_line":"    ``netboot`` or ``local`` boot for whole disk image based on value"},{"line_number":14,"context_line":"    of boot option setting. When you upgrade Ironic Python Agent in your"}],"source_content_type":"text/x-yaml","patch_set":9,"id":"df7087c5_36ffa835","line":11,"range":{"start_line":11,"start_character":65,"end_line":11,"end_character":73},"in_reply_to":"df7087c5_c074b0d1","updated":"2018-03-19 09:37:53.000000000","message":"Done","commit_id":"93a39920f7d3f71e1c33399da4588f4a20e1779e"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"298ac5908ef7de18f7fe2f0372c9372e32760216","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    irrespective of image type being provisioned. It was calling"},{"line_number":6,"context_line":"    ``boot.prepare_instance`` only if the image being provisioned is a"},{"line_number":7,"context_line":"    partition image. See `bug 1713916"},{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ for details."},{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.1.0"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"df7087c5_c60b9ad2","line":8,"updated":"2018-03-23 02:19:19.000000000","message":"Could you please also mention bug 1750958?","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3fb902070715c3cec2499ec63bc6898b82f97d0f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    irrespective of image type being provisioned. It was calling"},{"line_number":6,"context_line":"    ``boot.prepare_instance`` only if the image being provisioned is a"},{"line_number":7,"context_line":"    partition image. See `bug 1713916"},{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ for details."},{"line_number":9,"context_line":"upgrade:"},{"line_number":10,"context_line":"  - |"},{"line_number":11,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.1.0"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"df7087c5_459bf716","line":8,"in_reply_to":"df7087c5_c60b9ad2","updated":"2018-03-23 13:59:55.000000000","message":"Done","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"298ac5908ef7de18f7fe2f0372c9372e32760216","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"df7087c5_6b8b7767","line":25,"updated":"2018-03-23 02:19:19.000000000","message":"\u0027deprecations\u0027 section might be necessary regarding netboot and network interface.","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3fb902070715c3cec2499ec63bc6898b82f97d0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"df7087c5_e5c56a8f","line":25,"in_reply_to":"df7087c5_6b8b7767","updated":"2018-03-23 13:59:55.000000000","message":"Done","commit_id":"2940839673a23dd64838d1caaa242fd9f820a4fc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c7bfc39d2b14efa9f1f6b8ae0bbaba3a0a0a78fc","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    validate that the network interface can support boot options"},{"line_number":25,"context_line":"    requested for instance image."},{"line_number":26,"context_line":"deprecations:"},{"line_number":27,"context_line":"  - The ``local`` booting of whole disk image is deprecated when node is"},{"line_number":28,"context_line":"    using ``neutron`` network interface and is configured with ``netboot``"},{"line_number":29,"context_line":"    boot option. It will not be supported in future release. The boot"},{"line_number":30,"context_line":"    option can be set using configuration ``[deploy]/default_boot_option``"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bf659307_d70b1327","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":16},"updated":"2018-04-02 14:25:47.000000000","message":"This should be network booting.","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"88656be686986875c36e35a3b12c82d159802bcf","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    validate that the network interface can support boot options"},{"line_number":25,"context_line":"    requested for instance image."},{"line_number":26,"context_line":"deprecations:"},{"line_number":27,"context_line":"  - The ``local`` booting of whole disk image is deprecated when node is"},{"line_number":28,"context_line":"    using ``neutron`` network interface and is configured with ``netboot``"},{"line_number":29,"context_line":"    boot option. It will not be supported in future release. The boot"},{"line_number":30,"context_line":"    option can be set using configuration ``[deploy]/default_boot_option``"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bf659307_1aad329a","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":16},"in_reply_to":"bf659307_d70b1327","updated":"2018-04-02 14:53:43.000000000","message":"No. Currently the boot of whole disk image does not honor boot_option setting and always boots from disk. This behavior has been deprecated. The netboot of whole disk image in neutron environment would always fail, if this silent behavior of local boot for whole disk image was not present. With the fix, it would attempt boot based on boot_option setting available on the node. We are preserving the \u0027local\u0027 boot behavior for the whole disk image in neutron environment for backward compatibility.","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c7bfc39d2b14efa9f1f6b8ae0bbaba3a0a0a78fc","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    requested for instance image."},{"line_number":26,"context_line":"deprecations:"},{"line_number":27,"context_line":"  - The ``local`` booting of whole disk image is deprecated when node is"},{"line_number":28,"context_line":"    using ``neutron`` network interface and is configured with ``netboot``"},{"line_number":29,"context_line":"    boot option. It will not be supported in future release. The boot"},{"line_number":30,"context_line":"    option can be set using configuration ``[deploy]/default_boot_option``"},{"line_number":31,"context_line":"    or as a ``boot_option`` capability in node\u0027s"},{"line_number":32,"context_line":"    ``properties[\u0027capabilities\u0027]``."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bf659307_7706c722","line":29,"range":{"start_line":28,"start_character":22,"end_line":29,"end_character":17},"updated":"2018-04-02 14:25:47.000000000","message":"This seems slightly redundant.","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c7bfc39d2b14efa9f1f6b8ae0bbaba3a0a0a78fc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"deprecations:"},{"line_number":27,"context_line":"  - The ``local`` booting of whole disk image is deprecated when node is"},{"line_number":28,"context_line":"    using ``neutron`` network interface and is configured with ``netboot``"},{"line_number":29,"context_line":"    boot option. It will not be supported in future release. The boot"},{"line_number":30,"context_line":"    option can be set using configuration ``[deploy]/default_boot_option``"},{"line_number":31,"context_line":"    or as a ``boot_option`` capability in node\u0027s"},{"line_number":32,"context_line":"    ``properties[\u0027capabilities\u0027]``."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"bf659307_3a02760b","line":29,"range":{"start_line":29,"start_character":42,"end_line":29,"end_character":45},"updated":"2018-04-02 14:25:47.000000000","message":"s/in/in a/","commit_id":"18d7fbb29de8a865dd73fc19b63e148b0abce0ea"},{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"f6544f0f7cd2f2da96c8b0bb60c948e788d3ecf5","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``boot.prepare_instance`` only if the image being provisioned is a"},{"line_number":7,"context_line":"    partition image. See bugs `1713916"},{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ and `1750958"},{"line_number":9,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1750958\u003e`_ for details."},{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - |"},{"line_number":12,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.1.0"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"bf659307_28e177d1","line":9,"updated":"2018-04-06 01:46:36.000000000","message":"Do we need to change the URLs to storyboard? Or after backporting?\n\nThis is not blocking this patch. We can modify it later.","commit_id":"b31dbc54192a47eb66142990551883721384624c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"3f3215e5114c9a2a320e7b3eddd7f405cc8b8770","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    ``boot.prepare_instance`` only if the image being provisioned is a"},{"line_number":7,"context_line":"    partition image. See bugs `1713916"},{"line_number":8,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1713916\u003e`_ and `1750958"},{"line_number":9,"context_line":"    \u003chttps://bugs.launchpad.net/ironic/+bug/1750958\u003e`_ for details."},{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - |"},{"line_number":12,"context_line":"    With the deploy ramdisk based on Ironic Python Agent version 3.1.0"}],"source_content_type":"text/x-yaml","patch_set":16,"id":"bf659307_c9123d63","line":9,"in_reply_to":"bf659307_28e177d1","updated":"2018-04-06 05:51:17.000000000","message":"Done","commit_id":"b31dbc54192a47eb66142990551883721384624c"}]}
