)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5a1dc18d47162a92c9b66963fe1ce9feab84e3ee","unresolved":true,"context_lines":[{"line_number":20,"context_line":"- User driven auth seems to be good."},{"line_number":21,"context_line":"- Tags work with Quay, however not OpenShift due to what appears"},{"line_number":22,"context_line":"  to be additional request validation."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I17f7ba57e0ec1a5451890838f153746f5f8e5182"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"2618054c_b9a473ca","line":23,"updated":"2025-01-24 21:22:11.000000000","message":"need to add a Closes tag for 2085565","commit_id":"c0785f3bc6515983b2ea9bc616af23ff27be5ae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f42a5409f4ebf7c394404349600e7f16878d1e20","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- User driven auth seems to be good."},{"line_number":21,"context_line":"- Tags work with Quay, however not OpenShift due to what appears"},{"line_number":22,"context_line":"  to be additional request validation."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Change-Id: I17f7ba57e0ec1a5451890838f153746f5f8e5182"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"574e31cf_1176215c","line":23,"in_reply_to":"2618054c_b9a473ca","updated":"2025-01-27 14:18:55.000000000","message":"Done","commit_id":"c0785f3bc6515983b2ea9bc616af23ff27be5ae3"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"d3dbad7b_424c5829","updated":"2025-01-07 03:49:07.000000000","message":"Here is a start on reviewing","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"71821c27adf699b00cc129bb8508cf890a1b8deb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"44b67997_e5ca2157","updated":"2025-01-21 14:40:22.000000000","message":"My steps to test have been the following:\n\n. openrc admin\nopenstack subnet set  --dns-nameserver 8.8.8.8 private-subnet\nport\u003d$(openstack port create --vnic-type baremetal --network private test-port  -f value -c id)\nunset OS_PROJECT_DOMAIN_ID\nunset OS_PROJECT_NAME\nopenstack --os-system-scope all baremetal node list\nopenstack --os-system-scope all baremetal node vif attach node-0 $port\nopenstack --os-system-scope all baremetal node set --instance-info image_source\u003doci://quay.io/podman/machine-os:5.3 node-0\nopenstack --os-system-scope all baremetal node deploy node-0","commit_id":"c0785f3bc6515983b2ea9bc616af23ff27be5ae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"851d8a0cf4579ec4ceda5ab99024452289ff7263","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"b07b84c4_5841d809","updated":"2025-01-21 16:41:18.000000000","message":"recheck ci should be good now","commit_id":"c0785f3bc6515983b2ea9bc616af23ff27be5ae3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f7bde145d0d7d7d058ce7a42aa69358a2308a8cf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"92043cc7_84666c0d","updated":"2025-02-06 16:17:00.000000000","message":"/home/jkreger/ironic/ironic/common/image_service.py:docstring of ironic.common.image_service.OciImageService.identify_specific_image:46: ERROR: Unexpected indentation. [docutils]\n/home/jkreger/ironic/ironic/common/oci_registry.py:docstring of ironic.common.oci_registry.RegistrySessionHelper.get_token_from_config:15: WARNING: Definition list ends without a blank line; unexpected unindent. [docutils]\n/home/jkreger/ironic/ironic/common/oci_registry.py:docstring of ironic.common.oci_registry.RegistrySessionHelper.get_token_from_config:16: WARNING: Definition list ends without a blank line; unexpected unindent. [docutils]\n/home/jkreger/ironic/ironic/common/oci_registry.py:docstring of ironic.common.oci_registry.RegistrySessionHelper.get_token_from_config:17: WARNING: Definition list ends without a blank line; unexpected unindent. [docutils]\nWARNING: autodoc: failed to import module \u0027metrics_statsd\u0027 from module \u0027ironic.conf\u0027; the following exception was raised:","commit_id":"45f03d7d15e3811615bc7d7cdaa7e79b513659a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"492d54c73272bf494b7c265c27e3ce4ba97ad36d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"d81ef40c_62f0f48d","updated":"2025-02-03 14:21:33.000000000","message":"boop","commit_id":"45f03d7d15e3811615bc7d7cdaa7e79b513659a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5a1dc18d47162a92c9b66963fe1ce9feab84e3ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"f0b678b2_bb95f36e","updated":"2025-01-24 21:22:11.000000000","message":"recheck ironic lock collision with a test","commit_id":"45f03d7d15e3811615bc7d7cdaa7e79b513659a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"1c88166286b88534845572a83e404abb0f190233","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"274e74d5_68177be8","updated":"2025-01-25 13:39:15.000000000","message":"recheck tarballs.opendev.org inaccessible","commit_id":"45f03d7d15e3811615bc7d7cdaa7e79b513659a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"5e677779aa131af9358273eab057f6d738944955","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"277ed76e_e1eb25aa","updated":"2025-02-06 02:00:15.000000000","message":"robot says beep boop","commit_id":"45f03d7d15e3811615bc7d7cdaa7e79b513659a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"14e192fc5183ee2a6515bcba140857f62fc4dfc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"9940ab35_06b152b7","updated":"2025-02-06 23:08:21.000000000","message":"recheck network connectivity issue post-deploy 😭","commit_id":"db4412d5704417e7b6cf4146566c509b1e32731b"}],"doc/source/admin/oci-container-registry.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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Use of an OCI Container Registry"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Overview"},{"line_number":8,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"4cd1ce36_c1505ebb","line":5,"updated":"2025-01-10 21:23:34.000000000","message":"Can we add some reference links to what an OCI container registry is for people who might not have as much container context.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Use of an OCI Container Registry"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Overview"},{"line_number":8,"context_line":"--------"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ece8fbd0_1e1b6e7d","line":5,"in_reply_to":"4cd1ce36_c1505ebb","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":83,"context_line":"   file with many layers to make a container, but for an artifact only a"},{"line_number":84,"context_line":"   single file is represented by this manifest, and we retrieve this"},{"line_number":85,"context_line":"   specific file."},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"Known Limitations"},{"line_number":88,"context_line":"-----------------"},{"line_number":89,"context_line":"* For usage with disk images, only whole-disk images are supported."}],"source_content_type":"text/x-rst","patch_set":11,"id":"d4cb3d9a_51a3e7f0","line":86,"updated":"2025-01-16 21:18:48.000000000","message":"One item to likely, epxlicitly, note, is use of tags with non-disk image artifacts is presently not supported.","commit_id":"ff910c4a855023f41dd4113b9201f90cab213f16"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":45,"context_line":"Matching is performed with an attempt to weigh preference to file type"},{"line_number":46,"context_line":"based upon the configured ``image_download_source``, where as with a ``local``"},{"line_number":47,"context_line":"value, ``qcow2`` disk images are preferred. Otherwise ``raw`` is preferred."},{"line_number":48,"context_line":"This uses the ``disktype`` annotation where ``qcow2`` and ``qemu`` are"},{"line_number":49,"context_line":"considered QCOW2 format images. A ``disktype`` annotation on the manifests"},{"line_number":50,"context_line":"of ``raw`` or ``applehv``, are considered raw disk images."},{"line_number":51,"context_line":"Once file types have been appropriately weighted, the code attempts to match"}],"source_content_type":"text/x-rst","patch_set":13,"id":"23e12618_a9fea3e9","line":48,"updated":"2025-01-17 00:47:38.000000000","message":"Maybe a preamble about how images have manifests with blob entries that have annotations before referring to annotations here","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":45,"context_line":"Matching is performed with an attempt to weigh preference to file type"},{"line_number":46,"context_line":"based upon the configured ``image_download_source``, where as with a ``local``"},{"line_number":47,"context_line":"value, ``qcow2`` disk images are preferred. Otherwise ``raw`` is preferred."},{"line_number":48,"context_line":"This uses the ``disktype`` annotation where ``qcow2`` and ``qemu`` are"},{"line_number":49,"context_line":"considered QCOW2 format images. A ``disktype`` annotation on the manifests"},{"line_number":50,"context_line":"of ``raw`` or ``applehv``, are considered raw disk images."},{"line_number":51,"context_line":"Once file types have been appropriately weighted, the code attempts to match"}],"source_content_type":"text/x-rst","patch_set":13,"id":"0833749c_560d1479","line":48,"in_reply_to":"23e12618_a9fea3e9","updated":"2025-01-17 17:44:02.000000000","message":"Done as part of the move up of the data model context.","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":69,"context_line":"such as annotations, as annotations are part of the structural data"},{"line_number":70,"context_line":"which points to manifests in the first place."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Think of the data model in three parts."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- Artifact Index - Higher level list which points to manifests and contains"},{"line_number":75,"context_line":"  information like annotations, platform, architecture."},{"line_number":76,"context_line":"- Manifest - The intermediate structural location which contains the lower"},{"line_number":77,"context_line":"  level details related to the blob (Binary Large OBject) data as well as"},{"line_number":78,"context_line":"  the information where to find the blob data."},{"line_number":79,"context_line":"- Blob data - The actual artifact."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"An added advantage to the use of container registries, is that the"},{"line_number":82,"context_line":"checksum *is confirmed* in transit based upon the supplied metadata"}],"source_content_type":"text/x-rst","patch_set":13,"id":"0d7e7d0a_af819944","line":79,"range":{"start_line":72,"start_character":0,"end_line":79,"end_character":34},"updated":"2025-01-17 00:47:38.000000000","message":"OK this is more like the preamble, maybe move it up?","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":69,"context_line":"such as annotations, as annotations are part of the structural data"},{"line_number":70,"context_line":"which points to manifests in the first place."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Think of the data model in three parts."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"- Artifact Index - Higher level list which points to manifests and contains"},{"line_number":75,"context_line":"  information like annotations, platform, architecture."},{"line_number":76,"context_line":"- Manifest - The intermediate structural location which contains the lower"},{"line_number":77,"context_line":"  level details related to the blob (Binary Large OBject) data as well as"},{"line_number":78,"context_line":"  the information where to find the blob data."},{"line_number":79,"context_line":"- Blob data - The actual artifact."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"An added advantage to the use of container registries, is that the"},{"line_number":82,"context_line":"checksum *is confirmed* in transit based upon the supplied metadata"}],"source_content_type":"text/x-rst","patch_set":13,"id":"2afc09c5_093fe27c","line":79,"range":{"start_line":72,"start_character":0,"end_line":79,"end_character":34},"in_reply_to":"0d7e7d0a_af819944","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":112,"context_line":"  value can be set to a file which parses the common auth configuration"},{"line_number":113,"context_line":"  format used for container tooling in regards to the secret to utilize"},{"line_number":114,"context_line":"  for container registry authentication. This value is only consulted"},{"line_number":115,"context_line":"  *if* a specific secret has not been defined to utilize."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"An example of the configuration file looks something like the following"},{"line_number":118,"context_line":"example."}],"source_content_type":"text/x-rst","patch_set":13,"id":"d7ae4303_69ee4863","line":115,"updated":"2025-01-17 00:47:38.000000000","message":"Is it worth mentioning that this just happens to look exactly like the docker config.json auths section? Maybe there is some docs elsewhere which describes the format","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":112,"context_line":"  value can be set to a file which parses the common auth configuration"},{"line_number":113,"context_line":"  format used for container tooling in regards to the secret to utilize"},{"line_number":114,"context_line":"  for container registry authentication. This value is only consulted"},{"line_number":115,"context_line":"  *if* a specific secret has not been defined to utilize."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"An example of the configuration file looks something like the following"},{"line_number":118,"context_line":"example."}],"source_content_type":"text/x-rst","patch_set":13,"id":"a1acd74a_3846360e","line":115,"in_reply_to":"d7ae4303_69ee4863","updated":"2025-01-17 17:44:02.000000000","message":"I explicitly noted it. I don\u0027t think there is a format, I suspect most users of this will want to autogenerate periodically. For example, I think when I generate a token on OpenShift CRC, it is only good for like 4 hours. Of course, actual long lived tokens I think can be good for longer term.","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":182,"context_line":"  of Ironic."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Some artifacts may be compressed using Zstandard. Only disk images or"},{"line_number":185,"context_line":"  artifacts which transit through the conductor may be appropriatley"},{"line_number":186,"context_line":"  decompressed. Unfortunately IPA won\u0027t be able to decompress such artifacts"},{"line_number":187,"context_line":"  dynamically while streaming content."},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"98ee69a9_d22552f3","line":185,"updated":"2025-02-06 16:56:32.000000000","message":"sp: appropriately","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":182,"context_line":"  of Ironic."},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"* Some artifacts may be compressed using Zstandard. Only disk images or"},{"line_number":185,"context_line":"  artifacts which transit through the conductor may be appropriatley"},{"line_number":186,"context_line":"  decompressed. Unfortunately IPA won\u0027t be able to decompress such artifacts"},{"line_number":187,"context_line":"  dynamically while streaming content."},{"line_number":188,"context_line":""}],"source_content_type":"text/x-rst","patch_set":18,"id":"5953ad4d_f4b860b5","line":185,"in_reply_to":"98ee69a9_d22552f3","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":199,"context_line":"  `Ironic Launchpad \u003chttps://bugs.launchpad.net/ironic\u003e`_."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"How do I upload files to my own registry?"},{"line_number":202,"context_line":"-----------------------------------------"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"While there are several different ways to do this, the easiest path is to"},{"line_number":205,"context_line":"leverage a tool called ``ORAS``. You can learn more about ORAS at"}],"source_content_type":"text/x-rst","patch_set":18,"id":"45c7d7cc_6abcf9c8","line":202,"updated":"2025-02-06 16:56:32.000000000","message":"I wonder if we\u0027d be better off \"outsourcing\" this doc to the actual registry uploading software. I just worry about this doc getting dated very quickly.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3577426b507dc46220a86b95fbd29674043809e3","unresolved":true,"context_lines":[{"line_number":199,"context_line":"  `Ironic Launchpad \u003chttps://bugs.launchpad.net/ironic\u003e`_."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"How do I upload files to my own registry?"},{"line_number":202,"context_line":"-----------------------------------------"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"While there are several different ways to do this, the easiest path is to"},{"line_number":205,"context_line":"leverage a tool called ``ORAS``. You can learn more about ORAS at"}],"source_content_type":"text/x-rst","patch_set":18,"id":"8d641edc_39bf981c","line":202,"in_reply_to":"147048b9_b80403de","updated":"2025-02-10 04:27:19.000000000","message":"Definitely +2 on specific examples here. Sure the tooling may evolve but we need specific examples of how to do it today","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":true,"context_lines":[{"line_number":199,"context_line":"  `Ironic Launchpad \u003chttps://bugs.launchpad.net/ironic\u003e`_."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"How do I upload files to my own registry?"},{"line_number":202,"context_line":"-----------------------------------------"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"While there are several different ways to do this, the easiest path is to"},{"line_number":205,"context_line":"leverage a tool called ``ORAS``. You can learn more about ORAS at"}],"source_content_type":"text/x-rst","patch_set":18,"id":"147048b9_b80403de","line":202,"in_reply_to":"45c7d7cc_6abcf9c8","updated":"2025-02-06 19:38:43.000000000","message":"ORAS docs are actually kind of confusing and are more focused on \"put a file or files in the thing and magically extract it\" where as we need to also teach through the mental context of how to do direct digest URLs.\n\nAlso, Dmtiry made a really firm point early on, if folks don\u0027t clearly see how to leverage it, they won\u0027t use it.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"ironic/common/checksum_utils.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":true,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        \"\"\""},{"line_number":278,"context_line":"        self._chunk_size \u003d 1024 * 1024  # 1MB"},{"line_number":279,"context_line":"        self._time \u003d time.time()"},{"line_number":280,"context_line":"        self._request \u003d response"},{"line_number":281,"context_line":"        self._bytes_transferred \u003d 0"},{"line_number":282,"context_line":"        self._expected_size \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"e7734b39_4a99cf66","line":279,"updated":"2025-01-07 03:49:07.000000000","message":"Is this meant to be self._last_chunk_time?","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        \"\"\""},{"line_number":278,"context_line":"        self._chunk_size \u003d 1024 * 1024  # 1MB"},{"line_number":279,"context_line":"        self._time \u003d time.time()"},{"line_number":280,"context_line":"        self._request \u003d response"},{"line_number":281,"context_line":"        self._bytes_transferred \u003d 0"},{"line_number":282,"context_line":"        self._expected_size \u003d None"}],"source_content_type":"text/x-python","patch_set":1,"id":"d723ac3f_33c28bf2","line":279,"in_reply_to":"e7734b39_4a99cf66","updated":"2025-01-07 21:18:28.000000000","message":"Yes, likely!","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":true,"context_lines":[{"line_number":279,"context_line":"        self._time \u003d time.time()"},{"line_number":280,"context_line":"        self._request \u003d response"},{"line_number":281,"context_line":"        self._bytes_transferred \u003d 0"},{"line_number":282,"context_line":"        self._expected_size \u003d None"},{"line_number":283,"context_line":"        self._checksum_algo \u003d checksum_algo"},{"line_number":284,"context_line":"        self._expected_checksum \u003d expected_checksum"},{"line_number":285,"context_line":"        self._expected_size \u003d self._request.headers.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"94f9d591_36001a8e","line":282,"updated":"2025-01-07 03:49:07.000000000","message":"nit, remove this line","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        self._time \u003d time.time()"},{"line_number":280,"context_line":"        self._request \u003d response"},{"line_number":281,"context_line":"        self._bytes_transferred \u003d 0"},{"line_number":282,"context_line":"        self._expected_size \u003d None"},{"line_number":283,"context_line":"        self._checksum_algo \u003d checksum_algo"},{"line_number":284,"context_line":"        self._expected_checksum \u003d expected_checksum"},{"line_number":285,"context_line":"        self._expected_size \u003d self._request.headers.get("}],"source_content_type":"text/x-python","patch_set":1,"id":"19c4b23a_cf92adb7","line":282,"in_reply_to":"94f9d591_36001a8e","updated":"2025-01-07 21:18:28.000000000","message":"Done.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":348,"context_line":"                       \u0027xfer_checksum\u0027: checksum})"},{"line_number":349,"context_line":"            return True"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    @property"},{"line_number":352,"context_line":"    def bytes_transferred(self):"},{"line_number":353,"context_line":"        \"\"\"Property value to return the number of bytes transferred.\"\"\""},{"line_number":354,"context_line":"        return self._bytes_transferred"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    @property"},{"line_number":357,"context_line":"    def content_length(self):"},{"line_number":358,"context_line":"        \"\"\"Property value to return the server indicated length.\"\"\""},{"line_number":359,"context_line":"        # If none, there is nothing we can do, the server didn\u0027t have"},{"line_number":360,"context_line":"        # a response."},{"line_number":361,"context_line":"        return self._expected_size"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def validate_text_checksum(payload, digest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"95f1a697_fd16986d","line":361,"range":{"start_line":351,"start_character":0,"end_line":361,"end_character":34},"updated":"2025-01-06 19:09:34.000000000","message":"check if we really need these","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                       \u0027xfer_checksum\u0027: checksum})"},{"line_number":349,"context_line":"            return True"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    @property"},{"line_number":352,"context_line":"    def bytes_transferred(self):"},{"line_number":353,"context_line":"        \"\"\"Property value to return the number of bytes transferred.\"\"\""},{"line_number":354,"context_line":"        return self._bytes_transferred"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"    @property"},{"line_number":357,"context_line":"    def content_length(self):"},{"line_number":358,"context_line":"        \"\"\"Property value to return the server indicated length.\"\"\""},{"line_number":359,"context_line":"        # If none, there is nothing we can do, the server didn\u0027t have"},{"line_number":360,"context_line":"        # a response."},{"line_number":361,"context_line":"        return self._expected_size"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def validate_text_checksum(payload, digest):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ee6a904_83d856b0","line":361,"range":{"start_line":351,"start_character":0,"end_line":361,"end_character":34},"in_reply_to":"95f1a697_fd16986d","updated":"2025-01-07 21:18:28.000000000","message":"I think the answer is yes, I\u0027ll add the debug log soon, but leave this around until I do so.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def validate_text_checksum(payload, digest):"},{"line_number":365,"context_line":"    \"Compares the checksum of a payload versus the digest.\"\"\""},{"line_number":366,"context_line":"    split_digest \u003d digest.split(\u0027:\u0027)"},{"line_number":367,"context_line":"    checksum_algo \u003d split_digest[0]"},{"line_number":368,"context_line":"    checksum \u003d split_digest[1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"d75c6c0d_c2814633","line":365,"updated":"2025-01-06 19:09:34.000000000","message":"docstring needs to be fixed... \n\nAlso, likely would be better to be a bit more verbose.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"def validate_text_checksum(payload, digest):"},{"line_number":365,"context_line":"    \"Compares the checksum of a payload versus the digest.\"\"\""},{"line_number":366,"context_line":"    split_digest \u003d digest.split(\u0027:\u0027)"},{"line_number":367,"context_line":"    checksum_algo \u003d split_digest[0]"},{"line_number":368,"context_line":"    checksum \u003d split_digest[1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5cd32ff2_3ea09f05","line":365,"in_reply_to":"d75c6c0d_c2814633","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":280,"context_line":"        with `stream\u003dTrue`, which also builds the checksum digest as the"},{"line_number":281,"context_line":"        transfer is underway."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        :param response: The requests library *response* object."},{"line_number":284,"context_line":"        :param checksum_algo: The expected checksum algorithm."},{"line_number":285,"context_line":"        :param expected_checksum: The expected checksum of the data being"},{"line_number":286,"context_line":"                                  transferred."}],"source_content_type":"text/x-python","patch_set":9,"id":"212c2467_2d361010","line":283,"updated":"2025-01-10 21:23:34.000000000","message":"Maybe an actual reference to the object? e.g. requests.blah.Response","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        with `stream\u003dTrue`, which also builds the checksum digest as the"},{"line_number":281,"context_line":"        transfer is underway."},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        :param response: The requests library *response* object."},{"line_number":284,"context_line":"        :param checksum_algo: The expected checksum algorithm."},{"line_number":285,"context_line":"        :param expected_checksum: The expected checksum of the data being"},{"line_number":286,"context_line":"                                  transferred."}],"source_content_type":"text/x-python","patch_set":9,"id":"f97a513e_0991ee17","line":283,"in_reply_to":"212c2467_2d361010","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":298,"context_line":"        # and verification, fallback to md5 if algorithm is not set or not"},{"line_number":299,"context_line":"        # supported."},{"line_number":300,"context_line":"        if checksum_algo in hashlib.algorithms_available:"},{"line_number":301,"context_line":"            self._hash_algo \u003d hashlib.new(checksum_algo)"},{"line_number":302,"context_line":"        else:"},{"line_number":303,"context_line":"            raise ValueError(\"Unable to process checksum processing \""},{"line_number":304,"context_line":"                             \"for image transfer. Algorithm %s \""}],"source_content_type":"text/x-python","patch_set":9,"id":"48675128_c2fbf294","line":301,"updated":"2025-01-10 21:23:34.000000000","message":"Don\u0027t we have an option to disable MD5 throughout? Should we honor that here?","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a5e4d46848adcd81b357553f7de73c4d5d0b381d","unresolved":true,"context_lines":[{"line_number":298,"context_line":"        # and verification, fallback to md5 if algorithm is not set or not"},{"line_number":299,"context_line":"        # supported."},{"line_number":300,"context_line":"        if checksum_algo in hashlib.algorithms_available:"},{"line_number":301,"context_line":"            self._hash_algo \u003d hashlib.new(checksum_algo)"},{"line_number":302,"context_line":"        else:"},{"line_number":303,"context_line":"            raise ValueError(\"Unable to process checksum processing \""},{"line_number":304,"context_line":"                             \"for image transfer. Algorithm %s \""}],"source_content_type":"text/x-python","patch_set":9,"id":"f14e860f_cb3cf7f6","line":301,"in_reply_to":"48675128_c2fbf294","updated":"2025-01-10 21:41:19.000000000","message":"It is all modeled on sha256 by default., but makes sense to add that check as well.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        # and verification, fallback to md5 if algorithm is not set or not"},{"line_number":299,"context_line":"        # supported."},{"line_number":300,"context_line":"        if checksum_algo in hashlib.algorithms_available:"},{"line_number":301,"context_line":"            self._hash_algo \u003d hashlib.new(checksum_algo)"},{"line_number":302,"context_line":"        else:"},{"line_number":303,"context_line":"            raise ValueError(\"Unable to process checksum processing \""},{"line_number":304,"context_line":"                             \"for image transfer. Algorithm %s \""}],"source_content_type":"text/x-python","patch_set":9,"id":"8eb1ad3c_38cbfea6","line":301,"in_reply_to":"f14e860f_cb3cf7f6","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":290,"context_line":"        # downloading and checksumming a raw image while streaming."},{"line_number":291,"context_line":"        # If a change is required here, it might be worthwhile to"},{"line_number":292,"context_line":"        # consider if a similar change is needed in IPA."},{"line_number":293,"context_line":"        self._chunk_size \u003d 1024 * 1024  # 1MB"},{"line_number":294,"context_line":"        self._last_check_time \u003d time.time()"},{"line_number":295,"context_line":"        self._request \u003d response"},{"line_number":296,"context_line":"        self._bytes_transferred \u003d 0"}],"source_content_type":"text/x-python","patch_set":13,"id":"98817bb1_5801706c","line":293,"updated":"2025-01-17 00:47:38.000000000","message":"Some benchmarking would show whether chunk_size\u003dNone might be the same speed as 1MB, but more memory friendly in a multi tenant environment.\n\nSee https://requests.readthedocs.io/en/latest/api/#requests.Response.iter_content","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        # downloading and checksumming a raw image while streaming."},{"line_number":291,"context_line":"        # If a change is required here, it might be worthwhile to"},{"line_number":292,"context_line":"        # consider if a similar change is needed in IPA."},{"line_number":293,"context_line":"        self._chunk_size \u003d 1024 * 1024  # 1MB"},{"line_number":294,"context_line":"        self._last_check_time \u003d time.time()"},{"line_number":295,"context_line":"        self._request \u003d response"},{"line_number":296,"context_line":"        self._bytes_transferred \u003d 0"}],"source_content_type":"text/x-python","patch_set":13,"id":"58f07dbf_bf66d262","line":293,"in_reply_to":"194c9884_29de7d4f","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":true,"context_lines":[{"line_number":290,"context_line":"        # downloading and checksumming a raw image while streaming."},{"line_number":291,"context_line":"        # If a change is required here, it might be worthwhile to"},{"line_number":292,"context_line":"        # consider if a similar change is needed in IPA."},{"line_number":293,"context_line":"        self._chunk_size \u003d 1024 * 1024  # 1MB"},{"line_number":294,"context_line":"        self._last_check_time \u003d time.time()"},{"line_number":295,"context_line":"        self._request \u003d response"},{"line_number":296,"context_line":"        self._bytes_transferred \u003d 0"}],"source_content_type":"text/x-python","patch_set":13,"id":"194c9884_29de7d4f","line":293,"in_reply_to":"98817bb1_5801706c","updated":"2025-01-17 17:44:02.000000000","message":"The pattern is copied from IPA, and in testing seemed relatively performant in that we also don\u0027t want to iterate the process every few hundred bytes or as we receieve packets of variable sizes as we\u0027re also doing the checksumming and ... if my memory is serving me on the half cup of coffee so far today, we need to hand hashlib in some minimum sized blocks for proper execution until the final block. Ultimately it does mean we consume more memory though.\n\nI saw a variable of ~100-130 seconds for 2.4 GB with this code, I can try to tune it down, but I don\u0027t think we can safely run it with None.\n\nI\u0027m adding a semi-verbose note to the code, because I can see the possibility that the window might not scale to maximum performance because of only reading data in 1M chunks off of the socket.","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"}],"ironic/common/image_service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        # Note, this is not yet authenticated!"},{"line_number":360,"context_line":"        self._client \u003d oci_registry.OciClient(verify\u003dverify)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def _validate_url_is_specific(self, image_href):"},{"line_number":363,"context_line":"        split_string_array \u003d str(image_href).split(\u0027@\u0027)"},{"line_number":364,"context_line":"        if len(split_string_array) \u003c 2:"},{"line_number":365,"context_line":"            # Lacks a digest pointer."}],"source_content_type":"text/x-python","patch_set":1,"id":"6ff95eca_10a12c20","line":362,"updated":"2025-01-07 03:49:07.000000000","message":"maybe do most of this with the components of urlparse.urlparse(image_href)? you\u0027ll get a bunch of url validation for free","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":true,"context_lines":[{"line_number":359,"context_line":"        # Note, this is not yet authenticated!"},{"line_number":360,"context_line":"        self._client \u003d oci_registry.OciClient(verify\u003dverify)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def _validate_url_is_specific(self, image_href):"},{"line_number":363,"context_line":"        split_string_array \u003d str(image_href).split(\u0027@\u0027)"},{"line_number":364,"context_line":"        if len(split_string_array) \u003c 2:"},{"line_number":365,"context_line":"            # Lacks a digest pointer."}],"source_content_type":"text/x-python","patch_set":1,"id":"d080b1c4_29a2d720","line":362,"in_reply_to":"6ff95eca_10a12c20","updated":"2025-01-07 21:18:28.000000000","message":"I\u0027m not entirely sure that helps, because we\u0027re seeking to identify if the latter portion of the URL has specific values denoting a manifest digest indicator.\n\nI mean, we could call urlparse.urlparse(image_href).path and do the same thing with it. Dunno. Need to ponder it.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        # Note, this is not yet authenticated!"},{"line_number":360,"context_line":"        self._client \u003d oci_registry.OciClient(verify\u003dverify)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def _validate_url_is_specific(self, image_href):"},{"line_number":363,"context_line":"        split_string_array \u003d str(image_href).split(\u0027@\u0027)"},{"line_number":364,"context_line":"        if len(split_string_array) \u003c 2:"},{"line_number":365,"context_line":"            # Lacks a digest pointer."}],"source_content_type":"text/x-python","patch_set":1,"id":"83842188_b408998b","line":362,"in_reply_to":"d080b1c4_29a2d720","updated":"2025-01-10 18:31:54.000000000","message":"I moved this to using urlparse.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":true,"context_lines":[{"line_number":545,"context_line":"                \u0027oci_image_manifest_url\u0027: \u0027https://fqdn/path@sha256:123f...\u0027,"},{"line_number":546,"context_line":"              }"},{"line_number":547,"context_line":"        \"\"\""},{"line_number":548,"context_line":"        # TODO(TheJulia): Ideally we should call the referrers endpoing"},{"line_number":549,"context_line":"        # in the remote API, however, it is *very* new only having been"},{"line_number":550,"context_line":"        # apprived in Mid-2024. self._client.get_referrers_index(image_href)"},{"line_number":551,"context_line":"        # is present in the client code, but not exercised since... there is"}],"source_content_type":"text/x-python","patch_set":1,"id":"1465564f_76702b35","line":548,"range":{"start_line":548,"start_character":63,"end_line":548,"end_character":71},"updated":"2025-01-07 03:49:07.000000000","message":"s/endpoing/endboing/","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":545,"context_line":"                \u0027oci_image_manifest_url\u0027: \u0027https://fqdn/path@sha256:123f...\u0027,"},{"line_number":546,"context_line":"              }"},{"line_number":547,"context_line":"        \"\"\""},{"line_number":548,"context_line":"        # TODO(TheJulia): Ideally we should call the referrers endpoing"},{"line_number":549,"context_line":"        # in the remote API, however, it is *very* new only having been"},{"line_number":550,"context_line":"        # apprived in Mid-2024. self._client.get_referrers_index(image_href)"},{"line_number":551,"context_line":"        # is present in the client code, but not exercised since... there is"}],"source_content_type":"text/x-python","patch_set":1,"id":"aca745a3_c7934195","line":548,"range":{"start_line":548,"start_character":63,"end_line":548,"end_character":71},"in_reply_to":"1465564f_76702b35","updated":"2025-01-07 21:18:28.000000000","message":"lolz.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"37ce4cf964743c5dd9c2eeedb7e86f1c78215664","unresolved":true,"context_lines":[{"line_number":712,"context_line":"                \u0027image_image_raw\u0027: is_raw_image,"},{"line_number":713,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":714,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":715,"context_line":"            }"},{"line_number":716,"context_line":"        else:"},{"line_number":717,"context_line":"            return {}"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"94e99dc1_3a88b391","line":715,"updated":"2025-01-07 03:49:07.000000000","message":"There is enough going on here that maybe a real object is justified, and return None for no match. Because then every field is explicit and potentially documented","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":true,"context_lines":[{"line_number":712,"context_line":"                \u0027image_image_raw\u0027: is_raw_image,"},{"line_number":713,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":714,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":715,"context_line":"            }"},{"line_number":716,"context_line":"        else:"},{"line_number":717,"context_line":"            return {}"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9e34d41f_dfbccdd0","line":715,"in_reply_to":"94e99dc1_3a88b391","updated":"2025-01-07 21:18:28.000000000","message":"I like this idea, I\u0027ll likely come back to this in a future revision.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":true,"context_lines":[{"line_number":712,"context_line":"                \u0027image_image_raw\u0027: is_raw_image,"},{"line_number":713,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":714,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":715,"context_line":"            }"},{"line_number":716,"context_line":"        else:"},{"line_number":717,"context_line":"            return {}"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fe57aaa3_297aa6a8","line":715,"in_reply_to":"9e34d41f_dfbccdd0","updated":"2025-01-08 22:20:33.000000000","message":"I thought of a reason not to, unfortunately. Or maybe a reason to still do so, but doing so will scope creep things as well. At least, in the same patch.\n\nOne thing done in the glance image service is we do have an object, and then we extract a bunch of things in deploy_utils and populate fields back out.\n\nHere, all the values are being prepared for the caller to just be merged in the dictionary, so we don\u0027t need to take extra steps.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":712,"context_line":"                \u0027image_image_raw\u0027: is_raw_image,"},{"line_number":713,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":714,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":715,"context_line":"            }"},{"line_number":716,"context_line":"        else:"},{"line_number":717,"context_line":"            return {}"},{"line_number":718,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"d215db48_ad501831","line":715,"in_reply_to":"fe57aaa3_297aa6a8","updated":"2025-01-10 18:31:54.000000000","message":"Talked to Steve about this, and once he realized how the data was being used by the caller, he was okay with dropping the idea to keep things relatively straight forward.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":843,"context_line":"    return cls()"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"def get_image_service_auth_override(node, permit_user_auth\u003dTrue):"},{"line_number":847,"context_line":"    \"\"\"Collect image service authentication overrides"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    This method is intended to collect authentication credentials"}],"source_content_type":"text/x-python","patch_set":1,"id":"4d9fa11e_344eff8a","line":846,"updated":"2025-01-06 19:09:34.000000000","message":"Needs some unit testing","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":843,"context_line":"    return cls()"},{"line_number":844,"context_line":""},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"def get_image_service_auth_override(node, permit_user_auth\u003dTrue):"},{"line_number":847,"context_line":"    \"\"\"Collect image service authentication overrides"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    This method is intended to collect authentication credentials"}],"source_content_type":"text/x-python","patch_set":1,"id":"60a7dec4_ebac1451","line":846,"in_reply_to":"4d9fa11e_344eff8a","updated":"2025-01-08 22:20:33.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":882,"context_line":"        return None"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":""},{"line_number":885,"context_line":"def is_container_registry_url(image_href):"},{"line_number":886,"context_line":"    \"\"\"Determine if the supplied reference string is an OCI registry URL."},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    :param image_href: A string containing a url, sourced from the"}],"source_content_type":"text/x-python","patch_set":1,"id":"461b7145_09cae538","line":885,"updated":"2025-01-06 19:09:34.000000000","message":"nit: needs some unit testing.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":882,"context_line":"        return None"},{"line_number":883,"context_line":""},{"line_number":884,"context_line":""},{"line_number":885,"context_line":"def is_container_registry_url(image_href):"},{"line_number":886,"context_line":"    \"\"\"Determine if the supplied reference string is an OCI registry URL."},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"    :param image_href: A string containing a url, sourced from the"}],"source_content_type":"text/x-python","patch_set":1,"id":"13ddf32b_45143f79","line":885,"in_reply_to":"461b7145_09cae538","updated":"2025-01-08 22:20:33.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f7ef68ce77725849f8ca71873804314de08b1820","unresolved":true,"context_lines":[{"line_number":566,"context_line":"        # An image_url tells us if we\u0027ve found something matching what"},{"line_number":567,"context_line":"        # we\u0027re looking for."},{"line_number":568,"context_line":"        image_url \u003d None"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":571,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"},{"line_number":572,"context_line":"        manifests \u003d artifact_index.get(\u0027manifests\u0027, [])"}],"source_content_type":"text/x-python","patch_set":3,"id":"016fb2e3_9ce6bc1b","line":569,"updated":"2025-01-09 02:06:37.000000000","message":"Repeat after me: If we already have a full url, don\u0027t go down this rabbit hole.\n\njust return a dict with \"oci_image_manifest_url\"","commit_id":"13d6ebbd08e516c8fa83d2f992ce52d10434dfbb"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # An image_url tells us if we\u0027ve found something matching what"},{"line_number":567,"context_line":"        # we\u0027re looking for."},{"line_number":568,"context_line":"        image_url \u003d None"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":571,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"},{"line_number":572,"context_line":"        manifests \u003d artifact_index.get(\u0027manifests\u0027, [])"}],"source_content_type":"text/x-python","patch_set":3,"id":"ed0b360d_ddaf0bb4","line":569,"in_reply_to":"016fb2e3_9ce6bc1b","updated":"2025-01-10 18:31:54.000000000","message":"Okay, we need to return a checksum as well, and a url. Next revision.","commit_id":"13d6ebbd08e516c8fa83d2f992ce52d10434dfbb"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9ead542809274aefd62576eef93f8c9b975740f4","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                \u0027image_disk_format\u0027: \u0027raw\u0027 if is_raw_image else \u0027qcow2\u0027,"},{"line_number":728,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":729,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":730,"context_line":"            }"},{"line_number":731,"context_line":"        else:"},{"line_number":732,"context_line":"            return {}"},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"06c76125_4c054bd9","line":730,"updated":"2025-01-08 22:23:12.000000000","message":"Important items: image_url, image_disk_format, oci_image_manifest_url, and image_checksum. The rest we can likely disregard. We\u0027ll need to detect compression separately... but then again knowing from the registry does make it a bit cleaner.","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                \u0027image_disk_format\u0027: \u0027raw\u0027 if is_raw_image else \u0027qcow2\u0027,"},{"line_number":728,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":729,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":730,"context_line":"            }"},{"line_number":731,"context_line":"        else:"},{"line_number":732,"context_line":"            return {}"},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"48334b60_2d3666ec","line":730,"in_reply_to":"06c76125_4c054bd9","updated":"2025-01-10 21:23:34.000000000","message":"It weirds me out a little that we\u0027re calling this qcow2 without any metadata from the client saying it\u0027s qcow2 and without image format inspector telling us it\u0027s qcow2 -- what am I missing?","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a5e4d46848adcd81b357553f7de73c4d5d0b381d","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                \u0027image_disk_format\u0027: \u0027raw\u0027 if is_raw_image else \u0027qcow2\u0027,"},{"line_number":728,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":729,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":730,"context_line":"            }"},{"line_number":731,"context_line":"        else:"},{"line_number":732,"context_line":"            return {}"},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"576bfc96_9ce81efd","line":730,"in_reply_to":"48334b60_2d3666ec","updated":"2025-01-10 21:41:19.000000000","message":"This is modeled on \"either it is a qcow2 or raw\" thought process. Derived from is_raw_image derived from disktype values. In this case, because that data is on the higher level above the manifest, we are able to make some determinations, only once we have a specific manifest, we can\u0027t really do so.","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":true,"context_lines":[{"line_number":727,"context_line":"                \u0027image_disk_format\u0027: \u0027raw\u0027 if is_raw_image else \u0027qcow2\u0027,"},{"line_number":728,"context_line":"                \u0027image_request_authorization_secret\u0027: cached_auth,"},{"line_number":729,"context_line":"                \u0027oci_image_manifest_url\u0027: manifest_url,"},{"line_number":730,"context_line":"            }"},{"line_number":731,"context_line":"        else:"},{"line_number":732,"context_line":"            return {}"},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5851f647_2977399a","line":730,"in_reply_to":"576bfc96_9ce81efd","updated":"2025-01-17 17:44:02.000000000","message":"And if it wasn\u0027t obvious, disktype does indicate what the value is.","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            \u0027updated_at\u0027 and \u0027properties\u0027. \u0027updated_at\u0027 attribute is a naive"},{"line_number":455,"context_line":"            UTC datetime object."},{"line_number":456,"context_line":"        \"\"\""},{"line_number":457,"context_line":"        # Call not permitted until we have a specific image_source."},{"line_number":458,"context_line":"        self._validate_url_is_specific(image_href)"},{"line_number":459,"context_line":"        return self._client.show(image_href)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    @property"},{"line_number":462,"context_line":"    def is_auth_set_needed(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"432039f5_85509ecd","line":459,"range":{"start_line":457,"start_character":0,"end_line":459,"end_character":44},"updated":"2025-01-10 18:31:54.000000000","message":"so, two things which need to happen.\n\n1) If we have a manifest reference, we just need to go get the manifest data and extract the size and return it in a dictionary.\n.... Is there anything else we need to do?!\n\nNext revision will have this sorted.","commit_id":"78aef795b6d504176bf7a29ecc6e657a59a0114e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                      \u0027skipping specific artifact detection.\u0027)"},{"line_number":574,"context_line":"            # We have a specific URL, we don\u0027t need to do anything else."},{"line_number":575,"context_line":"            # FIXME(TheJulia): We need to improve this. Essentially we"},{"line_number":576,"context_line":"            # need to go get the image url"},{"line_number":577,"context_line":"            return {"},{"line_number":578,"context_line":"                \u0027oci_image_manifest_url\u0027: image_href}"},{"line_number":579,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"46cb8c4d_59fd8be1","line":576,"updated":"2025-01-10 18:31:54.000000000","message":"So what we need to do here, is actually issue a show request for the manifest, and grab the checksum *as well*.. In hind sight, we *likely* need to go one step further, and *also* grab the http url to the artifact.\n\nNext revision will have this.","commit_id":"78aef795b6d504176bf7a29ecc6e657a59a0114e"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":479,"context_line":"        # everyone happy, and the original digest value to help"},{"line_number":480,"context_line":"        # generate a blob url path to enable download."},{"line_number":481,"context_line":"        return {\u0027size\u0027: size,"},{"line_number":482,"context_line":"                \u0027checksum\u0027: checksum,"},{"line_number":483,"context_line":"                \u0027digest\u0027: digest}"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff8ba786_9f5ea85c","line":482,"updated":"2025-01-10 18:31:54.000000000","message":"WARNING ironic.drivers.modules.image_cache [None req-1e587d95-874b-4047-9168-fe782809a22a None None] Image service couldn\u0027t determine last modification time of oci://quay.io/podman/machine-os@sha256:dfcb3b199378320640d78121909409599b58b8012ed93320dae48deacde44d45, updating the cached copy /var/lib/ironic/master_images/e3f99046-9973-5414-894c-8ad682038a35.converted.\n\n\nour image cache code expects glance images can change, and you can... kind.. of... do that, But with OCI we know we don\u0027t update images, so we need to solve that.\n\nFixed in next revision.","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":true,"context_lines":[{"line_number":602,"context_line":"            # Identify the blob URL from the defining manifest for IPA."},{"line_number":603,"context_line":"            image_url \u003d self._client.get_blob_url(image_href,"},{"line_number":604,"context_line":"                                                  manifest[\u0027digest\u0027])"},{"line_number":605,"context_line":"            return {"},{"line_number":606,"context_line":"                # Return an OCI url in case Ironic is doing the download"},{"line_number":607,"context_line":"                \u0027oci_image_manifest_url\u0027: image_href,"},{"line_number":608,"context_line":"                # Return a checksum, so we don\u0027t make the checksum code"},{"line_number":609,"context_line":"                # angry!"},{"line_number":610,"context_line":"                \u0027image_checksum\u0027: manifest[\u0027checksum\u0027],"},{"line_number":611,"context_line":"                \u0027image_url\u0027: image_url,"},{"line_number":612,"context_line":"            }"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":615,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"}],"source_content_type":"text/x-python","patch_set":8,"id":"e5fb21cf_b0b1bb2a","line":612,"range":{"start_line":605,"start_character":2,"end_line":612,"end_character":13},"updated":"2025-01-10 18:31:54.000000000","message":"Okay, we likely need to do something like set image_disk_format to None here.\n\nReason why: If you rebuild, it breaks.  Because Ironic will likely convert the image here.\n\nSecond reason, we can\u0027t look upward in the registry data model structure. So with a specific URL, there *really* is nothing we *can* do aside just  go \"okay!\". It likely needs to be handled in the code which calls this method, more than here.\n\nFixed in next revision.","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            # Identify the blob URL from the defining manifest for IPA."},{"line_number":603,"context_line":"            image_url \u003d self._client.get_blob_url(image_href,"},{"line_number":604,"context_line":"                                                  manifest[\u0027digest\u0027])"},{"line_number":605,"context_line":"            return {"},{"line_number":606,"context_line":"                # Return an OCI url in case Ironic is doing the download"},{"line_number":607,"context_line":"                \u0027oci_image_manifest_url\u0027: image_href,"},{"line_number":608,"context_line":"                # Return a checksum, so we don\u0027t make the checksum code"},{"line_number":609,"context_line":"                # angry!"},{"line_number":610,"context_line":"                \u0027image_checksum\u0027: manifest[\u0027checksum\u0027],"},{"line_number":611,"context_line":"                \u0027image_url\u0027: image_url,"},{"line_number":612,"context_line":"            }"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":615,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a7a32bc4_55c1ddb3","line":612,"range":{"start_line":605,"start_character":2,"end_line":612,"end_character":13},"in_reply_to":"e5fb21cf_b0b1bb2a","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"531f93571d279c8fb95565ee9b5372ec90b8aef9","unresolved":true,"context_lines":[{"line_number":614,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":615,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"},{"line_number":616,"context_line":"        manifests \u003d artifact_index.get(\u0027manifests\u0027, [])"},{"line_number":617,"context_line":"        if len(manifests) \u003c 1:"},{"line_number":618,"context_line":"            # Nothing to see here..."},{"line_number":619,"context_line":"            return {}"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if image_download_source \u003d\u003d \u0027swift\u0027:"},{"line_number":622,"context_line":"            raise exception.InvalidParameterValue("}],"source_content_type":"text/x-python","patch_set":8,"id":"b7b14019_816dea39","line":619,"range":{"start_line":617,"start_character":0,"end_line":619,"end_character":21},"updated":"2025-01-10 20:21:54.000000000","message":"We likely need to raise ImageNotFound here.","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        # Query the remote API for a list index list of manifests"},{"line_number":615,"context_line":"        artifact_index \u003d self._client.get_artifact_index(image_href)"},{"line_number":616,"context_line":"        manifests \u003d artifact_index.get(\u0027manifests\u0027, [])"},{"line_number":617,"context_line":"        if len(manifests) \u003c 1:"},{"line_number":618,"context_line":"            # Nothing to see here..."},{"line_number":619,"context_line":"            return {}"},{"line_number":620,"context_line":""},{"line_number":621,"context_line":"        if image_download_source \u003d\u003d \u0027swift\u0027:"},{"line_number":622,"context_line":"            raise exception.InvalidParameterValue("}],"source_content_type":"text/x-python","patch_set":8,"id":"eb205dab_206476f7","line":619,"range":{"start_line":617,"start_character":0,"end_line":619,"end_character":21},"in_reply_to":"b7b14019_816dea39","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":359,"context_line":"    # oci://fqdn.tld/user/image"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def __init__(self):"},{"line_number":362,"context_line":"        verify \u003d strutils.bool_from_string(CONF.webserver_verify_ca,"},{"line_number":363,"context_line":"                                           strict\u003dTrue)"},{"line_number":364,"context_line":"        # Creates a client which we can use for actions."},{"line_number":365,"context_line":"        # Note, this is not yet authenticated!"}],"source_content_type":"text/x-python","patch_set":9,"id":"1d3b46e6_3e5c3802","line":362,"updated":"2025-01-10 21:23:34.000000000","message":"This isn\u0027t done for us in oslo.config directly? Yikes","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    # oci://fqdn.tld/user/image"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def __init__(self):"},{"line_number":362,"context_line":"        verify \u003d strutils.bool_from_string(CONF.webserver_verify_ca,"},{"line_number":363,"context_line":"                                           strict\u003dTrue)"},{"line_number":364,"context_line":"        # Creates a client which we can use for actions."},{"line_number":365,"context_line":"        # Note, this is not yet authenticated!"}],"source_content_type":"text/x-python","patch_set":9,"id":"3b2be03e_bdc9ba90","line":362,"in_reply_to":"12cff339_e0307dbb","updated":"2025-01-14 15:02:23.000000000","message":"It is a string opt because it has multiple distinct possible values. As such, this is actually correct, it just looks weird.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a5e4d46848adcd81b357553f7de73c4d5d0b381d","unresolved":true,"context_lines":[{"line_number":359,"context_line":"    # oci://fqdn.tld/user/image"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def __init__(self):"},{"line_number":362,"context_line":"        verify \u003d strutils.bool_from_string(CONF.webserver_verify_ca,"},{"line_number":363,"context_line":"                                           strict\u003dTrue)"},{"line_number":364,"context_line":"        # Creates a client which we can use for actions."},{"line_number":365,"context_line":"        # Note, this is not yet authenticated!"}],"source_content_type":"text/x-python","patch_set":9,"id":"12cff339_e0307dbb","line":362,"in_reply_to":"1d3b46e6_3e5c3802","updated":"2025-01-10 21:41:19.000000000","message":"Its a multi-value object I believe.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":510,"context_line":"        \"\"\""},{"line_number":511,"context_line":"        if self._user_auth_data:"},{"line_number":512,"context_line":"            raise AssertionError(\"BUG: _user_auth_data should only be set\""},{"line_number":513,"context_line":"                                 \"once in a overall workflow.\")"},{"line_number":514,"context_line":"        # Set the entire field as a dictionary, expecting username"},{"line_number":515,"context_line":"        # and password as keys, but using the transport/storage on the class"},{"line_number":516,"context_line":"        # as a dictionary in the event we need to support other forms of"}],"source_content_type":"text/x-python","patch_set":9,"id":"0f59f1d8_b38b941c","line":513,"updated":"2025-01-10 21:23:34.000000000","message":"Curious why not just assert self._user_auth_data is None, \"Test\"","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a5e4d46848adcd81b357553f7de73c4d5d0b381d","unresolved":true,"context_lines":[{"line_number":510,"context_line":"        \"\"\""},{"line_number":511,"context_line":"        if self._user_auth_data:"},{"line_number":512,"context_line":"            raise AssertionError(\"BUG: _user_auth_data should only be set\""},{"line_number":513,"context_line":"                                 \"once in a overall workflow.\")"},{"line_number":514,"context_line":"        # Set the entire field as a dictionary, expecting username"},{"line_number":515,"context_line":"        # and password as keys, but using the transport/storage on the class"},{"line_number":516,"context_line":"        # as a dictionary in the event we need to support other forms of"}],"source_content_type":"text/x-python","patch_set":9,"id":"58e6d2ff_05e48f94","line":513,"in_reply_to":"0f59f1d8_b38b941c","updated":"2025-01-10 21:41:19.000000000","message":"Wasn\u0027t thinking that way, and Dmitry has had some firm opinions regarding assert in the code paths before as well.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":510,"context_line":"        \"\"\""},{"line_number":511,"context_line":"        if self._user_auth_data:"},{"line_number":512,"context_line":"            raise AssertionError(\"BUG: _user_auth_data should only be set\""},{"line_number":513,"context_line":"                                 \"once in a overall workflow.\")"},{"line_number":514,"context_line":"        # Set the entire field as a dictionary, expecting username"},{"line_number":515,"context_line":"        # and password as keys, but using the transport/storage on the class"},{"line_number":516,"context_line":"        # as a dictionary in the event we need to support other forms of"}],"source_content_type":"text/x-python","patch_set":9,"id":"f932c4cc_de66fd5b","line":513,"in_reply_to":"58e6d2ff_05e48f94","updated":"2025-02-06 16:56:32.000000000","message":"I remember the reason that we shouldn\u0027t use assert: asserts aren\u0027t always enabled in python builds","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":510,"context_line":"        \"\"\""},{"line_number":511,"context_line":"        if self._user_auth_data:"},{"line_number":512,"context_line":"            raise AssertionError(\"BUG: _user_auth_data should only be set\""},{"line_number":513,"context_line":"                                 \"once in a overall workflow.\")"},{"line_number":514,"context_line":"        # Set the entire field as a dictionary, expecting username"},{"line_number":515,"context_line":"        # and password as keys, but using the transport/storage on the class"},{"line_number":516,"context_line":"        # as a dictionary in the event we need to support other forms of"}],"source_content_type":"text/x-python","patch_set":9,"id":"da16503f_779a63ab","line":513,"in_reply_to":"f932c4cc_de66fd5b","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9052a29640892afd3fe1023ec5702b3f89160ba3","unresolved":true,"context_lines":[{"line_number":579,"context_line":"                \u0027oci_image_manifest_url\u0027: \u0027https://fqdn/path@sha256:123f...\u0027,"},{"line_number":580,"context_line":"              }"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        # TODO(TheJulia): Ideally we should call the referrers endpoint"},{"line_number":583,"context_line":"        # in the remote API, however, it is *very* new only having been"},{"line_number":584,"context_line":"        # approved in Mid-2024. self._client.get_referrers_index(image_href)"},{"line_number":585,"context_line":"        # is present in the client code, but not exercised since... there is"},{"line_number":586,"context_line":"        # no example to help skip change the overall query flow direction."},{"line_number":587,"context_line":"        # See"},{"line_number":588,"context_line":"        # https://github.com/opencontainers/image-spec/pull/934"},{"line_number":589,"context_line":"        # https://github.com/opencontainers/distribution-spec/pull/335"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ca0d62e4_3af8e90c","line":587,"range":{"start_line":582,"start_character":0,"end_line":587,"end_character":13},"updated":"2025-01-13 18:05:36.000000000","message":"update this, we\u0027re going to drop the theoretical code to support this since we can\u0027t test it.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                \u0027oci_image_manifest_url\u0027: \u0027https://fqdn/path@sha256:123f...\u0027,"},{"line_number":580,"context_line":"              }"},{"line_number":581,"context_line":"        \"\"\""},{"line_number":582,"context_line":"        # TODO(TheJulia): Ideally we should call the referrers endpoint"},{"line_number":583,"context_line":"        # in the remote API, however, it is *very* new only having been"},{"line_number":584,"context_line":"        # approved in Mid-2024. self._client.get_referrers_index(image_href)"},{"line_number":585,"context_line":"        # is present in the client code, but not exercised since... there is"},{"line_number":586,"context_line":"        # no example to help skip change the overall query flow direction."},{"line_number":587,"context_line":"        # See"},{"line_number":588,"context_line":"        # https://github.com/opencontainers/image-spec/pull/934"},{"line_number":589,"context_line":"        # https://github.com/opencontainers/distribution-spec/pull/335"},{"line_number":590,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"29b11b16_c9773308","line":587,"range":{"start_line":582,"start_character":0,"end_line":587,"end_character":13},"in_reply_to":"ca0d62e4_3af8e90c","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":614,"context_line":"                # way for us to know what the disk image format is."},{"line_number":615,"context_line":"                # We can\u0027t look up, we\u0027re pointed at a manifest URL"},{"line_number":616,"context_line":"                # with limited information."},{"line_number":617,"context_line":"                \u0027image_disk_format\u0027: None,"},{"line_number":618,"context_line":"            }"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        # Query the remote API for a list index list of manifests"}],"source_content_type":"text/x-python","patch_set":9,"id":"783f9625_d8a6dd36","line":617,"updated":"2025-01-10 21:23:34.000000000","message":"Not sure this is actionable feedback...\n\nNone is getting really overloaded for this, yeah? Wonder if it\u0027s valuable to specifically indicate \"unknown\" vs None when it\u0027s something that we don\u0027t know, but will need to determine at some point (probably)","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                # way for us to know what the disk image format is."},{"line_number":615,"context_line":"                # We can\u0027t look up, we\u0027re pointed at a manifest URL"},{"line_number":616,"context_line":"                # with limited information."},{"line_number":617,"context_line":"                \u0027image_disk_format\u0027: None,"},{"line_number":618,"context_line":"            }"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        # Query the remote API for a list index list of manifests"}],"source_content_type":"text/x-python","patch_set":9,"id":"480dcb20_0eb2ced1","line":617,"in_reply_to":"3c9bab0b_accbb831","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a5e4d46848adcd81b357553f7de73c4d5d0b381d","unresolved":true,"context_lines":[{"line_number":614,"context_line":"                # way for us to know what the disk image format is."},{"line_number":615,"context_line":"                # We can\u0027t look up, we\u0027re pointed at a manifest URL"},{"line_number":616,"context_line":"                # with limited information."},{"line_number":617,"context_line":"                \u0027image_disk_format\u0027: None,"},{"line_number":618,"context_line":"            }"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"        # Query the remote API for a list index list of manifests"}],"source_content_type":"text/x-python","patch_set":9,"id":"3c9bab0b_accbb831","line":617,"in_reply_to":"783f9625_d8a6dd36","updated":"2025-01-10 21:41:19.000000000","message":"Good point, I do kind of like unknown, but maybe we then do a follow-up patch for the format checking to ignore it then.\n\nThis was largely driven by me trying to do rebuilds/redeploys and getting bit by prior data, so it could definitely make sense to have a more specific value.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":439,"context_line":"        :param secret: Unused setting."},{"line_number":440,"context_line":"        :raises: exception.ImageRefValidationFailed"},{"line_number":441,"context_line":"        :raises: exception.OciImageNotSpecific"},{"line_number":442,"context_line":"        :returns: Response to ."},{"line_number":443,"context_line":"        \"\"\""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        return self.show(image_href)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9d3bd36e_f31eab37","line":442,"range":{"start_line":442,"start_character":30,"end_line":442,"end_character":31},"updated":"2025-01-17 00:47:38.000000000","message":"?","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        :param secret: Unused setting."},{"line_number":440,"context_line":"        :raises: exception.ImageRefValidationFailed"},{"line_number":441,"context_line":"        :raises: exception.OciImageNotSpecific"},{"line_number":442,"context_line":"        :returns: Response to ."},{"line_number":443,"context_line":"        \"\"\""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        return self.show(image_href)"}],"source_content_type":"text/x-python","patch_set":13,"id":"779c49a0_134313f0","line":442,"range":{"start_line":442,"start_character":30,"end_line":442,"end_character":31},"in_reply_to":"9d3bd36e_f31eab37","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":542,"context_line":"        In order to inform the caller about the url, as well as related"},{"line_number":543,"context_line":"        data, such as the manifest which points to the artifact, artifact"},{"line_number":544,"context_line":"        digest, known original filename of the artifact, this method"},{"line_number":545,"context_line":"        returns a dictionary with several fields which may be useful"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        :param image_href: The image URL as supplied by the Ironic user."},{"line_number":548,"context_line":"        :param image_download_source: The Ironic image_download_source"}],"source_content_type":"text/x-python","patch_set":13,"id":"3cbbdeab_ab44fc15","line":545,"range":{"start_line":545,"start_character":62,"end_line":545,"end_character":68},"updated":"2025-01-17 00:47:38.000000000","message":"full stop. period.","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        In order to inform the caller about the url, as well as related"},{"line_number":543,"context_line":"        data, such as the manifest which points to the artifact, artifact"},{"line_number":544,"context_line":"        digest, known original filename of the artifact, this method"},{"line_number":545,"context_line":"        returns a dictionary with several fields which may be useful"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        :param image_href: The image URL as supplied by the Ironic user."},{"line_number":548,"context_line":"        :param image_download_source: The Ironic image_download_source"}],"source_content_type":"text/x-python","patch_set":13,"id":"50c1191a_f3e61ad4","line":545,"range":{"start_line":545,"start_character":62,"end_line":545,"end_character":68},"in_reply_to":"3cbbdeab_ab44fc15","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":936,"context_line":"    \"\"\""},{"line_number":937,"context_line":"    # NOTE(TheJulia): This is largely necessary as in a pure OpenStack"},{"line_number":938,"context_line":"    # operating context, we assume the caller is just a glance image UUID"},{"line_number":939,"context_line":"    # and that Glance holds the scret. Ironic would then utilize it\u0027s static"},{"line_number":940,"context_line":"    # authentication to interact with Glance."},{"line_number":941,"context_line":"    # TODO(TheJulia): It was not lost on me that the overall *general* idea"},{"line_number":942,"context_line":"    # here could similarly be leveraged to *enable* private user image access."}],"source_content_type":"text/x-python","patch_set":13,"id":"38b9cda2_0a6ab63a","line":939,"range":{"start_line":939,"start_character":32,"end_line":939,"end_character":37},"updated":"2025-01-17 00:47:38.000000000","message":"speling, sekrit","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":936,"context_line":"    \"\"\""},{"line_number":937,"context_line":"    # NOTE(TheJulia): This is largely necessary as in a pure OpenStack"},{"line_number":938,"context_line":"    # operating context, we assume the caller is just a glance image UUID"},{"line_number":939,"context_line":"    # and that Glance holds the scret. Ironic would then utilize it\u0027s static"},{"line_number":940,"context_line":"    # authentication to interact with Glance."},{"line_number":941,"context_line":"    # TODO(TheJulia): It was not lost on me that the overall *general* idea"},{"line_number":942,"context_line":"    # here could similarly be leveraged to *enable* private user image access."}],"source_content_type":"text/x-python","patch_set":13,"id":"1c169e74_f74adfe5","line":939,"range":{"start_line":939,"start_character":32,"end_line":939,"end_character":37},"in_reply_to":"38b9cda2_0a6ab63a","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":356,"context_line":"    # Asking ironic to search for the needful."},{"line_number":357,"context_line":"    # oci://fqdn.tld/user/image:tag - Works!"},{"line_number":358,"context_line":"    # oci://fqdn.tld/user/image - Should work, to be tested"},{"line_number":359,"context_line":"    # oci://fqdn.tld/user/image"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def __init__(self):"},{"line_number":362,"context_line":"        verify \u003d strutils.bool_from_string(CONF.webserver_verify_ca,"}],"source_content_type":"text/x-python","patch_set":18,"id":"a93fbe92_e1241345","line":359,"updated":"2025-02-06 16:56:32.000000000","message":"Is this example supposed to be different than line 358?","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":356,"context_line":"    # Asking ironic to search for the needful."},{"line_number":357,"context_line":"    # oci://fqdn.tld/user/image:tag - Works!"},{"line_number":358,"context_line":"    # oci://fqdn.tld/user/image - Should work, to be tested"},{"line_number":359,"context_line":"    # oci://fqdn.tld/user/image"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    def __init__(self):"},{"line_number":362,"context_line":"        verify \u003d strutils.bool_from_string(CONF.webserver_verify_ca,"}],"source_content_type":"text/x-python","patch_set":18,"id":"881a25af_9ee2ae84","line":359,"in_reply_to":"a93fbe92_e1241345","updated":"2025-02-06 19:38:43.000000000","message":"It was notes from my original starting point. Removing.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":726,"context_line":"                        # the references for what the user has requested"},{"line_number":727,"context_line":"                        # consideration of as well, so it is good to log here."},{"line_number":728,"context_line":"                        LOG.debug(\u0027Skipping consideration of container \u0027"},{"line_number":729,"context_line":"                                  \u0027registry manifest %s as it has multiple\u0027"},{"line_number":730,"context_line":"                                  \u0027layers.\u0027,"},{"line_number":731,"context_line":"                                  identified_manifest_digest)"},{"line_number":732,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":18,"id":"3397d6e4_270eade7","line":729,"updated":"2025-02-06 16:56:32.000000000","message":"based on the associated comment, makes me wonder if this should be info level","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":726,"context_line":"                        # the references for what the user has requested"},{"line_number":727,"context_line":"                        # consideration of as well, so it is good to log here."},{"line_number":728,"context_line":"                        LOG.debug(\u0027Skipping consideration of container \u0027"},{"line_number":729,"context_line":"                                  \u0027registry manifest %s as it has multiple\u0027"},{"line_number":730,"context_line":"                                  \u0027layers.\u0027,"},{"line_number":731,"context_line":"                                  identified_manifest_digest)"},{"line_number":732,"context_line":"                        continue"}],"source_content_type":"text/x-python","patch_set":18,"id":"97f26c73_1494d8c2","line":729,"in_reply_to":"3397d6e4_270eade7","updated":"2025-02-06 19:38:43.000000000","message":"Likely a good point.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"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":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":369,"context_line":"               image_hints\u003dNone, image_auth_data\u003dNone):"},{"line_number":370,"context_line":"    # TODO(vish): Improve context handling and add owner and auth data"},{"line_number":371,"context_line":"    #             when it is added to glance.  Right now there is no"},{"line_number":372,"context_line":"    #             auth checking in glance, so we assume that access was"}],"source_content_type":"text/x-python","patch_set":1,"id":"972388c5_eb68972a","line":369,"updated":"2025-01-06 19:09:34.000000000","message":"Add a docstring...","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":369,"context_line":"               image_hints\u003dNone, image_auth_data\u003dNone):"},{"line_number":370,"context_line":"    # TODO(vish): Improve context handling and add owner and auth data"},{"line_number":371,"context_line":"    #             when it is added to glance.  Right now there is no"},{"line_number":372,"context_line":"    #             auth checking in glance, so we assume that access was"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e52dbe5_6116010d","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":31},"updated":"2025-01-06 19:09:34.000000000","message":"nit: looks like image_hints can be removed.\n\nIt was an idea that we would solve asset/value identification at a lower level, but I created an explicit method to resolve that challenge upfront.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":369,"context_line":"               image_hints\u003dNone, image_auth_data\u003dNone):"},{"line_number":370,"context_line":"    # TODO(vish): Improve context handling and add owner and auth data"},{"line_number":371,"context_line":"    #             when it is added to glance.  Right now there is no"},{"line_number":372,"context_line":"    #             auth checking in glance, so we assume that access was"}],"source_content_type":"text/x-python","patch_set":1,"id":"f60502fb_e16340e8","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":31},"in_reply_to":"0e52dbe5_6116010d","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":369,"context_line":"               image_hints\u003dNone, image_auth_data\u003dNone):"},{"line_number":370,"context_line":"    # TODO(vish): Improve context handling and add owner and auth data"},{"line_number":371,"context_line":"    #             when it is added to glance.  Right now there is no"},{"line_number":372,"context_line":"    #             auth checking in glance, so we assume that access was"}],"source_content_type":"text/x-python","patch_set":1,"id":"19c3936f_2d6765de","line":369,"in_reply_to":"972388c5_eb68972a","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":378,"context_line":"               \u0027image_href\u0027: image_href})"},{"line_number":379,"context_line":"    start \u003d time.time()"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    if image_auth_data and image_service.is_auth_set_needed:"},{"line_number":382,"context_line":"        # Send a dictionary with username/password data,"},{"line_number":383,"context_line":"        # but send it in a dictionary since it fundimentally"},{"line_number":384,"context_line":"        # can differ dramatically by types."},{"line_number":385,"context_line":"        image_service.set_auth_data(image_auth_data)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    if isinstance(image_file, str):"},{"line_number":388,"context_line":"        with open(image_file, \"wb\") as image_file_obj:"},{"line_number":389,"context_line":"            image_service.download(image_href, image_file_obj)"}],"source_content_type":"text/x-python","patch_set":1,"id":"283bbce1_789ef37f","line":386,"range":{"start_line":381,"start_character":0,"end_line":386,"end_character":0},"updated":"2025-01-06 19:09:34.000000000","message":"This needs a test.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":378,"context_line":"               \u0027image_href\u0027: image_href})"},{"line_number":379,"context_line":"    start \u003d time.time()"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    if image_auth_data and image_service.is_auth_set_needed:"},{"line_number":382,"context_line":"        # Send a dictionary with username/password data,"},{"line_number":383,"context_line":"        # but send it in a dictionary since it fundimentally"},{"line_number":384,"context_line":"        # can differ dramatically by types."},{"line_number":385,"context_line":"        image_service.set_auth_data(image_auth_data)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    if isinstance(image_file, str):"},{"line_number":388,"context_line":"        with open(image_file, \"wb\") as image_file_obj:"},{"line_number":389,"context_line":"            image_service.download(image_href, image_file_obj)"}],"source_content_type":"text/x-python","patch_set":1,"id":"502d29e1_5aa8b005","line":386,"range":{"start_line":381,"start_character":0,"end_line":386,"end_character":0},"in_reply_to":"283bbce1_789ef37f","updated":"2025-01-08 22:20:33.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":393,"context_line":"    LOG.debug(\"Image %(image_href)s downloaded in %(time).2f seconds.\","},{"line_number":394,"context_line":"              {\u0027image_href\u0027: image_href, \u0027time\u0027: time.time() - start})"},{"line_number":395,"context_line":"    if image_service.transfer_verified_checksum:"},{"line_number":396,"context_line":"        # FIXME(TheJulia): The Glance Image service is actually able"},{"line_number":397,"context_line":"        # to do this as well, but we don\u0027t anticipate that right now."},{"line_number":398,"context_line":"        # We\u0027ll need to do a little bit in our wrapper to handle this."},{"line_number":399,"context_line":"        return image_service.transfer_verified_checksum"},{"line_number":400,"context_line":"    return None"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"61d6d35e_72d87a3a","line":398,"range":{"start_line":396,"start_character":27,"end_line":398,"end_character":70},"updated":"2025-01-06 19:09:34.000000000","message":"nit: clarify what this means. Specifically it *checks* the file in transit and we *can* adapt it as well.\n\nPerhaps better as a todo.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":393,"context_line":"    LOG.debug(\"Image %(image_href)s downloaded in %(time).2f seconds.\","},{"line_number":394,"context_line":"              {\u0027image_href\u0027: image_href, \u0027time\u0027: time.time() - start})"},{"line_number":395,"context_line":"    if image_service.transfer_verified_checksum:"},{"line_number":396,"context_line":"        # FIXME(TheJulia): The Glance Image service is actually able"},{"line_number":397,"context_line":"        # to do this as well, but we don\u0027t anticipate that right now."},{"line_number":398,"context_line":"        # We\u0027ll need to do a little bit in our wrapper to handle this."},{"line_number":399,"context_line":"        return image_service.transfer_verified_checksum"},{"line_number":400,"context_line":"    return None"},{"line_number":401,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"618246d3_caed8ff8","line":398,"range":{"start_line":396,"start_character":27,"end_line":398,"end_character":70},"in_reply_to":"61d6d35e_72d87a3a","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":396,"context_line":"        # FIXME(TheJulia): The Glance Image service is actually able"},{"line_number":397,"context_line":"        # to do this as well, but we don\u0027t anticipate that right now."},{"line_number":398,"context_line":"        # We\u0027ll need to do a little bit in our wrapper to handle this."},{"line_number":399,"context_line":"        return image_service.transfer_verified_checksum"},{"line_number":400,"context_line":"    return None"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dea0e40e_16f2e021","line":399,"updated":"2025-01-06 19:09:34.000000000","message":"Note we\u0027re returning the checksum to indicate it was verified in transit.\n\nAlso need a test for this.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        # FIXME(TheJulia): The Glance Image service is actually able"},{"line_number":397,"context_line":"        # to do this as well, but we don\u0027t anticipate that right now."},{"line_number":398,"context_line":"        # We\u0027ll need to do a little bit in our wrapper to handle this."},{"line_number":399,"context_line":"        return image_service.transfer_verified_checksum"},{"line_number":400,"context_line":"    return None"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e64d3958_a0e93956","line":399,"in_reply_to":"dea0e40e_16f2e021","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":403,"context_line":"def fetch(context, image_href, path, force_raw\u003dFalse,"},{"line_number":404,"context_line":"          checksum\u003dNone, checksum_algo\u003dNone, image_hints\u003dNone,"},{"line_number":405,"context_line":"          image_auth_data\u003dNone):"},{"line_number":406,"context_line":"    with fileutils.remove_path_on_error(path):"},{"line_number":407,"context_line":"        transfer_checksum \u003d fetch_into(context, image_href, path,"},{"line_number":408,"context_line":"                                       image_hints, image_auth_data)"},{"line_number":409,"context_line":"        if (not transfer_checksum"},{"line_number":410,"context_line":"                and not CONF.conductor.disable_file_checksum"},{"line_number":411,"context_line":"                and checksum):"},{"line_number":412,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":415,"context_line":"    # i.e. zstd... before forcing raw."}],"source_content_type":"text/x-python","patch_set":1,"id":"d354f30f_0d8c9205","line":412,"range":{"start_line":406,"start_character":0,"end_line":412,"end_character":75},"updated":"2025-01-06 19:09:34.000000000","message":"note for self, the test here will need to be if we have a checksum validated in transit, that we don\u0027t call validate_checksum directly.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":403,"context_line":"def fetch(context, image_href, path, force_raw\u003dFalse,"},{"line_number":404,"context_line":"          checksum\u003dNone, checksum_algo\u003dNone, image_hints\u003dNone,"},{"line_number":405,"context_line":"          image_auth_data\u003dNone):"},{"line_number":406,"context_line":"    with fileutils.remove_path_on_error(path):"},{"line_number":407,"context_line":"        transfer_checksum \u003d fetch_into(context, image_href, path,"},{"line_number":408,"context_line":"                                       image_hints, image_auth_data)"},{"line_number":409,"context_line":"        if (not transfer_checksum"},{"line_number":410,"context_line":"                and not CONF.conductor.disable_file_checksum"},{"line_number":411,"context_line":"                and checksum):"},{"line_number":412,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":415,"context_line":"    # i.e. zstd... before forcing raw."}],"source_content_type":"text/x-python","patch_set":1,"id":"a13e1e6e_7ea1a43f","line":412,"range":{"start_line":406,"start_character":0,"end_line":412,"end_character":75},"in_reply_to":"d354f30f_0d8c9205","updated":"2025-01-10 18:31:54.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":411,"context_line":"                and checksum):"},{"line_number":412,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":415,"context_line":"    # i.e. zstd... before forcing raw."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    if force_raw:"},{"line_number":418,"context_line":"        image_to_raw(image_href, path, \"%s.part\" % path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"0be7945a_9e89d0b0","line":415,"range":{"start_line":414,"start_character":0,"end_line":415,"end_character":38},"updated":"2025-01-06 19:09:34.000000000","message":"This will need to be a follow-up as we\u0027ll need to likely do some file fingerprinting and front line decompression as well, which is sort of a whole distinct feature in the end.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                and checksum):"},{"line_number":412,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":415,"context_line":"    # i.e. zstd... before forcing raw."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"    if force_raw:"},{"line_number":418,"context_line":"        image_to_raw(image_href, path, \"%s.part\" % path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5d0e4e8a_42df5d5d","line":415,"range":{"start_line":414,"start_character":0,"end_line":415,"end_character":38},"in_reply_to":"0be7945a_9e89d0b0","updated":"2025-01-10 18:31:54.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":368,"context_line":"               image_auth_data\u003dNone):"},{"line_number":369,"context_line":"    \"\"\"Fetches imave file contents into a file."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    :param context: A context object."},{"line_number":372,"context_line":"    :param image_href: The Image URL or reference to attempt to retrieve."}],"source_content_type":"text/x-python","patch_set":13,"id":"5e1d1853_d7d58628","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":20},"updated":"2025-01-17 00:47:38.000000000","message":"image","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"def fetch_into(context, image_href, image_file,"},{"line_number":368,"context_line":"               image_auth_data\u003dNone):"},{"line_number":369,"context_line":"    \"\"\"Fetches imave file contents into a file."},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    :param context: A context object."},{"line_number":372,"context_line":"    :param image_href: The Image URL or reference to attempt to retrieve."}],"source_content_type":"text/x-python","patch_set":13,"id":"499ad7c9_793b7d15","line":369,"range":{"start_line":369,"start_character":15,"end_line":369,"end_character":20},"in_reply_to":"5e1d1853_d7d58628","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":429,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":432,"context_line":"    # i.e. zstd... before forcing raw."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    if force_raw:"},{"line_number":435,"context_line":"        image_to_raw(image_href, path, \"%s.part\" % path)"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a9a296c_00defa69","line":432,"updated":"2025-02-06 16:56:32.000000000","message":"just highlighting unresolved fixme","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":true,"context_lines":[{"line_number":429,"context_line":"            checksum_utils.validate_checksum(path, checksum, checksum_algo)"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":"    # FIXME(TheJulia): need to check if we need to extract the file"},{"line_number":432,"context_line":"    # i.e. zstd... before forcing raw."},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"    if force_raw:"},{"line_number":435,"context_line":"        image_to_raw(image_href, path, \"%s.part\" % path)"}],"source_content_type":"text/x-python","patch_set":18,"id":"e9284773_12d8a6a4","line":432,"in_reply_to":"1a9a296c_00defa69","updated":"2025-02-06 19:38:43.000000000","message":"Next patch which already has a +2 and is covered by that patch since it is atomic to the flow.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"ironic/common/oci_registry.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":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":53,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CALL_TYPES \u003d ("},{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d447a7f6_628fdc77","line":56,"updated":"2025-01-06 19:09:34.000000000","message":"no ping","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":53,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CALL_TYPES \u003d ("},{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"}],"source_content_type":"text/x-python","patch_set":1,"id":"075b4579_365ce9cc","line":56,"in_reply_to":"d447a7f6_628fdc77","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"}],"source_content_type":"text/x-python","patch_set":1,"id":"e3c9d66f_4601ac20","line":59,"updated":"2025-01-06 19:09:34.000000000","message":"no uploads here","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"}],"source_content_type":"text/x-python","patch_set":1,"id":"ae9e1409_5ab04120","line":59,"in_reply_to":"e3c9d66f_4601ac20","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6af6ee34_a7763942","line":61,"updated":"2025-01-06 19:09:34.000000000","message":"we don\u0027t interact with the catalog","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"518a979d_cd806efa","line":61,"in_reply_to":"6af6ee34_a7763942","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c01197e8_30fddc28","line":64,"updated":"2025-01-06 19:09:34.000000000","message":"no ping","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"f74ef13d_cce6632f","line":64,"in_reply_to":"c01197e8_30fddc28","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dad8103d_5ce514ed","line":67,"range":{"start_line":67,"start_character":30,"end_line":67,"end_character":31},"updated":"2025-01-06 19:09:34.000000000","message":"no uploads here...","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"33906f3d_df15fd33","line":67,"range":{"start_line":67,"start_character":30,"end_line":67,"end_character":31},"in_reply_to":"dad8103d_5ce514ed","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"93657622_63784178","line":69,"updated":"2025-01-06 19:09:34.000000000","message":"We don\u0027t interact with the catalog","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3af147e7_1eccc80e","line":69,"in_reply_to":"93657622_63784178","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":51,"context_line":")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CALL_TYPES \u003d ("},{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"75235604_279a9952","line":71,"range":{"start_line":54,"start_character":0,"end_line":71,"end_character":1},"updated":"2025-01-06 19:09:34.000000000","message":"This needs to be slimmed down to what is actually in use.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":51,"context_line":")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"CALL_TYPES \u003d ("},{"line_number":56,"context_line":"    CALL_PING,"},{"line_number":57,"context_line":"    CALL_MANIFEST,"},{"line_number":58,"context_line":"    CALL_BLOB,"},{"line_number":59,"context_line":"    CALL_UPLOAD,"},{"line_number":60,"context_line":"    CALL_TAGS,"},{"line_number":61,"context_line":"    CALL_CATALOG,"},{"line_number":62,"context_line":"    CALL_REFERRERS"},{"line_number":63,"context_line":") \u003d ("},{"line_number":64,"context_line":"    \u0027/\u0027,"},{"line_number":65,"context_line":"    \u0027%(image)s/manifests/%(tag)s\u0027,"},{"line_number":66,"context_line":"    \u0027%(image)s/blobs/%(digest)s\u0027,"},{"line_number":67,"context_line":"    \u0027%(image)s/blobs/uploads/\u0027,"},{"line_number":68,"context_line":"    \u0027%(image)s/tags/list\u0027,"},{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"d0b57db2_3a3ccf1d","line":71,"range":{"start_line":54,"start_character":0,"end_line":71,"end_character":1},"in_reply_to":"75235604_279a9952","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a6e4b4a_7ce9a30c","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":15},"updated":"2025-01-06 19:09:34.000000000","message":"We can nuke MEDIA_TYPES","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    \u0027/_catalog\u0027,"},{"line_number":70,"context_line":"    \u0027%(image)s/referrers/%(tag)s\u0027,"},{"line_number":71,"context_line":")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"15c7cc00_f9c893ab","line":73,"range":{"start_line":72,"start_character":0,"end_line":73,"end_character":15},"in_reply_to":"7a6e4b4a_7ce9a30c","updated":"2025-01-10 18:31:54.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"},{"line_number":77,"context_line":"    MEDIA_OCI_LAYER,"},{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9381e937_7be93292","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":24},"updated":"2025-01-06 19:09:34.000000000","message":"We don\u0027t use MEDIA_OCI_CONFIG_V1","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"MEDIA_TYPES \u003d ("},{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"},{"line_number":77,"context_line":"    MEDIA_OCI_LAYER,"},{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"}],"source_content_type":"text/x-python","patch_set":1,"id":"922520f0_2556d948","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":24},"in_reply_to":"9381e937_7be93292","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"},{"line_number":77,"context_line":"    MEDIA_OCI_LAYER,"},{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"},{"line_number":79,"context_line":") \u003d ("},{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"93ca8ed6_3cbb030d","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":31},"updated":"2025-01-06 19:09:34.000000000","message":"We don\u0027t use either of these.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    MEDIA_OCI_MANIFEST_V1,"},{"line_number":75,"context_line":"    MEDIA_OCI_CONFIG_V1,"},{"line_number":76,"context_line":"    MEDIA_OCI_INDEX_V1,"},{"line_number":77,"context_line":"    MEDIA_OCI_LAYER,"},{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"},{"line_number":79,"context_line":") \u003d ("},{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"61127332_335ab032","line":78,"range":{"start_line":77,"start_character":0,"end_line":78,"end_character":31},"in_reply_to":"93ca8ed6_3cbb030d","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"},{"line_number":79,"context_line":") \u003d ("},{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"},{"line_number":82,"context_line":"    \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":83,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar\u0027,"},{"line_number":84,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar+gzip\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5faba6cb_4f6f654d","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":47},"updated":"2025-01-06 19:09:34.000000000","message":"we don\u0027t use this one.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    MEDIA_OCI_LAYER_COMPRESSED,"},{"line_number":79,"context_line":") \u003d ("},{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"},{"line_number":82,"context_line":"    \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":83,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar\u0027,"},{"line_number":84,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar+gzip\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ff1b12f_d712f8f9","line":81,"range":{"start_line":81,"start_character":0,"end_line":81,"end_character":47},"in_reply_to":"5faba6cb_4f6f654d","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"},{"line_number":82,"context_line":"    \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":83,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar\u0027,"},{"line_number":84,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar+gzip\u0027,"},{"line_number":85,"context_line":")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e5cc62ad_b4ad2fdf","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":50},"updated":"2025-01-06 19:09:34.000000000","message":"We don\u0027t use the layers here.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    \u0027application/vnd.oci.image.manifest.v1+json\u0027,"},{"line_number":81,"context_line":"    \u0027application/vnd.oci.image.config.v1+json\u0027,"},{"line_number":82,"context_line":"    \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":83,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar\u0027,"},{"line_number":84,"context_line":"    \u0027application/vnd.oci.image.layer.v1.tar+gzip\u0027,"},{"line_number":85,"context_line":")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"75740801_e4ae04a5","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":50},"in_reply_to":"e5cc62ad_b4ad2fdf","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":247,"context_line":"                    if (now - token_time).seconds \u003c expires_in:"},{"line_number":248,"context_line":"                        return data[\u0027token\u0027]"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"                # TODO(bshephar) Remove once Satellite returns expected expiry"},{"line_number":251,"context_line":"                # expires_at uses UTC date and time format. Although, this"},{"line_number":252,"context_line":"                # field doesn\u0027t appear in the RFC for OAuth. It appears some"},{"line_number":253,"context_line":"                # API\u0027s return a response with expires_at instead of expires_in"},{"line_number":254,"context_line":"                # https://www.rfc-editor.org/rfc/rfc6749"},{"line_number":255,"context_line":"                # https://bugzilla.redhat.com/show_bug.cgi?id\u003d2134075"},{"line_number":256,"context_line":"                # https://bugzilla.redhat.com/show_bug.cgi?id\u003d2138743"},{"line_number":257,"context_line":"                elif data.get(\u0027expires_at\u0027):"},{"line_number":258,"context_line":"                    expires \u003d dt_parse(data.get(\u0027expires_at\u0027))"},{"line_number":259,"context_line":"                    now \u003d datetime.now(tzlocal())"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b0f4651_f8deaf0c","line":256,"range":{"start_line":250,"start_character":1,"end_line":256,"end_character":69},"updated":"2025-01-06 19:09:34.000000000","message":"This needs to be checked/cleaned up/revised","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                    if (now - token_time).seconds \u003c expires_in:"},{"line_number":248,"context_line":"                        return data[\u0027token\u0027]"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"                # TODO(bshephar) Remove once Satellite returns expected expiry"},{"line_number":251,"context_line":"                # expires_at uses UTC date and time format. Although, this"},{"line_number":252,"context_line":"                # field doesn\u0027t appear in the RFC for OAuth. It appears some"},{"line_number":253,"context_line":"                # API\u0027s return a response with expires_at instead of expires_in"},{"line_number":254,"context_line":"                # https://www.rfc-editor.org/rfc/rfc6749"},{"line_number":255,"context_line":"                # https://bugzilla.redhat.com/show_bug.cgi?id\u003d2134075"},{"line_number":256,"context_line":"                # https://bugzilla.redhat.com/show_bug.cgi?id\u003d2138743"},{"line_number":257,"context_line":"                elif data.get(\u0027expires_at\u0027):"},{"line_number":258,"context_line":"                    expires \u003d dt_parse(data.get(\u0027expires_at\u0027))"},{"line_number":259,"context_line":"                    now \u003d datetime.now(tzlocal())"}],"source_content_type":"text/x-python","patch_set":1,"id":"20e35b63_7ecab586","line":256,"range":{"start_line":250,"start_character":1,"end_line":256,"end_character":69},"in_reply_to":"5b0f4651_f8deaf0c","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":355,"context_line":"                                             *args,"},{"line_number":356,"context_line":"                                             **kwargs)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    @staticmethod"},{"line_number":359,"context_line":"    def patch(request_session, *args, **kwargs):"},{"line_number":360,"context_line":"        \"\"\"Perform a patch and retry if auth fails"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This function is designed to be used when we perform a path to"},{"line_number":363,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":364,"context_line":"        re-authentication request if the first one fails."},{"line_number":365,"context_line":"        \"\"\""},{"line_number":366,"context_line":"        return RegistrySessionHelper._action(\u0027patch\u0027,"},{"line_number":367,"context_line":"                                             request_session,"},{"line_number":368,"context_line":"                                             *args,"},{"line_number":369,"context_line":"                                             **kwargs)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @staticmethod"},{"line_number":372,"context_line":"    def post(request_session, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3958fa61_52a29110","line":369,"range":{"start_line":358,"start_character":0,"end_line":369,"end_character":54},"updated":"2025-01-06 19:09:34.000000000","message":"looks like we can drop patch","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                                             *args,"},{"line_number":356,"context_line":"                                             **kwargs)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    @staticmethod"},{"line_number":359,"context_line":"    def patch(request_session, *args, **kwargs):"},{"line_number":360,"context_line":"        \"\"\"Perform a patch and retry if auth fails"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        This function is designed to be used when we perform a path to"},{"line_number":363,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":364,"context_line":"        re-authentication request if the first one fails."},{"line_number":365,"context_line":"        \"\"\""},{"line_number":366,"context_line":"        return RegistrySessionHelper._action(\u0027patch\u0027,"},{"line_number":367,"context_line":"                                             request_session,"},{"line_number":368,"context_line":"                                             *args,"},{"line_number":369,"context_line":"                                             **kwargs)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @staticmethod"},{"line_number":372,"context_line":"    def post(request_session, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"23297b58_d9a156a0","line":369,"range":{"start_line":358,"start_character":0,"end_line":369,"end_character":54},"in_reply_to":"3958fa61_52a29110","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":367,"context_line":"                                             request_session,"},{"line_number":368,"context_line":"                                             *args,"},{"line_number":369,"context_line":"                                             **kwargs)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @staticmethod"},{"line_number":372,"context_line":"    def post(request_session, *args, **kwargs):"},{"line_number":373,"context_line":"        \"\"\"Perform a post and retry if auth fails"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        This function is designed to be used when we perform a post to"},{"line_number":376,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":377,"context_line":"        re-authentication request if the first one fails."},{"line_number":378,"context_line":"        \"\"\""},{"line_number":379,"context_line":"        return RegistrySessionHelper._action(\u0027post\u0027,"},{"line_number":380,"context_line":"                                             request_session,"},{"line_number":381,"context_line":"                                             *args,"},{"line_number":382,"context_line":"                                             **kwargs)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @staticmethod"},{"line_number":385,"context_line":"    def put(request_session, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fd2dda6_1b3f5ec4","line":382,"range":{"start_line":370,"start_character":0,"end_line":382,"end_character":54},"updated":"2025-01-06 19:09:34.000000000","message":"looks like we can drop post","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":367,"context_line":"                                             request_session,"},{"line_number":368,"context_line":"                                             *args,"},{"line_number":369,"context_line":"                                             **kwargs)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    @staticmethod"},{"line_number":372,"context_line":"    def post(request_session, *args, **kwargs):"},{"line_number":373,"context_line":"        \"\"\"Perform a post and retry if auth fails"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"        This function is designed to be used when we perform a post to"},{"line_number":376,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":377,"context_line":"        re-authentication request if the first one fails."},{"line_number":378,"context_line":"        \"\"\""},{"line_number":379,"context_line":"        return RegistrySessionHelper._action(\u0027post\u0027,"},{"line_number":380,"context_line":"                                             request_session,"},{"line_number":381,"context_line":"                                             *args,"},{"line_number":382,"context_line":"                                             **kwargs)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @staticmethod"},{"line_number":385,"context_line":"    def put(request_session, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"dade5c2b_19c3e459","line":382,"range":{"start_line":370,"start_character":0,"end_line":382,"end_character":54},"in_reply_to":"3fd2dda6_1b3f5ec4","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":381,"context_line":"                                             *args,"},{"line_number":382,"context_line":"                                             **kwargs)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @staticmethod"},{"line_number":385,"context_line":"    def put(request_session, *args, **kwargs):"},{"line_number":386,"context_line":"        \"\"\"Perform a put and retry if auth fails"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        This function is designed to be used when we perform a put to"},{"line_number":389,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":390,"context_line":"        re-authentication request if the first one fails."},{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        return RegistrySessionHelper._action(\u0027put\u0027,"},{"line_number":393,"context_line":"                                             request_session,"},{"line_number":394,"context_line":"                                             *args,"},{"line_number":395,"context_line":"                                             **kwargs)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class OciClient(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"526e3ed4_bf846bb0","line":395,"range":{"start_line":384,"start_character":0,"end_line":395,"end_character":54},"updated":"2025-01-06 19:09:34.000000000","message":"looks like we can drop put","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                                             *args,"},{"line_number":382,"context_line":"                                             **kwargs)"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @staticmethod"},{"line_number":385,"context_line":"    def put(request_session, *args, **kwargs):"},{"line_number":386,"context_line":"        \"\"\"Perform a put and retry if auth fails"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        This function is designed to be used when we perform a put to"},{"line_number":389,"context_line":"        an authenticated source. This function will attempt a single"},{"line_number":390,"context_line":"        re-authentication request if the first one fails."},{"line_number":391,"context_line":"        \"\"\""},{"line_number":392,"context_line":"        return RegistrySessionHelper._action(\u0027put\u0027,"},{"line_number":393,"context_line":"                                             request_session,"},{"line_number":394,"context_line":"                                             *args,"},{"line_number":395,"context_line":"                                             **kwargs)"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class OciClient(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"e6014cc5_44491ead","line":395,"range":{"start_line":384,"start_character":0,"end_line":395,"end_character":54},"in_reply_to":"526e3ed4_bf846bb0","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class OciClient(object):"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    lock \u003d None"},{"line_number":401,"context_line":"    mirrors \u003d {}"},{"line_number":402,"context_line":"    insecure_registries \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"ccac25f8_84dd09f6","line":399,"updated":"2025-01-06 19:09:34.000000000","message":"docstring!","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":396,"context_line":""},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"class OciClient(object):"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    lock \u003d None"},{"line_number":401,"context_line":"    mirrors \u003d {}"},{"line_number":402,"context_line":"    insecure_registries \u003d set()"}],"source_content_type":"text/x-python","patch_set":1,"id":"2639ff74_bfd0c0d9","line":399,"in_reply_to":"ccac25f8_84dd09f6","updated":"2025-01-07 21:18:28.000000000","message":"revised/cleaned up.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    _cached_auth \u003d None"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def __init__(self, verify):"},{"line_number":411,"context_line":"        self.session \u003d MakeSession(verify\u003dverify).create()"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @tenacity.retry(  # Retry up to 5 times with jittered exponential backoff"}],"source_content_type":"text/x-python","patch_set":1,"id":"65563824_02a05094","line":410,"updated":"2025-01-06 19:09:34.000000000","message":"docstring!","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    _cached_auth \u003d None"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def __init__(self, verify):"},{"line_number":411,"context_line":"        self.session \u003d MakeSession(verify\u003dverify).create()"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    @tenacity.retry(  # Retry up to 5 times with jittered exponential backoff"}],"source_content_type":"text/x-python","patch_set":1,"id":"2155ef12_a27437d6","line":410,"in_reply_to":"65563824_02a05094","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":418,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":419,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":420,"context_line":"    )"},{"line_number":421,"context_line":"    def authenticate(self, image_url, username\u003dNone, password\u003dNone):"},{"line_number":422,"context_line":"        netloc \u003d image_url.netloc"},{"line_number":423,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":424,"context_line":"        scope \u003d \u0027repository:%s:pull\u0027 % image[1:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c527610_4ffb4d2a","line":421,"updated":"2025-01-06 19:09:34.000000000","message":"docstring?!","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":419,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":420,"context_line":"    )"},{"line_number":421,"context_line":"    def authenticate(self, image_url, username\u003dNone, password\u003dNone):"},{"line_number":422,"context_line":"        netloc \u003d image_url.netloc"},{"line_number":423,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":424,"context_line":"        scope \u003d \u0027repository:%s:pull\u0027 % image[1:]"}],"source_content_type":"text/x-python","patch_set":1,"id":"ebf5989f_abf2f261","line":421,"in_reply_to":"9c527610_4ffb4d2a","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":463,"context_line":"                lock \u003d self.lock"},{"line_number":464,"context_line":"            else:"},{"line_number":465,"context_line":"                lock \u003d None"},{"line_number":466,"context_line":"            token \u003d RegistrySessionHelper.get_bearer_token(self.session,"},{"line_number":467,"context_line":"                                                           lock\u003dlock,"},{"line_number":468,"context_line":"                                                           username\u003dusername,"},{"line_number":469,"context_line":"                                                           password\u003dpassword,"},{"line_number":470,"context_line":"                                                           realm\u003drealm,"},{"line_number":471,"context_line":"                                                           service\u003dservice,"},{"line_number":472,"context_line":"                                                           scope\u003dscope)"},{"line_number":473,"context_line":"        elif auth_type and auth_type.lower() \u003d\u003d \u0027basic\u0027:"},{"line_number":474,"context_line":"            if not username or not password:"},{"line_number":475,"context_line":"                raise exception.ImageServiceAuthenticationRequired("}],"source_content_type":"text/x-python","patch_set":1,"id":"4672f1a3_88f2431e","line":472,"range":{"start_line":466,"start_character":59,"end_line":472,"end_character":71},"updated":"2025-01-06 19:09:34.000000000","message":"format this for a gentler wrap, this is painful to read.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                lock \u003d self.lock"},{"line_number":464,"context_line":"            else:"},{"line_number":465,"context_line":"                lock \u003d None"},{"line_number":466,"context_line":"            token \u003d RegistrySessionHelper.get_bearer_token(self.session,"},{"line_number":467,"context_line":"                                                           lock\u003dlock,"},{"line_number":468,"context_line":"                                                           username\u003dusername,"},{"line_number":469,"context_line":"                                                           password\u003dpassword,"},{"line_number":470,"context_line":"                                                           realm\u003drealm,"},{"line_number":471,"context_line":"                                                           service\u003dservice,"},{"line_number":472,"context_line":"                                                           scope\u003dscope)"},{"line_number":473,"context_line":"        elif auth_type and auth_type.lower() \u003d\u003d \u0027basic\u0027:"},{"line_number":474,"context_line":"            if not username or not password:"},{"line_number":475,"context_line":"                raise exception.ImageServiceAuthenticationRequired("}],"source_content_type":"text/x-python","patch_set":1,"id":"5b934a7a_e4bec1a4","line":472,"range":{"start_line":466,"start_character":59,"end_line":472,"end_character":71},"in_reply_to":"4672f1a3_88f2431e","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":524,"context_line":"        return response.text"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    @classmethod"},{"line_number":527,"context_line":"    def _build_url(cls, url, path):"},{"line_number":528,"context_line":"        netloc \u003d url.netloc"},{"line_number":529,"context_line":"        scheme \u003d \u0027https\u0027"},{"line_number":530,"context_line":"        if netloc in cls.mirrors:"}],"source_content_type":"text/x-python","patch_set":1,"id":"47d0708b_b763284f","line":527,"updated":"2025-01-06 19:09:34.000000000","message":"docstring","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":524,"context_line":"        return response.text"},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"    @classmethod"},{"line_number":527,"context_line":"    def _build_url(cls, url, path):"},{"line_number":528,"context_line":"        netloc \u003d url.netloc"},{"line_number":529,"context_line":"        scheme \u003d \u0027https\u0027"},{"line_number":530,"context_line":"        if netloc in cls.mirrors:"}],"source_content_type":"text/x-python","patch_set":1,"id":"94ac78b8_4d6bb2d6","line":527,"in_reply_to":"47d0708b_b763284f","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":541,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":542,"context_line":"    )"},{"line_number":543,"context_line":"    def _get_manifest(self, image_url, digest\u003dNone):"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        if not digest:"},{"line_number":546,"context_line":"            # Caller has the digest in the url, that\u0027s fine, lets"},{"line_number":547,"context_line":"            # use that."}],"source_content_type":"text/x-python","patch_set":1,"id":"8c07b7cf_35b9abe9","line":544,"updated":"2025-01-06 19:09:34.000000000","message":"docstring","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":542,"context_line":"    )"},{"line_number":543,"context_line":"    def _get_manifest(self, image_url, digest\u003dNone):"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        if not digest:"},{"line_number":546,"context_line":"            # Caller has the digest in the url, that\u0027s fine, lets"},{"line_number":547,"context_line":"            # use that."}],"source_content_type":"text/x-python","patch_set":1,"id":"75894dce_0e35a2b6","line":544,"in_reply_to":"8c07b7cf_35b9abe9","updated":"2025-01-07 21:18:28.000000000","message":"The caller method details this.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":577,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":578,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":579,"context_line":"    )"},{"line_number":580,"context_line":"    def _get_artifact_index(self, image_url):"},{"line_number":581,"context_line":"        parts \u003d self._resolve_tag(image_url)"},{"line_number":582,"context_line":"        index_url \u003d self._build_url("},{"line_number":583,"context_line":"            image_url, CALL_MANIFEST % parts"}],"source_content_type":"text/x-python","patch_set":1,"id":"f6c5e3ee_eb2644ce","line":580,"updated":"2025-01-06 19:09:34.000000000","message":"docstring","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":578,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":579,"context_line":"    )"},{"line_number":580,"context_line":"    def _get_artifact_index(self, image_url):"},{"line_number":581,"context_line":"        parts \u003d self._resolve_tag(image_url)"},{"line_number":582,"context_line":"        index_url \u003d self._build_url("},{"line_number":583,"context_line":"            image_url, CALL_MANIFEST % parts"}],"source_content_type":"text/x-python","patch_set":1,"id":"15b84384_f8a9b31c","line":580,"in_reply_to":"f6c5e3ee_eb2644ce","updated":"2025-01-07 21:18:28.000000000","message":"The method calling it is just a wrapper.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":601,"context_line":"        # Return a dictionary to the caller so it can house the"},{"line_number":602,"context_line":"        # filtering/sorting application logic."},{"line_number":603,"context_line":"        return json.loads(index_str)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_referrers_index(self, image_url):"},{"line_number":606,"context_line":"        # NOTE(TheJulia): Warning: This method has been stubbed in as a"},{"line_number":607,"context_line":"        # hopefully simpler path to resolve blobs in the future. However..."},{"line_number":608,"context_line":"        # the universe doesn\u0027t appear to be ready for this, yet."},{"line_number":609,"context_line":"        parts \u003d self._resolve_tag(image_url)"},{"line_number":610,"context_line":"        index_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_REFERRERS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        # NOTE(TheJulia): There does not appear to be an explicit"},{"line_number":614,"context_line":"        # referrers media type to query in the distribution spec"},{"line_number":615,"context_line":"        # update which defines 1.1."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        try:"},{"line_number":618,"context_line":"            index_r \u003d RegistrySessionHelper.get("},{"line_number":619,"context_line":"                self.session,"},{"line_number":620,"context_line":"                index_url,"},{"line_number":621,"context_line":"                timeout\u003dCONF.webserver_connection_timeout"},{"line_number":622,"context_line":"            )"},{"line_number":623,"context_line":"        except requests.exceptions.HTTPError as e:"},{"line_number":624,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":625,"context_line":"                raise exception.ImageNotFound("},{"line_number":626,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":627,"context_line":"        index_str \u003d self._get_response_text(index_r)"},{"line_number":628,"context_line":"        # Return a dictionary to the caller so it can house the"},{"line_number":629,"context_line":"        # filtering/sorting logic."},{"line_number":630,"context_line":"        return json.loads(index_str)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def _resolve_tag(self, image_url):"},{"line_number":633,"context_line":"        \"\"\"Attempts to resolve tags from a container URL.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"ed32b7b6_7c3058d7","line":630,"range":{"start_line":604,"start_character":0,"end_line":630,"end_character":36},"updated":"2025-01-06 19:09:34.000000000","message":"likely comment out, the code fundamentally appears to work, but my sample remote registry doesn\u0027t support it.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":601,"context_line":"        # Return a dictionary to the caller so it can house the"},{"line_number":602,"context_line":"        # filtering/sorting application logic."},{"line_number":603,"context_line":"        return json.loads(index_str)"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_referrers_index(self, image_url):"},{"line_number":606,"context_line":"        # NOTE(TheJulia): Warning: This method has been stubbed in as a"},{"line_number":607,"context_line":"        # hopefully simpler path to resolve blobs in the future. However..."},{"line_number":608,"context_line":"        # the universe doesn\u0027t appear to be ready for this, yet."},{"line_number":609,"context_line":"        parts \u003d self._resolve_tag(image_url)"},{"line_number":610,"context_line":"        index_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_REFERRERS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        # NOTE(TheJulia): There does not appear to be an explicit"},{"line_number":614,"context_line":"        # referrers media type to query in the distribution spec"},{"line_number":615,"context_line":"        # update which defines 1.1."},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        try:"},{"line_number":618,"context_line":"            index_r \u003d RegistrySessionHelper.get("},{"line_number":619,"context_line":"                self.session,"},{"line_number":620,"context_line":"                index_url,"},{"line_number":621,"context_line":"                timeout\u003dCONF.webserver_connection_timeout"},{"line_number":622,"context_line":"            )"},{"line_number":623,"context_line":"        except requests.exceptions.HTTPError as e:"},{"line_number":624,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":625,"context_line":"                raise exception.ImageNotFound("},{"line_number":626,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":627,"context_line":"        index_str \u003d self._get_response_text(index_r)"},{"line_number":628,"context_line":"        # Return a dictionary to the caller so it can house the"},{"line_number":629,"context_line":"        # filtering/sorting logic."},{"line_number":630,"context_line":"        return json.loads(index_str)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def _resolve_tag(self, image_url):"},{"line_number":633,"context_line":"        \"\"\"Attempts to resolve tags from a container URL.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"2da052e0_b2b6f334","line":630,"range":{"start_line":604,"start_character":0,"end_line":630,"end_character":36},"in_reply_to":"ed32b7b6_7c3058d7","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":792,"context_line":"        \"\"\""},{"line_number":793,"context_line":"        image_url \u003d self._image_to_url(image)"},{"line_number":794,"context_line":"        return self._get_artifact_index(image_url)"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def get_referrers_index(self, image):"},{"line_number":797,"context_line":"        # NOTE(TheJulia): In the initial form of this client code,"},{"line_number":798,"context_line":"        # this is unused. Referrers index is a slightly cleaner way"},{"line_number":799,"context_line":"        # of hunting for artifacts in the remote API, but this is"},{"line_number":800,"context_line":"        # a very new OCI registry feature as of this code being written."},{"line_number":801,"context_line":"        image_url \u003d self._image_to_url(image)"},{"line_number":802,"context_line":"        return self._get_referrers_index(image_url)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def get_manifest(self, image, digest\u003dNone):"},{"line_number":805,"context_line":"        \"\"\"Retrieve a manifest from the remote API."}],"source_content_type":"text/x-python","patch_set":1,"id":"93e21e6a_a9c40ddf","line":802,"range":{"start_line":795,"start_character":0,"end_line":802,"end_character":51},"updated":"2025-01-06 19:09:34.000000000","message":"likely comment out and/or move to the bottom of the class\u0027s methods.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":792,"context_line":"        \"\"\""},{"line_number":793,"context_line":"        image_url \u003d self._image_to_url(image)"},{"line_number":794,"context_line":"        return self._get_artifact_index(image_url)"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def get_referrers_index(self, image):"},{"line_number":797,"context_line":"        # NOTE(TheJulia): In the initial form of this client code,"},{"line_number":798,"context_line":"        # this is unused. Referrers index is a slightly cleaner way"},{"line_number":799,"context_line":"        # of hunting for artifacts in the remote API, but this is"},{"line_number":800,"context_line":"        # a very new OCI registry feature as of this code being written."},{"line_number":801,"context_line":"        image_url \u003d self._image_to_url(image)"},{"line_number":802,"context_line":"        return self._get_referrers_index(image_url)"},{"line_number":803,"context_line":""},{"line_number":804,"context_line":"    def get_manifest(self, image, digest\u003dNone):"},{"line_number":805,"context_line":"        \"\"\"Retrieve a manifest from the remote API."}],"source_content_type":"text/x-python","patch_set":1,"id":"c091eb18_d282ce47","line":802,"range":{"start_line":795,"start_character":0,"end_line":802,"end_character":51},"in_reply_to":"93e21e6a_a9c40ddf","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":858,"context_line":"                                    \u0027digest\u0027: blob_digest})"},{"line_number":859,"context_line":"        return manifest_url"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def get_cached_auth(self):"},{"line_number":862,"context_line":"        return self._cached_auth"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    # FIXME(TheJulia): question to answer, is this a good idea..."},{"line_number":865,"context_line":"    # ... or a bad idea?"}],"source_content_type":"text/x-python","patch_set":1,"id":"867c9062_40765998","line":862,"range":{"start_line":861,"start_character":0,"end_line":862,"end_character":32},"updated":"2025-01-06 19:09:34.000000000","message":"Docstring, and check to see if we\u0027ve done this, yet.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":858,"context_line":"                                    \u0027digest\u0027: blob_digest})"},{"line_number":859,"context_line":"        return manifest_url"},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    def get_cached_auth(self):"},{"line_number":862,"context_line":"        return self._cached_auth"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    # FIXME(TheJulia): question to answer, is this a good idea..."},{"line_number":865,"context_line":"    # ... or a bad idea?"}],"source_content_type":"text/x-python","patch_set":1,"id":"addb7c50_6d11da7f","line":862,"range":{"start_line":861,"start_character":0,"end_line":862,"end_character":32},"in_reply_to":"867c9062_40765998","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":918,"context_line":"            for chunk in download_helper:"},{"line_number":919,"context_line":"                # write the desired file out"},{"line_number":920,"context_line":"                image_file.write(chunk)"},{"line_number":921,"context_line":"            if download_helper.checksum_matches:"},{"line_number":922,"context_line":"                return blob_digest"},{"line_number":923,"context_line":"            else:"},{"line_number":924,"context_line":"                raise exception.ImageChecksumError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"4709c848_1bc55fa2","line":921,"updated":"2025-01-06 19:09:34.000000000","message":"So, we should debug log here to indicate we\u0027ve completed the transfer and moved x bytes of expected y bytes.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":918,"context_line":"            for chunk in download_helper:"},{"line_number":919,"context_line":"                # write the desired file out"},{"line_number":920,"context_line":"                image_file.write(chunk)"},{"line_number":921,"context_line":"            if download_helper.checksum_matches:"},{"line_number":922,"context_line":"                return blob_digest"},{"line_number":923,"context_line":"            else:"},{"line_number":924,"context_line":"                raise exception.ImageChecksumError()"}],"source_content_type":"text/x-python","patch_set":1,"id":"e388db57_8818be09","line":921,"in_reply_to":"4709c848_1bc55fa2","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                    if (now - token_time).seconds \u003c expires_in:"},{"line_number":236,"context_line":"                        return data[\u0027token\u0027]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"                # NOTE(TheJulia): Some OAuth response payload sources can return"},{"line_number":239,"context_line":"                # \"expires_at\" using UTC date and time format, instead of the RFC"},{"line_number":240,"context_line":"                # defined \"expires_in\" value."},{"line_number":241,"context_line":"                # Since we won\u0027t know what the user is pointing to, we fall back"}],"source_content_type":"text/x-python","patch_set":2,"id":"4363b9ce_62cf8c9f","line":238,"in_reply_to":"11e6a10b_a3cb096a","updated":"2025-01-08 22:20:33.000000000","message":"\u003e pep8: E501 line too long (80 \u003e 79 characters)\n\nPlease fix.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                        return data[\u0027token\u0027]"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"                # NOTE(TheJulia): Some OAuth response payload sources can return"},{"line_number":239,"context_line":"                # \"expires_at\" using UTC date and time format, instead of the RFC"},{"line_number":240,"context_line":"                # defined \"expires_in\" value."},{"line_number":241,"context_line":"                # Since we won\u0027t know what the user is pointing to, we fall back"},{"line_number":242,"context_line":"                # to this just to ensure our bases are appropriately covered."}],"source_content_type":"text/x-python","patch_set":2,"id":"70a9c82a_6a4360c3","line":239,"in_reply_to":"043e6093_02a41829","updated":"2025-01-08 22:20:33.000000000","message":"\u003e pep8: E501 line too long (81 \u003e 79 characters)\n\nPlease fix.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                # NOTE(TheJulia): Some OAuth response payload sources can return"},{"line_number":239,"context_line":"                # \"expires_at\" using UTC date and time format, instead of the RFC"},{"line_number":240,"context_line":"                # defined \"expires_in\" value."},{"line_number":241,"context_line":"                # Since we won\u0027t know what the user is pointing to, we fall back"},{"line_number":242,"context_line":"                # to this just to ensure our bases are appropriately covered."},{"line_number":243,"context_line":"                # https://www.rfc-editor.org/rfc/rfc6749"},{"line_number":244,"context_line":"                # https://bugzilla.redhat.com/show_bug.cgi?id\u003d2138743"}],"source_content_type":"text/x-python","patch_set":2,"id":"12c23b1b_21dcbdca","line":241,"in_reply_to":"bfdfb0ea_5e4d708c","updated":"2025-01-08 22:20:33.000000000","message":"\u003e pep8: E501 line too long (80 \u003e 79 characters)\n\nPlease fix.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"acc106d505352aa741eee04515a97bee717e1515","unresolved":true,"context_lines":[{"line_number":603,"context_line":"    def _resolve_tag(self, image_url):"},{"line_number":604,"context_line":"        \"\"\"Attempts to resolve tags from a container URL.\"\"\""},{"line_number":605,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":606,"context_line":"        parts \u003d {"},{"line_number":607,"context_line":"            \u0027image\u0027: image,"},{"line_number":608,"context_line":"            \u0027tag\u0027: tag"},{"line_number":609,"context_line":"        }"},{"line_number":610,"context_line":"        tags_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":614,"context_line":"            self.session, tags_url,"},{"line_number":615,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"}],"source_content_type":"text/x-python","patch_set":2,"id":"561e00a8_a787376d","line":612,"range":{"start_line":606,"start_character":0,"end_line":612,"end_character":9},"updated":"2025-01-09 01:30:24.000000000","message":"this needs to be investigated, it might be wrong.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"531f93571d279c8fb95565ee9b5372ec90b8aef9","unresolved":false,"context_lines":[{"line_number":603,"context_line":"    def _resolve_tag(self, image_url):"},{"line_number":604,"context_line":"        \"\"\"Attempts to resolve tags from a container URL.\"\"\""},{"line_number":605,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":606,"context_line":"        parts \u003d {"},{"line_number":607,"context_line":"            \u0027image\u0027: image,"},{"line_number":608,"context_line":"            \u0027tag\u0027: tag"},{"line_number":609,"context_line":"        }"},{"line_number":610,"context_line":"        tags_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":614,"context_line":"            self.session, tags_url,"},{"line_number":615,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c63a5d59_35dc0b7e","line":612,"range":{"start_line":606,"start_character":0,"end_line":612,"end_character":9},"in_reply_to":"561e00a8_a787376d","updated":"2025-01-10 20:21:54.000000000","message":"It wasn\u0027t this, it was _image_tag_from_url","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"acc106d505352aa741eee04515a97bee717e1515","unresolved":true,"context_lines":[{"line_number":610,"context_line":"        tags_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":614,"context_line":"            self.session, tags_url,"},{"line_number":615,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":616,"context_line":"        tags \u003d tags_r.json()[\u0027tags\u0027]"},{"line_number":617,"context_line":"        while \u0027next\u0027 in tags_r.links:"},{"line_number":618,"context_line":"            next_url \u003d parse.urljoin(tags_url, tags_r.links[\u0027next\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"be9a8d93_2aaaa11c","line":615,"range":{"start_line":613,"start_character":0,"end_line":615,"end_character":54},"updated":"2025-01-09 01:30:24.000000000","message":"I\u0027m assuming this is getting a 404 if the tag is wrong, but appears silent. We need to fix that to made the code better.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"531f93571d279c8fb95565ee9b5372ec90b8aef9","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        tags_url \u003d self._build_url("},{"line_number":611,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":612,"context_line":"        )"},{"line_number":613,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":614,"context_line":"            self.session, tags_url,"},{"line_number":615,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":616,"context_line":"        tags \u003d tags_r.json()[\u0027tags\u0027]"},{"line_number":617,"context_line":"        while \u0027next\u0027 in tags_r.links:"},{"line_number":618,"context_line":"            next_url \u003d parse.urljoin(tags_url, tags_r.links[\u0027next\u0027][\u0027url\u0027])"}],"source_content_type":"text/x-python","patch_set":2,"id":"e6e001a2_985c1e6c","line":615,"range":{"start_line":613,"start_character":0,"end_line":615,"end_character":54},"in_reply_to":"be9a8d93_2aaaa11c","updated":"2025-01-10 20:21:54.000000000","message":"Done","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":true,"context_lines":[{"line_number":636,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":637,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":638,"context_line":"    )"},{"line_number":639,"context_line":"    def _show(self, image_url, default_tag\u003dFalse):"},{"line_number":640,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":641,"context_line":"        parts \u003d {"},{"line_number":642,"context_line":"            \u0027image\u0027: image,"},{"line_number":643,"context_line":"            \u0027tag\u0027: tag"},{"line_number":644,"context_line":"        }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        tags_url \u003d self._build_url("},{"line_number":647,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":648,"context_line":"        )"},{"line_number":649,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":650,"context_line":"            self.session, tags_url,"},{"line_number":651,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":652,"context_line":"        tags \u003d tags_r.json()[\u0027tags\u0027]"},{"line_number":653,"context_line":"        while \u0027next\u0027 in tags_r.links:"},{"line_number":654,"context_line":"            next_url \u003d parse.urljoin(tags_url, tags_r.links[\u0027next\u0027][\u0027url\u0027])"},{"line_number":655,"context_line":"            tags_r \u003d RegistrySessionHelper.get("},{"line_number":656,"context_line":"                self.session, next_url,"},{"line_number":657,"context_line":"                timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":658,"context_line":"            tags.extend(tags_r.json()[\u0027tags\u0027])"},{"line_number":659,"context_line":"        if default_tag and tag not in tags:"},{"line_number":660,"context_line":"            if tags:"},{"line_number":661,"context_line":"                parts[\u0027tag\u0027] \u003d tags[-1]"},{"line_number":662,"context_line":"            else:"},{"line_number":663,"context_line":"                raise exception.ImageNotFound("},{"line_number":664,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        manifest_url \u003d self._build_url("},{"line_number":667,"context_line":"            image_url, CALL_MANIFEST % parts"},{"line_number":668,"context_line":"        )"},{"line_number":669,"context_line":"        manifest_headers \u003d {\u0027Accept\u0027: \", \".join([MEDIA_OCI_MANIFEST_V1])}"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        try:"},{"line_number":672,"context_line":"            manifest_r \u003d RegistrySessionHelper.get("},{"line_number":673,"context_line":"                self.session,"},{"line_number":674,"context_line":"                manifest_url,"},{"line_number":675,"context_line":"                headers\u003dmanifest_headers,"},{"line_number":676,"context_line":"                timeout\u003dCONF.webserver_connection_timeout,"},{"line_number":677,"context_line":"            )"},{"line_number":678,"context_line":"        except requests.exceptions.HTTPError as e:"},{"line_number":679,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":680,"context_line":"                raise exception.ImageNotFound("},{"line_number":681,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":682,"context_line":"            raise"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"        manifest_str \u003d self._get_response_text(manifest_r)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if \u0027Docker-Content-Digest\u0027 in manifest_r.headers:"},{"line_number":687,"context_line":"            digest \u003d manifest_r.headers[\u0027Docker-Content-Digest\u0027]"},{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            # The registry didn\u0027t supply the manifest digest, so calculate it"},{"line_number":690,"context_line":"            calc_digest \u003d hashlib.sha256()"},{"line_number":691,"context_line":"            calc_digest.update(manifest_str.encode(\u0027utf-8\u0027))"},{"line_number":692,"context_line":"            digest \u003d \u0027sha256:%s\u0027 % calc_digest.hexdigest()"},{"line_number":693,"context_line":"        manifest \u003d json.loads(manifest_str)"},{"line_number":694,"context_line":"        if manifest.get(\u0027schemaVersion\u0027, 2) \u003d\u003d 1:"},{"line_number":695,"context_line":"            config \u003d json.loads(manifest[\u0027history\u0027][0][\u0027v1Compatibility\u0027])"},{"line_number":696,"context_line":"            layers \u003d list(reversed([x[\u0027blobSum\u0027]"},{"line_number":697,"context_line":"                                    for x in manifest[\u0027fsLayers\u0027]]))"},{"line_number":698,"context_line":"        else:"},{"line_number":699,"context_line":"            layers \u003d [x[\u0027digest\u0027] for x in manifest[\u0027layers\u0027]]"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"            parts[\u0027digest\u0027] \u003d manifest[\u0027config\u0027][\u0027digest\u0027]"},{"line_number":702,"context_line":"            config_headers \u003d {"},{"line_number":703,"context_line":"                \u0027Accept\u0027: manifest[\u0027config\u0027][\u0027mediaType\u0027]"},{"line_number":704,"context_line":"            }"},{"line_number":705,"context_line":"            config_url \u003d self._build_url("},{"line_number":706,"context_line":"                image_url, CALL_BLOB % parts)"},{"line_number":707,"context_line":"            config_r \u003d RegistrySessionHelper.get("},{"line_number":708,"context_line":"                self.session,"},{"line_number":709,"context_line":"                config_url,"},{"line_number":710,"context_line":"                headers\u003dconfig_headers,"},{"line_number":711,"context_line":"                timeout\u003dCONF.webserver_connection_timeout,"},{"line_number":712,"context_line":"                allow_redirects\u003dFalse"},{"line_number":713,"context_line":"            )"},{"line_number":714,"context_line":"            # check if the blob is a redirect"},{"line_number":715,"context_line":"            config_r \u003d RegistrySessionHelper.check_redirect_trusted("},{"line_number":716,"context_line":"                config_r, self.session, stream\u003dFalse)"},{"line_number":717,"context_line":"            config \u003d config_r.json()"},{"line_number":718,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":719,"context_line":"        name \u003d \u0027%s%s\u0027 % (image_url.netloc, image)"},{"line_number":720,"context_line":"        created \u003d config[\u0027created\u0027]"},{"line_number":721,"context_line":"        labels \u003d config[\u0027config\u0027].get(\u0027Labels\u0027, {})"},{"line_number":722,"context_line":"        # NOTE: labels can be null"},{"line_number":723,"context_line":"        if labels is None:"},{"line_number":724,"context_line":"            labels \u003d {}"},{"line_number":725,"context_line":"        architecture \u003d config[\u0027architecture\u0027]"},{"line_number":726,"context_line":"        image_os \u003d config[\u0027os\u0027]"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        return {"},{"line_number":729,"context_line":"            \u0027Name\u0027: name,"},{"line_number":730,"context_line":"            \u0027Tag\u0027: tag,"},{"line_number":731,"context_line":"            \u0027Digest\u0027: digest,"},{"line_number":732,"context_line":"            \u0027RepoTags\u0027: tags,"},{"line_number":733,"context_line":"            \u0027Created\u0027: created,"},{"line_number":734,"context_line":"            \u0027Labels\u0027: labels,"},{"line_number":735,"context_line":"            \u0027Architecture\u0027: architecture,"},{"line_number":736,"context_line":"            \u0027Os\u0027: image_os,"},{"line_number":737,"context_line":"            \u0027Layers\u0027: layers,"},{"line_number":738,"context_line":"        }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def show(self, image):"},{"line_number":741,"context_line":"        \"\"\"Show details about a container image\u0027s default image."}],"source_content_type":"text/x-python","patch_set":2,"id":"49328358_c99b5ff9","line":738,"range":{"start_line":639,"start_character":0,"end_line":738,"end_character":9},"updated":"2025-01-08 22:20:33.000000000","message":"Do we need any of this?","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":636,"context_line":"        wait\u003dtenacity.wait_random_exponential(multiplier\u003d1, max\u003d10),"},{"line_number":637,"context_line":"        stop\u003dtenacity.stop_after_attempt(5)"},{"line_number":638,"context_line":"    )"},{"line_number":639,"context_line":"    def _show(self, image_url, default_tag\u003dFalse):"},{"line_number":640,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":641,"context_line":"        parts \u003d {"},{"line_number":642,"context_line":"            \u0027image\u0027: image,"},{"line_number":643,"context_line":"            \u0027tag\u0027: tag"},{"line_number":644,"context_line":"        }"},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        tags_url \u003d self._build_url("},{"line_number":647,"context_line":"            image_url, CALL_TAGS % parts"},{"line_number":648,"context_line":"        )"},{"line_number":649,"context_line":"        tags_r \u003d RegistrySessionHelper.get("},{"line_number":650,"context_line":"            self.session, tags_url,"},{"line_number":651,"context_line":"            timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":652,"context_line":"        tags \u003d tags_r.json()[\u0027tags\u0027]"},{"line_number":653,"context_line":"        while \u0027next\u0027 in tags_r.links:"},{"line_number":654,"context_line":"            next_url \u003d parse.urljoin(tags_url, tags_r.links[\u0027next\u0027][\u0027url\u0027])"},{"line_number":655,"context_line":"            tags_r \u003d RegistrySessionHelper.get("},{"line_number":656,"context_line":"                self.session, next_url,"},{"line_number":657,"context_line":"                timeout\u003dCONF.webserver_connection_timeout)"},{"line_number":658,"context_line":"            tags.extend(tags_r.json()[\u0027tags\u0027])"},{"line_number":659,"context_line":"        if default_tag and tag not in tags:"},{"line_number":660,"context_line":"            if tags:"},{"line_number":661,"context_line":"                parts[\u0027tag\u0027] \u003d tags[-1]"},{"line_number":662,"context_line":"            else:"},{"line_number":663,"context_line":"                raise exception.ImageNotFound("},{"line_number":664,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":665,"context_line":""},{"line_number":666,"context_line":"        manifest_url \u003d self._build_url("},{"line_number":667,"context_line":"            image_url, CALL_MANIFEST % parts"},{"line_number":668,"context_line":"        )"},{"line_number":669,"context_line":"        manifest_headers \u003d {\u0027Accept\u0027: \", \".join([MEDIA_OCI_MANIFEST_V1])}"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        try:"},{"line_number":672,"context_line":"            manifest_r \u003d RegistrySessionHelper.get("},{"line_number":673,"context_line":"                self.session,"},{"line_number":674,"context_line":"                manifest_url,"},{"line_number":675,"context_line":"                headers\u003dmanifest_headers,"},{"line_number":676,"context_line":"                timeout\u003dCONF.webserver_connection_timeout,"},{"line_number":677,"context_line":"            )"},{"line_number":678,"context_line":"        except requests.exceptions.HTTPError as e:"},{"line_number":679,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":680,"context_line":"                raise exception.ImageNotFound("},{"line_number":681,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":682,"context_line":"            raise"},{"line_number":683,"context_line":""},{"line_number":684,"context_line":"        manifest_str \u003d self._get_response_text(manifest_r)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        if \u0027Docker-Content-Digest\u0027 in manifest_r.headers:"},{"line_number":687,"context_line":"            digest \u003d manifest_r.headers[\u0027Docker-Content-Digest\u0027]"},{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            # The registry didn\u0027t supply the manifest digest, so calculate it"},{"line_number":690,"context_line":"            calc_digest \u003d hashlib.sha256()"},{"line_number":691,"context_line":"            calc_digest.update(manifest_str.encode(\u0027utf-8\u0027))"},{"line_number":692,"context_line":"            digest \u003d \u0027sha256:%s\u0027 % calc_digest.hexdigest()"},{"line_number":693,"context_line":"        manifest \u003d json.loads(manifest_str)"},{"line_number":694,"context_line":"        if manifest.get(\u0027schemaVersion\u0027, 2) \u003d\u003d 1:"},{"line_number":695,"context_line":"            config \u003d json.loads(manifest[\u0027history\u0027][0][\u0027v1Compatibility\u0027])"},{"line_number":696,"context_line":"            layers \u003d list(reversed([x[\u0027blobSum\u0027]"},{"line_number":697,"context_line":"                                    for x in manifest[\u0027fsLayers\u0027]]))"},{"line_number":698,"context_line":"        else:"},{"line_number":699,"context_line":"            layers \u003d [x[\u0027digest\u0027] for x in manifest[\u0027layers\u0027]]"},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"            parts[\u0027digest\u0027] \u003d manifest[\u0027config\u0027][\u0027digest\u0027]"},{"line_number":702,"context_line":"            config_headers \u003d {"},{"line_number":703,"context_line":"                \u0027Accept\u0027: manifest[\u0027config\u0027][\u0027mediaType\u0027]"},{"line_number":704,"context_line":"            }"},{"line_number":705,"context_line":"            config_url \u003d self._build_url("},{"line_number":706,"context_line":"                image_url, CALL_BLOB % parts)"},{"line_number":707,"context_line":"            config_r \u003d RegistrySessionHelper.get("},{"line_number":708,"context_line":"                self.session,"},{"line_number":709,"context_line":"                config_url,"},{"line_number":710,"context_line":"                headers\u003dconfig_headers,"},{"line_number":711,"context_line":"                timeout\u003dCONF.webserver_connection_timeout,"},{"line_number":712,"context_line":"                allow_redirects\u003dFalse"},{"line_number":713,"context_line":"            )"},{"line_number":714,"context_line":"            # check if the blob is a redirect"},{"line_number":715,"context_line":"            config_r \u003d RegistrySessionHelper.check_redirect_trusted("},{"line_number":716,"context_line":"                config_r, self.session, stream\u003dFalse)"},{"line_number":717,"context_line":"            config \u003d config_r.json()"},{"line_number":718,"context_line":"        image, tag \u003d self._image_tag_from_url(image_url)"},{"line_number":719,"context_line":"        name \u003d \u0027%s%s\u0027 % (image_url.netloc, image)"},{"line_number":720,"context_line":"        created \u003d config[\u0027created\u0027]"},{"line_number":721,"context_line":"        labels \u003d config[\u0027config\u0027].get(\u0027Labels\u0027, {})"},{"line_number":722,"context_line":"        # NOTE: labels can be null"},{"line_number":723,"context_line":"        if labels is None:"},{"line_number":724,"context_line":"            labels \u003d {}"},{"line_number":725,"context_line":"        architecture \u003d config[\u0027architecture\u0027]"},{"line_number":726,"context_line":"        image_os \u003d config[\u0027os\u0027]"},{"line_number":727,"context_line":""},{"line_number":728,"context_line":"        return {"},{"line_number":729,"context_line":"            \u0027Name\u0027: name,"},{"line_number":730,"context_line":"            \u0027Tag\u0027: tag,"},{"line_number":731,"context_line":"            \u0027Digest\u0027: digest,"},{"line_number":732,"context_line":"            \u0027RepoTags\u0027: tags,"},{"line_number":733,"context_line":"            \u0027Created\u0027: created,"},{"line_number":734,"context_line":"            \u0027Labels\u0027: labels,"},{"line_number":735,"context_line":"            \u0027Architecture\u0027: architecture,"},{"line_number":736,"context_line":"            \u0027Os\u0027: image_os,"},{"line_number":737,"context_line":"            \u0027Layers\u0027: layers,"},{"line_number":738,"context_line":"        }"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def show(self, image):"},{"line_number":741,"context_line":"        \"\"\"Show details about a container image\u0027s default image."}],"source_content_type":"text/x-python","patch_set":2,"id":"999560e5_88f5df73","line":738,"range":{"start_line":639,"start_character":0,"end_line":738,"end_character":9},"in_reply_to":"49328358_c99b5ff9","updated":"2025-01-10 18:31:54.000000000","message":"Removing. We don\u0027t need it.","commit_id":"ea1c4a0294934b705396b7530d666c9c1f6ddc3a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"531f93571d279c8fb95565ee9b5372ec90b8aef9","unresolved":true,"context_lines":[{"line_number":619,"context_line":"                self.session, next_url, timeout\u003d30)"},{"line_number":620,"context_line":"            tags.extend(tags_r.json()[\u0027tags\u0027])"},{"line_number":621,"context_line":"        if tag not in tags:"},{"line_number":622,"context_line":"            if tags:"},{"line_number":623,"context_line":"                parts[\u0027tag\u0027] \u003d tags[-1]"},{"line_number":624,"context_line":"            else:"},{"line_number":625,"context_line":"                raise exception.ImageNotFound("},{"line_number":626,"context_line":"                    image_id\u003dimage_url.geturl())"}],"source_content_type":"text/x-python","patch_set":8,"id":"b31a0ada_cc58badf","line":623,"range":{"start_line":622,"start_character":0,"end_line":623,"end_character":39},"updated":"2025-01-10 20:21:54.000000000","message":"And if the desired tag is not present, we can fail the deploy. Thats fine.","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":619,"context_line":"                self.session, next_url, timeout\u003d30)"},{"line_number":620,"context_line":"            tags.extend(tags_r.json()[\u0027tags\u0027])"},{"line_number":621,"context_line":"        if tag not in tags:"},{"line_number":622,"context_line":"            if tags:"},{"line_number":623,"context_line":"                parts[\u0027tag\u0027] \u003d tags[-1]"},{"line_number":624,"context_line":"            else:"},{"line_number":625,"context_line":"                raise exception.ImageNotFound("},{"line_number":626,"context_line":"                    image_id\u003dimage_url.geturl())"}],"source_content_type":"text/x-python","patch_set":8,"id":"88a85a53_c5314e0c","line":623,"range":{"start_line":622,"start_character":0,"end_line":623,"end_character":39},"in_reply_to":"b31a0ada_cc58badf","updated":"2025-01-16 21:18:48.000000000","message":"Done","commit_id":"b4c0710fed0ee7a88ab3da5dc9121b1e75b55156"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    \u0027registry.access.redhat.com\u0027,"},{"line_number":48,"context_line":"    \u0027docker.io\u0027,"},{"line_number":49,"context_line":"    \u0027registry-1.docker.io\u0027,"},{"line_number":50,"context_line":")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7b84fbe6_9b6f43f5","line":50,"updated":"2025-01-10 21:23:34.000000000","message":"should this be a configurable list instead of a hardcoded one?","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \u0027registry.access.redhat.com\u0027,"},{"line_number":48,"context_line":"    \u0027docker.io\u0027,"},{"line_number":49,"context_line":"    \u0027registry-1.docker.io\u0027,"},{"line_number":50,"context_line":")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"NO_VERIFY_REGISTRIES \u003d ()"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba175917_48d34668","line":50,"in_reply_to":"7b84fbe6_9b6f43f5","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9052a29640892afd3fe1023ec5702b3f89160ba3","unresolved":true,"context_lines":[{"line_number":567,"context_line":"        # filtering/sorting application logic."},{"line_number":568,"context_line":"        return json.loads(index_str)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    # def _get_referrers_index(self, image_url):"},{"line_number":571,"context_line":"    #    # NOTE(TheJulia): Warning: This method has been stubbed in as a"},{"line_number":572,"context_line":"    #    # hopefully simpler path to resolve blobs in the future. However..."},{"line_number":573,"context_line":"    #    # the universe doesn\u0027t appear to be ready for this, yet."}],"source_content_type":"text/x-python","patch_set":9,"id":"5ec8eafa_6321920f","line":570,"updated":"2025-01-13 18:05:36.000000000","message":"Consensus from chatting with Jay and Dmitry was to go ahead and drop the theoretical referrals index support and implement it when we believe it is available later.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":567,"context_line":"        # filtering/sorting application logic."},{"line_number":568,"context_line":"        return json.loads(index_str)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"    # def _get_referrers_index(self, image_url):"},{"line_number":571,"context_line":"    #    # NOTE(TheJulia): Warning: This method has been stubbed in as a"},{"line_number":572,"context_line":"    #    # hopefully simpler path to resolve blobs in the future. However..."},{"line_number":573,"context_line":"    #    # the universe doesn\u0027t appear to be ready for this, yet."}],"source_content_type":"text/x-python","patch_set":9,"id":"d4e96b32_f44542db","line":570,"in_reply_to":"5ec8eafa_6321920f","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def __init__(self, verify\u003dTrue):"},{"line_number":71,"context_line":"        self.session \u003d requests.Session()"},{"line_number":72,"context_line":"        self.session.verify \u003d verify"},{"line_number":73,"context_line":"        adapter \u003d HTTPAdapter("},{"line_number":74,"context_line":"            max_retries\u003d8,"},{"line_number":75,"context_line":"            pool_connections\u003d24,"},{"line_number":76,"context_line":"            pool_maxsize\u003d24,"},{"line_number":77,"context_line":"            pool_block\u003dFalse"},{"line_number":78,"context_line":"        )"},{"line_number":79,"context_line":"        self.session.mount(\u0027http://\u0027, adapter)"},{"line_number":80,"context_line":"        self.session.mount(\u0027https://\u0027, adapter)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"8716bdd6_e5157bdb","line":78,"range":{"start_line":73,"start_character":0,"end_line":78,"end_character":9},"updated":"2025-01-16 21:18:48.000000000","message":"We likely can dial/tune this to more reasonable usage/retries.","commit_id":"ff910c4a855023f41dd4113b9201f90cab213f16"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":518,"context_line":"            )"},{"line_number":519,"context_line":"        except requests.exceptions.HTTPError as e:"},{"line_number":520,"context_line":"            LOG.debug(e)"},{"line_number":521,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":522,"context_line":"                raise exception.ImageNotFound("},{"line_number":523,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":524,"context_line":"        manifest_str \u003d self._get_response_text(manifest_r)"}],"source_content_type":"text/x-python","patch_set":11,"id":"b7bf4aa1_cce999c1","line":521,"range":{"start_line":521,"start_character":40,"end_line":521,"end_character":52},"updated":"2025-01-16 21:18:48.000000000","message":"We likely ought to look for 500s as well, like service down load balancer renders error.\n\n401 is also \"AuthenticationRequired\" which would be a pretty good error to capture.","commit_id":"ff910c4a855023f41dd4113b9201f90cab213f16"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            if e.response.status_code in (403, 404):"},{"line_number":522,"context_line":"                raise exception.ImageNotFound("},{"line_number":523,"context_line":"                    image_id\u003dimage_url.geturl())"},{"line_number":524,"context_line":"        manifest_str \u003d self._get_response_text(manifest_r)"},{"line_number":525,"context_line":"        checksum_utils.validate_text_checksum(manifest_str, digest)"},{"line_number":526,"context_line":"        return json.loads(manifest_str)"},{"line_number":527,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"e74b887a_589d94d3","line":524,"updated":"2025-01-16 21:18:48.000000000","message":"Specifically, if we get an exception getting the manifest, things detonate here because manifest_r was not assigned.\n\nOkay, this turned out to be a missing raise in the code as well.","commit_id":"ff910c4a855023f41dd4113b9201f90cab213f16"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    @classmethod"},{"line_number":866,"context_line":"    def _image_to_url(cls, image):"},{"line_number":867,"context_line":"        \"\"\"Hellper to create an OCI URL.\"\"\""},{"line_number":868,"context_line":"        if \u0027://\u0027 not in image:"},{"line_number":869,"context_line":"            # Slight bit of future proofing in case we ever support"},{"line_number":870,"context_line":"            # identifying bare URLs."}],"source_content_type":"text/x-python","patch_set":13,"id":"96ddc929_ef8d2960","line":867,"range":{"start_line":867,"start_character":11,"end_line":867,"end_character":18},"updated":"2025-01-17 00:47:38.000000000","message":"Hell per","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    @classmethod"},{"line_number":866,"context_line":"    def _image_to_url(cls, image):"},{"line_number":867,"context_line":"        \"\"\"Hellper to create an OCI URL.\"\"\""},{"line_number":868,"context_line":"        if \u0027://\u0027 not in image:"},{"line_number":869,"context_line":"            # Slight bit of future proofing in case we ever support"},{"line_number":870,"context_line":"            # identifying bare URLs."}],"source_content_type":"text/x-python","patch_set":13,"id":"71950987_d330207b","line":867,"range":{"start_line":867,"start_character":11,"end_line":867,"end_character":18},"in_reply_to":"96ddc929_ef8d2960","updated":"2025-01-17 17:44:02.000000000","message":"lolz","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":208,"context_line":"        \"\"\"Takes a FQDN for a container registry and consults auth config."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        This method evaluates named configuration parameter"},{"line_number":211,"context_line":"        [oci]authenitcation_config and looks for pre-shared secrets"},{"line_number":212,"context_line":"        in the supplied json file. It is written to defensively"},{"line_number":213,"context_line":"        handle the file such that errors are not treated as fatal to"},{"line_number":214,"context_line":"        the overall lookup process, but errors are logged."}],"source_content_type":"text/x-python","patch_set":18,"id":"f0fb4e5e_7dd7cb1d","line":211,"updated":"2025-02-06 16:56:32.000000000","message":"sp: authentication","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        \"\"\"Takes a FQDN for a container registry and consults auth config."},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        This method evaluates named configuration parameter"},{"line_number":211,"context_line":"        [oci]authenitcation_config and looks for pre-shared secrets"},{"line_number":212,"context_line":"        in the supplied json file. It is written to defensively"},{"line_number":213,"context_line":"        handle the file such that errors are not treated as fatal to"},{"line_number":214,"context_line":"        the overall lookup process, but errors are logged."}],"source_content_type":"text/x-python","patch_set":18,"id":"a27e5f65_a018aaf1","line":211,"in_reply_to":"f0fb4e5e_7dd7cb1d","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":240,"context_line":"                      \u0027data: %s\u0027, e)"},{"line_number":241,"context_line":"            return"},{"line_number":242,"context_line":"        except (json.JSONDecodeError, UnicodeDecodeError) as e:"},{"line_number":243,"context_line":"            LOG.error(\u0027Unable to decode pre-shared authenitcaiton token \u0027"},{"line_number":244,"context_line":"                      \u0027data: %s\u0027, e)"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"82e73037_eb508b97","line":243,"updated":"2025-02-06 16:56:32.000000000","message":"spelling: authentication","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                      \u0027data: %s\u0027, e)"},{"line_number":241,"context_line":"            return"},{"line_number":242,"context_line":"        except (json.JSONDecodeError, UnicodeDecodeError) as e:"},{"line_number":243,"context_line":"            LOG.error(\u0027Unable to decode pre-shared authenitcaiton token \u0027"},{"line_number":244,"context_line":"                      \u0027data: %s\u0027, e)"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9662b35d_68e5ddf1","line":243,"in_reply_to":"82e73037_eb508b97","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":452,"context_line":"            self.session.headers.pop(\u0027Authorization\u0027, None)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        cached_token \u003d None"},{"line_number":455,"context_line":"        # FIXME we don\u0027t need the lock logic here, different use context."},{"line_number":456,"context_line":"        if getattr(self, \u0027lock\u0027, None):"},{"line_number":457,"context_line":"            cached_token \u003d RegistrySessionHelper.\\"},{"line_number":458,"context_line":"                get_cached_bearer_token(self.lock, scope)"}],"source_content_type":"text/x-python","patch_set":18,"id":"a5ef2552_2ffcd178","line":455,"updated":"2025-02-06 16:56:32.000000000","message":"highlighting incomplete fixme","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":452,"context_line":"            self.session.headers.pop(\u0027Authorization\u0027, None)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        cached_token \u003d None"},{"line_number":455,"context_line":"        # FIXME we don\u0027t need the lock logic here, different use context."},{"line_number":456,"context_line":"        if getattr(self, \u0027lock\u0027, None):"},{"line_number":457,"context_line":"            cached_token \u003d RegistrySessionHelper.\\"},{"line_number":458,"context_line":"                get_cached_bearer_token(self.lock, scope)"}],"source_content_type":"text/x-python","patch_set":18,"id":"806d803f_b9ff3287","line":455,"in_reply_to":"a5ef2552_2ffcd178","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"ironic/common/pxe_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":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"def cache_ramdisk_kernel(task, pxe_info, ipxe_enabled\u003dFalse):"},{"line_number":1305,"context_line":"    \"\"\"Fetch the necessary kernels and ramdisks for the instance.\"\"\""},{"line_number":1306,"context_line":"    # NOTE(TheJulia): This code is largely formatted around the idea and"},{"line_number":1307,"context_line":"    # model of interacting with Glance, where you have multiple"},{"line_number":1308,"context_line":"    # distinct upfront mappings to hunt down. This breaks if the"},{"line_number":1309,"context_line":"    # image service has to determine a lot of that later on."},{"line_number":1310,"context_line":"    ctx \u003d task.context"},{"line_number":1311,"context_line":"    node \u003d task.node"},{"line_number":1312,"context_line":"    t_pxe_info \u003d copy.copy(pxe_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"83bfcaeb_8462a3cd","line":1309,"range":{"start_line":1306,"start_character":2,"end_line":1309,"end_character":60},"updated":"2025-01-06 19:09:34.000000000","message":"Trim this back comment wise. This is an overall challenge which exists here, but likely valid in this context.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"def cache_ramdisk_kernel(task, pxe_info, ipxe_enabled\u003dFalse):"},{"line_number":1305,"context_line":"    \"\"\"Fetch the necessary kernels and ramdisks for the instance.\"\"\""},{"line_number":1306,"context_line":"    # NOTE(TheJulia): This code is largely formatted around the idea and"},{"line_number":1307,"context_line":"    # model of interacting with Glance, where you have multiple"},{"line_number":1308,"context_line":"    # distinct upfront mappings to hunt down. This breaks if the"},{"line_number":1309,"context_line":"    # image service has to determine a lot of that later on."},{"line_number":1310,"context_line":"    ctx \u003d task.context"},{"line_number":1311,"context_line":"    node \u003d task.node"},{"line_number":1312,"context_line":"    t_pxe_info \u003d copy.copy(pxe_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5c3a63f0_57aace2c","line":1309,"range":{"start_line":1306,"start_character":2,"end_line":1309,"end_character":60},"in_reply_to":"83bfcaeb_8462a3cd","updated":"2025-01-08 22:20:33.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":1332,"context_line":"    LOG.debug(\"Fetching necessary kernel and ramdisk for node %s\","},{"line_number":1333,"context_line":"              node.uuid)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"    # FIXME(TheJulia) To provide a hint to later on down, we could take"},{"line_number":1336,"context_line":"    # an approach similar to this, because traditionally this gets"},{"line_number":1337,"context_line":"    # sent to fetch_images in a tuple of structural filename and image"},{"line_number":1338,"context_line":"    # reference as in a uuid or url."},{"line_number":1339,"context_line":"    # An ideal point, before we even get into this method to resolve"},{"line_number":1340,"context_line":"    # everything in *advance* of getting into the code for downloading."},{"line_number":1341,"context_line":"    # images_info \u003d []"},{"line_number":1342,"context_line":"    # for k, v in t_pxe_info.items():"},{"line_number":1343,"context_line":"    #    values \u003d (v[0], v[1], k)"},{"line_number":1344,"context_line":"    #    images_info.append(values)"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"    images_info \u003d list(t_pxe_info.values())"},{"line_number":1347,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3e41217c_8b4d73a2","line":1344,"range":{"start_line":1335,"start_character":4,"end_line":1344,"end_character":35},"updated":"2025-01-06 19:09:34.000000000","message":"This can likely all be removed, this was a disjointed thought.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":1332,"context_line":"    LOG.debug(\"Fetching necessary kernel and ramdisk for node %s\","},{"line_number":1333,"context_line":"              node.uuid)"},{"line_number":1334,"context_line":""},{"line_number":1335,"context_line":"    # FIXME(TheJulia) To provide a hint to later on down, we could take"},{"line_number":1336,"context_line":"    # an approach similar to this, because traditionally this gets"},{"line_number":1337,"context_line":"    # sent to fetch_images in a tuple of structural filename and image"},{"line_number":1338,"context_line":"    # reference as in a uuid or url."},{"line_number":1339,"context_line":"    # An ideal point, before we even get into this method to resolve"},{"line_number":1340,"context_line":"    # everything in *advance* of getting into the code for downloading."},{"line_number":1341,"context_line":"    # images_info \u003d []"},{"line_number":1342,"context_line":"    # for k, v in t_pxe_info.items():"},{"line_number":1343,"context_line":"    #    values \u003d (v[0], v[1], k)"},{"line_number":1344,"context_line":"    #    images_info.append(values)"},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"    images_info \u003d list(t_pxe_info.values())"},{"line_number":1347,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"c13f428e_27c28fae","line":1344,"range":{"start_line":1335,"start_character":4,"end_line":1344,"end_character":35},"in_reply_to":"3e41217c_8b4d73a2","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"}],"ironic/conf/oci.py":[{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2021 Verizon Media"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"b6d818c5_56480a26","line":1,"updated":"2025-02-06 16:56:32.000000000","message":"lol","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2021 Verizon Media"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":18,"id":"18f88749_945e737f","line":1,"in_reply_to":"b6d818c5_56480a26","updated":"2025-02-06 19:38:43.000000000","message":"WUT! I copied kickstart.py, so that is likely where it came from.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"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":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":1394,"context_line":"    # and gets replaced at various points in this sequence."},{"line_number":1395,"context_line":"    instance_info[\u0027image_url\u0027] \u003d None"},{"line_number":1396,"context_line":""},{"line_number":1397,"context_line":"    # Flag to allow the overall flow to track if glance is in use"},{"line_number":1398,"context_line":"    # or not, since glance has hyper specific requirements given"},{"line_number":1399,"context_line":"    # the backend can *also* be tied into swift and we support"},{"line_number":1400,"context_line":"    # directly interacting with swift."},{"line_number":1401,"context_line":"    is_glance_image \u003d False"},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    # TODO(TheJulia): We should likely look at splitting this method"}],"source_content_type":"text/x-python","patch_set":1,"id":"639b5d5a_b1ffdeb6","line":1400,"range":{"start_line":1397,"start_character":0,"end_line":1400,"end_character":38},"updated":"2025-01-06 19:09:34.000000000","message":"This comment could use some refinement, specifically why the flag exists.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":1394,"context_line":"    # and gets replaced at various points in this sequence."},{"line_number":1395,"context_line":"    instance_info[\u0027image_url\u0027] \u003d None"},{"line_number":1396,"context_line":""},{"line_number":1397,"context_line":"    # Flag to allow the overall flow to track if glance is in use"},{"line_number":1398,"context_line":"    # or not, since glance has hyper specific requirements given"},{"line_number":1399,"context_line":"    # the backend can *also* be tied into swift and we support"},{"line_number":1400,"context_line":"    # directly interacting with swift."},{"line_number":1401,"context_line":"    is_glance_image \u003d False"},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    # TODO(TheJulia): We should likely look at splitting this method"}],"source_content_type":"text/x-python","patch_set":1,"id":"ab96d304_f7b6370f","line":1400,"range":{"start_line":1397,"start_character":0,"end_line":1400,"end_character":38},"in_reply_to":"639b5d5a_b1ffdeb6","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":1408,"context_line":"    # Remote image services/repositories are a little different, they house"},{"line_number":1409,"context_line":"    # extra data we need to collect data from to streamline the process."},{"line_number":1410,"context_line":"    if service_utils.is_glance_image(image_source):"},{"line_number":1411,"context_line":"        is_glance_image \u003d True"},{"line_number":1412,"context_line":"        glance \u003d image_service.GlanceImageService(context\u003dtask.context)"},{"line_number":1413,"context_line":"        image_info \u003d glance.show(image_source)"},{"line_number":1414,"context_line":"        LOG.debug(\u0027Got image info: %(info)s for node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"2d7ab681_8884b993","line":1411,"updated":"2025-01-06 19:09:34.000000000","message":"nit: add comment saying set to true so we know we\u0027ve done the necessary glance pre-flight checking.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":1408,"context_line":"    # Remote image services/repositories are a little different, they house"},{"line_number":1409,"context_line":"    # extra data we need to collect data from to streamline the process."},{"line_number":1410,"context_line":"    if service_utils.is_glance_image(image_source):"},{"line_number":1411,"context_line":"        is_glance_image \u003d True"},{"line_number":1412,"context_line":"        glance \u003d image_service.GlanceImageService(context\u003dtask.context)"},{"line_number":1413,"context_line":"        image_info \u003d glance.show(image_source)"},{"line_number":1414,"context_line":"        LOG.debug(\u0027Got image info: %(info)s for node %(node)s.\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacd1e43_3bc05101","line":1411,"in_reply_to":"2d7ab681_8884b993","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":1449,"context_line":"        if not iwdi and boot_option !\u003d \u0027local\u0027:"},{"line_number":1450,"context_line":"            instance_info[\u0027kernel\u0027] \u003d image_info[\u0027properties\u0027][\u0027kernel_id\u0027]"},{"line_number":1451,"context_line":"            instance_info[\u0027ramdisk\u0027] \u003d image_info[\u0027properties\u0027][\u0027ramdisk_id\u0027]"},{"line_number":1452,"context_line":"    elif image_service.is_container_registry_url(image_source):"},{"line_number":1453,"context_line":"        # Is an oci image, we need to figure out the particulars..."},{"line_number":1454,"context_line":"        # but we *don\u0027t* need to also handle special casing with Swift."},{"line_number":1455,"context_line":"        # We will setup things so _cache_and_convert_image can do the needful"},{"line_number":1456,"context_line":"        # Or just validate the remote url data."},{"line_number":1457,"context_line":"        oci \u003d image_service.OCIImageService()"},{"line_number":1458,"context_line":"        image_auth \u003d image_service.get_image_service_auth_override(task.node)"},{"line_number":1459,"context_line":"        if image_auth:"},{"line_number":1460,"context_line":"            # If we have override credentials, populate it on the image"},{"line_number":1461,"context_line":"            # service class for use."},{"line_number":1462,"context_line":"            oci.set_auth_data(image_auth)"},{"line_number":1463,"context_line":"        # Ask the image service method to identify and gather information"},{"line_number":1464,"context_line":"        # about the image. This is different from a specific manifest supplied"},{"line_number":1465,"context_line":"        # upfront."},{"line_number":1466,"context_line":"        image_info \u003d oci.identify_specific_image("},{"line_number":1467,"context_line":"            image_source, image_download_source,"},{"line_number":1468,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1469,"context_line":"        )"},{"line_number":1470,"context_line":"        instance_info.update(image_info)"},{"line_number":1471,"context_line":"        # Reset image_source, as the downloads and such need to"},{"line_number":1472,"context_line":"        # prefer the OCI client uniformly and this URL is the required"},{"line_number":1473,"context_line":"        # URL for an OCI registry aware client should use to uniformly handle"},{"line_number":1474,"context_line":"        # authentication."},{"line_number":1475,"context_line":"        image_source \u003d instance_info[\u0027oci_image_manifest_url\u0027]"},{"line_number":1476,"context_line":"    if not is_glance_image:"},{"line_number":1477,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1478,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"8e771b81_196f367e","line":1475,"range":{"start_line":1452,"start_character":0,"end_line":1475,"end_character":62},"updated":"2025-01-06 19:09:34.000000000","message":"This will need unit tests, the code below is covered by existing testing.","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"b8fe81970f3e7eed5cf88b55940c08ab470ddaeb","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"        if not iwdi and boot_option !\u003d \u0027local\u0027:"},{"line_number":1450,"context_line":"            instance_info[\u0027kernel\u0027] \u003d image_info[\u0027properties\u0027][\u0027kernel_id\u0027]"},{"line_number":1451,"context_line":"            instance_info[\u0027ramdisk\u0027] \u003d image_info[\u0027properties\u0027][\u0027ramdisk_id\u0027]"},{"line_number":1452,"context_line":"    elif image_service.is_container_registry_url(image_source):"},{"line_number":1453,"context_line":"        # Is an oci image, we need to figure out the particulars..."},{"line_number":1454,"context_line":"        # but we *don\u0027t* need to also handle special casing with Swift."},{"line_number":1455,"context_line":"        # We will setup things so _cache_and_convert_image can do the needful"},{"line_number":1456,"context_line":"        # Or just validate the remote url data."},{"line_number":1457,"context_line":"        oci \u003d image_service.OCIImageService()"},{"line_number":1458,"context_line":"        image_auth \u003d image_service.get_image_service_auth_override(task.node)"},{"line_number":1459,"context_line":"        if image_auth:"},{"line_number":1460,"context_line":"            # If we have override credentials, populate it on the image"},{"line_number":1461,"context_line":"            # service class for use."},{"line_number":1462,"context_line":"            oci.set_auth_data(image_auth)"},{"line_number":1463,"context_line":"        # Ask the image service method to identify and gather information"},{"line_number":1464,"context_line":"        # about the image. This is different from a specific manifest supplied"},{"line_number":1465,"context_line":"        # upfront."},{"line_number":1466,"context_line":"        image_info \u003d oci.identify_specific_image("},{"line_number":1467,"context_line":"            image_source, image_download_source,"},{"line_number":1468,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1469,"context_line":"        )"},{"line_number":1470,"context_line":"        instance_info.update(image_info)"},{"line_number":1471,"context_line":"        # Reset image_source, as the downloads and such need to"},{"line_number":1472,"context_line":"        # prefer the OCI client uniformly and this URL is the required"},{"line_number":1473,"context_line":"        # URL for an OCI registry aware client should use to uniformly handle"},{"line_number":1474,"context_line":"        # authentication."},{"line_number":1475,"context_line":"        image_source \u003d instance_info[\u0027oci_image_manifest_url\u0027]"},{"line_number":1476,"context_line":"    if not is_glance_image:"},{"line_number":1477,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1478,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"f467d3b7_e43e3394","line":1475,"range":{"start_line":1452,"start_character":0,"end_line":1475,"end_character":62},"in_reply_to":"8e771b81_196f367e","updated":"2025-01-08 22:20:33.000000000","message":"Done","commit_id":"747107538a1cbf9a9bef89034f65418057132b89"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"acc106d505352aa741eee04515a97bee717e1515","unresolved":true,"context_lines":[{"line_number":1483,"context_line":"        # prefer the OCI client uniformly and this URL is the required"},{"line_number":1484,"context_line":"        # URL for an OCI registry aware client should use to uniformly handle"},{"line_number":1485,"context_line":"        # authentication."},{"line_number":1486,"context_line":"        image_source \u003d instance_info[\u0027oci_image_manifest_url\u0027]"},{"line_number":1487,"context_line":"    if not is_glance_image:"},{"line_number":1488,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1489,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"b51a74d7_cd382497","line":1486,"updated":"2025-01-09 01:30:24.000000000","message":"Okay, we\u0027ve got a problem here.  This *works* *great* for IPA, even older ipa without CDN doing authentication. What we *also* need to do is explicitly update image_source to a specific OCI reference, so when we go to download, we also have a specific url.","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"223b8ea27feb129f0c3a3fd904ddc11e2656e1fe","unresolved":false,"context_lines":[{"line_number":1483,"context_line":"        # prefer the OCI client uniformly and this URL is the required"},{"line_number":1484,"context_line":"        # URL for an OCI registry aware client should use to uniformly handle"},{"line_number":1485,"context_line":"        # authentication."},{"line_number":1486,"context_line":"        image_source \u003d instance_info[\u0027oci_image_manifest_url\u0027]"},{"line_number":1487,"context_line":"    if not is_glance_image:"},{"line_number":1488,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1489,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"d4518d39_10a273a6","line":1486,"in_reply_to":"b51a74d7_cd382497","updated":"2025-01-10 18:31:54.000000000","message":"Done","commit_id":"640102f5e73f0dfd9424484755ff7f01cfec6130"},{"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":"27cb4278e762ea4698139450508dd0bfb4ad7457","unresolved":true,"context_lines":[{"line_number":1412,"context_line":"    # TODO(TheJulia): We should likely look at splitting this method"},{"line_number":1413,"context_line":"    # into everal distinct helpers. First, glance, then OCI, then"},{"line_number":1414,"context_line":"    # general file activities like download/cache or verify a remote"},{"line_number":1415,"context_line":"    # URL."},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    # Remote image services/repositories are a little different, they house"},{"line_number":1418,"context_line":"    # extra data we need to collect data from to streamline the process."}],"source_content_type":"text/x-python","patch_set":9,"id":"642adc4c_d4240a1a","line":1415,"updated":"2025-01-10 21:23:34.000000000","message":"Please, yes 😊","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f42a5409f4ebf7c394404349600e7f16878d1e20","unresolved":true,"context_lines":[{"line_number":1412,"context_line":"    # TODO(TheJulia): We should likely look at splitting this method"},{"line_number":1413,"context_line":"    # into everal distinct helpers. First, glance, then OCI, then"},{"line_number":1414,"context_line":"    # general file activities like download/cache or verify a remote"},{"line_number":1415,"context_line":"    # URL."},{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":"    # Remote image services/repositories are a little different, they house"},{"line_number":1418,"context_line":"    # extra data we need to collect data from to streamline the process."}],"source_content_type":"text/x-python","patch_set":9,"id":"6ef51088_65410d72","line":1415,"in_reply_to":"642adc4c_d4240a1a","updated":"2025-01-27 14:18:55.000000000","message":"FWIW, I\u0027m intending to follow-up and do this once we\u0027re past the initial change. Since doing so will be more lines and such.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"9052a29640892afd3fe1023ec5702b3f89160ba3","unresolved":true,"context_lines":[{"line_number":1478,"context_line":"            image_source, image_download_source,"},{"line_number":1479,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1480,"context_line":"        )"},{"line_number":1481,"context_line":"        if (not image_info.get(\u0027image_disk_format\u0027)"},{"line_number":1482,"context_line":"            and instance_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027raw\u0027):"},{"line_number":1483,"context_line":"            # Ironic, internally, resets image_disk_format for IPA, and"},{"line_number":1484,"context_line":"            # we\u0027re in a case where we\u0027ve been given a specific URL, which"}],"source_content_type":"text/x-python","patch_set":9,"id":"ef091925_21a1652f","line":1481,"range":{"start_line":1481,"start_character":11,"end_line":1481,"end_character":51},"updated":"2025-01-13 18:05:36.000000000","message":"make the code return unknown when it is truly unknown.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":false,"context_lines":[{"line_number":1478,"context_line":"            image_source, image_download_source,"},{"line_number":1479,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1480,"context_line":"        )"},{"line_number":1481,"context_line":"        if (not image_info.get(\u0027image_disk_format\u0027)"},{"line_number":1482,"context_line":"            and instance_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027raw\u0027):"},{"line_number":1483,"context_line":"            # Ironic, internally, resets image_disk_format for IPA, and"},{"line_number":1484,"context_line":"            # we\u0027re in a case where we\u0027ve been given a specific URL, which"}],"source_content_type":"text/x-python","patch_set":9,"id":"09eae278_328cf160","line":1481,"range":{"start_line":1481,"start_character":11,"end_line":1481,"end_character":51},"in_reply_to":"ef091925_21a1652f","updated":"2025-01-14 15:02:23.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"c1098481bd350297392aefd67ab16ab133a21535","unresolved":true,"context_lines":[{"line_number":1503,"context_line":"        # to swift references, but we largely bypass that with"},{"line_number":1504,"context_line":"        # image_url for direct transfers from swift and the client"},{"line_number":1505,"context_line":"        # hides that detail from us."},{"line_number":1506,"context_line":"        instance_info[\u0027image_source\u0027] \u003d image_source"},{"line_number":1507,"context_line":"    if not is_glance_image:"},{"line_number":1508,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1509,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"e4e48f4b_763fb74f","line":1506,"range":{"start_line":1506,"start_character":0,"end_line":1506,"end_character":52},"updated":"2025-01-13 18:00:12.000000000","message":"I chatted with Dmtiry and JayF about this earlier today,and the desire is that we don\u0027t reset this, but still record it. The idea of in driver_internal_info was tossed out, along with generalized complains about how glance and this work as a result (with an understanding that we need to tackle that later).\n\nThe idea being likely resolve what we believe to be the url for the layer, and likely add code in to _cache_and_convert_image *and* _validate_image_url to handle the alternates if set.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":1503,"context_line":"        # to swift references, but we largely bypass that with"},{"line_number":1504,"context_line":"        # image_url for direct transfers from swift and the client"},{"line_number":1505,"context_line":"        # hides that detail from us."},{"line_number":1506,"context_line":"        instance_info[\u0027image_source\u0027] \u003d image_source"},{"line_number":1507,"context_line":"    if not is_glance_image:"},{"line_number":1508,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1509,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ef36f499_554f4ec7","line":1506,"range":{"start_line":1506,"start_character":0,"end_line":1506,"end_character":52},"in_reply_to":"1d5959c3_63cec0d6","updated":"2025-02-06 19:38:43.000000000","message":"Done","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"3799337c78f52b27654306e6eb1a9877b27f0884","unresolved":true,"context_lines":[{"line_number":1503,"context_line":"        # to swift references, but we largely bypass that with"},{"line_number":1504,"context_line":"        # image_url for direct transfers from swift and the client"},{"line_number":1505,"context_line":"        # hides that detail from us."},{"line_number":1506,"context_line":"        instance_info[\u0027image_source\u0027] \u003d image_source"},{"line_number":1507,"context_line":"    if not is_glance_image:"},{"line_number":1508,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"},{"line_number":1509,"context_line":"                or image_download_source \u003d\u003d \u0027local\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1d5959c3_63cec0d6","line":1506,"range":{"start_line":1506,"start_character":0,"end_line":1506,"end_character":52},"in_reply_to":"e4e48f4b_763fb74f","updated":"2025-01-14 15:02:23.000000000","message":"I think I\u0027ve achieved this, I guess we shall see.","commit_id":"1f29b82aaa4867634f3123d2f760442d87d9dff8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":1498,"context_line":"            image_source, image_download_source,"},{"line_number":1499,"context_line":"            node.properties.get(\u0027cpu_arch\u0027)"},{"line_number":1500,"context_line":"        )"},{"line_number":1501,"context_line":"        if (image_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027unknown\u0027"},{"line_number":1502,"context_line":"            and instance_info.get(\u0027image_disk_format\u0027) \u003d\u003d \u0027raw\u0027):"},{"line_number":1503,"context_line":"            # Ironic, internally, resets image_disk_format for IPA, and"},{"line_number":1504,"context_line":"            # we\u0027re in a case where we\u0027ve been given a specific URL, which"}],"source_content_type":"text/x-python","patch_set":10,"id":"99750c66_8c9815a3","line":1501,"updated":"2025-01-16 21:18:48.000000000","message":"Need to make sure I have testing for this.","commit_id":"ecb7dff3c47467bccb87b0c195f4f456c8392a81"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"29ed0b19cae7b4b3ab760def357ec44a8f51bae9","unresolved":false,"context_lines":[{"line_number":1518,"context_line":"        # so it knows where to actually retrieve data from without"},{"line_number":1519,"context_line":"        # us overriding image_source saved by the user, so rebuilds"},{"line_number":1520,"context_line":"        # will work as expected."},{"line_number":1521,"context_line":"        di_info[\u0027image_source\u0027] \u003d image_source"},{"line_number":1522,"context_line":"        node.driver_internal_info \u003d di_info"},{"line_number":1523,"context_line":"    if not is_glance_image:"},{"line_number":1524,"context_line":"        if (image_source.startswith(\u0027file://\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ea8dbb40_395c7f5f","line":1521,"updated":"2025-01-16 21:18:48.000000000","message":"If this seems to work as desired, we\u0027ll need to test this.","commit_id":"ecb7dff3c47467bccb87b0c195f4f456c8392a81"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":1416,"context_line":"    # and gets replaced at various points in this sequence."},{"line_number":1417,"context_line":"    instance_info[\u0027image_url\u0027] \u003d None"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"    # This flag exists to lockout the overall contineud flow of"},{"line_number":1420,"context_line":"    # file validation if glance is in use. This is because glance"},{"line_number":1421,"context_line":"    # can have have objects stored in Swifth and those objects can"},{"line_number":1422,"context_line":"    # be directly referenced by a separate swift client. Which means,"}],"source_content_type":"text/x-python","patch_set":13,"id":"2f71fabb_c6f94247","line":1419,"range":{"start_line":1419,"start_character":46,"end_line":1419,"end_character":55},"updated":"2025-01-17 00:47:38.000000000","message":"continued","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":1416,"context_line":"    # and gets replaced at various points in this sequence."},{"line_number":1417,"context_line":"    instance_info[\u0027image_url\u0027] \u003d None"},{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"    # This flag exists to lockout the overall contineud flow of"},{"line_number":1420,"context_line":"    # file validation if glance is in use. This is because glance"},{"line_number":1421,"context_line":"    # can have have objects stored in Swifth and those objects can"},{"line_number":1422,"context_line":"    # be directly referenced by a separate swift client. Which means,"}],"source_content_type":"text/x-python","patch_set":13,"id":"443b31b3_fc0570a0","line":1419,"range":{"start_line":1419,"start_character":46,"end_line":1419,"end_character":55},"in_reply_to":"2f71fabb_c6f94247","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"    # This flag exists to lockout the overall contineud flow of"},{"line_number":1420,"context_line":"    # file validation if glance is in use. This is because glance"},{"line_number":1421,"context_line":"    # can have have objects stored in Swifth and those objects can"},{"line_number":1422,"context_line":"    # be directly referenced by a separate swift client. Which means,"},{"line_number":1423,"context_line":"    # additional information then needs to be gathered and exchanged"},{"line_number":1424,"context_line":"    # which is a separate process from just a remote http file."}],"source_content_type":"text/x-python","patch_set":13,"id":"458ec840_3a38483d","line":1421,"range":{"start_line":1421,"start_character":38,"end_line":1421,"end_character":44},"updated":"2025-01-17 00:47:38.000000000","message":"Swift","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":1418,"context_line":""},{"line_number":1419,"context_line":"    # This flag exists to lockout the overall contineud flow of"},{"line_number":1420,"context_line":"    # file validation if glance is in use. This is because glance"},{"line_number":1421,"context_line":"    # can have have objects stored in Swifth and those objects can"},{"line_number":1422,"context_line":"    # be directly referenced by a separate swift client. Which means,"},{"line_number":1423,"context_line":"    # additional information then needs to be gathered and exchanged"},{"line_number":1424,"context_line":"    # which is a separate process from just a remote http file."}],"source_content_type":"text/x-python","patch_set":13,"id":"84c9d8ef_a7f6f0e5","line":1421,"range":{"start_line":1421,"start_character":38,"end_line":1421,"end_character":44},"in_reply_to":"458ec840_3a38483d","updated":"2025-01-17 17:44:02.000000000","message":"Done","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":1204,"context_line":"        # is NOT raised. In other words, that the endpoint does not"},{"line_number":1205,"context_line":"        # return a 200. If we\u0027re fed a folder list, this will still"},{"line_number":1206,"context_line":"        # work, which is a good and bad thing at the same time. :/"},{"line_number":1207,"context_line":"        # FIXME Likely need to bifrucate this path for oci"},{"line_number":1208,"context_line":"        if image_service.is_container_registry_url(url):"},{"line_number":1209,"context_line":"            oci \u003d image_service.OciImageService()"},{"line_number":1210,"context_line":"            image_auth \u003d image_service.get_image_service_auth_override(node)"}],"source_content_type":"text/x-python","patch_set":18,"id":"d3f8c1c8_a5b2e5e6","line":1207,"updated":"2025-02-06 16:56:32.000000000","message":"fixme?","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":false,"context_lines":[{"line_number":1204,"context_line":"        # is NOT raised. In other words, that the endpoint does not"},{"line_number":1205,"context_line":"        # return a 200. If we\u0027re fed a folder list, this will still"},{"line_number":1206,"context_line":"        # work, which is a good and bad thing at the same time. :/"},{"line_number":1207,"context_line":"        # FIXME Likely need to bifrucate this path for oci"},{"line_number":1208,"context_line":"        if image_service.is_container_registry_url(url):"},{"line_number":1209,"context_line":"            oci \u003d image_service.OciImageService()"},{"line_number":1210,"context_line":"            image_auth \u003d image_service.get_image_service_auth_override(node)"}],"source_content_type":"text/x-python","patch_set":18,"id":"8001c393_796487f2","line":1207,"in_reply_to":"d3f8c1c8_a5b2e5e6","updated":"2025-02-06 19:38:43.000000000","message":"Oh, heh, yeah, did that already :)","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}],"ironic/drivers/modules/pxe_base.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":"6303d5054dc06046c5dae15b64840e93fec0b2a8","unresolved":true,"context_lines":[{"line_number":189,"context_line":"        pxe_info \u003d pxe_utils.get_image_info("},{"line_number":190,"context_line":"            node, mode\u003dmode,"},{"line_number":191,"context_line":"            ipxe_enabled\u003dself._use_http_folder())"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # NODE: Try to validate and fetch instance images only"},{"line_number":194,"context_line":"        # if we are in DEPLOYING state."},{"line_number":195,"context_line":"        if node.provision_state \u003d\u003d states.DEPLOYING:"}],"source_content_type":"text/x-python","patch_set":1,"id":"65dd94a8_95f82687","side":"PARENT","line":192,"updated":"2025-01-06 19:09:34.000000000","message":"likely time to put these back?!","commit_id":"3421bb614a2661b31ee1105bdcc237bb45d22b45"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bdfc227119d5d46c8f7fe9d28d831b4021e3f169","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        pxe_info \u003d pxe_utils.get_image_info("},{"line_number":190,"context_line":"            node, mode\u003dmode,"},{"line_number":191,"context_line":"            ipxe_enabled\u003dself._use_http_folder())"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        # NODE: Try to validate and fetch instance images only"},{"line_number":194,"context_line":"        # if we are in DEPLOYING state."},{"line_number":195,"context_line":"        if node.provision_state \u003d\u003d states.DEPLOYING:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0f222f92_0ccafff1","side":"PARENT","line":192,"in_reply_to":"65dd94a8_95f82687","updated":"2025-01-07 21:18:28.000000000","message":"Done","commit_id":"3421bb614a2661b31ee1105bdcc237bb45d22b45"}],"ironic/tests/unit/common/test_image_service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"ba4570ffa23f1d591b26ac443640002d234f7503","unresolved":true,"context_lines":[{"line_number":725,"context_line":"        # requests from quay.io with podman\u0027s machine-os container"},{"line_number":726,"context_line":"        # image. As a result, they are a bit verbose and rather..."},{"line_number":727,"context_line":"        # annoyingly large, but they are as a result, accurate."},{"line_number":728,"context_line":"        self.artifact_index \u003d {\u0027schemaVersion\u0027: 2, \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027, \u0027manifests\u0027: [{\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:9d046091b3dbeda26e1f4364a116ca8d94284000f103da7310e3a4703df1d3e4\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027applehv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:f2981621c1bf821ce44c1cb31c507abe6293d8eea646b029c6b9dc773fa7821a\u0027, \u0027size\u0027: 476, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027applehv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:3e42f5c348842b9e28bdbc9382962791a791a2e5cdd42ad90e7d6807396c59db\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027hyperv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:7efa5128a3a82e414cc8abd278a44f0c191a28067e91154c238ef8df39966008\u0027, \u0027size\u0027: 476, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027hyperv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:dfcb3b199378320640d78121909409599b58b8012ed93320dae48deacde44d45\u0027, \u0027size\u0027: 474, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027qemu\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:1010f100f03dba1e5e2bad9905fd9f96ba8554158beb7e6f030718001fa335d8\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027qemu\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:605c96503253b2e8cd4d1eb46c68e633192bb9b61742cffb54ad7eb3aef7ad6b\u0027, \u0027size\u0027: 11538, \u0027platform\u0027: {\u0027architecture\u0027: \u0027amd64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:d9add02195d33fa5ec9a2b35076caae88eea3a7fa15f492529b56c7813949a15\u0027, \u0027size\u0027: 11535, \u0027platform\u0027: {\u0027architecture\u0027: \u0027arm64\u0027, \u0027os\u0027: \u0027linux\u0027}}]}  # noqa"},{"line_number":729,"context_line":"        self.empty_artifact_index \u003d {\u0027schemaVersion\u0027: 2, \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027, \u0027manifests\u0027: []}  # noqa"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    @mock.patch.object(ociclient, \u0027get_manifest\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"0c6fbf69_889c6eca","line":728,"updated":"2025-01-17 00:47:38.000000000","message":"can these be formatted with indentation? 🥺","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"951046ce7469cfcb53bf1407ca10f852d6404f09","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        # requests from quay.io with podman\u0027s machine-os container"},{"line_number":726,"context_line":"        # image. As a result, they are a bit verbose and rather..."},{"line_number":727,"context_line":"        # annoyingly large, but they are as a result, accurate."},{"line_number":728,"context_line":"        self.artifact_index \u003d {\u0027schemaVersion\u0027: 2, \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027, \u0027manifests\u0027: [{\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:9d046091b3dbeda26e1f4364a116ca8d94284000f103da7310e3a4703df1d3e4\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027applehv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:f2981621c1bf821ce44c1cb31c507abe6293d8eea646b029c6b9dc773fa7821a\u0027, \u0027size\u0027: 476, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027applehv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:3e42f5c348842b9e28bdbc9382962791a791a2e5cdd42ad90e7d6807396c59db\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027hyperv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:7efa5128a3a82e414cc8abd278a44f0c191a28067e91154c238ef8df39966008\u0027, \u0027size\u0027: 476, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027hyperv\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:dfcb3b199378320640d78121909409599b58b8012ed93320dae48deacde44d45\u0027, \u0027size\u0027: 474, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027qemu\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027x86_64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:1010f100f03dba1e5e2bad9905fd9f96ba8554158beb7e6f030718001fa335d8\u0027, \u0027size\u0027: 475, \u0027annotations\u0027: {\u0027disktype\u0027: \u0027qemu\u0027}, \u0027platform\u0027: {\u0027architecture\u0027: \u0027aarch64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:605c96503253b2e8cd4d1eb46c68e633192bb9b61742cffb54ad7eb3aef7ad6b\u0027, \u0027size\u0027: 11538, \u0027platform\u0027: {\u0027architecture\u0027: \u0027amd64\u0027, \u0027os\u0027: \u0027linux\u0027}}, {\u0027mediaType\u0027: \u0027application/vnd.oci.image.manifest.v1+json\u0027, \u0027digest\u0027: \u0027sha256:d9add02195d33fa5ec9a2b35076caae88eea3a7fa15f492529b56c7813949a15\u0027, \u0027size\u0027: 11535, \u0027platform\u0027: {\u0027architecture\u0027: \u0027arm64\u0027, \u0027os\u0027: \u0027linux\u0027}}]}  # noqa"},{"line_number":729,"context_line":"        self.empty_artifact_index \u003d {\u0027schemaVersion\u0027: 2, \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027, \u0027manifests\u0027: []}  # noqa"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    @mock.patch.object(ociclient, \u0027get_manifest\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"8d323fbf_f2f6e11b","line":728,"in_reply_to":"0c6fbf69_889c6eca","updated":"2025-01-17 17:44:02.000000000","message":"... sure. 😊","commit_id":"99848bdc5757fc355bbc18cf6e4acf831527b33a"},{"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":"00113f80ba47c94bf026360962b83970daca277c","unresolved":true,"context_lines":[{"line_number":725,"context_line":"        # requests from quay.io with podman\u0027s machine-os container"},{"line_number":726,"context_line":"        # image. As a result, they are a bit verbose and rather..."},{"line_number":727,"context_line":"        # annoyingly large, but they are as a result, accurate."},{"line_number":728,"context_line":"        self.artifact_index \u003d {"},{"line_number":729,"context_line":"            \u0027schemaVersion\u0027: 2,"},{"line_number":730,"context_line":"            \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":731,"context_line":"            \u0027manifests\u0027: ["}],"source_content_type":"text/x-python","patch_set":18,"id":"f4ce69e8_26c17e9e","line":728,"updated":"2025-02-06 16:56:32.000000000","message":"Should this go in json_samples instead of being inlined?","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"868cf487441ff7a638e07997adb563fccba77e08","unresolved":true,"context_lines":[{"line_number":725,"context_line":"        # requests from quay.io with podman\u0027s machine-os container"},{"line_number":726,"context_line":"        # image. As a result, they are a bit verbose and rather..."},{"line_number":727,"context_line":"        # annoyingly large, but they are as a result, accurate."},{"line_number":728,"context_line":"        self.artifact_index \u003d {"},{"line_number":729,"context_line":"            \u0027schemaVersion\u0027: 2,"},{"line_number":730,"context_line":"            \u0027mediaType\u0027: \u0027application/vnd.oci.image.index.v1+json\u0027,"},{"line_number":731,"context_line":"            \u0027manifests\u0027: ["}],"source_content_type":"text/x-python","patch_set":18,"id":"5e798cb0_2a80097f","line":728,"in_reply_to":"f4ce69e8_26c17e9e","updated":"2025-02-06 19:38:43.000000000","message":"I dunno, it feels sort of like overkill since there is some variation beyond the artifact index testing which would render doing so kind of awkeward.","commit_id":"44110bf7b54b7c85c6e5833ced7ad1cc72a653bc"}]}
