)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"055fe96a_67393122","updated":"2022-12-07 23:03:10.000000000","message":"Overall looks fairly good, the tests had me raise an eyebrow, but I think it is just some copy-pasta.\n\nOne thing is missing, a release note, and you\u0027ll need some testing around the enforcement of the rbac rule. Luckily that is super easy. ","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bb396df9_df5ba047","updated":"2022-12-15 15:22:02.000000000","message":"Overall, this is in good shape. A few minor-ish things, and the api ref parameter is missing so the api-ref build fails.\n\n  No field definition for ``shard`` found in ``/home/zuul/src/opendev.org/openstack/ironic/api-ref/source/parameters.yaml``. Skipping.","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"da648461d732c315863f145f9a9accfe167615a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9e1a481e_6c5c8e56","updated":"2022-12-15 15:38:46.000000000","message":"Your also missing a doc/source/contributor/webapi-version-history.rst update","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"a35b800d13c77b571ce1cf6bfaba06ddaf82edf4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0f6a95e2_9e1896da","updated":"2023-01-06 23:28:11.000000000","message":"I still need to add more policy tests and update api-ref","commit_id":"4d9033c8b7c61f405f8086810b95f8f156d00672"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"06bae4ac_8e27c851","updated":"2023-01-13 21:07:15.000000000","message":"As a sanity check, make sure we test that fetches of /v1/shards succeed and return empty list (or a large count of \"none\") when/if queried with no node.shard values set.","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"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":"87195eb23b07e86721b16cb4f223ff7920026d06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"9f41664a_b6377ea4","updated":"2023-01-16 00:36:27.000000000","message":"patchset incoming shortly","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"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":"87195eb23b07e86721b16cb4f223ff7920026d06","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"0c96bd56_55e2e636","in_reply_to":"06bae4ac_8e27c851","updated":"2023-01-16 00:36:27.000000000","message":"This test already existed.","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f07fcbd3391627854371ae07d912ddb7d2fd367b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"b5eed87a_d41f1dd7","updated":"2023-01-18 16:03:41.000000000","message":"Rebase required","commit_id":"583a07b0fb313fb4a2f774a9d9d69971abbb8b10"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"ec75a727_3cc6718c","updated":"2023-02-12 23:13:17.000000000","message":"Will get this updated","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"738413745970e16661fd712416bf274f2ec42f5a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"9422e57b_5f851346","updated":"2023-02-13 04:38:20.000000000","message":"Just some nits, looks good otherwise","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"}],"api-ref/source/baremetal-api-v1-nodes.inc":[{"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":"74e3e4aa7243c81c161e3a0533a22c936dd55f07","unresolved":true,"context_lines":[{"line_number":104,"context_line":".. versionadded:: 1.65"},{"line_number":105,"context_line":"  Introduced the ``lessee`` field."},{"line_number":106,"context_line":""},{"line_number":107,"context_line":".. versionadded:: 1.81"},{"line_number":108,"context_line":"  Introduced the ``shard`` field."},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"Normal response codes: 201"}],"source_content_type":"text/x-c++src","patch_set":20,"id":"bee61233_6187a26a","line":107,"updated":"2023-02-01 20:59:57.000000000","message":"this is wrong","commit_id":"4b071de8b081f3aee8097adfbd40caa545040943"}],"api-ref/source/baremetal-api-v1-shards.inc":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"76c3df7b3440b8187229470225157dba347e2420","unresolved":true,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Normal response codes: 200"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Error response codes: 400 404"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"},{"line_number":37,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"20d79767_c2003658","line":34,"updated":"2023-02-02 22:27:28.000000000","message":"nit: 403 if access denied. :)","commit_id":"0cf0a93314893065c1f0b3c720fe06c3cc73d928"},{"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":"0662d83f3f749f508e22101994081dfa51574c16","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Normal response codes: 200"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"Error response codes: 400 404"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Request"},{"line_number":37,"context_line":"-------"}],"source_content_type":"text/x-c++src","patch_set":22,"id":"ce307835_2a6ad0d5","line":34,"in_reply_to":"20d79767_c2003658","updated":"2023-02-03 21:53:57.000000000","message":"Done","commit_id":"0cf0a93314893065c1f0b3c720fe06c3cc73d928"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb9da4399fedd40ffa7c65b5707ad4a32a06ed92","unresolved":true,"context_lines":[{"line_number":1,"context_line":".. -*- rst -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"8afe3142_d03281db","line":1,"updated":"2023-02-12 20:41:24.000000000","message":"This file needs to be included in api-ref/source/index.rst","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"58c9699adec931ac28a1128ab2455691803267c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":".. -*- rst -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"4a9ca33d_10c986bc","line":1,"in_reply_to":"07f6abc3_c62b1fa2","updated":"2023-02-13 00:05:00.000000000","message":"Done","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":true,"context_lines":[{"line_number":1,"context_line":".. -*- rst -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"07f6abc3_c62b1fa2","line":1,"in_reply_to":"8afe3142_d03281db","updated":"2023-02-12 23:13:17.000000000","message":"Ack","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb9da4399fedd40ffa7c65b5707ad4a32a06ed92","unresolved":true,"context_lines":[{"line_number":46,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    - name: shard_name"},{"line_number":49,"context_line":"    - count: shard_count"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"4e6ca262_942470b1","line":49,"updated":"2023-02-12 20:41:24.000000000","message":"Glad this documents my suggestion for lower case attributes 😎","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":true,"context_lines":[{"line_number":46,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    - name: shard_name"},{"line_number":49,"context_line":"    - count: shard_count"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"8f4f3b00_358f8def","line":49,"in_reply_to":"4e6ca262_942470b1","updated":"2023-02-12 23:13:17.000000000","message":"Ack","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"58c9699adec931ac28a1128ab2455691803267c0","unresolved":false,"context_lines":[{"line_number":46,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    - name: shard_name"},{"line_number":49,"context_line":"    - count: shard_count"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"7de7a7c2_f5d18471","line":49,"in_reply_to":"8f4f3b00_358f8def","updated":"2023-02-13 00:05:00.000000000","message":"Done","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb9da4399fedd40ffa7c65b5707ad4a32a06ed92","unresolved":true,"context_lines":[{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. literalinclude:: samples/shards-response.json"},{"line_number":55,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"f06c1c41_3c307449","line":54,"updated":"2023-02-12 20:41:24.000000000","message":"The filename is shards-list-response.json","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"58c9699adec931ac28a1128ab2455691803267c0","unresolved":false,"context_lines":[{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. literalinclude:: samples/shards-response.json"},{"line_number":55,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"d33d3090_0d2dd5b9","line":54,"in_reply_to":"8ccab383_4c53c398","updated":"2023-02-13 00:05:00.000000000","message":"Done","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":true,"context_lines":[{"line_number":51,"context_line":"Response Example"},{"line_number":52,"context_line":"----------------"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":".. literalinclude:: samples/shards-response.json"},{"line_number":55,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":23,"id":"8ccab383_4c53c398","line":54,"in_reply_to":"f06c1c41_3c307449","updated":"2023-02-12 23:13:17.000000000","message":"Ack","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"738413745970e16661fd712416bf274f2ec42f5a","unresolved":true,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"This section describes an API endpoint returning the population of shards"},{"line_number":8,"context_line":"among nodes in the Bare Metal Service. Shards are a way to group nodes in the"}],"source_content_type":"text/x-c++src","patch_set":24,"id":"f48398d8_59a13b15","line":5,"updated":"2023-02-13 04:38:20.000000000","message":"This heading isn\u0027t rendering, then I noticed no headings are rendering in the whole document. We should look into that.\n\nhttps://storage.gra.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_5e2/866235/23/check/build-openstack-api-ref/5e2bcfa/docs/index.html","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1fe8b63b74330c2d539ce3dbefdf4e842541c715","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"This section describes an API endpoint returning the population of shards"},{"line_number":8,"context_line":"among nodes in the Bare Metal Service. Shards are a way to group nodes in the"}],"source_content_type":"text/x-c++src","patch_set":24,"id":"a1f072c6_0fd553fe","line":5,"in_reply_to":"e00e03b4_88bfb68a","updated":"2023-02-13 21:38:19.000000000","message":"fair","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"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":"30607e3c2d0b1cf669ae0d3c5bb3a4e2834fa05e","unresolved":true,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":"Shards"},{"line_number":5,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"This section describes an API endpoint returning the population of shards"},{"line_number":8,"context_line":"among nodes in the Bare Metal Service. Shards are a way to group nodes in the"}],"source_content_type":"text/x-c++src","patch_set":24,"id":"e00e03b4_88bfb68a","line":5,"in_reply_to":"f48398d8_59a13b15","updated":"2023-02-13 17:44:08.000000000","message":"ack; I am not going to tackle that overall troubleshooting piece in this change","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"738413745970e16661fd712416bf274f2ec42f5a","unresolved":true,"context_lines":[{"line_number":41,"context_line":"Response"},{"line_number":42,"context_line":"--------"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Returns a list of shards and the count of nodes assigned to each."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"049d12d8_2463db1e","line":44,"updated":"2023-02-13 04:38:20.000000000","message":"It might be worth mentioning the expected sort order","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"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":"30607e3c2d0b1cf669ae0d3c5bb3a4e2834fa05e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"Response"},{"line_number":42,"context_line":"--------"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"Returns a list of shards and the count of nodes assigned to each."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":24,"id":"9e9564bb_34e5280d","line":44,"in_reply_to":"049d12d8_2463db1e","updated":"2023-02-13 17:44:08.000000000","message":"Done","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"}],"api-ref/source/samples/shards-list-response.json":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb9da4399fedd40ffa7c65b5707ad4a32a06ed92","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"shards\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"Count\": 47,"},{"line_number":5,"context_line":"      \"Name\": \"example_shard1\","},{"line_number":6,"context_line":"    },"},{"line_number":7,"context_line":"    {"}],"source_content_type":"application/json","patch_set":23,"id":"de8dfcfc_9900a0b1","line":4,"updated":"2023-02-12 20:41:24.000000000","message":"If you adopt lower case, update here","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"58c9699adec931ac28a1128ab2455691803267c0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"shards\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"Count\": 47,"},{"line_number":5,"context_line":"      \"Name\": \"example_shard1\","},{"line_number":6,"context_line":"    },"},{"line_number":7,"context_line":"    {"}],"source_content_type":"application/json","patch_set":23,"id":"051f7947_9095f4ae","line":4,"in_reply_to":"71863b68_e897d54d","updated":"2023-02-13 00:05:00.000000000","message":"Done","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"shards\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"Count\": 47,"},{"line_number":5,"context_line":"      \"Name\": \"example_shard1\","},{"line_number":6,"context_line":"    },"},{"line_number":7,"context_line":"    {"}],"source_content_type":"application/json","patch_set":23,"id":"71863b68_e897d54d","line":4,"in_reply_to":"de8dfcfc_9900a0b1","updated":"2023-02-12 23:13:17.000000000","message":"Ack","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"738413745970e16661fd712416bf274f2ec42f5a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"shards\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"count\": 46,"},{"line_number":5,"context_line":"      \"name\": \"example_shard1\","},{"line_number":6,"context_line":"    },"},{"line_number":7,"context_line":"    {"}],"source_content_type":"application/json","patch_set":24,"id":"723fde6d_c8fd11f0","line":4,"updated":"2023-02-13 04:38:20.000000000","message":"The example should probably sort by descending count","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"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":"30607e3c2d0b1cf669ae0d3c5bb3a4e2834fa05e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"  \"shards\": ["},{"line_number":3,"context_line":"    {"},{"line_number":4,"context_line":"      \"count\": 46,"},{"line_number":5,"context_line":"      \"name\": \"example_shard1\","},{"line_number":6,"context_line":"    },"},{"line_number":7,"context_line":"    {"}],"source_content_type":"application/json","patch_set":24,"id":"b32c3dfa_c9eda180","line":4,"in_reply_to":"723fde6d_c8fd11f0","updated":"2023-02-13 17:44:08.000000000","message":"Done","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"}],"ironic/api/controllers/v1/node.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":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":false,"context_lines":[{"line_number":2269,"context_line":"        :param owner: Optional string value that set the owner whose nodes"},{"line_number":2270,"context_line":"                      are to be retrurned."},{"line_number":2271,"context_line":"        :param lessee: Optional string value that set the lessee whose nodes"},{"line_number":2272,"context_line":"                       are to be returned."},{"line_number":2273,"context_line":"        :param project: Optional string value that set the project - lessee or"},{"line_number":2274,"context_line":"                        owner - whose nodes are to be returned."},{"line_number":2275,"context_line":"        :param shard: Optional string value that set the shard whose nodes are"}],"source_content_type":"text/x-python","patch_set":10,"id":"b5d532fc_10da16be","line":2272,"updated":"2022-12-15 15:22:02.000000000","message":"Thanks!","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"8b37c6e1857625867d07cd49e7606d1c4eec9128","unresolved":true,"context_lines":[{"line_number":2271,"context_line":"                   fault\u003dargs.string, conductor_group\u003dargs.string,"},{"line_number":2272,"context_line":"                   detail\u003dargs.boolean, conductor\u003dargs.string,"},{"line_number":2273,"context_line":"                   owner\u003dargs.string, description_contains\u003dargs.string,"},{"line_number":2274,"context_line":"                   lessee\u003dargs.string, project\u003dargs.string, shard\u003dargs.string)"},{"line_number":2275,"context_line":"    def get_all(self, chassis_uuid\u003dNone, instance_uuid\u003dNone, associated\u003dNone,"},{"line_number":2276,"context_line":"                maintenance\u003dNone, retired\u003dNone, provision_state\u003dNone,"},{"line_number":2277,"context_line":"                marker\u003dNone, limit\u003dNone, sort_key\u003d\u0027id\u0027, sort_dir\u003d\u0027asc\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9c1513d6_10d832c0","line":2274,"updated":"2023-01-30 23:14:16.000000000","message":"use args.string_list","commit_id":"237a6506cbdb07224625d1a35b93b2116a6a5cb8"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"eb9da4399fedd40ffa7c65b5707ad4a32a06ed92","unresolved":true,"context_lines":[{"line_number":2303,"context_line":"        :param project: Optional string value that set the project - lessee or"},{"line_number":2304,"context_line":"                        owner - whose nodes are to be returned."},{"line_number":2305,"context_line":"        :param shard: Optional string value that set the shards whose nodes are"},{"line_number":2306,"context_line":"                      to be returned."},{"line_number":2307,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":2308,"context_line":"                       of the resource to be returned."},{"line_number":2309,"context_line":"        :param fault: Optional string value to get only nodes with that fault."}],"source_content_type":"text/x-python","patch_set":23,"id":"dccbc7e1_e4c50dab","line":2306,"updated":"2023-02-12 20:41:24.000000000","message":"What is the use-case for filtering by more than one shard? Is that met by the sharded boolean filter later in this series? If so can we switch to support filtering a single shard and replacing the \u0027shard_in\u0027 filter with a \u0027shard\u0027 filter?","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"58c9699adec931ac28a1128ab2455691803267c0","unresolved":true,"context_lines":[{"line_number":2303,"context_line":"        :param project: Optional string value that set the project - lessee or"},{"line_number":2304,"context_line":"                        owner - whose nodes are to be returned."},{"line_number":2305,"context_line":"        :param shard: Optional string value that set the shards whose nodes are"},{"line_number":2306,"context_line":"                      to be returned."},{"line_number":2307,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":2308,"context_line":"                       of the resource to be returned."},{"line_number":2309,"context_line":"        :param fault: Optional string value to get only nodes with that fault."}],"source_content_type":"text/x-python","patch_set":23,"id":"19bce55e_7054a022","line":2306,"in_reply_to":"c10ec2fa_cd5bed25","updated":"2023-02-13 00:05:00.000000000","message":"Sorta wanted to also ask ... I don\u0027t understand why we wouldn\u0027t allow this? What\u0027s the argument against? If there\u0027s a performance concern; we simply catch the single-shard case and query differently.","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"c865377597c0f8e22cfd76947d35d056471c81f3","unresolved":false,"context_lines":[{"line_number":2303,"context_line":"        :param project: Optional string value that set the project - lessee or"},{"line_number":2304,"context_line":"                        owner - whose nodes are to be returned."},{"line_number":2305,"context_line":"        :param shard: Optional string value that set the shards whose nodes are"},{"line_number":2306,"context_line":"                      to be returned."},{"line_number":2307,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":2308,"context_line":"                       of the resource to be returned."},{"line_number":2309,"context_line":"        :param fault: Optional string value to get only nodes with that fault."}],"source_content_type":"text/x-python","patch_set":23,"id":"f5d78f1b_2d52b88a","line":2306,"in_reply_to":"dccbc7e1_e4c50dab","updated":"2023-02-13 02:08:10.000000000","message":"I just wanted to hear the complexity/functionality tradeoff, and by the above explanation multi-shard lookup is definitely useful, thanks.","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"},{"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":"01f9281c71d458a625e9356bfff666f4bbaa7157","unresolved":true,"context_lines":[{"line_number":2303,"context_line":"        :param project: Optional string value that set the project - lessee or"},{"line_number":2304,"context_line":"                        owner - whose nodes are to be returned."},{"line_number":2305,"context_line":"        :param shard: Optional string value that set the shards whose nodes are"},{"line_number":2306,"context_line":"                      to be returned."},{"line_number":2307,"context_line":"        :param fields: Optional, a list with a specified set of fields"},{"line_number":2308,"context_line":"                       of the resource to be returned."},{"line_number":2309,"context_line":"        :param fault: Optional string value to get only nodes with that fault."}],"source_content_type":"text/x-python","patch_set":23,"id":"c10ec2fa_cd5bed25","line":2306,"in_reply_to":"dccbc7e1_e4c50dab","updated":"2023-02-12 23:13:17.000000000","message":"It\u0027s a usability thing. We want to enable operators to use shards to scale for anything they need; local scripts that iterate nodes as well as our intended use in nova and networking-baremetal. We should not assume ahead of time that all these cases will scale to the same size. One way to remedy this is to permit, in the API, the ability to request multiple shards. Then, a service or operator script could access multiple shards at the same time.\n\nfor example -- (note: all numbers made up; we don\u0027t have shard support in nova-compute or networking-baremetal to benchmark yet) -- For my cloud, I need 9 separate Nova compute shards in order to scale properly with a recommended limit of 500 nodes per nova-compute (meaning 4500 nodes total). I then have 9 shards of 500 nodes. It\u0027s possible that operators would want to slice this up differently for a different use case, such as updating all nodes in a shard or even, potentially, in networking-baremetal. In these cases, these operators could configure their script or service to query for 3 shards, giving you an effective split of 1/3 instead of 1/9.","commit_id":"717a81b2b8cc5ec79d3dadd0c3c5b5a946537e34"}],"ironic/api/controllers/v1/shard.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":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        \"\"\"Retrieve a list of shards."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :returns: A list of shards."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        api_utils.check_policy(\u0027baremetal:shards:get\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":7,"id":"4689342c_5aaeae0d","line":71,"updated":"2022-12-07 23:03:10.000000000","message":"Just a thought out there, we\u0027ve traditionally done the version check on the method, not in the router. I guess the router might be okay, but I don\u0027t know how/when that gets invoked.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        \"\"\"Retrieve a list of shards."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :returns: A list of shards."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        api_utils.check_policy(\u0027baremetal:shards:get\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":7,"id":"70deb91f_72dfe01f","line":71,"in_reply_to":"0d35bb15_2e4e6d15","updated":"2022-12-15 15:22:02.000000000","message":"hmm. Well, as long as the route catches it, we should be fine.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"f46e2e41fa87ed1a1bf82035e6d98f91b9d1bde9","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        \"\"\"Retrieve a list of shards."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        :returns: A list of shards."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        api_utils.check_policy(\u0027baremetal:shards:get\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":7,"id":"0d35bb15_2e4e6d15","line":71,"in_reply_to":"4689342c_5aaeae0d","updated":"2022-12-07 23:36:39.000000000","message":"I copied this pattern from allocations: https://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/allocation.py#L127","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    @pecan.expose()"},{"line_number":48,"context_line":"    def _route(self, argv, request\u003dNone):"},{"line_number":49,"context_line":"        if not api_utils.allow_shards_endpoint():"},{"line_number":50,"context_line":"            msg \u003d _(\"The API version does not allow shards\")"},{"line_number":51,"context_line":"            if api.request.method in \"GET\":"},{"line_number":52,"context_line":"                raise webob_exc.HTTPNotFound(msg)"},{"line_number":53,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"e556f0dd_904706c0","line":50,"updated":"2022-12-15 15:22:02.000000000","message":"nit: If you revise this again, I\u0027d consider putting a period into this. If you don\u0027t, it won\u0027t matter much.","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"a35b800d13c77b571ce1cf6bfaba06ddaf82edf4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    @pecan.expose()"},{"line_number":48,"context_line":"    def _route(self, argv, request\u003dNone):"},{"line_number":49,"context_line":"        if not api_utils.allow_shards_endpoint():"},{"line_number":50,"context_line":"            msg \u003d _(\"The API version does not allow shards\")"},{"line_number":51,"context_line":"            if api.request.method in \"GET\":"},{"line_number":52,"context_line":"                raise webob_exc.HTTPNotFound(msg)"},{"line_number":53,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"8371e6e3_9370d724","line":50,"in_reply_to":"e556f0dd_904706c0","updated":"2023-01-06 23:28:11.000000000","message":"Done","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"738413745970e16661fd712416bf274f2ec42f5a","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SHARD_SCHEMA \u003d {"},{"line_number":30,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":31,"context_line":"    \u0027properties\u0027: {"},{"line_number":32,"context_line":"        \u0027Name\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":33,"context_line":"        \u0027Count\u0027: {\u0027type\u0027: [\u0027integer\u0027]},"},{"line_number":34,"context_line":"    },"},{"line_number":35,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"SHARD_VALIDATOR \u003d args.and_valid("},{"line_number":39,"context_line":"    args.schema(SHARD_SCHEMA),"},{"line_number":40,"context_line":"    args.dict_valid(uuid\u003dargs.uuid)"},{"line_number":41,"context_line":")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ShardController(pecan.rest.RestController):"}],"source_content_type":"text/x-python","patch_set":24,"id":"feeb5162_232c6d07","line":41,"range":{"start_line":29,"start_character":0,"end_line":41,"end_character":1},"updated":"2023-02-13 04:38:20.000000000","message":"We don\u0027t validate responses (anymore), so I don\u0027t think SHARD_SCHEMA or SHARD_VALIDATOR are required","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"},{"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":"30607e3c2d0b1cf669ae0d3c5bb3a4e2834fa05e","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"METRICS \u003d metrics_utils.get_metrics_logger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SHARD_SCHEMA \u003d {"},{"line_number":30,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":31,"context_line":"    \u0027properties\u0027: {"},{"line_number":32,"context_line":"        \u0027Name\u0027: {\u0027type\u0027: [\u0027string\u0027]},"},{"line_number":33,"context_line":"        \u0027Count\u0027: {\u0027type\u0027: [\u0027integer\u0027]},"},{"line_number":34,"context_line":"    },"},{"line_number":35,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"SHARD_VALIDATOR \u003d args.and_valid("},{"line_number":39,"context_line":"    args.schema(SHARD_SCHEMA),"},{"line_number":40,"context_line":"    args.dict_valid(uuid\u003dargs.uuid)"},{"line_number":41,"context_line":")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"class ShardController(pecan.rest.RestController):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3d317594_7234be8f","line":41,"range":{"start_line":29,"start_character":0,"end_line":41,"end_character":1},"in_reply_to":"feeb5162_232c6d07","updated":"2023-02-13 17:44:08.000000000","message":"Done","commit_id":"0321c8d7b67de175822485a5d015ed4fe2765ba8"}],"ironic/common/policy.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":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":956,"context_line":"    ),"},{"line_number":957,"context_line":""},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"]"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"deprecated_port_reason \u003d \"\"\""},{"line_number":962,"context_line":"The baremetal port API is now aware of system scope and default roles."}],"source_content_type":"text/x-python","patch_set":7,"id":"36828214_84f9b768","side":"PARENT","line":959,"updated":"2022-12-07 23:03:10.000000000","message":"so you will need some testing for these two policies.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/tests/unit/api/test_rbac_system_scoped.yaml#L2083-L2125\n\nThis is the section of the file for system scoped items, using admin, reader, and member headers on the history endpoints, so it shouldn\u0027t be a big deal to use/modify a section. The key takeaway for /v1/shards is that everyone in system scope can read it. The key takeaway for /v1/nodes/nodex/shard field is that it\u0027s editability is access controlled.\n\nhttps://github.com/openstack/ironic/blob/master/ironic/tests/unit/api/test_rbac_system_scoped.yaml#L140 is an example of patching a field value  with admin, you\u0027ll need to ensure that admin can patch, that member/reader cannot.  If memory serves, the difference will be a 403 code should be expected where not permitted.","commit_id":"b9ad690d07c5691ea326b290ab8eeb79bc21c8a0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7c0875ff05862621edbe1afe1978f3d9f44b87d7","unresolved":true,"context_lines":[{"line_number":956,"context_line":"    ),"},{"line_number":957,"context_line":""},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"]"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"deprecated_port_reason \u003d \"\"\""},{"line_number":962,"context_line":"The baremetal port API is now aware of system scope and default roles."}],"source_content_type":"text/x-python","patch_set":7,"id":"af72519f_c0763d9e","side":"PARENT","line":959,"in_reply_to":"36828214_84f9b768","updated":"2022-12-07 23:05:20.000000000","message":"One other thing, there is also project scope\n\nso: \n\nadmin \u003d\u003d admin in project scope but across entire system.\nmanager \u003d\u003d project scoped admin\nmember \u003d\u003d normal openstack user\nreader \u003d\u003d auditor/accountant/supportdesk\n\nWith project scope, and our explicit decision to be system scoped here, we\u0027ll want to also add related testing to https://github.com/openstack/ironic/blob/master/ironic/tests/unit/api/test_rbac_project_scoped.yaml to ensure that updating the field does not work and that the /v1/shards endpoint is inaccessible to these users.","commit_id":"b9ad690d07c5691ea326b290ab8eeb79bc21c8a0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":false,"context_lines":[{"line_number":956,"context_line":"    ),"},{"line_number":957,"context_line":""},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"]"},{"line_number":960,"context_line":""},{"line_number":961,"context_line":"deprecated_port_reason \u003d \"\"\""},{"line_number":962,"context_line":"The baremetal port API is now aware of system scope and default roles."}],"source_content_type":"text/x-python","patch_set":7,"id":"fb51a17c_11502baa","side":"PARENT","line":959,"in_reply_to":"af72519f_c0763d9e","updated":"2022-12-15 15:22:02.000000000","message":"Done","commit_id":"b9ad690d07c5691ea326b290ab8eeb79bc21c8a0"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":956,"context_line":"    ),"},{"line_number":957,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":958,"context_line":"        name\u003d\u0027baremetal:node:update:shard\u0027,"},{"line_number":959,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":960,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":961,"context_line":"        description\u003d\u0027Governs if node shard field can be updated via \u0027"},{"line_number":962,"context_line":"                    \u0027the API clients.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1518e302_465019a0","line":959,"range":{"start_line":959,"start_character":18,"end_line":959,"end_character":31},"updated":"2022-12-07 23:03:10.000000000","message":"Yeah, this seems right-ish. The admin is admin everyone but nested in a project thing might change this to need to be something else though 😭  But at least it is consistent on our existing methods.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[{"line_number":956,"context_line":"    ),"},{"line_number":957,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":958,"context_line":"        name\u003d\u0027baremetal:node:update:shard\u0027,"},{"line_number":959,"context_line":"        check_str\u003dSYSTEM_ADMIN,"},{"line_number":960,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":961,"context_line":"        description\u003d\u0027Governs if node shard field can be updated via \u0027"},{"line_number":962,"context_line":"                    \u0027the API clients.\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a3b5663_2a696a9e","line":959,"range":{"start_line":959,"start_character":18,"end_line":959,"end_character":31},"in_reply_to":"1518e302_465019a0","updated":"2023-01-13 21:07:15.000000000","message":"Done","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":964,"context_line":"    ),"},{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"}],"source_content_type":"text/x-python","patch_set":7,"id":"f254d1f3_f4f4f256","line":967,"range":{"start_line":967,"start_character":0,"end_line":967,"end_character":32},"updated":"2022-12-07 23:03:10.000000000","message":"This is overly restrictive, but is a point we should discuss. Under the re-re-revised rbac modeling the TC agreed upon, System scope is... not really a thing, albeit we support it. Project scoped admin only would be wrong in my mind... but project reader might also be wrong  So I\u0027m not sure where we want to draw that line, if at all. I can see SYSTEM_READER being okay, since this is an administrative endpoint, but I suspect some will need to override it.\n\nAlternatively, I should also just do the service role support at some point.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":964,"context_line":"    ),"},{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"}],"source_content_type":"text/x-python","patch_set":7,"id":"c95d5878_62a261fa","line":967,"range":{"start_line":967,"start_character":0,"end_line":967,"end_character":32},"in_reply_to":"53b4b64b_7fd5a0e6","updated":"2022-12-15 15:22:02.000000000","message":"So, it is only non-sensitive as long as someone doesn\u0027t put things like hostnames in as shard keys.\n\nThat being said, We can\u0027t associate project IDs here, I could see it being very useful to node owners but lesses. But if we open it to project scoped at all, it is open to both.  I guess that is okay, we just ought to document \"please don\u0027t do this, because all authorized users can query this field, and if you are uncomfortable with this, just change the policy\" or something to that effect.\n\nso SYSTEM_OR_PROJECT_READER I guess.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[{"line_number":964,"context_line":"    ),"},{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"}],"source_content_type":"text/x-python","patch_set":7,"id":"da9f69d0_47b174b0","line":967,"range":{"start_line":967,"start_character":0,"end_line":967,"end_character":32},"in_reply_to":"c95d5878_62a261fa","updated":"2023-01-13 21:07:15.000000000","message":"Done","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"f46e2e41fa87ed1a1bf82035e6d98f91b9d1bde9","unresolved":true,"context_lines":[{"line_number":964,"context_line":"    ),"},{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"}],"source_content_type":"text/x-python","patch_set":7,"id":"53b4b64b_7fd5a0e6","line":967,"range":{"start_line":967,"start_character":0,"end_line":967,"end_character":32},"in_reply_to":"f254d1f3_f4f4f256","updated":"2022-12-07 23:36:39.000000000","message":"Honestly, this is one of those cases where we should pick the largest sensible default group -- this data is not sensitive, and is broadly useful (e.g. you might have a monitoring system poll this).\n\nWith that in mind, you still think SYSTEM_READER is OK?","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"d2852d70b403860b662a5a4175f95f05a195d440","unresolved":true,"context_lines":[{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":971,"context_line":"    ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"2c31b5cb_355bc11e","line":968,"range":{"start_line":968,"start_character":0,"end_line":968,"end_character":31},"updated":"2023-01-13 21:07:52.000000000","message":"The scope type should include \u0027project\u0027 here.","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"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":"87195eb23b07e86721b16cb4f223ff7920026d06","unresolved":false,"context_lines":[{"line_number":965,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":966,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":967,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_READER,"},{"line_number":968,"context_line":"        scope_types\u003d[\u0027system\u0027],"},{"line_number":969,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":970,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"},{"line_number":971,"context_line":"    ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"f4ad4885_b0f03ac6","line":968,"range":{"start_line":968,"start_character":0,"end_line":968,"end_character":31},"in_reply_to":"2c31b5cb_355bc11e","updated":"2023-01-16 00:36:27.000000000","message":"Done","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8ece0e1aa9c7dccd47751da30914f73dbd5e03f1","unresolved":true,"context_lines":[{"line_number":977,"context_line":"    ),"},{"line_number":978,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":979,"context_line":"        name\u003d\u0027baremetal:shards:get\u0027,"},{"line_number":980,"context_line":"        check_str\u003dSYSTEM_OR_PROJECT_READER,"},{"line_number":981,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":982,"context_line":"        description\u003d\u0027Governs if shards can be read via the API clients.\u0027,"},{"line_number":983,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/shards\u0027, \u0027method\u0027: \u0027GET\u0027}],"}],"source_content_type":"text/x-python","patch_set":16,"id":"16aa77ed_aa5c4afe","line":980,"updated":"2023-01-19 17:37:24.000000000","message":"so it occurs to me that this check string will always not approve a general reader on a project because general reader role checks are going to try and match node.owner and node.lessee variables to approve the check. Since those are node specific fields, we can\u0027t look them up and match the policy rule.\n\nPer discussion in IRC, lets change this to SYSTEM_READER","commit_id":"6a356a5cb69ac925ff0f441f28d18acee003853e"}],"ironic/tests/unit/api/controllers/v1/test_node.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":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":8029,"context_line":"        self.node_no_name \u003d obj_utils.create_test_node("},{"line_number":8030,"context_line":"            self.context, uuid\u003d\u0027deadbeef-0000-1111-2222-333333333333\u0027,"},{"line_number":8031,"context_line":"            chassis_id\u003dself.chassis.id)"},{"line_number":8032,"context_line":"        self.port \u003d obj_utils.create_test_port("},{"line_number":8033,"context_line":"            self.context,"},{"line_number":8034,"context_line":"            uuid\u003d\u00279bb50f13-0b8d-4ade-ad2d-d91fefdef9cc\u0027,"},{"line_number":8035,"context_line":"            address\u003d\u002700:01:02:03:04:05\u0027,"},{"line_number":8036,"context_line":"            node_id\u003dself.node.id)"},{"line_number":8037,"context_line":"        self.portgroup \u003d obj_utils.create_test_portgroup("},{"line_number":8038,"context_line":"            self.context,"},{"line_number":8039,"context_line":"            uuid\u003d\u00279bb50f13-0b8d-4ade-ad2d-d91fefdef9ff\u0027,"},{"line_number":8040,"context_line":"            address\u003d\u002700:00:00:00:00:ff\u0027,"},{"line_number":8041,"context_line":"            node_id\u003dself.node.id)"},{"line_number":8042,"context_line":"        p \u003d mock.patch.object(rpcapi.ConductorAPI, \u0027get_topic_for\u0027,"},{"line_number":8043,"context_line":"                              autospec\u003dTrue)"},{"line_number":8044,"context_line":"        self.mock_gtf \u003d p.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"0f970ac4_5c9be942","line":8041,"range":{"start_line":8032,"start_character":0,"end_line":8041,"end_character":33},"updated":"2022-12-07 23:03:10.000000000","message":"so, you shouldn\u0027t need these for this test.... I don\u0027t think.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"f46e2e41fa87ed1a1bf82035e6d98f91b9d1bde9","unresolved":false,"context_lines":[{"line_number":8029,"context_line":"        self.node_no_name \u003d obj_utils.create_test_node("},{"line_number":8030,"context_line":"            self.context, uuid\u003d\u0027deadbeef-0000-1111-2222-333333333333\u0027,"},{"line_number":8031,"context_line":"            chassis_id\u003dself.chassis.id)"},{"line_number":8032,"context_line":"        self.port \u003d obj_utils.create_test_port("},{"line_number":8033,"context_line":"            self.context,"},{"line_number":8034,"context_line":"            uuid\u003d\u00279bb50f13-0b8d-4ade-ad2d-d91fefdef9cc\u0027,"},{"line_number":8035,"context_line":"            address\u003d\u002700:01:02:03:04:05\u0027,"},{"line_number":8036,"context_line":"            node_id\u003dself.node.id)"},{"line_number":8037,"context_line":"        self.portgroup \u003d obj_utils.create_test_portgroup("},{"line_number":8038,"context_line":"            self.context,"},{"line_number":8039,"context_line":"            uuid\u003d\u00279bb50f13-0b8d-4ade-ad2d-d91fefdef9ff\u0027,"},{"line_number":8040,"context_line":"            address\u003d\u002700:00:00:00:00:ff\u0027,"},{"line_number":8041,"context_line":"            node_id\u003dself.node.id)"},{"line_number":8042,"context_line":"        p \u003d mock.patch.object(rpcapi.ConductorAPI, \u0027get_topic_for\u0027,"},{"line_number":8043,"context_line":"                              autospec\u003dTrue)"},{"line_number":8044,"context_line":"        self.mock_gtf \u003d p.start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"d011b555_1b3936c3","line":8041,"range":{"start_line":8032,"start_character":0,"end_line":8041,"end_character":33},"in_reply_to":"0f970ac4_5c9be942","updated":"2022-12-07 23:36:39.000000000","message":"Done","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"bfdf37fe2b31d50884cc489b316f5227d4ef4836","unresolved":true,"context_lines":[{"line_number":8048,"context_line":"                              autospec\u003dTrue)"},{"line_number":8049,"context_line":"        self.mock_update_node \u003d p.start()"},{"line_number":8050,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8051,"context_line":"        p \u003d mock.patch.object(rpcapi.ConductorAPI, \u0027change_node_power_state\u0027,"},{"line_number":8052,"context_line":"                              autospec\u003dTrue)"},{"line_number":8053,"context_line":"        self.mock_cnps \u003d p.start()"},{"line_number":8054,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8055,"context_line":""},{"line_number":8056,"context_line":"    def test_node_add_shard(self):"},{"line_number":8057,"context_line":"        self.mock_update_node.return_value \u003d self.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"61f933d7_5c0af85c","line":8054,"range":{"start_line":8051,"start_character":0,"end_line":8054,"end_character":31},"updated":"2022-12-07 23:03:10.000000000","message":"huh? Why?","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":false,"context_lines":[{"line_number":8048,"context_line":"                              autospec\u003dTrue)"},{"line_number":8049,"context_line":"        self.mock_update_node \u003d p.start()"},{"line_number":8050,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8051,"context_line":"        p \u003d mock.patch.object(rpcapi.ConductorAPI, \u0027change_node_power_state\u0027,"},{"line_number":8052,"context_line":"                              autospec\u003dTrue)"},{"line_number":8053,"context_line":"        self.mock_cnps \u003d p.start()"},{"line_number":8054,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8055,"context_line":""},{"line_number":8056,"context_line":"    def test_node_add_shard(self):"},{"line_number":8057,"context_line":"        self.mock_update_node.return_value \u003d self.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"f177d4de_12ba37de","line":8054,"range":{"start_line":8051,"start_character":0,"end_line":8054,"end_character":31},"in_reply_to":"3024fa3c_6e96f0a4","updated":"2022-12-15 15:22:02.000000000","message":"Ack","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"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":"f46e2e41fa87ed1a1bf82035e6d98f91b9d1bde9","unresolved":true,"context_lines":[{"line_number":8048,"context_line":"                              autospec\u003dTrue)"},{"line_number":8049,"context_line":"        self.mock_update_node \u003d p.start()"},{"line_number":8050,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8051,"context_line":"        p \u003d mock.patch.object(rpcapi.ConductorAPI, \u0027change_node_power_state\u0027,"},{"line_number":8052,"context_line":"                              autospec\u003dTrue)"},{"line_number":8053,"context_line":"        self.mock_cnps \u003d p.start()"},{"line_number":8054,"context_line":"        self.addCleanup(p.stop)"},{"line_number":8055,"context_line":""},{"line_number":8056,"context_line":"    def test_node_add_shard(self):"},{"line_number":8057,"context_line":"        self.mock_update_node.return_value \u003d self.node"}],"source_content_type":"text/x-python","patch_set":7,"id":"3024fa3c_6e96f0a4","line":8054,"range":{"start_line":8051,"start_character":0,"end_line":8054,"end_character":31},"in_reply_to":"61f933d7_5c0af85c","updated":"2022-12-07 23:36:39.000000000","message":"This stuff in setUp was stolen whole-hog from TestPatch earlier in the file. I have slimmed it down as much as I can.","commit_id":"1f91b48be7913dc81c9dae42c5680004c0655a76"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":7953,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, result.status_code)"},{"line_number":7954,"context_line":""},{"line_number":7955,"context_line":"    def test_filtering_by_shard_detail(self):"},{"line_number":7956,"context_line":"        result \u003d self.get_json(\u0027/nodes/detail?shard\u003dfoo\u0027, headers\u003dself.headers)"},{"line_number":7957,"context_line":"        self.assertEqual(1, len(result[\u0027nodes\u0027]))"},{"line_number":7958,"context_line":"        self.assertEqual(\u0027foo\u0027, result[\u0027nodes\u0027][0][\u0027shard\u0027])"},{"line_number":7959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"d5269298_6c293052","line":7956,"updated":"2022-12-15 15:22:02.000000000","message":"so 2 things come to mind here, and I think a next patch is perfectly fine for them:\n1) spec calls for a list of possible shards to be able to be submitted to pulling a list. This might work outright, but it was the settlement point for the port support where the API consumer wants to make fewer API calls and get all of the port data across multiple shards.\n2) Port query (i.e. GET /v1/ports?shard\u003dfoo,bar) in part of shards is not present in the overall change set, it is a bit more complex logic and not part of the bare minimum needed to enable nova to move forward, which is understandable to separate. We just need to make sure we don\u0027t entirely forget it.","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cabe5ab9e026efed4853051c3b31bf9fa2783970","unresolved":true,"context_lines":[{"line_number":7953,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, result.status_code)"},{"line_number":7954,"context_line":""},{"line_number":7955,"context_line":"    def test_filtering_by_shard_detail(self):"},{"line_number":7956,"context_line":"        result \u003d self.get_json(\u0027/nodes/detail?shard\u003dfoo\u0027, headers\u003dself.headers)"},{"line_number":7957,"context_line":"        self.assertEqual(1, len(result[\u0027nodes\u0027]))"},{"line_number":7958,"context_line":"        self.assertEqual(\u0027foo\u0027, result[\u0027nodes\u0027][0][\u0027shard\u0027])"},{"line_number":7959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"a4faf99b_79ba2cb3","line":7956,"in_reply_to":"a4e01a46_41998452","updated":"2023-01-13 20:56:41.000000000","message":"ack.","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"a35b800d13c77b571ce1cf6bfaba06ddaf82edf4","unresolved":true,"context_lines":[{"line_number":7953,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, result.status_code)"},{"line_number":7954,"context_line":""},{"line_number":7955,"context_line":"    def test_filtering_by_shard_detail(self):"},{"line_number":7956,"context_line":"        result \u003d self.get_json(\u0027/nodes/detail?shard\u003dfoo\u0027, headers\u003dself.headers)"},{"line_number":7957,"context_line":"        self.assertEqual(1, len(result[\u0027nodes\u0027]))"},{"line_number":7958,"context_line":"        self.assertEqual(\u0027foo\u0027, result[\u0027nodes\u0027][0][\u0027shard\u0027])"},{"line_number":7959,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"a4e01a46_41998452","line":7956,"in_reply_to":"d5269298_6c293052","updated":"2023-01-06 23:28:11.000000000","message":"2) is going to be in a future patch.\n\nI added a test for 1, it doesn\u0027t pass, so I commented it out. I\u0027ll do that in the next patch (then do ports).","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":8045,"context_line":""},{"line_number":8046,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node.uuid,"},{"line_number":8047,"context_line":"                                   body, expect_errors\u003dTrue, headers\u003dheaders)"},{"line_number":8048,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":10,"id":"a278482b_2a543cd2","line":8048,"updated":"2022-12-15 15:22:02.000000000","message":"I feel like we should also be checking to see that mock_update_node is not actually called, just fwiw.","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cabe5ab9e026efed4853051c3b31bf9fa2783970","unresolved":false,"context_lines":[{"line_number":8045,"context_line":""},{"line_number":8046,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node.uuid,"},{"line_number":8047,"context_line":"                                   body, expect_errors\u003dTrue, headers\u003dheaders)"},{"line_number":8048,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":10,"id":"353ed712_e90cee84","line":8048,"in_reply_to":"a278482b_2a543cd2","updated":"2023-01-13 20:56:41.000000000","message":"Done","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[{"line_number":8045,"context_line":""},{"line_number":8046,"context_line":"        response \u003d self.patch_json(\u0027/nodes/%s\u0027 % self.node.uuid,"},{"line_number":8047,"context_line":"                                   body, expect_errors\u003dTrue, headers\u003dheaders)"},{"line_number":8048,"context_line":"        self.assertEqual(http_client.NOT_ACCEPTABLE, response.status_code)"}],"source_content_type":"text/x-python","patch_set":10,"id":"69023414_38617bc2","line":8048,"in_reply_to":"a278482b_2a543cd2","updated":"2023-01-13 21:07:15.000000000","message":"Done","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"081d917ebaebdb80cba964140e9c9b1b6720a718","unresolved":false,"context_lines":[{"line_number":7960,"context_line":""},{"line_number":7961,"context_line":"    # TODO(JayF): Implement filtering of lists of shards"},{"line_number":7962,"context_line":"    def test_filtering_by_multi_shard_detail(self):"},{"line_number":7963,"context_line":"        obj_utils.create_test_node(self.context, uuid\u003duuid.uuid4(), shard\u003d\u0027bar\u0027)"},{"line_number":7964,"context_line":"        result \u003d self.get_json("},{"line_number":7965,"context_line":"            \u0027/nodes?shard\u003dfoo,bar\u0027, headers\u003dself.headers)"},{"line_number":7966,"context_line":"        self.assertEqual(2, len(result[\u0027nodes\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"0e8a8c08_5a6bede1","line":7963,"in_reply_to":"36b02e47_60a9d219","updated":"2023-01-18 22:00:33.000000000","message":"Done","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cabe5ab9e026efed4853051c3b31bf9fa2783970","unresolved":true,"context_lines":[{"line_number":7960,"context_line":""},{"line_number":7961,"context_line":"    # TODO(JayF): Implement filtering of lists of shards"},{"line_number":7962,"context_line":"    def test_filtering_by_multi_shard_detail(self):"},{"line_number":7963,"context_line":"        obj_utils.create_test_node(self.context, uuid\u003duuid.uuid4(), shard\u003d\u0027bar\u0027)"},{"line_number":7964,"context_line":"        result \u003d self.get_json("},{"line_number":7965,"context_line":"            \u0027/nodes?shard\u003dfoo,bar\u0027, headers\u003dself.headers)"},{"line_number":7966,"context_line":"        self.assertEqual(2, len(result[\u0027nodes\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"36b02e47_60a9d219","line":7963,"in_reply_to":"54e42656_0d8f35c8","updated":"2023-01-13 20:56:41.000000000","message":"\u003e pep8: E501 line too long (80 \u003e 79 characters)\n\nPlease fix.","commit_id":"7921db56771d60950de49bcf4470f9348812419b"}],"ironic/tests/unit/api/controllers/v1/test_shard.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":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"\"\"\""},{"line_number":13,"context_line":"Tests for the API /allocations/ methods."},{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from http import client as http_client"}],"source_content_type":"text/x-python","patch_set":10,"id":"62cfaf44_dd093894","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":40},"updated":"2022-12-15 15:22:02.000000000","message":"s/allocations/shard/","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"a35b800d13c77b571ce1cf6bfaba06ddaf82edf4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":"\"\"\""},{"line_number":13,"context_line":"Tests for the API /allocations/ methods."},{"line_number":14,"context_line":"\"\"\""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from http import client as http_client"}],"source_content_type":"text/x-python","patch_set":10,"id":"7d3da364_ae448dd8","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":40},"in_reply_to":"62cfaf44_dd093894","updated":"2023-01-06 23:28:11.000000000","message":"Done","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"}],"ironic/tests/unit/api/test_rbac_project_scoped.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cabe5ab9e026efed4853051c3b31bf9fa2783970","unresolved":true,"context_lines":[{"line_number":3408,"context_line":"  path: \u0027/v1/shards\u0027"},{"line_number":3409,"context_line":"  method: get"},{"line_number":3410,"context_line":"  headers: *owner_reader_headers"},{"line_number":3411,"context_line":"  assert_status: 500"},{"line_number":3412,"context_line":""},{"line_number":3413,"context_line":"shard_patch_set_node_shard_disallowed:"},{"line_number":3414,"context_line":"  path: \u0027/v1/nodes/{owner_node_ident}\u0027"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"48ac5f32_2d0a4cf9","line":3411,"updated":"2023-01-13 20:56:41.000000000","message":"shouldn\u0027t this be 200 ?","commit_id":"7921db56771d60950de49bcf4470f9348812419b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"379b0c84aaf82217d7fbb9d9c894f24be543252a","unresolved":true,"context_lines":[{"line_number":3403,"context_line":"  headers: *third_party_admin_headers"},{"line_number":3404,"context_line":"  assert_status: 404"},{"line_number":3405,"context_line":""},{"line_number":3406,"context_line":"# Shard support - system scoped req\u0027d to set on a node or view via /v1/shards"},{"line_number":3407,"context_line":"shard_get_shards_disallowed:"},{"line_number":3408,"context_line":"  path: \u0027/v1/shards\u0027"},{"line_number":3409,"context_line":"  method: get"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"69c21e05_dcd7e7f7","line":3406,"updated":"2023-01-18 16:03:33.000000000","message":"This is in merge conflict as new entries were added to the bottom of the file.","commit_id":"583a07b0fb313fb4a2f774a9d9d69971abbb8b10"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8ece0e1aa9c7dccd47751da30914f73dbd5e03f1","unresolved":false,"context_lines":[{"line_number":3403,"context_line":"  headers: *third_party_admin_headers"},{"line_number":3404,"context_line":"  assert_status: 404"},{"line_number":3405,"context_line":""},{"line_number":3406,"context_line":"# Shard support - system scoped req\u0027d to set on a node or view via /v1/shards"},{"line_number":3407,"context_line":"shard_get_shards_disallowed:"},{"line_number":3408,"context_line":"  path: \u0027/v1/shards\u0027"},{"line_number":3409,"context_line":"  method: get"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"b497e313_e0709a26","line":3406,"in_reply_to":"69c21e05_dcd7e7f7","updated":"2023-01-19 17:37:24.000000000","message":"Done","commit_id":"583a07b0fb313fb4a2f774a9d9d69971abbb8b10"}],"ironic/tests/unit/api/test_rbac_system_scoped.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9d513eb2_b952411c","side":"PARENT","line":2126,"updated":"2022-12-15 15:22:02.000000000","message":"So, you also want to put a similar section into test_rbac_project_scoped.\n\nGranted, everyone will be able to read, but nobody in that one should be able to write to the field i.e. they will get 403s. This way we\u0027re covering all of the potential hits we get.","commit_id":"6ce285d343f6c475cede6c03130211df267d1afa"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"d075114f_337d8077","side":"PARENT","line":2126,"in_reply_to":"9d513eb2_b952411c","updated":"2023-01-13 21:07:15.000000000","message":"Done","commit_id":"6ce285d343f6c475cede6c03130211df267d1afa"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"157414a6b74ff97637fe2079aa248f15e076b08f","unresolved":true,"context_lines":[{"line_number":2145,"context_line":"  path: \u0027/v1/nodes/{node_ident}\u0027"},{"line_number":2146,"context_line":"  method: patch"},{"line_number":2147,"context_line":"  headers: *scoped_member_headers"},{"line_number":2148,"context_line":"  body:"},{"line_number":2149,"context_line":"    - op: replace"},{"line_number":2150,"context_line":"      path: /shard"},{"line_number":2151,"context_line":"      value: \u0027TestShard\u0027"},{"line_number":2152,"context_line":"  assert_status: 403"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"eb094bee_a1d75e36","line":2151,"range":{"start_line":2148,"start_character":0,"end_line":2151,"end_character":24},"updated":"2022-12-15 15:22:02.000000000","message":"just, fyi, you can template this out.. If you look at line 2044, you can see what to apply to line 2138, and then you just do something like \"body: *shard_replace_patch\"","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"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":"e2c4b01b571d31cb9aa6962e41887a0081e920a1","unresolved":false,"context_lines":[{"line_number":2145,"context_line":"  path: \u0027/v1/nodes/{node_ident}\u0027"},{"line_number":2146,"context_line":"  method: patch"},{"line_number":2147,"context_line":"  headers: *scoped_member_headers"},{"line_number":2148,"context_line":"  body:"},{"line_number":2149,"context_line":"    - op: replace"},{"line_number":2150,"context_line":"      path: /shard"},{"line_number":2151,"context_line":"      value: \u0027TestShard\u0027"},{"line_number":2152,"context_line":"  assert_status: 403"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"45dc6790_c0049bb3","line":2151,"range":{"start_line":2148,"start_character":0,"end_line":2151,"end_character":24},"in_reply_to":"eb094bee_a1d75e36","updated":"2023-01-13 21:07:15.000000000","message":"Done","commit_id":"5d212484cf72203122a57fa9a2e493054004516b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"379b0c84aaf82217d7fbb9d9c894f24be543252a","unresolved":true,"context_lines":[{"line_number":2124,"context_line":"  headers: *reader_headers"},{"line_number":2125,"context_line":"  assert_status: 200"},{"line_number":2126,"context_line":""},{"line_number":2127,"context_line":"# Shard support"},{"line_number":2128,"context_line":"shard_get_shards:"},{"line_number":2129,"context_line":"  path: \u0027/v1/shards\u0027"},{"line_number":2130,"context_line":"  method: get"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"93dbc5ff_5fecd9cc","line":2127,"updated":"2023-01-18 16:03:33.000000000","message":"This is in merge conflict as new entries were added to the bottom of the file.","commit_id":"583a07b0fb313fb4a2f774a9d9d69971abbb8b10"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8ece0e1aa9c7dccd47751da30914f73dbd5e03f1","unresolved":false,"context_lines":[{"line_number":2124,"context_line":"  headers: *reader_headers"},{"line_number":2125,"context_line":"  assert_status: 200"},{"line_number":2126,"context_line":""},{"line_number":2127,"context_line":"# Shard support"},{"line_number":2128,"context_line":"shard_get_shards:"},{"line_number":2129,"context_line":"  path: \u0027/v1/shards\u0027"},{"line_number":2130,"context_line":"  method: get"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"c4f32e50_a31b8e99","line":2127,"in_reply_to":"93dbc5ff_5fecd9cc","updated":"2023-01-19 17:37:24.000000000","message":"Done","commit_id":"583a07b0fb313fb4a2f774a9d9d69971abbb8b10"}]}
