Friday, 2026-03-06

JayFcardoe: maybe we are thinking about the json schema stuff backwards. If the new schema ideas are all about making it easy to generate stuff, one of the things we can generate is an entire directory full of micro version schemas for each endpoint based on the code00:04
JayFI might point Claude at that with carte blanche to write something overnight 😂00:05
JayFI do appreciate you bringing it up because we need to get out of the half migrated state anyway. Maybe I'll try to get some resources for that next cycle (by resources, I probably mean volunteering myself)00:09
opendevreviewMerged openstack/bifrost master: ci: undo non-voting for centos10 upgrade  https://review.opendev.org/c/openstack/bifrost/+/97125800:13
opendevreviewMerged openstack/bifrost master: Upload to and use artifact from OCI registry  https://review.opendev.org/c/openstack/bifrost/+/96841700:14
cardoeJayF: that’s where I was going. And then was looking to have a test to walk through all schema versions to make sure the code base supported it still. So when you change a model yes it’s not DRY but you just copy the schema to the next version and add the field there.00:27
cardoeWell the test part was just a future idea.00:29
opendevreviewAllain Legacy proposed openstack/ironic master: Refactor switchport config parsing into SwitchPortConfig dataclass  https://review.opendev.org/c/openstack/ironic/+/97907700:36
cardoealegacy_: while you’re in there you have network_type as a free form string but it’s an enum https://opendev.org/openstack/ironic/src/commit/9d43e45c82a1823117b05e1d834a0358fc62587d/ironic/drivers/modules/network/common.py#L39 there00:42
cardoeI caught some places that we didn’t cover all of them. Using the type let’s tooling ensure we catch it all00:45
opendevreviewAllain Legacy proposed openstack/bifrost master: Add support for standalone ironic networking  https://review.opendev.org/c/openstack/bifrost/+/96239400:55
alegacy_cardoe:  thanks... I'll take a look at that in the morning!00:56
rpittaugood morning ironic! happy friday ! o/07:50
rpittauFYI there's a massive failure due to new version of tox -> https://review.opendev.org/c/openstack/openstack-zuul-jobs/+/97911809:21
opendevreviewVerification of a change to openstack/ironic master failed: Increase networking-generic-switch version  https://review.opendev.org/c/openstack/ironic/+/97907909:33
opendevreviewVerification of a change to openstack/ironic-python-agent-builder master failed: Move ironic-python-agent-podman element  https://review.opendev.org/c/openstack/ironic-python-agent-builder/+/97903710:35
opendevreviewVerification of a change to openstack/ironic master failed: Properly register [agent_container] config  https://review.opendev.org/c/openstack/ironic/+/97903410:49
opendevreviewVerification of a change to openstack/ironic master failed: Abort now always aborts  https://review.opendev.org/c/openstack/ironic/+/97895310:58
opendevreviewVerification of a change to openstack/bifrost stable/2025.1 failed: Remove unused sphinxcontrib-blockdiag  https://review.opendev.org/c/openstack/bifrost/+/97708511:09
stephenfincardoe: fwiw, the reason for going with dicts was because I started with nova first and they already schemas for request validation (albeit, very inconsistently). I then later found out that tempest was also doing it for response validation (though again, inconsistently)12:04
stephenfincardoe: Adapting the solution to map to something the project was already using made it ~a much easier lift~ viable. I'm well aware of pydantic (and marshmallow, and voluptuous, and attrs...) but doing response validation differently to request validation (or worse, rewriting all the existing request validation tooling to use it) was not going to fly12:05
stephenfinand as JayF rightly points out, now that nova, keystone and manila are using that model, it would be highly beneficial to have other projects also work this way, even if it's not the best technical approach12:08
stephenfin(if I had my way, I'd get rid of microversions and migrate all APIs over to FastAPI, but I think I'm already doing *more* enough to improve the state of typing in OpenStack :) https://review.opendev.org/q/owner:stephenfin@redhat.com+topic:typing)12:08
alegacy_cardoe: looks like 2 of our commits crossed in the night... i had add similar constants here: https://opendev.org/openstack/ironic/src/commit/9d43e45c82a1823117b05e1d834a0358fc62587d/ironic/common/network.py#L2312:44
cardoestephenfin: yep not saying what you have is wrong. It’s aiming for consistency. Plus OpenStack would never go to FastAPI.13:06
dtantsurstephenfin: I'm sorry, I tried really hard to fight microversions many years ago when they got introduced :)13:08
JayFstephenfin: fwiw, I have an mlh fellow working on python ironic client type hints. I anticipate we'll try to finish that work across other ironic repos even if he doesn't13:31
TheJuliagood morning14:05
opendevreviewVerification of a change to openstack/ironic master failed: Abort now always aborts  https://review.opendev.org/c/openstack/ironic/+/97895314:36
cardoeOSError: No socket could be created -- (('0.0.0.0', 6385): [Errno 98] Address already in use) Traceback (most recent call last): File "/var/lib/openstack/lib/python3.12/site-packages/oslo_service/backend/_threading/service.py", line 82, in run self.service_instance.start() File "/var/lib/openstack/lib/python3.12/site-packages/ironic/common/wsgi_service.py", line 108, in start self.server.prepare() File 14:40
cardoe"/var/lib/openstack/lib/python3.12/site-packages/cheroot/server.py", line 1799, in prepare raise socket.error(msg) OSError: No socket could be created -- (('0.0.0.0', 6385): [Errno 98] Address already in use) Traceback (most recent call last): File "/var/lib/openstack/lib/python3.12/site-packages/oslo_service/backend/_threading/service.py", line 82, in run self.service_instance.start() File 14:40
cardoe"/var/lib/openstack/lib/python3.12/site-packages/ironic/common/wsgi_service.py", line 108, in start self.server.prepare() File "/var/lib/openstack/lib/python3.12/site-packages/cheroot/server.py", line 1799, in prepare raise socket.error(msg)14:40
cardoeoh man I didn't expect that to paste like that. I expected it to auto pastebin me.14:41
rpittau:D14:41
TheJuliaUGH14:42
* TheJulia needs more coffee14:42
cardoeBut that's the issue we've been seeing with using ironic-api as the start up script in the Dockerfile.14:46
rpittauwhich Dockerfile? :)14:47
opendevreviewVerification of a change to openstack/ironic master failed: Properly register [agent_container] config  https://review.opendev.org/c/openstack/ironic/+/97903414:50
opendevreviewVerification of a change to openstack/ironic master failed: Increase networking-generic-switch version  https://review.opendev.org/c/openstack/ironic/+/97907914:51
rpittaucardoe: you either have another process blocking the same port, or a previous process that didn't clean up properly its socket; if you can exec into the running or failing container, you can check what's taking that port14:52
rpittaucardoe: I would also check how you're starting the container, if your entrypoint is starting the service but you also have a sciprt or something executing ironic-api, then you have a conflict14:53
cardoeIt's just cmd: ironic-api and args are --config-file /etc/ironic/ironic.conf14:53
rpittauare you running the container using --net=host ? you have other services bound to port 6385 ?14:55
cardoeThis is in OpenStack Helm. But trying to make their container slim as heck.14:55
cardoerpittau: I would hope that OpenStack Helm isn't net=host for the api14:57
TheJuliaSure has me wondering if it is based upon the error, the only other possibility is it is somehow trying to launch two socket binds at once without something managing the sockets, but htat seems bonkers and like it would have broken sooner14:58
rpittaucardoe: is ti possible to check the config file ?14:59
cardoeyeah. I'm looking at it. I forget what the key is on the pod to say if its hostNetwork15:01
rpittauin the spec? should be jsut hostNetwork15:03
rpittauI actually expect that to be true considering the networking traffic generated by ironic, unless it's using some advanced configuration15:06
cardoeit looks like only the ironic-conductor pod does hostNetwork15:24
* TheJulia wonders if anyone actually uses apstra15:24
cardoehttps://github.com/rackerlabs/understack/pull/1759/changes is apparently what makes that not happen.15:25
* TheJulia guesses it is more just less public posts giving claude grounding contet15:25
cardoeapi.api_workers=1 fwiw15:25
TheJuliaThat makes sense if your doing direct service launch and not using uwsgi15:26
TheJuliaSince the option is for uwsgi where it handles the host socket15:27
cardoeWell we are using uwsgi but the stock OpenStack Helm is using ironic-api directly.15:27
TheJuliaI bet oslo.service changes have broken uwsgi runtimes in some cases15:31
TheJuliaI think we only run with one worker in CI, we should try to up that in a WIP change to see how massively that detonates15:32
opendevreviewJulia Kreger proposed openstack/networking-generic-switch master: WIP: Crazy idea: NDFC support in NGS?  https://review.opendev.org/c/openstack/networking-generic-switch/+/96848416:00
opendevreviewJulia Kreger proposed openstack/networking-generic-switch master: WIP: apstra support  https://review.opendev.org/c/openstack/networking-generic-switch/+/97929816:00
cardoeTheJulia: I'm saying if we kick it off with uwsgi we're good. If we kick it off with the entry point installed "ironic-api" with api_workers > 1 then it throws that error.16:00
TheJuliayeah, that is my take as well16:01
cardoelooks like something changed in tox on the Zuul runners so everything is busted.16:20
TheJuliatox breakage16:28
* TheJulia doesn't have context of what needs to happen at the moment, busy dealing with the fallout of a customer going "no, i must have multicast"16:29
* TheJulia expects Leeloo Dallas to appears and say "multicast"16:29
opendevreviewLéonard Suslian proposed openstack/ironic master: Use ServiceRoot.Vendor for detect_vendor() instead of System.Manufacturer  https://review.opendev.org/c/openstack/ironic/+/97843916:57
clifJayF: Do you know of any constraints on ports that make up a portgroup? One thing that stands out is that if the physical_network of a portgroup changes, then that change cascades to its constituent ports. If I'm creating a new portgroup do all physical_networks of constituent ports need to match? That doesn't seem to be enforced by the API controller.17:12
opendevreviewMerged openstack/ironic-python-agent-builder master: Move ironic-python-agent-podman element  https://review.opendev.org/c/openstack/ironic-python-agent-builder/+/97903717:15
JayFMy initial reaction is to say that they all should have to already be on the same physical Network. But I'm honestly not 100% sure and cardoe or TheJulia might have a more certain answer17:54
JayFI think your observation about making things match on create is a good identification of a bug, perhaps18:00
JayFBut I'd file it and leave it for later 18:01
cardoeclif: yeah I thought we set that as a "rule" when we were discussing the spec.18:02
cardoeAnd that's how the behavior was suppose to flow in the API. If you change the portgroup, it changes the ports.18:02
clifYea it's in the spec: "All port group members must have the same physical network." https://opendev.org/openstack/ironic-specs/blame/branch/master/specs/approved/trait-based-port-scheduling.rst#L46218:04
clifand yes it appears its a bug that it's not enforced at create time afaict18:04
clifI'll file a bug and work on a fix for it after I finish up implementating group_and_attach_port for TBN18:05
opendevreviewMerged openstack/bifrost stable/2025.1: Remove unused sphinxcontrib-blockdiag  https://review.opendev.org/c/openstack/bifrost/+/97708518:13
TheJuliaclif: everything has to be on the same physical network, generally same switch, but it doesn't *HAVE* to be with things like virtual port-channels. That gets funky though. We might need to do some NGS work there to better support the cases.18:30
cardoeTheJulia: so for us "physical_network" = virtual chassis18:33
TheJuliaAnd that is a totally valid approach18:33
cardoeThat way port-channels work.18:33
TheJuliaSpecifically, it is all about how you, the operator, want to model your physical and logical constraints together into $something18:33
cardoeComing from the limited network hardware I work with, I would think NGS should let you mark two switches ask being virtual-switch=blah and then utilize that for the matching.18:35
TheJuliaIt *really* depends on the switch OS and the config18:37
cardoeWell it'd be up for the specific device backend in NGS to decide what to do with it.18:39
TheJuliaI have a customer who has virtual port channels setup as static entities so i wrote precise destructions for how the config model works for them, dynamic I *fear* we might need to do a little more ML2 plugin work just to take and draw the line on config because some switches you just configure it and have to do vlan config on the base port, others it is on the virtual port channel interface, others you have to 18:39
TheJuliaindividually configure18:39
cardoeBut at least it'd be clean for the operator to tell NGS "hey these are providing port-channels"18:39
TheJuliaexactly18:39
TheJuliaThe key, really, is get enough data into the binding calls on the ml2 driver, and let it sort it out18:41
cardoeYep18:41
cardoeSo what I'm saying is today ML2 gets the port which has binding_interfaces in it tied to ironic ports so it walks both of those independently.18:41
cardoeAnd what I'm saying is allow the operator to tell NGS these are paired switches so when it looks up one switch it can say oh the next port is for my paired switch18:43
cardoeAnd then the backend device code can have a do_individual_or_do_channel_interface()18:44
cardoeSo it can be smart for that in NGS18:44
cardoeCause right now what you're describing involves creating only 1 port in Ironic and setting the port_id to the virtual port channel interface name18:45
cardoeask me how I know. :)18:45
TheJuliathats a single port bind, it should be sending both ports on a portgroup bind18:47
TheJuliaif we're not, we regressed at some point18:48
cardoeYeah but when you need it to touch the virtual port channel instead of the base ports18:48
TheJuliadepends on the switch18:49
cardoeYep18:49
cardoeI mean I've got some bats and we can go make our own Office Space ending scene if you're free.18:50
TheJuliaOh, that would be so very fun.18:50
opendevreviewJulia Kreger proposed openstack/networking-generic-switch master: WIP: Multicast traffic options for cisco driver  https://review.opendev.org/c/openstack/networking-generic-switch/+/97933218:50
TheJuliaso this makes me sad, but I have a customer which won't be doing ingress-replication so :(18:51
TheJuliacardoe: you likely have opinions, but that is sort of what claude hammered out on a first pass18:51
TheJuliaI think mcast_groups specficially was the arista modeling, but I don't remember. I created stories for every switch vendor in my team's backlog18:51
TheJuliawell, that we implemented vxlan for18:52
TheJuliacardoe: and for the record, the printer scene. Ending scene is totally different...  :)18:54
cardoeoh yeah whoops18:54
cardoeI was looking at the changes.. I'm gonna smile and nod at the switch configs18:54
TheJulialol18:54
TheJuliajrosser: looks like we discussed multicast back on 2/10. Its now on my todo list overall and if you have thoughts or opinions on tuning, please let me know. I believe you were arista based so likely Tuesday is when my brain will get there.19:04
jrosserTheJulia: yes, specifically we have a workload is mostly multicast, and we're using OISM on arista for that19:10
jrosserandrewbonney is doing the bulk of the work on that with ironic - which is currently a huge hack and just presented as a set of provider vlans configured up front19:12
TheJuliawhat is OISM in your context?19:13
TheJuliathat seems... awful, but I can get how you ended up there19:13
jrosserOptimised Inter Subnet Multicast19:14
TheJuliaThanks19:14
jrosserits what routes multicast efficiently in the context of it being used in conjunction with vxlan19:15
TheJuliaI guess, structurally, that makes sense (without looking into the fine details)19:17
jrosserOISM is rfc962519:17
TheJuliasince it is higher level traffic handling, it looks like, it would really depend on what the underlying configuration needs to be to support that higher level efficiently.19:23
TheJuliajrosser: i guess if you can sync up with andrewbonney and float forward a little configuration sample, it might be possible to figure out a way to model or enable it to be tuned as so desired19:51
opendevreviewHarald JensÃ¥s proposed openstack/networking-generic-switch master: AttributeError: delete_port_postcommit segment=None  https://review.opendev.org/c/openstack/networking-generic-switch/+/97935020:21
opendevreviewHarald JensÃ¥s proposed openstack/networking-generic-switch master: Fix KeyError in vlan_has_vni for Cisco NX-OS  https://review.opendev.org/c/openstack/networking-generic-switch/+/97935120:21
opendevreviewHarald JensÃ¥s proposed openstack/networking-generic-switch master: Enable L2VNI support for Cisco NX-OS switches  https://review.opendev.org/c/openstack/networking-generic-switch/+/97935220:21
cardoeTheJulia: https://review.opendev.org/c/openstack/nova/+/979354 thoughts/feels welcome20:51
opendevreviewMerged openstack/ironic master: Abort now always aborts  https://review.opendev.org/c/openstack/ironic/+/97895321:59
opendevreviewMerged openstack/ironic master: Increase networking-generic-switch version  https://review.opendev.org/c/openstack/ironic/+/97907921:59
opendevreviewMerged openstack/networking-generic-switch master: Add troubleshooting and performance guide.  https://review.opendev.org/c/openstack/networking-generic-switch/+/97879923:13
opendevreviewMerged openstack/ironic master: Properly register [agent_container] config  https://review.opendev.org/c/openstack/ironic/+/97903423:21

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