)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2a93e40a_f6d3bd02","updated":"2022-03-25 18:13:02.000000000","message":"Thanks Julia! After dealing with the anaconda code, I\u0027m not happy that we (in the code) modify instance_info -- if instance_info is meant for users to populate. It is hard to know what the user might be setting, vs the code setting or overwriting something the user added :-(\n\nI had looked quickly and it didn\u0027t seem like a quick exercise to change our code to NOT modify instance_info; might be spider webs there, not sure. At this point, we might want to comment heavily whenever the code updates instance_info..","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1e0000da_c1a13931","updated":"2022-03-30 23:47:09.000000000","message":"Seems mostly sane to me. Take all comments as optional simply because I don\u0027t promise to follow up :) I just saw this come across in IRC and thought I\u0027d take a look.","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6d352a5706789e78941b146ab21d2383bd2c7cd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"88d71ff8_27e56d53","updated":"2022-04-05 16:26:05.000000000","message":"recheck grenade should be good now","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"afdc0713_0e706927","updated":"2022-07-07 13:29:40.000000000","message":"Thanks Julia! I\u0027m not that versed in http/urls, will assume that is all correct :) I\u0027ve got a bunch of minor comments.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"0dd51305_bfc8eceb","in_reply_to":"afdc0713_0e706927","updated":"2022-07-07 18:08:08.000000000","message":"It took some trial and error there to get it all worked out. I *think* it is all right as well, but also consulting the latest HTTP RFC documents, it recognizes there could be variances in behavior and notes them as preferable as opposed to the alternative... or some wording like that. Anyway, I think it generally works/applies based upon the tests I\u0027ve executed manually against webservers.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"33fce83e_a106eeda","updated":"2022-07-08 13:42:15.000000000","message":"Thanks!","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"dbff1a63_2e4850bf","updated":"2022-07-11 14:30:52.000000000","message":"going to revise this change, to avoid rebase conflicts. Minor text updates inbound.","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"da7f3a9c073db6bb028c83f999af43a38e3cbb2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"25c1aeed_c70b1cb8","updated":"2022-08-17 22:02:25.000000000","message":"Let this stand as a warning: this change cannot reasonably be backported.\n\nI attempted to backport this (along with some other Anaconda changes), but this change requires https://review.opendev.org/c/openstack/ironic/+/797875 which is a little too involved to backport. Don\u0027t waste half a day on it like I did :|","commit_id":"e78f123ff8e3a4fcd5e3e596b526eb5eb39a34a9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9a720d4c22d7700966b63117b968e73c4a6a0677","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"fcdbd789_d9568fde","updated":"2022-07-12 15:04:55.000000000","message":"recheck metalsmith gate fixed","commit_id":"e78f123ff8e3a4fcd5e3e596b526eb5eb39a34a9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8c3c4a1a6dcca18de067ba74fd6fd71d96a56e07","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"004590a1_21842810","updated":"2022-07-13 20:42:19.000000000","message":"recheck tarballs.o.o outage","commit_id":"e78f123ff8e3a4fcd5e3e596b526eb5eb39a34a9"}],"doc/source/admin/anaconda-deploy-interface.rst":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":169,"context_line":"           --instance_info ramdisk\u003d\u003cInitial Ramdisk URL\u003e \\"},{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilzie a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the Ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"}],"source_content_type":"text/x-rst","patch_set":5,"id":"596b9b0d_ac7c9c74","line":172,"updated":"2022-03-30 23:47:09.000000000","message":"nit: utilize","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"           --instance_info ramdisk\u003d\u003cInitial Ramdisk URL\u003e \\"},{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilzie a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the Ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"}],"source_content_type":"text/x-rst","patch_set":5,"id":"c844bfb2_c4924fc6","line":172,"in_reply_to":"596b9b0d_ac7c9c74","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilzie a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the Ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"},{"line_number":176,"context_line":"are doing."}],"source_content_type":"text/x-rst","patch_set":5,"id":"6152f5c3_52ceae03","line":173,"updated":"2022-03-30 23:47:09.000000000","message":"nit: ironic is typically not capitalized in these docs","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilzie a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the Ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"},{"line_number":176,"context_line":"are doing."}],"source_content_type":"text/x-rst","patch_set":5,"id":"4bcd6647_8f86159c","line":173,"in_reply_to":"6152f5c3_52ceae03","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":169,"context_line":"           --instance_info ramdisk\u003d\u003cInitial Ramdisk URL\u003e \\"},{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"}],"source_content_type":"text/x-rst","patch_set":7,"id":"c520f1f9_c6cef3de","line":172,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/tempalte/template/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"           --instance_info ramdisk\u003d\u003cInitial Ramdisk URL\u003e \\"},{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"}],"source_content_type":"text/x-rst","patch_set":7,"id":"79739f6b_e9881a42","line":172,"in_reply_to":"c520f1f9_c6cef3de","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":169,"context_line":"           --instance_info ramdisk\u003d\u003cInitial Ramdisk URL\u003e \\"},{"line_number":170,"context_line":"           --instance_info stage2\u003d\u003cInstaller Stage2 Ramdisk URL\u003e"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"}],"source_content_type":"text/x-rst","patch_set":7,"id":"7ebf805b_0674a9e5","line":172,"in_reply_to":"c520f1f9_c6cef3de","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"},{"line_number":176,"context_line":"are doing."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e1c6f936_4a452877","line":174,"updated":"2022-07-07 13:29:40.000000000","message":"this is a bit confusing (if I grok it). the \u0027it\u0027 in \u0027ensure it\u0027 refers to how we specify the kickstart template file (eg via the node\u0027s instance_info[\u0027ks_template\u0027] value, whereas \u0027ks.cfg.template\u0027 (I think) refers to the default template file that is provided?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart tempalte,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and ensure it is either set to a URL or that the"},{"line_number":175,"context_line":"``ks_options.liveimg_url`` variable is only changed if you know what you"},{"line_number":176,"context_line":"are doing."},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"2a2cc91f_3c80ec9e","line":174,"in_reply_to":"e1c6f936_4a452877","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        baremetal node set \u003cnode\u003e \\"},{"line_number":181,"context_line":"            --instance_info ks_template\u003d\u003cURL\u003e"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The pattern of deployment in this case is identical to an deployment case"},{"line_number":184,"context_line":"where Ironic is integrated with OpenStack, however in this case Ironic"},{"line_number":185,"context_line":"collects the files, and stages them apropriately."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"e90bd29f_a65d0a7b","line":183,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/an deployment/a deployment/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        baremetal node set \u003cnode\u003e \\"},{"line_number":181,"context_line":"            --instance_info ks_template\u003d\u003cURL\u003e"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The pattern of deployment in this case is identical to an deployment case"},{"line_number":184,"context_line":"where Ironic is integrated with OpenStack, however in this case Ironic"},{"line_number":185,"context_line":"collects the files, and stages them apropriately."},{"line_number":186,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"95a2d5e8_73935b15","line":183,"in_reply_to":"e90bd29f_a65d0a7b","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The pattern of deployment in this case is identical to an deployment case"},{"line_number":184,"context_line":"where Ironic is integrated with OpenStack, however in this case Ironic"},{"line_number":185,"context_line":"collects the files, and stages them apropriately."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"At this point, you should be able to request the baremetal node to deploy."},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"90a99ab5_2ecd4176","line":185,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/apropriately/appropriately/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"The pattern of deployment in this case is identical to an deployment case"},{"line_number":184,"context_line":"where Ironic is integrated with OpenStack, however in this case Ironic"},{"line_number":185,"context_line":"collects the files, and stages them apropriately."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"At this point, you should be able to request the baremetal node to deploy."},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"0df95cca_c05e03ef","line":185,"in_reply_to":"90a99ab5_2ecd4176","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart template,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and use it as a basis of your own kickstart"},{"line_number":175,"context_line":"and it accounts for the particular stages and appropriate callbacks to"},{"line_number":176,"context_line":"Ironic."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":".. warning::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"bc8fd6c2_60d6178c","line":175,"updated":"2022-07-08 13:42:15.000000000","message":"nit, maybe s/and/as/ ? (I\u0027m not quite sure but there is something not quite right)","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":172,"context_line":"When doing so, you may wish to also utilize a customized kickstart template,"},{"line_number":173,"context_line":"which can also be a URL. Please reference the ironic community provided"},{"line_number":174,"context_line":"template *ks.cfg.template* and use it as a basis of your own kickstart"},{"line_number":175,"context_line":"and it accounts for the particular stages and appropriate callbacks to"},{"line_number":176,"context_line":"Ironic."},{"line_number":177,"context_line":""},{"line_number":178,"context_line":".. warning::"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5077a6c3_488cd665","line":175,"in_reply_to":"bc8fd6c2_60d6178c","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":179,"context_line":"   The default template expects a ``instance_info\\liveimg_url`` setting to"},{"line_number":180,"context_line":"   be provided by the user, which serves as a base operating system image."},{"line_number":181,"context_line":"   In the context of the anaconda driver, it should be thought of almost"},{"line_number":182,"context_line":"   like \"stage3\". If your using a custom template, it may not be required,"},{"line_number":183,"context_line":"   but proceed with caution."},{"line_number":184,"context_line":"   See `pykickstart documentation \u003chttps://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#liveimg\u003e`_"},{"line_number":185,"context_line":"   for more information on liveimg file format, structure, and use."}],"source_content_type":"text/x-rst","patch_set":8,"id":"705b95e7_e169fb70","line":182,"updated":"2022-07-08 13:42:15.000000000","message":"nit s/your/you\u0027re/","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"   The default template expects a ``instance_info\\liveimg_url`` setting to"},{"line_number":180,"context_line":"   be provided by the user, which serves as a base operating system image."},{"line_number":181,"context_line":"   In the context of the anaconda driver, it should be thought of almost"},{"line_number":182,"context_line":"   like \"stage3\". If your using a custom template, it may not be required,"},{"line_number":183,"context_line":"   but proceed with caution."},{"line_number":184,"context_line":"   See `pykickstart documentation \u003chttps://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#liveimg\u003e`_"},{"line_number":185,"context_line":"   for more information on liveimg file format, structure, and use."}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f3ab9ba_9259cd94","line":182,"in_reply_to":"705b95e7_e169fb70","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":218,"context_line":"   ramdisk."},{"line_number":219,"context_line":"#. Kernel launches, uncompresses initial ramdisk, and executes init inside"},{"line_number":220,"context_line":"   of the ramdisk."},{"line_number":221,"context_line":"#. The initial ramdisk boot scrips, such as Dracut, recognize the kernel"},{"line_number":222,"context_line":"   command line parameters Ironic supplied with the boot configuration,"},{"line_number":223,"context_line":"   and downloads the second stage artifacts, in this case called the"},{"line_number":224,"context_line":"   ``stage2`` image. This image contains Anaconda and base dependencies."}],"source_content_type":"text/x-rst","patch_set":8,"id":"e9594a99_ca0b5f06","line":221,"updated":"2022-07-08 13:42:15.000000000","message":"nit s/scrips/scripts/","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":218,"context_line":"   ramdisk."},{"line_number":219,"context_line":"#. Kernel launches, uncompresses initial ramdisk, and executes init inside"},{"line_number":220,"context_line":"   of the ramdisk."},{"line_number":221,"context_line":"#. The initial ramdisk boot scrips, such as Dracut, recognize the kernel"},{"line_number":222,"context_line":"   command line parameters Ironic supplied with the boot configuration,"},{"line_number":223,"context_line":"   and downloads the second stage artifacts, in this case called the"},{"line_number":224,"context_line":"   ``stage2`` image. This image contains Anaconda and base dependencies."}],"source_content_type":"text/x-rst","patch_set":8,"id":"f4f01569_e9531d28","line":221,"in_reply_to":"e9594a99_ca0b5f06","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":223,"context_line":"   and downloads the second stage artifacts, in this case called the"},{"line_number":224,"context_line":"   ``stage2`` image. This image contains Anaconda and base dependencies."},{"line_number":225,"context_line":"#. Anaconda downloads and parses the kickstart configuration which was"},{"line_number":226,"context_line":"   also supplied on the kernel command line, and acts it as defined in"},{"line_number":227,"context_line":"   the kickstart template."},{"line_number":228,"context_line":"#. The kickstart template, if defined in it\u0027s contents, downloads a"},{"line_number":229,"context_line":"   ``liveimg`` which is used as the base operating system image to"}],"source_content_type":"text/x-rst","patch_set":8,"id":"f8afe1cc_13104ec9","line":226,"updated":"2022-07-08 13:42:15.000000000","message":"maybe s/acts it/executes the commands/ ?","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":223,"context_line":"   and downloads the second stage artifacts, in this case called the"},{"line_number":224,"context_line":"   ``stage2`` image. This image contains Anaconda and base dependencies."},{"line_number":225,"context_line":"#. Anaconda downloads and parses the kickstart configuration which was"},{"line_number":226,"context_line":"   also supplied on the kernel command line, and acts it as defined in"},{"line_number":227,"context_line":"   the kickstart template."},{"line_number":228,"context_line":"#. The kickstart template, if defined in it\u0027s contents, downloads a"},{"line_number":229,"context_line":"   ``liveimg`` which is used as the base operating system image to"}],"source_content_type":"text/x-rst","patch_set":8,"id":"d12b61df_000c9903","line":226,"in_reply_to":"f8afe1cc_13104ec9","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":225,"context_line":"#. Anaconda downloads and parses the kickstart configuration which was"},{"line_number":226,"context_line":"   also supplied on the kernel command line, and acts it as defined in"},{"line_number":227,"context_line":"   the kickstart template."},{"line_number":228,"context_line":"#. The kickstart template, if defined in it\u0027s contents, downloads a"},{"line_number":229,"context_line":"   ``liveimg`` which is used as the base operating system image to"},{"line_number":230,"context_line":"   start with."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"e7433c5e_f77848c4","line":228,"updated":"2022-07-08 13:42:15.000000000","message":"nit s/it\u0027s/its/\n\ni might also s/defined/specified/\n\nNote that I don\u0027t like the word \u0027template\u0027. We have a template for the kickstart commands. At this point, though, we\u0027ve used the template to generate the file with kickstart commands, so I don\u0027t think of it as a template any more. But I think we don\u0027t make that distinction in our docs or code. (It confused me but seemed like too much effort to try to clarify. And maybe I\u0027m wrong.)","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":225,"context_line":"#. Anaconda downloads and parses the kickstart configuration which was"},{"line_number":226,"context_line":"   also supplied on the kernel command line, and acts it as defined in"},{"line_number":227,"context_line":"   the kickstart template."},{"line_number":228,"context_line":"#. The kickstart template, if defined in it\u0027s contents, downloads a"},{"line_number":229,"context_line":"   ``liveimg`` which is used as the base operating system image to"},{"line_number":230,"context_line":"   start with."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"a8a413a8_5798f53b","line":228,"in_reply_to":"e7433c5e_f77848c4","updated":"2022-07-11 14:30:52.000000000","message":"Adding a warning note to try and provide a bit more clarity around this, and to stress why it is important to maybe not just outright override without consideration.","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"}],"ironic/common/exception.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":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":837,"context_line":"    _msg_fmt \u003d _(\"Failed to verify node %(node)s: %(reason)s\")"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class ImageIsADirectory(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Image lookup failed, as the image_source is a \""},{"line_number":842,"context_line":"                 \"directory. Error %(error)s\")"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3ebd3ffe_d586677b","line":840,"updated":"2022-03-25 18:09:44.000000000","message":"Eh... I don\u0027t think I need this now.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":837,"context_line":"    _msg_fmt \u003d _(\"Failed to verify node %(node)s: %(reason)s\")"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class ImageIsADirectory(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Image lookup failed, as the image_source is a \""},{"line_number":842,"context_line":"                 \"directory. Error %(error)s\")"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5705d132_58e55c11","line":840,"in_reply_to":"3ebd3ffe_d586677b","updated":"2022-03-25 18:37:01.000000000","message":"err, well, actually... maybe?!","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f6582a876c548d3f57a10fbfb46a7bbe588a714b","unresolved":false,"context_lines":[{"line_number":837,"context_line":"    _msg_fmt \u003d _(\"Failed to verify node %(node)s: %(reason)s\")"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class ImageIsADirectory(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Image lookup failed, as the image_source is a \""},{"line_number":842,"context_line":"                 \"directory. Error %(error)s\")"},{"line_number":843,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"a77ce070_f7b5c81b","line":840,"in_reply_to":"5705d132_58e55c11","updated":"2022-03-30 23:09:02.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":843,"context_line":""},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"class ImageRefIsARedirect(IronicException):"},{"line_number":846,"context_line":"    _msg_fmt \u003d _(\"Receied a URL redirect when attempting to evaluate \""},{"line_number":847,"context_line":"                 \"image reference %(image_ref)s pointing to \""},{"line_number":848,"context_line":"                 \"%(redirect_url)s.\")"},{"line_number":849,"context_line":"    redirect_url \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"be05bce5_a39b5d39","line":846,"updated":"2022-03-25 18:13:02.000000000","message":"nit s/Receied/Received/","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f6582a876c548d3f57a10fbfb46a7bbe588a714b","unresolved":false,"context_lines":[{"line_number":843,"context_line":""},{"line_number":844,"context_line":""},{"line_number":845,"context_line":"class ImageRefIsARedirect(IronicException):"},{"line_number":846,"context_line":"    _msg_fmt \u003d _(\"Receied a URL redirect when attempting to evaluate \""},{"line_number":847,"context_line":"                 \"image reference %(image_ref)s pointing to \""},{"line_number":848,"context_line":"                 \"%(redirect_url)s.\")"},{"line_number":849,"context_line":"    redirect_url \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"c331d5d7_1ab46759","line":846,"in_reply_to":"be05bce5_a39b5d39","updated":"2022-03-30 23:09:02.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":840,"context_line":"class ImageRefIsARedirect(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Received a URL redirect when attempting to evaluate \""},{"line_number":842,"context_line":"                 \"image reference %(image_ref)s pointing to \""},{"line_number":843,"context_line":"                 \"%(redirect_url)s.\")"},{"line_number":844,"context_line":"    redirect_url \u003d None"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"    def __init__(self, image_ref\u003dNone, redirect_url\u003dNone, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"194e9c64_2e7b5f59","line":843,"updated":"2022-07-07 13:29:40.000000000","message":"Maybe I\u0027ll grok after I look at the code -- but is the error that the image reference cannot be a redirect?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":false,"context_lines":[{"line_number":840,"context_line":"class ImageRefIsARedirect(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Received a URL redirect when attempting to evaluate \""},{"line_number":842,"context_line":"                 \"image reference %(image_ref)s pointing to \""},{"line_number":843,"context_line":"                 \"%(redirect_url)s.\")"},{"line_number":844,"context_line":"    redirect_url \u003d None"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"    def __init__(self, image_ref\u003dNone, redirect_url\u003dNone, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9162d940_d4d778f6","line":843,"in_reply_to":"16586d7e_43acfbb3","updated":"2022-07-08 13:42:15.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":true,"context_lines":[{"line_number":840,"context_line":"class ImageRefIsARedirect(IronicException):"},{"line_number":841,"context_line":"    _msg_fmt \u003d _(\"Received a URL redirect when attempting to evaluate \""},{"line_number":842,"context_line":"                 \"image reference %(image_ref)s pointing to \""},{"line_number":843,"context_line":"                 \"%(redirect_url)s.\")"},{"line_number":844,"context_line":"    redirect_url \u003d None"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"    def __init__(self, image_ref\u003dNone, redirect_url\u003dNone, msg\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"16586d7e_43acfbb3","line":843,"in_reply_to":"194e9c64_2e7b5f59","updated":"2022-07-07 18:08:08.000000000","message":"Basically correct, however we can recover from it by saving it. Augmenting the message, since it will depend on the caller if it is recoverable or.. not. Hence redirect_url.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"}],"ironic/common/image_service.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":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            response \u003d requests.head(image_href, verify\u003dverify,"},{"line_number":101,"context_line":"                                     timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":102,"context_line":"            if response.status_code !\u003d http_client.OK:"},{"line_number":103,"context_line":"                raise exception.ImageRefValidationFailed("},{"line_number":104,"context_line":"                    image_href\u003doutput_url,"},{"line_number":105,"context_line":"                    reason\u003d_(\"Got HTTP code %s instead of 200 in response \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1c5a27f0_f83c68ae","side":"PARENT","line":102,"updated":"2022-03-30 21:07:56.000000000","message":"So a list of files *will* get past here just fine. result code is 200, it is a list in html.","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            # to permit endless redirects either, we don\u0027t request an override"},{"line_number":103,"context_line":"            # to the requests default to try and resolve redirects as otherwise"},{"line_number":104,"context_line":"            # we might end up with something like HTTPForbidden instead."},{"line_number":105,"context_line":"            response \u003d requests.head(image_href, verify\u003dverify,"},{"line_number":106,"context_line":"                                     timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            if response.status_code \u003d\u003d response.MOVED_PERMENANTLY:"},{"line_number":109,"context_line":"                # NOTE(TheJulia): In the event we receive a redirect, we need"}],"source_content_type":"text/x-python","patch_set":2,"id":"97536280_11ecb8f0","line":106,"range":{"start_line":105,"start_character":8,"end_line":106,"end_character":79},"updated":"2022-03-25 18:09:44.000000000","message":"What is not handled: if we have a webserver which does not issue 301 *or* just proxies through anyway. We likely need to identify that and raise *something*","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            # to permit endless redirects either, we don\u0027t request an override"},{"line_number":103,"context_line":"            # to the requests default to try and resolve redirects as otherwise"},{"line_number":104,"context_line":"            # we might end up with something like HTTPForbidden instead."},{"line_number":105,"context_line":"            response \u003d requests.head(image_href, verify\u003dverify,"},{"line_number":106,"context_line":"                                     timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"            if response.status_code \u003d\u003d response.MOVED_PERMENANTLY:"},{"line_number":109,"context_line":"                # NOTE(TheJulia): In the event we receive a redirect, we need"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a046168_a73aa64c","line":106,"range":{"start_line":105,"start_character":8,"end_line":106,"end_character":79},"in_reply_to":"97536280_11ecb8f0","updated":"2022-03-30 21:07:56.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":102,"context_line":"            # We don\u0027t want to permit endless redirects either, thus not"},{"line_number":103,"context_line":"            # request an override to the requests default to try and resolve"},{"line_number":104,"context_line":"            # redirects as otherwise we might end up with something like"},{"line_number":105,"context_line":"            # HTTPForbidden or a list of files. Both should be okay to atleast"},{"line_number":106,"context_line":"            # know things are okay in a limited fashion."},{"line_number":107,"context_line":"            response \u003d requests.head(image_href, verify\u003dverify,"},{"line_number":108,"context_line":"                                     timeout\u003dCONF.webserver_connection_timeout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b2f571cc_9f97fc99","line":105,"updated":"2022-03-30 23:47:09.000000000","message":"nit: at least (missing a space)","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            # We don\u0027t want to permit endless redirects either, thus not"},{"line_number":103,"context_line":"            # request an override to the requests default to try and resolve"},{"line_number":104,"context_line":"            # redirects as otherwise we might end up with something like"},{"line_number":105,"context_line":"            # HTTPForbidden or a list of files. Both should be okay to atleast"},{"line_number":106,"context_line":"            # know things are okay in a limited fashion."},{"line_number":107,"context_line":"            response \u003d requests.head(image_href, verify\u003dverify,"},{"line_number":108,"context_line":"                                     timeout\u003dCONF.webserver_connection_timeout)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1c269161_f6916b94","line":105,"in_reply_to":"b2f571cc_9f97fc99","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":84,"context_line":"        :param image_href: Image reference."},{"line_number":85,"context_line":"        :param secret: Specify if image_href being validated should not be"},{"line_number":86,"context_line":"            shown in exception message."},{"line_number":87,"context_line":"        :raises: exception.ImageRefValidationFailed if HEAD request failed or"},{"line_number":88,"context_line":"            returned response code not equal to 200."},{"line_number":89,"context_line":"        :returns: Response to HEAD request."},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"14d8a973_32ecae84","line":87,"updated":"2022-07-07 13:29:40.000000000","message":"also exception.ImageRefIsARedirect","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        :param image_href: Image reference."},{"line_number":85,"context_line":"        :param secret: Specify if image_href being validated should not be"},{"line_number":86,"context_line":"            shown in exception message."},{"line_number":87,"context_line":"        :raises: exception.ImageRefValidationFailed if HEAD request failed or"},{"line_number":88,"context_line":"            returned response code not equal to 200."},{"line_number":89,"context_line":"        :returns: Response to HEAD request."},{"line_number":90,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"91659030_c65f1236","line":87,"in_reply_to":"14d8a973_32ecae84","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":110,"context_line":"            if response.status_code \u003d\u003d http_client.MOVED_PERMANENTLY:"},{"line_number":111,"context_line":"                # NOTE(TheJulia): In the event we receive a redirect, we need"},{"line_number":112,"context_line":"                # to notify the caller. Before this we would just fail,"},{"line_number":113,"context_line":"                # but a url which is missing a trailing results in a redirect"},{"line_number":114,"context_line":"                # to a target path, and the caller *may* actually care about"},{"line_number":115,"context_line":"                # that."},{"line_number":116,"context_line":"                redirect \u003d requests.Session().get_redirect_target(response)"}],"source_content_type":"text/x-python","patch_set":7,"id":"f84e607a_35684d8c","line":113,"updated":"2022-07-07 13:29:40.000000000","message":"\"missing a trailing\" what ? -- is there a word missing after that?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            if response.status_code \u003d\u003d http_client.MOVED_PERMANENTLY:"},{"line_number":111,"context_line":"                # NOTE(TheJulia): In the event we receive a redirect, we need"},{"line_number":112,"context_line":"                # to notify the caller. Before this we would just fail,"},{"line_number":113,"context_line":"                # but a url which is missing a trailing results in a redirect"},{"line_number":114,"context_line":"                # to a target path, and the caller *may* actually care about"},{"line_number":115,"context_line":"                # that."},{"line_number":116,"context_line":"                redirect \u003d requests.Session().get_redirect_target(response)"}],"source_content_type":"text/x-python","patch_set":7,"id":"32401d5f_097bdf71","line":113,"in_reply_to":"f84e607a_35684d8c","updated":"2022-07-07 18:08:08.000000000","message":"Ahh, tailing slash.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":126,"context_line":"            if (response.status_code \u003d\u003d http_client.FORBIDDEN"},{"line_number":127,"context_line":"                    and str(image_href).endswith(\u0027/\u0027)):"},{"line_number":128,"context_line":"                LOG.warning(\u0027Attempted to validate a URL %s, however we \u0027"},{"line_number":129,"context_line":"                            \u0027receieved an HTTP Forbidden response and the \u0027"},{"line_number":130,"context_line":"                            \u0027url ends with trailing slash (/), suggesting \u0027"},{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"e2ca2ca2_f4401497","line":129,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/receieved/received/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            if (response.status_code \u003d\u003d http_client.FORBIDDEN"},{"line_number":127,"context_line":"                    and str(image_href).endswith(\u0027/\u0027)):"},{"line_number":128,"context_line":"                LOG.warning(\u0027Attempted to validate a URL %s, however we \u0027"},{"line_number":129,"context_line":"                            \u0027receieved an HTTP Forbidden response and the \u0027"},{"line_number":130,"context_line":"                            \u0027url ends with trailing slash (/), suggesting \u0027"},{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"d9a13027_80c757e4","line":129,"in_reply_to":"e2ca2ca2_f4401497","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":130,"context_line":"                            \u0027url ends with trailing slash (/), suggesting \u0027"},{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"}],"source_content_type":"text/x-python","patch_set":7,"id":"0fcc2405_a1981de3","line":133,"updated":"2022-07-07 13:29:40.000000000","message":"i\u0027m a bit concerned about this suggestion. Hopefully that is correct most/all of the time that this error occurs... otherwise, it might be a bit confusing wrt debugging.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":true,"context_lines":[{"line_number":130,"context_line":"                            \u0027url ends with trailing slash (/), suggesting \u0027"},{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"}],"source_content_type":"text/x-python","patch_set":7,"id":"1b8d51e9_4ec05264","line":133,"in_reply_to":"0fcc2405_a1981de3","updated":"2022-07-07 18:08:08.000000000","message":"Both Apache and Nginx did this when I was testing. Seems fairly universal, but wanted to also log it to provide clarity.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                            \u0027url ends with trailing slash (/), suggesting \u0027"},{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"}],"source_content_type":"text/x-python","patch_set":7,"id":"72dfaa5d_47b3cc54","line":133,"in_reply_to":"1b8d51e9_4ec05264","updated":"2022-07-08 13:42:15.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"},{"line_number":137,"context_line":"            # fine as they are conveyed as an HTTP 200 OK response with a"}],"source_content_type":"text/x-python","patch_set":7,"id":"b1351f06_accac6dc","line":134,"updated":"2022-07-07 13:29:40.000000000","message":"this is a bit odd, no exception raised here? the rest of this code seems to raise exceptions if response.status_code is NOT OK.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"},{"line_number":137,"context_line":"            # fine as they are conveyed as an HTTP 200 OK response with a"}],"source_content_type":"text/x-python","patch_set":7,"id":"9e2d2cb1_51e0c430","line":134,"in_reply_to":"0dcfbfa0_ec06e966","updated":"2022-07-08 13:42:15.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":true,"context_lines":[{"line_number":131,"context_line":"                            \u0027non-image deploy may be in progress with \u0027"},{"line_number":132,"context_line":"                            \u0027a webserver which is not permitting an index \u0027"},{"line_number":133,"context_line":"                            \u0027to be generated.\u0027, image_href)"},{"line_number":134,"context_line":"                return response"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # NOTE(TheJulia): Any file list reply will proceed past here just"},{"line_number":137,"context_line":"            # fine as they are conveyed as an HTTP 200 OK response with a"}],"source_content_type":"text/x-python","patch_set":7,"id":"0dcfbfa0_ec06e966","line":134,"in_reply_to":"b1351f06_accac6dc","updated":"2022-07-07 18:08:08.000000000","message":"Hmmm... What was I thinking here....\n\nMy thought here was that in essence, it is kind of okay for it to happen. It is not great, but all signs point to a forbidden index generation, not entirely an invalid URL because of the trailing slash.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"}],"ironic/common/images.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":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"IMAGE_TYPE_PARTITION \u003d \u0027partition\u0027"},{"line_number":574,"context_line":"IMAGE_TYPE_WHOLE_DISK \u003d \u0027whole-disk\u0027"},{"line_number":575,"context_line":"IMAGE_TYPE_DIRECTORY \u003d \u0027directory\u0027"},{"line_number":576,"context_line":"VALID_IMAGE_TYPES \u003d frozenset((IMAGE_TYPE_PARTITION, IMAGE_TYPE_WHOLE_DISK,"},{"line_number":577,"context_line":"                               IMAGE_TYPE_DIRECTORY))"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"def is_whole_disk_image(ctx, instance_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"a8e3b5e2_78b5e856","line":577,"range":{"start_line":575,"start_character":0,"end_line":577,"end_character":53},"updated":"2022-03-25 18:37:01.000000000","message":"This portion of the diff is not needed, it can be left as-is on the original line 575.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"IMAGE_TYPE_PARTITION \u003d \u0027partition\u0027"},{"line_number":574,"context_line":"IMAGE_TYPE_WHOLE_DISK \u003d \u0027whole-disk\u0027"},{"line_number":575,"context_line":"IMAGE_TYPE_DIRECTORY \u003d \u0027directory\u0027"},{"line_number":576,"context_line":"VALID_IMAGE_TYPES \u003d frozenset((IMAGE_TYPE_PARTITION, IMAGE_TYPE_WHOLE_DISK,"},{"line_number":577,"context_line":"                               IMAGE_TYPE_DIRECTORY))"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"def is_whole_disk_image(ctx, instance_info):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ef4fe5e9_d55f9f54","line":577,"range":{"start_line":575,"start_character":0,"end_line":577,"end_character":53},"in_reply_to":"a8e3b5e2_78b5e856","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":623,"context_line":"    return is_whole_disk_image"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"def is_source_a_path(context, instance_info):"},{"line_number":627,"context_line":"    image_source \u003d instance_info.get(\u0027image_source\u0027)"},{"line_number":628,"context_line":"    if not image_source:"},{"line_number":629,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"f0e1d54a_26771fab","line":626,"updated":"2022-03-25 18:13:02.000000000","message":"maybe add a docstring, indicating what is returned. I see None and True.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":623,"context_line":"    return is_whole_disk_image"},{"line_number":624,"context_line":""},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"def is_source_a_path(context, instance_info):"},{"line_number":627,"context_line":"    image_source \u003d instance_info.get(\u0027image_source\u0027)"},{"line_number":628,"context_line":"    if not image_source:"},{"line_number":629,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":2,"id":"2ec9cd9d_07e713e6","line":626,"in_reply_to":"f0e1d54a_26771fab","updated":"2022-03-30 21:07:56.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        return True"},{"line_number":632,"context_line":"    image_service \u003d image_service.get_image_service(image_source)"},{"line_number":633,"context_line":"    # NOTE(TheJulia): This will raise ImageRefValidationFailed when"},{"line_number":634,"context_line":"    # file:/// is used. Which is good, it is invalid!"},{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"20ee6ab3_4c60ce8e","line":634,"updated":"2022-03-25 18:13:02.000000000","message":"the assumption in this method is that image_source is a URL/href?","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        return True"},{"line_number":632,"context_line":"    image_service \u003d image_service.get_image_service(image_source)"},{"line_number":633,"context_line":"    # NOTE(TheJulia): This will raise ImageRefValidationFailed when"},{"line_number":634,"context_line":"    # file:/// is used. Which is good, it is invalid!"},{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"c34a86ae_eb5ec552","line":634,"in_reply_to":"20ee6ab3_4c60ce8e","updated":"2022-03-25 18:37:01.000000000","message":"Correct, docstring would definitely clear that up :)","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        return True"},{"line_number":632,"context_line":"    image_service \u003d image_service.get_image_service(image_source)"},{"line_number":633,"context_line":"    # NOTE(TheJulia): This will raise ImageRefValidationFailed when"},{"line_number":634,"context_line":"    # file:/// is used. Which is good, it is invalid!"},{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"}],"source_content_type":"text/x-python","patch_set":2,"id":"badc5264_34c33cd7","line":634,"in_reply_to":"c34a86ae_eb5ec552","updated":"2022-03-30 21:07:56.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":633,"context_line":"    # NOTE(TheJulia): This will raise ImageRefValidationFailed when"},{"line_number":634,"context_line":"    # file:/// is used. Which is good, it is invalid!"},{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"},{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dc5e6205_6ba6b81d","line":636,"range":{"start_line":636,"start_character":0,"end_line":636,"end_character":49},"updated":"2022-03-25 18:09:44.000000000","message":"Okay, so... depending on the remote webserver being evil, and not issuing a redirect, we could be exposed to list contents... or HTTPForbidden. We should handle that.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":633,"context_line":"    # NOTE(TheJulia): This will raise ImageRefValidationFailed when"},{"line_number":634,"context_line":"    # file:/// is used. Which is good, it is invalid!"},{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"},{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"709ca934_e26e0a91","line":636,"range":{"start_line":636,"start_character":0,"end_line":636,"end_character":49},"in_reply_to":"dc5e6205_6ba6b81d","updated":"2022-03-30 21:07:56.000000000","message":"so, we don\u0027t need to handle it, image_service processing will handle it for us.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"},{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"},{"line_number":640,"context_line":"            return True"},{"line_number":641,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":2,"id":"26adb327_1dad67aa","line":638,"range":{"start_line":638,"start_character":0,"end_line":638,"end_character":28},"updated":"2022-03-25 18:09:44.000000000","message":"I was thinking here because this is just a binary \"is this or is this not\"","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":635,"context_line":"    try:"},{"line_number":636,"context_line":"        image_service.validate_href(image_source)"},{"line_number":637,"context_line":"    except exception.ImageRefIsARedirect as e:"},{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"},{"line_number":640,"context_line":"            return True"},{"line_number":641,"context_line":"    return"}],"source_content_type":"text/x-python","patch_set":2,"id":"859091d1_b9eb5339","line":638,"range":{"start_line":638,"start_character":0,"end_line":638,"end_character":28},"in_reply_to":"26adb327_1dad67aa","updated":"2022-03-30 21:07:56.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"},{"line_number":640,"context_line":"            return True"},{"line_number":641,"context_line":"    return"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"def _extract_iso(extract_iso, extract_dir):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f44afd0d_85243d47","line":641,"updated":"2022-03-25 18:13:02.000000000","message":"return false? cuz None is not the same as false ;)","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":false,"context_lines":[{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"},{"line_number":640,"context_line":"            return True"},{"line_number":641,"context_line":"    return"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"def _extract_iso(extract_iso, extract_dir):"}],"source_content_type":"text/x-python","patch_set":2,"id":"be5769e0_11cfa125","line":641,"in_reply_to":"5220e728_7da4627d","updated":"2022-03-30 21:07:56.000000000","message":"Ack","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":638,"context_line":"        LOG.debug(e.message)"},{"line_number":639,"context_line":"        if e.redirect_url and e.redirect_url.endswith(\u0027/\u0027):"},{"line_number":640,"context_line":"            return True"},{"line_number":641,"context_line":"    return"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"def _extract_iso(extract_iso, extract_dir):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5220e728_7da4627d","line":641,"in_reply_to":"f44afd0d_85243d47","updated":"2022-03-25 18:37:01.000000000","message":"It is, but is_whole_disk_image does the same, if it doesn\u0027t apply, it is None. I *guess* if the validat_href returns a response of like 200, we know we\u0027re not a path (unless it is a list... need to work that out.)","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":615,"context_line":"            # reference/url is a directory, or highly missformatted."},{"line_number":616,"context_line":"            # Either way, this means we\u0027re likely not an image based"},{"line_number":617,"context_line":"            # deploy."},{"line_number":618,"context_line":"            return"},{"line_number":619,"context_line":"        if (not instance_info.get(\u0027kernel\u0027)"},{"line_number":620,"context_line":"            and not instance_info.get(\u0027ramdisk\u0027)):"},{"line_number":621,"context_line":"            is_whole_disk_image \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"97dad664_33cdcd1c","line":618,"updated":"2022-03-30 23:47:09.000000000","message":"I kinda get this, but I don\u0027t think it\u0027s always an accurate assumption (yes, you can serve up a single file with a URL ending in a /). If we\u0027re going to introduce this as a limitation, we should at a least document it IMO. Consider this a nit though, because I know it\u0027s actually unlikely and don\u0027t know the place you\u0027d document it.","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":615,"context_line":"            # reference/url is a directory, or highly missformatted."},{"line_number":616,"context_line":"            # Either way, this means we\u0027re likely not an image based"},{"line_number":617,"context_line":"            # deploy."},{"line_number":618,"context_line":"            return"},{"line_number":619,"context_line":"        if (not instance_info.get(\u0027kernel\u0027)"},{"line_number":620,"context_line":"            and not instance_info.get(\u0027ramdisk\u0027)):"},{"line_number":621,"context_line":"            is_whole_disk_image \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"7983e513_adcf74d4","line":618,"in_reply_to":"460faa03_099de0b5","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":true,"context_lines":[{"line_number":615,"context_line":"            # reference/url is a directory, or highly missformatted."},{"line_number":616,"context_line":"            # Either way, this means we\u0027re likely not an image based"},{"line_number":617,"context_line":"            # deploy."},{"line_number":618,"context_line":"            return"},{"line_number":619,"context_line":"        if (not instance_info.get(\u0027kernel\u0027)"},{"line_number":620,"context_line":"            and not instance_info.get(\u0027ramdisk\u0027)):"},{"line_number":621,"context_line":"            is_whole_disk_image \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"460faa03_099de0b5","line":618,"in_reply_to":"97dad664_33cdcd1c","updated":"2022-07-05 22:03:19.000000000","message":"I\u0027ve largely re-written the interaction here to use is_source_a_path and to query the source.","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":580,"context_line":"    :param instance_info: a node\u0027s instance info dict"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"    :returns: True for whole disk images and False for partition images"},{"line_number":583,"context_line":"        and None on no image_source or Error."},{"line_number":584,"context_line":"    \"\"\""},{"line_number":585,"context_line":"    image_source \u003d instance_info.get(\u0027image_source\u0027)"},{"line_number":586,"context_line":"    if not image_source:"}],"source_content_type":"text/x-python","patch_set":7,"id":"a266be38_3361a6f7","line":583,"updated":"2022-07-07 13:29:40.000000000","message":"might want to elaborate on this, wrt returning None if the source is a URL path.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":606,"context_line":"                               and not iproperties.get(\u0027ramdisk_id\u0027))"},{"line_number":607,"context_line":"    else:"},{"line_number":608,"context_line":"        # Non glance image ref"},{"line_number":609,"context_line":"        if is_source_a_path(ctx, instance_info):"},{"line_number":610,"context_line":"            # Nothing is returned if not valid or there was an error."},{"line_number":611,"context_line":"            # A third possibility is it is not a disk image, which would"},{"line_number":612,"context_line":"            # still be None."}],"source_content_type":"text/x-python","patch_set":7,"id":"ae5224bd_0d7a2ad2","line":609,"updated":"2022-07-07 13:29:40.000000000","message":"this is a dumb question (I know, I\u0027ve forgotten a bunch of stuff). How does ironic work wrt images, when it is standalone (not using glance)? Or maybe it doesn\u0027t. Just wondering if the image can be at some URL (with a path), outside of glance.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":606,"context_line":"                               and not iproperties.get(\u0027ramdisk_id\u0027))"},{"line_number":607,"context_line":"    else:"},{"line_number":608,"context_line":"        # Non glance image ref"},{"line_number":609,"context_line":"        if is_source_a_path(ctx, instance_info):"},{"line_number":610,"context_line":"            # Nothing is returned if not valid or there was an error."},{"line_number":611,"context_line":"            # A third possibility is it is not a disk image, which would"},{"line_number":612,"context_line":"            # still be None."}],"source_content_type":"text/x-python","patch_set":7,"id":"3e72ccbc_1020250f","line":609,"in_reply_to":"5a8bd113_bf505dbc","updated":"2022-07-11 14:30:52.000000000","message":"I think so, and I think for something like an eventual bittorrent driver or something could also make use of.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":606,"context_line":"                               and not iproperties.get(\u0027ramdisk_id\u0027))"},{"line_number":607,"context_line":"    else:"},{"line_number":608,"context_line":"        # Non glance image ref"},{"line_number":609,"context_line":"        if is_source_a_path(ctx, instance_info):"},{"line_number":610,"context_line":"            # Nothing is returned if not valid or there was an error."},{"line_number":611,"context_line":"            # A third possibility is it is not a disk image, which would"},{"line_number":612,"context_line":"            # still be None."}],"source_content_type":"text/x-python","patch_set":7,"id":"5a8bd113_bf505dbc","line":609,"in_reply_to":"a9f4b4af_4eac8450","updated":"2022-07-08 13:42:15.000000000","message":"I was wondering what happens if this is non-anaconda deploy, whether this code makes sense or not. Sounds like yes.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":true,"context_lines":[{"line_number":606,"context_line":"                               and not iproperties.get(\u0027ramdisk_id\u0027))"},{"line_number":607,"context_line":"    else:"},{"line_number":608,"context_line":"        # Non glance image ref"},{"line_number":609,"context_line":"        if is_source_a_path(ctx, instance_info):"},{"line_number":610,"context_line":"            # Nothing is returned if not valid or there was an error."},{"line_number":611,"context_line":"            # A third possibility is it is not a disk image, which would"},{"line_number":612,"context_line":"            # still be None."}],"source_content_type":"text/x-python","patch_set":7,"id":"a9f4b4af_4eac8450","line":609,"in_reply_to":"ae5224bd_0d7a2ad2","updated":"2022-07-07 18:08:08.000000000","message":"Ironic generally does the file validation by checking for the existence, and then stages it, or downloads it based upon what the artifact is and how the deployment is being performed.\n\nThe idea, I guess is yes, a URL can be a path, but this allows it to be a case.\n\nYou can\u0027t *really*, at least in standard glance model pass a full path along, but anaconda treats it as a first class thing when someone is directly using anaconda.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":621,"context_line":"def is_source_a_path(ctx, instance_info):"},{"line_number":622,"context_line":"    \"\"\"Determine if the image source is a path."},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    This method determies if a supplied URL is a path."},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    :param ctx: an admin/process context."},{"line_number":627,"context_line":"    :param instance_info: The node instance info which to utilize"}],"source_content_type":"text/x-python","patch_set":7,"id":"367f9b15_64c01e70","line":624,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/determies/determines/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":621,"context_line":"def is_source_a_path(ctx, instance_info):"},{"line_number":622,"context_line":"    \"\"\"Determine if the image source is a path."},{"line_number":623,"context_line":""},{"line_number":624,"context_line":"    This method determies if a supplied URL is a path."},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    :param ctx: an admin/process context."},{"line_number":627,"context_line":"    :param instance_info: The node instance info which to utilize"}],"source_content_type":"text/x-python","patch_set":7,"id":"f8480ada_48a442b7","line":624,"in_reply_to":"367f9b15_64c01e70","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    :param ctx: an admin/process context."},{"line_number":627,"context_line":"    :param instance_info: The node instance info which to utilize"},{"line_number":628,"context_line":"                          to validate the supplied image_source"},{"line_number":629,"context_line":"                          value which in this case expects"},{"line_number":630,"context_line":"                          an HTTP URL."},{"line_number":631,"context_line":"    :returns: True if the image_source appears to be a path as opposed"}],"source_content_type":"text/x-python","patch_set":7,"id":"664f9c91_2b6a70a4","line":628,"updated":"2022-07-07 13:29:40.000000000","message":"a node\u0027s instance_info dict. Used to validate that the \u0027image_source\u0027 value is an HTTP URL.\n\nAfter looking at this code -- thinking it might be easier to grok if instead of passing instance_info to this method, we pass \u0027image_source\u0027 (ie, instance_info.get(\u0027image_source\u0027). Unless something else from instance_info is also used?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":625,"context_line":""},{"line_number":626,"context_line":"    :param ctx: an admin/process context."},{"line_number":627,"context_line":"    :param instance_info: The node instance info which to utilize"},{"line_number":628,"context_line":"                          to validate the supplied image_source"},{"line_number":629,"context_line":"                          value which in this case expects"},{"line_number":630,"context_line":"                          an HTTP URL."},{"line_number":631,"context_line":"    :returns: True if the image_source appears to be a path as opposed"}],"source_content_type":"text/x-python","patch_set":7,"id":"aee218c7_93320702","line":628,"in_reply_to":"664f9c91_2b6a70a4","updated":"2022-07-07 18:08:08.000000000","message":"That is a great observation! I don\u0027t think there is anything we would use.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":630,"context_line":"                          an HTTP URL."},{"line_number":631,"context_line":"    :returns: True if the image_source appears to be a path as opposed"},{"line_number":632,"context_line":"              to an image to be downloaded. If the image source is not"},{"line_number":633,"context_line":"              a path, or if any error is detected, None is returned."},{"line_number":634,"context_line":"    \"\"\""},{"line_number":635,"context_line":"    image_source \u003d instance_info.get(\u0027image_source\u0027)"},{"line_number":636,"context_line":"    if not image_source:"}],"source_content_type":"text/x-python","patch_set":7,"id":"e2d31231_da60f686","line":633,"updated":"2022-07-07 13:29:40.000000000","message":"it seems to me that if it isn\u0027t a path, False is returned?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                          an HTTP URL."},{"line_number":631,"context_line":"    :returns: True if the image_source appears to be a path as opposed"},{"line_number":632,"context_line":"              to an image to be downloaded. If the image source is not"},{"line_number":633,"context_line":"              a path, or if any error is detected, None is returned."},{"line_number":634,"context_line":"    \"\"\""},{"line_number":635,"context_line":"    image_source \u003d instance_info.get(\u0027image_source\u0027)"},{"line_number":636,"context_line":"    if not image_source:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fd70e9e3_c5260955","line":633,"in_reply_to":"e2d31231_da60f686","updated":"2022-07-07 18:08:08.000000000","message":"Fixed","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"}],"ironic/conductor/utils.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":1666,"context_line":"            return False"},{"line_number":1667,"context_line":"        node.set_driver_internal_info(\u0027is_source_a_path\u0027, isap)"},{"line_number":1668,"context_line":"        # Only doing this for consistency of interaction/data."},{"line_number":1669,"context_line":"        node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1670,"context_line":"        return True"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bda0d305_ff8bc7e5","line":1669,"updated":"2022-03-25 18:13:02.000000000","message":"is \u0027image_type\u0027 something that the user might set? I think we ought to avoid adding info there if instance_info is meant for the user to populate. Caused issues for me wrt the anaconda stuff.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"            return False"},{"line_number":1667,"context_line":"        node.set_driver_internal_info(\u0027is_source_a_path\u0027, isap)"},{"line_number":1668,"context_line":"        # Only doing this for consistency of interaction/data."},{"line_number":1669,"context_line":"        node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1670,"context_line":"        return True"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":2,"id":"cc62a5e8_dc0070ba","line":1669,"in_reply_to":"02bf8e2c_5eb1e735","updated":"2022-07-11 14:30:52.000000000","message":"Marking resolved as this thread is out of date at this point when compared to the code.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":1666,"context_line":"            return False"},{"line_number":1667,"context_line":"        node.set_driver_internal_info(\u0027is_source_a_path\u0027, isap)"},{"line_number":1668,"context_line":"        # Only doing this for consistency of interaction/data."},{"line_number":1669,"context_line":"        node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1670,"context_line":"        return True"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d13b2190_40c95e63","line":1669,"in_reply_to":"bda0d305_ff8bc7e5","updated":"2022-03-25 18:37:01.000000000","message":"Might, Dmitry\u0027s image_type work reconciles it back and stores it in instance_info, so ideally my thought was \"well, this would be good to also set.\"\n\nCarol, we could likely drop the node_set_instance_info for image type. The entire update_image_Type method though, came with dmitry\u0027s image_type work patch. So in backporting we likely have to move line 1664 *and* line 1667 from this file into manager.py where we presently set driver_internal_info[\u0027is_whole_disk_image\u0027] (also, driver_internal_info is often abbreviated as i_info.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":true,"context_lines":[{"line_number":1666,"context_line":"            return False"},{"line_number":1667,"context_line":"        node.set_driver_internal_info(\u0027is_source_a_path\u0027, isap)"},{"line_number":1668,"context_line":"        # Only doing this for consistency of interaction/data."},{"line_number":1669,"context_line":"        node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1670,"context_line":"        return True"},{"line_number":1671,"context_line":""},{"line_number":1672,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":2,"id":"02bf8e2c_5eb1e735","line":1669,"in_reply_to":"d13b2190_40c95e63","updated":"2022-03-30 21:07:56.000000000","message":"So, I\u0027m commenting out the setting instance info line and leaving a note so we can figure out later if/what we should do.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":1669,"context_line":"        # rloo doesn\u0027t believe we should. I\u0027m kind of on board with that"},{"line_number":1670,"context_line":"        # idea since it is also user-settable, but laregely is just geared"},{"line_number":1671,"context_line":"        # to take what is in glance. Line below should we wish to uncomment."},{"line_number":1672,"context_line":"        # node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1673,"context_line":"        return True"},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":5,"id":"b61de195_130bf9f2","line":1672,"updated":"2022-03-30 23:47:09.000000000","message":"I\u0027ll note configuration is always an option here. This seems like a case where deployment-by-deployment folks could have different preferences.","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":true,"context_lines":[{"line_number":1669,"context_line":"        # rloo doesn\u0027t believe we should. I\u0027m kind of on board with that"},{"line_number":1670,"context_line":"        # idea since it is also user-settable, but laregely is just geared"},{"line_number":1671,"context_line":"        # to take what is in glance. Line below should we wish to uncomment."},{"line_number":1672,"context_line":"        # node.set_instance_info(\u0027image_type\u0027, images.IMAGE_TYPE_DIRECTORY)"},{"line_number":1673,"context_line":"        return True"},{"line_number":1674,"context_line":""},{"line_number":1675,"context_line":"    node.set_driver_internal_info(\u0027is_whole_disk_image\u0027, iwdi)"}],"source_content_type":"text/x-python","patch_set":5,"id":"92d00aee_1bb06cb3","line":1672,"in_reply_to":"b61de195_130bf9f2","updated":"2022-07-05 22:03:19.000000000","message":"Adding a comment. I\u0027m trying to actively avoid another setting, but it is something we should consider as well.","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"}],"ironic/drivers/modules/deploy_utils.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":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":1057,"context_line":"    remove_http_instance_symlink(node.uuid)"},{"line_number":1058,"context_line":"    destroy_images(node.uuid)"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"def _validate_image_url(node, url, secret\u003dFalse):"},{"line_number":1062,"context_line":"    \"\"\"Validates image URL through the HEAD request."},{"line_number":1063,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0cd302aa_eaaabb28","side":"PARENT","line":1060,"updated":"2022-03-25 18:09:44.000000000","message":"maybe todo to rename this? (since I intend on backporting)","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":true,"context_lines":[{"line_number":1057,"context_line":"    remove_http_instance_symlink(node.uuid)"},{"line_number":1058,"context_line":"    destroy_images(node.uuid)"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"def _validate_image_url(node, url, secret\u003dFalse):"},{"line_number":1062,"context_line":"    \"\"\"Validates image URL through the HEAD request."},{"line_number":1063,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1e7d5e95_1a94a9b0","side":"PARENT","line":1060,"in_reply_to":"0cd302aa_eaaabb28","updated":"2022-03-30 21:07:56.000000000","message":"eh, this actually is kind of right. Just... confusing until you think about that it is only called for httpimageservice.","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"    remove_http_instance_symlink(node.uuid)"},{"line_number":1058,"context_line":"    destroy_images(node.uuid)"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"def _validate_image_url(node, url, secret\u003dFalse):"},{"line_number":1062,"context_line":"    \"\"\"Validates image URL through the HEAD request."},{"line_number":1063,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"501d5899_874716f0","side":"PARENT","line":1060,"in_reply_to":"1e7d5e95_1a94a9b0","updated":"2022-07-05 22:03:19.000000000","message":"Ack","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":1066,"context_line":"        it will not be shown in logs."},{"line_number":1067,"context_line":"    \"\"\""},{"line_number":1068,"context_line":"    try:"},{"line_number":1069,"context_line":"        image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1070,"context_line":"    except exception.ImageRefValidationFailed as e:"},{"line_number":1071,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1072,"context_line":"            LOG.error(\"The specified URL is not a valid HTTP(S) URL or is \""}],"source_content_type":"text/x-python","patch_set":2,"id":"7e029aad_0bcd888d","side":"PARENT","line":1069,"updated":"2022-03-25 18:09:44.000000000","message":"so... ugh. We likely need to add some additional handling here in case it is a directory and we are forbidden from viewing list contents.","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c7d6767a058942a91e0fe8bd0093105743a8314","unresolved":true,"context_lines":[{"line_number":1066,"context_line":"        it will not be shown in logs."},{"line_number":1067,"context_line":"    \"\"\""},{"line_number":1068,"context_line":"    try:"},{"line_number":1069,"context_line":"        image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1070,"context_line":"    except exception.ImageRefValidationFailed as e:"},{"line_number":1071,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1072,"context_line":"            LOG.error(\"The specified URL is not a valid HTTP(S) URL or is \""}],"source_content_type":"text/x-python","patch_set":2,"id":"8d8013a2_00529a97","side":"PARENT","line":1069,"in_reply_to":"7e029aad_0bcd888d","updated":"2022-03-30 21:07:56.000000000","message":"eh, folder list returns 200, which doesn\u0027t raise exception. Adding a note","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f6582a876c548d3f57a10fbfb46a7bbe588a714b","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        it will not be shown in logs."},{"line_number":1067,"context_line":"    \"\"\""},{"line_number":1068,"context_line":"    try:"},{"line_number":1069,"context_line":"        image_service.HttpImageService().validate_href(url, secret)"},{"line_number":1070,"context_line":"    except exception.ImageRefValidationFailed as e:"},{"line_number":1071,"context_line":"        with excutils.save_and_reraise_exception():"},{"line_number":1072,"context_line":"            LOG.error(\"The specified URL is not a valid HTTP(S) URL or is \""}],"source_content_type":"text/x-python","patch_set":2,"id":"fe4f7a21_08ae925d","side":"PARENT","line":1069,"in_reply_to":"8d8013a2_00529a97","updated":"2022-03-30 23:09:02.000000000","message":"Done","commit_id":"dfd4002131d94e43debc2107e797e61107c219ea"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":838,"context_line":"_ERR_MSG_INVALID_DEPLOY \u003d _(\"Invalid parameter %(param)s: %(reason)s\")"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"def parse_instance_info(node, non_image_deploy\u003dFalse):"},{"line_number":842,"context_line":"    \"\"\"Gets the instance specific Node deployment info."},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    This method validates whether the \u0027instance_info\u0027 property of the"}],"source_content_type":"text/x-python","patch_set":2,"id":"60e87832_a3e91f06","line":841,"updated":"2022-03-25 18:13:02.000000000","message":"oof, double negative. I\u0027d prefer image_deploy\u003dTrue (i think that\u0027s the same...)","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":838,"context_line":"_ERR_MSG_INVALID_DEPLOY \u003d _(\"Invalid parameter %(param)s: %(reason)s\")"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"def parse_instance_info(node, non_image_deploy\u003dFalse):"},{"line_number":842,"context_line":"    \"\"\"Gets the instance specific Node deployment info."},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    This method validates whether the \u0027instance_info\u0027 property of the"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e860987_4466dfcc","line":841,"in_reply_to":"60e87832_a3e91f06","updated":"2022-03-25 18:37:01.000000000","message":"doable!","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":838,"context_line":"_ERR_MSG_INVALID_DEPLOY \u003d _(\"Invalid parameter %(param)s: %(reason)s\")"},{"line_number":839,"context_line":""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"def parse_instance_info(node, non_image_deploy\u003dFalse):"},{"line_number":842,"context_line":"    \"\"\"Gets the instance specific Node deployment info."},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    This method validates whether the \u0027instance_info\u0027 property of the"}],"source_content_type":"text/x-python","patch_set":2,"id":"aeddc893_dd7b9cf1","line":841,"in_reply_to":"6e860987_4466dfcc","updated":"2022-07-05 22:03:19.000000000","message":"No longer applicable.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"39f28137134e4c7afa07d49aeee608473f46fc91","unresolved":true,"context_lines":[{"line_number":1233,"context_line":"        _cache_and_convert_image(task, instance_info)"},{"line_number":1234,"context_line":"    else:"},{"line_number":1235,"context_line":"        try:"},{"line_number":1236,"context_line":"            _validate_image_url(node, image_source)"},{"line_number":1237,"context_line":"        except exception.ImageRefIsARedirect as e:"},{"line_number":1238,"context_line":"            if e.redirect_url:"},{"line_number":1239,"context_line":"                instance_info[\u0027image_source\u0027] \u003d e.redirect_url"},{"line_number":1240,"context_line":"        # image_url is internal, and used by IPA and some boot templates."},{"line_number":1241,"context_line":"        # in most cases, it needs to come from image_source explicitly."},{"line_number":1242,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"}],"source_content_type":"text/x-python","patch_set":2,"id":"f6390f2c_4de697b4","line":1239,"range":{"start_line":1236,"start_character":0,"end_line":1239,"end_character":62},"updated":"2022-03-25 18:09:44.000000000","message":"This basically addresses a chunk of Carol\u0027s problem, at least when passed as an incorrectly formatted url :)","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"40134886ce8bb872c9f05fb3bfaa11b27b6ec6d3","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"            _validate_image_url(node, image_source)"},{"line_number":1237,"context_line":"        except exception.ImageRefIsARedirect as e:"},{"line_number":1238,"context_line":"            if e.redirect_url:"},{"line_number":1239,"context_line":"                instance_info[\u0027image_source\u0027] \u003d e.redirect_url"},{"line_number":1240,"context_line":"        # image_url is internal, and used by IPA and some boot templates."},{"line_number":1241,"context_line":"        # in most cases, it needs to come from image_source explicitly."},{"line_number":1242,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"}],"source_content_type":"text/x-python","patch_set":2,"id":"f04bdb4c_8cde2c0e","line":1239,"updated":"2022-03-25 18:13:02.000000000","message":"hmm. the user specifies image_source... this will overwrite it. Might be a problem for the user...","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":1236,"context_line":"            _validate_image_url(node, image_source)"},{"line_number":1237,"context_line":"        except exception.ImageRefIsARedirect as e:"},{"line_number":1238,"context_line":"            if e.redirect_url:"},{"line_number":1239,"context_line":"                instance_info[\u0027image_source\u0027] \u003d e.redirect_url"},{"line_number":1240,"context_line":"        # image_url is internal, and used by IPA and some boot templates."},{"line_number":1241,"context_line":"        # in most cases, it needs to come from image_source explicitly."},{"line_number":1242,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"}],"source_content_type":"text/x-python","patch_set":2,"id":"ae8c0cdb_e3c084cf","line":1239,"in_reply_to":"a54e4d49_0452dfb2","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7ad5c27906216a046506c50fba3cd5759a8bdfca","unresolved":true,"context_lines":[{"line_number":1236,"context_line":"            _validate_image_url(node, image_source)"},{"line_number":1237,"context_line":"        except exception.ImageRefIsARedirect as e:"},{"line_number":1238,"context_line":"            if e.redirect_url:"},{"line_number":1239,"context_line":"                instance_info[\u0027image_source\u0027] \u003d e.redirect_url"},{"line_number":1240,"context_line":"        # image_url is internal, and used by IPA and some boot templates."},{"line_number":1241,"context_line":"        # in most cases, it needs to come from image_source explicitly."},{"line_number":1242,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"}],"source_content_type":"text/x-python","patch_set":2,"id":"a54e4d49_0452dfb2","line":1239,"in_reply_to":"f04bdb4c_8cde2c0e","updated":"2022-03-25 18:37:01.000000000","message":"Oh, yeah, doh. That should be image_url. Ideally we shoudl just fix the user\u0027s image_source too, but yeah.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":1233,"context_line":"        _cache_and_convert_image(task, instance_info)"},{"line_number":1234,"context_line":"    else:"},{"line_number":1235,"context_line":"        try:"},{"line_number":1236,"context_line":"            _validate_image_url(node, image_source)"},{"line_number":1237,"context_line":"        except exception.ImageRefIsARedirect as e:"},{"line_number":1238,"context_line":"            if e.redirect_url:"},{"line_number":1239,"context_line":"                instance_info[\u0027image_source\u0027] \u003d e.redirect_url"},{"line_number":1240,"context_line":"        # image_url is internal, and used by IPA and some boot templates."},{"line_number":1241,"context_line":"        # in most cases, it needs to come from image_source explicitly."},{"line_number":1242,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"}],"source_content_type":"text/x-python","patch_set":2,"id":"4c426977_1e8eb5a2","line":1239,"range":{"start_line":1236,"start_character":0,"end_line":1239,"end_character":62},"in_reply_to":"f6390f2c_4de697b4","updated":"2022-07-05 22:03:19.000000000","message":"No longer applicable.","commit_id":"2cc840e05c0e91661e8d2a8b9f52bd8d53b64aa8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f6582a876c548d3f57a10fbfb46a7bbe588a714b","unresolved":true,"context_lines":[{"line_number":1210,"context_line":"        _cache_and_convert_image(task, instance_info)"},{"line_number":1211,"context_line":"    else:"},{"line_number":1212,"context_line":"        _validate_image_url(node, image_source)"},{"line_number":1213,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    if not iwdi:"},{"line_number":1216,"context_line":"        instance_info[\u0027image_type\u0027] \u003d images.IMAGE_TYPE_PARTITION"}],"source_content_type":"text/x-python","patch_set":4,"id":"697fc631_fa33082c","side":"PARENT","line":1213,"updated":"2022-03-30 23:09:02.000000000","message":"doh, this undoes the redirect handling... which means I must have missed this being tested.","commit_id":"4d1bced623672d11d2d531fe12c066cd50133b79"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        _cache_and_convert_image(task, instance_info)"},{"line_number":1211,"context_line":"    else:"},{"line_number":1212,"context_line":"        _validate_image_url(node, image_source)"},{"line_number":1213,"context_line":"        instance_info[\u0027image_url\u0027] \u003d image_source"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    if not iwdi:"},{"line_number":1216,"context_line":"        instance_info[\u0027image_type\u0027] \u003d images.IMAGE_TYPE_PARTITION"}],"source_content_type":"text/x-python","patch_set":4,"id":"ad7a7416_e15e73e4","side":"PARENT","line":1213,"in_reply_to":"697fc631_fa33082c","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"4d1bced623672d11d2d531fe12c066cd50133b79"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":587,"context_line":"        except exception.ImageRefValidationFailed as e:"},{"line_number":588,"context_line":"            raise exception.InvalidParameterValue(err\u003de)"},{"line_number":589,"context_line":"        if not isap:"},{"line_number":590,"context_line":"            # While yes, we do want to validate image_source if we know we"},{"line_number":591,"context_line":"            # have a path instead of a file, we\u0027re just not done yet."},{"line_number":592,"context_line":"            return"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ac8936a7_8ada96c8","line":590,"updated":"2022-07-07 13:29:40.000000000","message":"maybe clarify what \u0027yes\u0027 means. (cuz eg \u0027isap\u0027 is False, guessing that\u0027s not what the \u0027yes\u0027 refers to? Or maybe it does, \u0027yes\u0027 that it is False?)","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        except exception.ImageRefValidationFailed as e:"},{"line_number":588,"context_line":"            raise exception.InvalidParameterValue(err\u003de)"},{"line_number":589,"context_line":"        if not isap:"},{"line_number":590,"context_line":"            # While yes, we do want to validate image_source if we know we"},{"line_number":591,"context_line":"            # have a path instead of a file, we\u0027re just not done yet."},{"line_number":592,"context_line":"            return"},{"line_number":593,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5641904c_0cba5d4a","line":590,"in_reply_to":"ac8936a7_8ada96c8","updated":"2022-07-07 18:08:08.000000000","message":"Revised the inline note to further clarify","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":1204,"context_line":"    image_download_source \u003d get_image_download_source(node)"},{"line_number":1205,"context_line":"    boot_option \u003d get_boot_option(task.node)"},{"line_number":1206,"context_line":"    # If our url ends with a /, then we have been supplied"},{"line_number":1207,"context_line":"    # a url path, and we can only deploy this in limited cases."},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    if service_utils.is_glance_image(image_source):"},{"line_number":1210,"context_line":"        glance \u003d image_service.GlanceImageService(context\u003dtask.context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"baf775fd_c9ee7fee","line":1207,"updated":"2022-07-07 13:29:40.000000000","message":"Wondering if it might make more sense for this comment to be somewhere else. It isn\u0027t associated with the boot_option line above it? More related to isap?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"    image_download_source \u003d get_image_download_source(node)"},{"line_number":1205,"context_line":"    boot_option \u003d get_boot_option(task.node)"},{"line_number":1206,"context_line":"    # If our url ends with a /, then we have been supplied"},{"line_number":1207,"context_line":"    # a url path, and we can only deploy this in limited cases."},{"line_number":1208,"context_line":""},{"line_number":1209,"context_line":"    if service_utils.is_glance_image(image_source):"},{"line_number":1210,"context_line":"        glance \u003d image_service.GlanceImageService(context\u003dtask.context)"}],"source_content_type":"text/x-python","patch_set":7,"id":"b9d05b4e_6aec5a0b","line":1207,"in_reply_to":"baf775fd_c9ee7fee","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":1258,"context_line":"            instance_info[\u0027image_type\u0027] \u003d images.IMAGE_TYPE_WHOLE_DISK"},{"line_number":1259,"context_line":"    else:"},{"line_number":1260,"context_line":"        # Call central parsing so we retain things like config drives."},{"line_number":1261,"context_line":"        i_info \u003d parse_instance_info(node, image_deploy\u003dnot isap)"},{"line_number":1262,"context_line":"        instance_info.update(i_info)"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"    return instance_info"}],"source_content_type":"text/x-python","patch_set":7,"id":"24493088_50f90f32","line":1261,"updated":"2022-07-07 13:29:40.000000000","message":"nit, might be easier to grok if s/not isap/False/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":1258,"context_line":"            instance_info[\u0027image_type\u0027] \u003d images.IMAGE_TYPE_WHOLE_DISK"},{"line_number":1259,"context_line":"    else:"},{"line_number":1260,"context_line":"        # Call central parsing so we retain things like config drives."},{"line_number":1261,"context_line":"        i_info \u003d parse_instance_info(node, image_deploy\u003dnot isap)"},{"line_number":1262,"context_line":"        instance_info.update(i_info)"},{"line_number":1263,"context_line":""},{"line_number":1264,"context_line":"    return instance_info"}],"source_content_type":"text/x-python","patch_set":7,"id":"e8b00316_f78c03e9","line":1261,"in_reply_to":"24493088_50f90f32","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"}],"ironic/drivers/modules/ks.cfg.template":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":19,"context_line":"# Standalone users this is copied from the node instance_info image_source"},{"line_number":20,"context_line":"# field. If your not a standalone operator, you may wish to generate"},{"line_number":21,"context_line":"# release specific customized kickstart configuration files pointing them"},{"line_number":22,"context_line":"# to your own mirrors."},{"line_number":23,"context_line":"liveimg --url {{ ks_options.liveimg_url }}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Following %pre and %onerror sections are mandatory"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"67f00f23_6a94f8f7","line":22,"updated":"2022-07-07 13:29:40.000000000","message":"i don\u0027t understand this. what is a standalone user vs standalone operator? \u0027standalone\u0027 means ironic w/o OpenStack/glance? Should it be s/If your not a standalone operator/If you are a standalone operator/ ?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"# Standalone users this is copied from the node instance_info image_source"},{"line_number":20,"context_line":"# field. If your not a standalone operator, you may wish to generate"},{"line_number":21,"context_line":"# release specific customized kickstart configuration files pointing them"},{"line_number":22,"context_line":"# to your own mirrors."},{"line_number":23,"context_line":"liveimg --url {{ ks_options.liveimg_url }}"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Following %pre and %onerror sections are mandatory"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"2fd97d22_d9f7d2f8","line":22,"in_reply_to":"67f00f23_6a94f8f7","updated":"2022-07-07 18:08:08.000000000","message":"so realistically, the way it is glued together, someone supplying a template is ultimately entirely optional if they need a liveimg_url. It entirely depends on the template.\n\nAt the end of the day, I don\u0027t think there really is a difference, and I should just say that...\n\nI guess a next step is to makesure liveimg_url *can* is not explicitly required if a template is supplied or customized.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"521aae36dc380dc63831c424cdb8f96cf9152e4b","unresolved":true,"context_lines":[{"line_number":18,"context_line":"# Downloading and installing OS image using liveimg section is mandatory"},{"line_number":19,"context_line":"# in a *default* ironic configuration. Users (infrastructure operators)"},{"line_number":20,"context_line":"# may choose to customize this pattern, or use release specific kickstart"},{"line_number":21,"context_line":"# configurations which may alrady point to a mirror."},{"line_number":22,"context_line":"liveimg --url {{ ks_options.liveimg_url }}"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Following %pre and %onerror sections are mandatory"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"3e3ceddb_5892f022","line":21,"updated":"2022-07-08 13:42:15.000000000","message":"nit s/alrady/already/","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"# Downloading and installing OS image using liveimg section is mandatory"},{"line_number":19,"context_line":"# in a *default* ironic configuration. Users (infrastructure operators)"},{"line_number":20,"context_line":"# may choose to customize this pattern, or use release specific kickstart"},{"line_number":21,"context_line":"# configurations which may alrady point to a mirror."},{"line_number":22,"context_line":"liveimg --url {{ ks_options.liveimg_url }}"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Following %pre and %onerror sections are mandatory"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"bb8d7d34_7f9f8c43","line":21,"in_reply_to":"3e3ceddb_5892f022","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"4e2a904efa932822940a5bc73b90037539da7b52"}],"releasenotes/notes/anaconda-based-deploy-option-sanity-b98fa138747c16d2.yaml":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"0af588b764f62aa80433902991348acff8f928e1","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where ``root_gb`` became a required field when using the"},{"line_number":5,"context_line":"    ``anaconda`` deployment interface, with a recent butfix as the code path"},{"line_number":6,"context_line":"    largely expected all deployment operations to utilzie images, which is"},{"line_number":7,"context_line":"    not the case. The case handling for non-image based deployments is now"},{"line_number":8,"context_line":"    explicitly in internal parameter validation code."},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"8dfb8d79_0e51fe59","line":6,"updated":"2022-03-30 23:47:09.000000000","message":"nit: utilize","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"85d2e5b73f806a478be73e3b82ae3ecf38979e3a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where ``root_gb`` became a required field when using the"},{"line_number":5,"context_line":"    ``anaconda`` deployment interface, with a recent butfix as the code path"},{"line_number":6,"context_line":"    largely expected all deployment operations to utilzie images, which is"},{"line_number":7,"context_line":"    not the case. The case handling for non-image based deployments is now"},{"line_number":8,"context_line":"    explicitly in internal parameter validation code."},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"a7222d33_2a4891fc","line":6,"in_reply_to":"8dfb8d79_0e51fe59","updated":"2022-07-05 22:03:19.000000000","message":"Done","commit_id":"4d641987225d3554c69e3e0a4848772ba0264692"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where ``root_gb`` became a required field when using the"},{"line_number":5,"context_line":"    ``anaconda`` deployment interface, with a recent butfix as the code path"},{"line_number":6,"context_line":"    largely expected all deployment operations to utilize images, which is"},{"line_number":7,"context_line":"    not the case. The case handling for non-image based deployments is now"},{"line_number":8,"context_line":"    explicitly in internal parameter validation code."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"d515968d_d594228f","line":5,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/butfix/bug fix/ ?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue where ``root_gb`` became a required field when using the"},{"line_number":5,"context_line":"    ``anaconda`` deployment interface, with a recent butfix as the code path"},{"line_number":6,"context_line":"    largely expected all deployment operations to utilize images, which is"},{"line_number":7,"context_line":"    not the case. The case handling for non-image based deployments is now"},{"line_number":8,"context_line":"    explicitly in internal parameter validation code."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"0347b39d_155d3795","line":5,"in_reply_to":"d515968d_d594228f","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Fixes handling of ``image_source`` parameters where internal validations"},{"line_number":11,"context_line":"    would not gracefully handle received redirects and treat it as a failure."},{"line_number":12,"context_line":"    We now tollerate such failures."},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Fixes an issue where an ``image_source`` could not be set to a mirror url"},{"line_number":15,"context_line":"    to facilitate deployments using a mirror with the ``anaconda`` deployment"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"8f73a82b_f6516adf","line":12,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/tollerate/tolerate/\n\nAlthough, what about \u0027We now handle redirects\u0027 ?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    Fixes handling of ``image_source`` parameters where internal validations"},{"line_number":11,"context_line":"    would not gracefully handle received redirects and treat it as a failure."},{"line_number":12,"context_line":"    We now tollerate such failures."},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Fixes an issue where an ``image_source`` could not be set to a mirror url"},{"line_number":15,"context_line":"    to facilitate deployments using a mirror with the ``anaconda`` deployment"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"c7d73593_f7ded07d","line":12,"in_reply_to":"8f73a82b_f6516adf","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":11,"context_line":"    would not gracefully handle received redirects and treat it as a failure."},{"line_number":12,"context_line":"    We now tollerate such failures."},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Fixes an issue where an ``image_source`` could not be set to a mirror url"},{"line_number":15,"context_line":"    to facilitate deployments using a mirror with the ``anaconda`` deployment"},{"line_number":16,"context_line":"    interface. Ironic still presently has an explicit requirement on a"},{"line_number":17,"context_line":"    ``stage2`` parameter to be explicitly defined."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"723e8087_20b617f5","line":14,"updated":"2022-07-07 13:29:40.000000000","message":"nit s/url/URL/","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    would not gracefully handle received redirects and treat it as a failure."},{"line_number":12,"context_line":"    We now tollerate such failures."},{"line_number":13,"context_line":"  - |"},{"line_number":14,"context_line":"    Fixes an issue where an ``image_source`` could not be set to a mirror url"},{"line_number":15,"context_line":"    to facilitate deployments using a mirror with the ``anaconda`` deployment"},{"line_number":16,"context_line":"    interface. Ironic still presently has an explicit requirement on a"},{"line_number":17,"context_line":"    ``stage2`` parameter to be explicitly defined."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"6a360ded_25ded6d7","line":14,"in_reply_to":"723e8087_20b617f5","updated":"2022-07-07 18:08:08.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e0f95bba3adeff431cb5fb54fbd440e80635f6ab","unresolved":true,"context_lines":[{"line_number":17,"context_line":"    ``stage2`` parameter to be explicitly defined."},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    Adds documentation of standalone deployment use case with the ``anaconda``"},{"line_number":20,"context_line":"    deployment interface."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"120098f8_f8329f55","line":20,"updated":"2022-07-07 13:29:40.000000000","message":"I didn\u0027t think we mentioned addition of documentation in our release notes?","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3a39edc8363f9f24c23967bcf5167ae844dfc7e7","unresolved":true,"context_lines":[{"line_number":17,"context_line":"    ``stage2`` parameter to be explicitly defined."},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    Adds documentation of standalone deployment use case with the ``anaconda``"},{"line_number":20,"context_line":"    deployment interface."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"35b2896e_cc621528","line":20,"in_reply_to":"120098f8_f8329f55","updated":"2022-07-07 18:08:08.000000000","message":"Perhaps in other? It just seemed appropriate to note.","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"819f9270e5864a9db186b0397920c623c5f8909b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    ``stage2`` parameter to be explicitly defined."},{"line_number":18,"context_line":"  - |"},{"line_number":19,"context_line":"    Adds documentation of standalone deployment use case with the ``anaconda``"},{"line_number":20,"context_line":"    deployment interface."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"72550532_0b8d5480","line":20,"in_reply_to":"35b2896e_cc621528","updated":"2022-07-11 14:30:52.000000000","message":"Done","commit_id":"3bf1d354bec050e4b10dcfd4eacb87094edb4501"}]}
