Tuesday, 2025-09-09

opendevreviewJacob Anders proposed openstack/ironic master: [WIP] Add comprehensive BMC state validation after firmware upgrades  https://review.opendev.org/c/openstack/ironic/+/96023004:45
opendevreviewArnaud Morin proposed openstack/ironic master: Deprecate usage of ironic.api.wsgi:initialize_wsgi_app  https://review.opendev.org/c/openstack/ironic/+/96020906:22
opendevreviewJacob Anders proposed openstack/ironic master: [WIP] Add comprehensive BMC state validation after firmware upgrades  https://review.opendev.org/c/openstack/ironic/+/96023006:33
dtantsurJayF: IrSO does not enable integration with any OpenStack services. It's not a hard "no", just nobody in the Metal3 world is really interested.06:59
opendevreviewJacob Anders proposed openstack/ironic master: [WIP] Add comprehensive BMC state validation after firmware upgrades  https://review.opendev.org/c/openstack/ironic/+/96023006:59
opendevreviewJacob Anders proposed openstack/ironic master: [WIP] Add comprehensive BMC state validation after firmware upgrades  https://review.opendev.org/c/openstack/ironic/+/96023010:21
jandersdtantsur I will be at OIS Paris10:23
stephenfinJayF: frickler: Yup, I've been looking at the sdk gate issue since yesterday. Struggling to get an ironic devstack deployment up and running at the moment but once I do, it should be easy to see what SDK is sending that ironic is unhappy with10:27
dtantsurjanders: \o/13:04
JayFstephenfin: you can likely reproduce with tox -elocal-ironic-dev -- we have details on this in the Dev docs. I guess this is assuming that you can reproduce in no auth mode13:43
lutimurahttps://docs.openstack.org/ironic/latest/contributor/local-dev-guide.html13:55
dtantsurTheJulia: hey, any ideas why my deployment would get stuck in Attempting to resolve tag for: ParseResult(scheme='oci', netloc='quay.io', path='/dtantsur/cirros:0.6.3', params='', query='', fragment='')14:05
dtantsur` Image oci://quay.io/dtantsur/cirros:0.6.3 could not be found`14:09
dtantsurand this is precisely why I objected to rolling out our own implementation :-/14:09
dtantsurOCI client got a Non-2xx: status 404, reason NOT FOUND, text {"errors":[{"code":"MANIFEST_UNKNOWN","detail":{},"message":"manifest unknown"}]}14:09
stephenfinJayF: TIL14:15
JayFIt's a nugget that was hidden in our docs for a long time, I hooked it up via tox and it's ideal for testing. Sdks14:16
stephenfinSweet. Also, fwiw, I wasn't able to find a combination of DevStack config options that would allows me to stack without hitting ip route issues. And I tried at least a half dozen times. I suspect there's some docs missing (particularly for PUBLIC_SUBNET_IP). jfyi14:18
lutimurastephenfin: are you also getting errors about nexthop having an invalid gateway?14:31
stephenfinyup14:31
TheJuliadtantsur: Odds are we can't see it or are sending the wrong payload. A manifest unknown means the header is wrong, but it worked in the past so I'm super cuirous what is going on14:45
TheJuliadtantsur: can an unauthenticated user enumerate tags?14:46
dtantsurTheJulia: yep, this is a public repo14:47
dtantsurit works with https://github.com/oras-project/oras-py (but this project seems to have problems with authentication)14:48
TheJuliayou *should* be able to enumerate tags with curl if you send the right header. The OCI spec is... frankly awful14:48
TheJulia(not surprising, see prior comment) ;)14:48
dtantsurI cannot do it with curl either. I don't know what oras and oras-py do differently but they do14:49
TheJuliaThe image servers are super super super touchy about what headers get sent and the headers indicate what kind of response they expect. The error has me wondering if the server behavior has changed slightly14:49
TheJulia... Interesting14:49
TheJuliaYeah, don't bother digging into oras's depths, you'll cry.14:49
TheJuliahmmm14:50
dtantsurokay, with curl the secret sauce was -H 'Accept: application/vnd.oci.image.manifest.v1+json'14:50
dtantsurI guess Ironic does not do that?14:51
TheJuliait *should* be14:51
TheJuliawhich is curious14:51
dtantsurI have a feeling it sends the wrong one14:52
dtantsurneeds application/vnd.oci.image.manifest.v1+json but sends application/vnd.oci.image.index.v1+json14:52
dtantsuralthough.. curl works with the index one as well Oo14:52
TheJulia... I wonder if that somehow got changed accidently14:52
TheJulia... Okay...14:52
TheJuliaThat is weird. :\14:53
TheJuliaDoes the payload we get back have anything in it from the server? Could we be reformatting the url in some incorrect way?14:56
TheJuliaPerhaps worth logging out the full request and interaction to verify we're sending the same14:56
JayFstephenfin: (cc other cores) -- I think we have a race in devstack setup with neutron15:02
dtantsuraha, listing tags works with both headers, getting a manifest - only with the manifest one15:02
stephenfinOh, now that would make sense15:02
JayFstephenfin: that for some reason gets won by Ironic in our CI, and gets lost by us in some other CI (including the gophercloud CI that adamcarthur5 is working on -- he only got it to pass by disabling spinning up fake bm)15:02
JayFstephenfin: I suggest a similar fix: I doubt you all need IRONIC_BAREMETAL_BASIC_OPS for your tests, and if you do, we can rework them to go without them15:03
JayFand at PTG, I guess, we'll have to engage devstack/neutron teams and figure it out15:03
stephenfinJayF: Thanks. So to be clear, take https://docs.openstack.org/ironic/latest/contributor/devstack-guide.html, and `IRONIC_BAREMETAL_BASIC_OPS=False`, and profit $$$?15:09
JayFstephenfin: lets be explicit about what that does: that disables the entire "ironic fake bare metal VM" stuff15:09
stephenfinFor what I want, that should be fine15:09
JayFstephenfin: if you don't need that, 100% do that. If you do need that ... we have a choice between changing your need for that or fixing devstack with our hair on fire and gmaan on leave15:09
JayFlol15:09
stephenfinYes, best not have hair any more on fire than necessary15:11
JayFI'll note that's what Adam did in the gophercloud PR15:11
JayFso if you're happy with that and wanna approve over there (you are core over there too, right?)15:11
stephenfinjust reviewing it now15:11
stephenfindo you have a bug describing the devstack issue that we can link to (so we remember why we did what we did in a few months/years time)?15:12
JayFever troubleshoot something and never find the smoking gun15:13
JayFand feel like you're a little crazy and/or that there might be something else at play?15:13
JayFI've not put my finger on the exact bug b/c we've been digging it in github actions15:13
JayFso I've only had logs to go by, so there's no bug because I don't know what the bug is or (until now) that it wasn't $githubActionsShenanigans15:13
dtantsurTheJulia: get_manifest seems to be broken entirely since it assumes that digest is a part of the URL..15:14
TheJuliaoh15:14
TheJuliaOH15:14
TheJuliayour trying to get a manfiest directly from a tag?15:14
TheJuliaits always a multi-step interaction. uhhhh hmmm15:15
dtantsurTheJulia: me? Ironic is trying to get a manifest from a digest15:15
stephenfinI reproduced it 6/6 (ish) times in the last 24 hours on VMs from our internal cloud (which both TheJulia and dtantsur have access to also), so we do have _a_ reproducer15:15
dtantsurTheJulia: while I can only get it from a tag with curl15:15
TheJuliadtantsur: yeah, tag has to be resolved to a digest to get it, so tag has to be resolved to a digest pointer15:16
JayFstephenfin: Do you have cycles to pair on this sometime? I think perhaps the intersection of our knowledge bases would have a big multiplicative impact15:16
dtantsurTheJulia: the other way around15:16
JayFstephenfin: assuming the workaround works and hair no longer needs to be on fire :)15:16
TheJuliawe *have* to get a digest somehow, in the end, the tag is just a pointer. We have to go ask for it15:16
dtantsurTheJulia: yeah, you can get a digest from the tag manifest15:16
dtantsurnot the other way around like you seem to be assuming15:16
TheJuliano, I'm not saying that15:17
dtantsurhttps://quay.io/v2/dtantsur/cirros/manifests/0.6.3 works15:17
dtantsurhttps://quay.io/v2/dtantsur/cirros/manifests/sha256:7d6355852aeb6dbcd191bcda7cd74f1536cfe5cbf8a10495a7283a8396e4b75b does not15:17
dtantsurhowever, Ironic tries the latter15:17
TheJuliaoh WOW15:17
TheJuliaokay15:17
TheJuliaI misunderstood what your saying15:17
TheJuliaoh15:18
TheJuliawe're creating the wrong url15:18
dtantsurhttps://github.com/opencontainers/distribution-spec/blob/main/spec.md#pulling-manifests very clearly says that digests should work, so I cannot blame you...15:18
stephenfinJayF: sure, though tbh the extent of my testing has been messing with various CIDR- and IP-related settings on the assumption that is was my environment that was broken15:18
JayFI think anything is possible15:19
JayFand we'll be able to get 100x further by being able to login in the broken state15:19
TheJuliadtantsur: yeah, there are some funky qwarks between server implementations15:19
dtantsurah15:19
dtantsurhttps://quay.io/v2/dtantsur/cirros/manifests/sha256:4ed7603f8488ebe12108360bcd8a03f2042ae375ef1a6eb9ae497442f20f2ca6 this one works15:19
dtantsurit's the digest of the manifest itself, not of config or layer. fair enough15:20
dtantsurnow I only wonder how I even get this digest in the first place?15:20
TheJuliawhen we ask for the index, it hands us the pointer if memory serves15:20
TheJuliagranted, I think I wrote this last year?!15:20
dtantsuraha, oras tells me that one, so we're cool15:21
dtantsurnow back to understanding why tags don't work. maybe it's a simple fix for the accept header..15:21
JayFhttps://review.opendev.org/c/openstack/ironic/+/959870/2 could use a semi-urgent review15:21
dtantsurbefore that: a tricky test: can we authentication to quay15:21
TheJuliaPossibly, worth a try, we might need to detect/handle some weirdness.15:21
TheJuliadtantsur: I did some basic tests, but It *might* have been just been digest urls. I can't remember. I tried to test every combo back then15:22
dtantsurI really had some high hopes when I found oras-py.. just to realize it only really works with username/password auth15:22
TheJuliajut when I hit Openshift's image server, I couldn't use tags anymore so maybe I broke something in there15:22
TheJuliaYeah... and if you peel back the hood you'll quite literally cry15:23
TheJuliaThey may still be using print statements as well in it's base interaction logging15:23
dtantsurget_blob_url returns https:///v2quay.io/dtantsur/cirros/blobs/sha256:7d6355852aeb6dbcd191bcda7cd74f1536cfe5cbf8a10495a7283a8396e4b75b, should I be worried about it? :D15:23
TheJuliaThat should be correct15:24
TheJuliawhoaw15:24
dtantsurI don't think v2quay.io is correct15:24
TheJuliav2quay15:24
TheJuliaWUT?!15:24
TheJuliaI have literally no idea where that is coming from15:24
TheJuliathat is bizzar15:25
TheJuliaso... If memory serves15:25
dtantsurthat happens when you omit oci://, which cannot be triggered through API15:25
TheJuliayeah, I think I was doing everything with oci://15:26
dtantsurwill fix that too, just for internal consistency15:27
dtantsurTheJulia: good news: our authentication works (take it, oras-py!)15:31
dtantsur(we probably still need to fix oras-py and switch to it eventually)15:31
TheJuliawooohoooo!15:31
TheJuliaI have serious doubts if it has the same activity level it had when I last looked at it.15:32
dtantsurI haven't checked parsing and passing the entire token so far, that's the next step (need to revive my bifrost)15:32
JayFWe should evaluate if the cost of maintaining a library (think of how annoying it is to backport sushy fixes) is worth it before making that move15:33
JayFIt'd be exceedingly annoying to try to backport a fix needed to continue supporting quay.io through a library15:34
dtantsurIn any case, I doubt anyone has time for it. If I can fix my OCI issues, I'm good for now.15:34
TheJuliafunny thing is, its actually a fairly simple interaction, once you understand the flow and quarks15:35
stephenfinJayF: Just confirming that worked, and I was *finally* able to stack15:39
JayFThat makes me wonder if just writing a blog about our implementation would be an idea. Easier to point people to do the simple thing on their own. (Or just ... don't and that's OK too lol)15:40
TheJuliaJayF: content is *always* a good idea15:40
opendevreviewDmitry Tantsur proposed openstack/ironic master: OCI: accept both content types when requesting a manifest  https://review.opendev.org/c/openstack/ironic/+/96028315:43
dtantsurI'll WIP ^^ until I can test it end-to-end15:43
TheJulia... I so should have thought of that15:45
TheJuliaDOH15:45
TheJuliaanyway, packing up to hit the road15:45
dtantsursafe travels15:45
TheJuliaI'll try! Summer just wound up the corgi15:45
JayFHave a good time o/ pass on my hellos to Summer and the animal entourage15:46
dtantsurfunnily, the OCI issue was a side quest for me. now I need to get back to what I was actually testing..15:52
opendevreviewDmitry Tantsur proposed openstack/bifrost master: Fix unbound variable in install-deps.sh  https://review.opendev.org/c/openstack/bifrost/+/96028616:03
opendevreviewStephen Finucane proposed openstack/ironic master: api: Fix off-by-one error  https://review.opendev.org/c/openstack/ironic/+/96028816:05
stephenfinJayF: lutimura: frickler: that's the fix 🤦‍♂️16:05
stephenfinI have code in nova to prevent exactly that but I obviously never copied it to ironic16:06
* stephenfin really needs to spin up the oslo.wsgi project16:06
dtantsur"GET /v1/nodes/619a9d1e-66be-4964-8b64-f270dc3eab42/validate HTTP/1.1" 50216:09
dtantsurdon't worry, nothing works today16:09
dtantsurmmmm, aaaaaa, local RPC is so broken here16:12
opendevreviewMerged openstack/ironic master: Avoid the wsgi application to start with eventlet  https://review.opendev.org/c/openstack/ironic/+/95987016:20
opendevreviewStephen Finucane proposed openstack/ironic master: api: Prevent overlapping schema versions  https://review.opendev.org/c/openstack/ironic/+/96029116:26
opendevreviewStephen Finucane proposed openstack/ironic master: DNM: Revert "api: Fix off-by-one error"  https://review.opendev.org/c/openstack/ironic/+/96029216:26
stephenfinand there's a patch to prevent this happening again (with a DNM to prove it actually works)16:26
stephenfinJayF: While I have you: Ironic occasionally re-uses controllers as subcontrollers (so fwict `/portgroups/{id}/ports` is almost an alias for `/ports`). What are the microversioning expectations for those?16:28
JayFI'd answer that question by exploring existing behavior tbh16:28
stephenfinIs it expected that if I add a new field to `/ports/{id}` in 2.foo then that will also appear in `GET /portgroups/{id}/ports`?16:28
JayFI think so?16:29
stephenfinAh, okay. I was hoping this might be written down somewhere but I couldn't find it16:29
JayFbut I am not API semantics pro16:29
stephenfingotcha16:29
* stephenfin takes that as freedom to do what he thinks best16:29
stephenfin:)16:30
JayFwell like I said16:30
JayFexisting behavior16:30
JayFwe are big on not breaking people16:30
JayFso no change in behavior is the A+++++ answer16:30
stephenfinyeah, agreed16:30
stephenfinI ask because Nova reuses has the views module where a lot (but not all) of the response bodies are generated, but there have been a variety of bugs where said code is called by multiple controller methods with subtly different inputs16:31
stephenfinSo an aliased API like above doesn't behave exactly like the original API. I'm hoping Ironic's pattern avoids that16:31
* stephenfin will document findings16:31
JayFHonestly I've approved port API changes16:32
JayFand never once thought about the subcontroller16:32
JayFso a little embarassed I never considered it16:32
JayFtop two here: https://review.opendev.org/c/openstack/ironic/+/960288 from Stephen need review as they'll need to be backported (or if we get them in; I can update the release request)16:53
opendevreviewLuan Utimura proposed openstack/ironic master: Fix nexthop error when adding route to PUBLIC_SUBNET_IP  https://review.opendev.org/c/openstack/ironic/+/96029916:56
lutimurastephenfin: thanks for the fix there! btw, about the nexthop thing, i managed to finish a ./stack.sh run after applying this change: https://review.opendev.org/c/openstack/ironic/+/960299. let me know what you think :)16:58
lutimura(ah, i had to run `ip addr flush dev ens3` to clean up stuff from previous ./stack.sh runs...)17:02
opendevreviewStephen Finucane proposed openstack/ironic master: api: Add schema for inspection rules API (requests)  https://review.opendev.org/c/openstack/ironic/+/95403917:13
opendevreviewStephen Finucane proposed openstack/ironic master: api: Add schema for events API  https://review.opendev.org/c/openstack/ironic/+/95988017:13
opendevreviewStephen Finucane proposed openstack/ironic master: WIP: api: Add schema for portgroups API  https://review.opendev.org/c/openstack/ironic/+/95988117:13
JayFlutimura: where do I need to mail your gold star sticker17:40
JayFWhat a great find. I'll give it a more in-depth review and hopefully a plus two here in a minute or two17:41
JayFI'll note that while that comment was mostly a joke, I'm always happy to mail people ironic stickers17:41
lutimuraJayF: hahaha that'd be awesome! thanks for looking into it; let me know if you have any suggestions, etc.17:48
JayFif the stickers would be awesome DM me an address and I'll assemble you a care package lol17:48
JayFIt might be time to refresh my sticker budget anyway17:48
opendevreviewLuan Utimura proposed openstack/ironic master: Fix nexthop error when adding route to PUBLIC_SUBNET_IP  https://review.opendev.org/c/openstack/ironic/+/96029919:16
opendevreviewLuan Utimura proposed openstack/ironic master: Fix nexthop error when adding route to PUBLIC_SUBNET_IP  https://review.opendev.org/c/openstack/ironic/+/96029920:30

Generated by irclog2html.py 4.0.0 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!