Wednesday, 2026-07-01

opendevreviewDoug Goldstein proposed openstack/ironic master: add types to driver interfaces base class for steps and task  https://review.opendev.org/c/openstack/ironic/+/99557101:14
opendevreviewDoug Goldstein proposed openstack/ironic master: annotate the base driver/interface methods as stubs  https://review.opendev.org/c/openstack/ironic/+/99557201:14
opendevreviewDoug Goldstein proposed openstack/ironic master: add type hints to arginfo for the steps and annotate step helpers  https://review.opendev.org/c/openstack/ironic/+/99557301:14
opendevreviewAdam Harwell proposed openstack/ironic master: Add ASGI application entry point for Ironic API  https://review.opendev.org/c/openstack/ironic/+/99516804:09
opendevreviewAdam Harwell proposed openstack/ironic master: Add ASGI application entry point for Ironic API  https://review.opendev.org/c/openstack/ironic/+/99516806:03
opendevreviewMerged openstack/ironic-python-agent master: Enable centos10 publish job  https://review.opendev.org/c/openstack/ironic-python-agent/+/99257106:25
opendevreviewElod Illes proposed openstack/ironic-python-agent unmaintained/zed: Fix CI issues  https://review.opendev.org/c/openstack/ironic-python-agent/+/99520109:06
opendevreviewEsther Domfeh proposed openstack/ironic master: feat: add state, target_provision_state, and duration_seconds to node history  https://review.opendev.org/c/openstack/ironic/+/98999410:38
opendevreviewEsther Domfeh proposed openstack/ironic master: feat: add state, target_provision_state, and duration_seconds to node history  https://review.opendev.org/c/openstack/ironic/+/98999411:04
opendevreviewEsther Domfeh proposed openstack/ironic master: feat: populate node_history state fields  https://review.opendev.org/c/openstack/ironic/+/99320811:04
opendevreviewEsther Domfeh proposed openstack/ironic master: Add request context user tracking to node history records  https://review.opendev.org/c/openstack/ironic/+/99390111:41
opendevreviewMerged openstack/ironic-tempest-plugin master: Drop python 3.10  https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/99118614:09
Sandzwerg[m]cardoe: That's something. My idea for now would be to give them insight into the ironic side, so they see if nodes are in cleaning etc but not sure how good that would work with Terraform 14:28
opendevreviewJed Preist proposed openstack/tenks master: Add Redfish support  https://review.opendev.org/c/openstack/tenks/+/99569714:47
JayFSandzwerg[m]: in my experience, terraform makes lots of bad assumptions about openstack which makes it not great for ironic usage. Specifically the behaviors around partial failures are pretty miserable.14:49
JayFI would strongly suggest you look into rebuild patterning to see if you can avoid the massive deletes and creates14:49
rpittauI think we forgot to drop python 3.8 support from IPE in 2025.1 :D14:53
Sandzwerg[m]JayF: Yeah, not my choice or decision. But currently rebuilds are not possible as they need to connect these nodes to a vault and either Openstack or our installation is missing something that would allow them to rebuild. (I think it was host verification)14:55
Sandzwerg[m]In principle we should be able to handle the deletions and creations. But because they delete all nodes on a batch before creating the new one we run into limits. Currently that limit is the subnet of the cleaning network (which for us is the same as the deployment network)14:56
JayFyeah I mean, this is just a scaling issue and your only options are to change the user behavior or to scale up, I'm afraid :| 14:58
rpittauconsidering that we don't test pytho n3.8 in CI and that it was dropped in 2025.1 from all openstack, should we just drop it from IPE in stable/2025.1 ? I'm actually ok with that15:26
opendevreviewMerged openstack/sushy-tools master: Add optional ServiceRoot Vendor via SUSHY_EMULATOR_VENDOR  https://review.opendev.org/c/openstack/sushy-tools/+/99190415:48
JayFrpittau: I'd suggest we not intentionally merge py3.8 breaking code15:53
JayFrpittau: but testing it? nah15:53
JayFReminder that most US-ians will be out Friday15:57
rpittauJayF: then I guess we can't explicitly remove support for Py 3.8 :)15:57
JayFwhat I'm saying is15:58
JayFnobody should say "great, we can use this fancy new syntax now"15:58
JayFor "awesome, I can use library X which I was waiting b/c it was py3.8"15:58
JayFnot "we should maintain py3.8 compat via code review" :D 15:58
JayFjust we should not make any intentional changes to break py3.8... but I won't cry if we do :)15:58
JayFI mixed a lot of negatives up there: all I mean is we shouldn't *intentionally* break it, but I'm OK with not testing it15:59
rpittauI left out a particular that might be fundamenetal here :D16:06
rpittauIPE is already broken in 2025.1 for Python 3.8 because of the requirements, lot of them do not work with Python 3.816:06
JayFSounds like we never supported py3.816:06
JayFwe just false advertising'd16:06
JayFso I am +1 to fixing the docs/setup.cfg/whatever to match16:08
rpittauok16:08
opendevreviewRiccardo Pittau proposed openstack/ironic-prometheus-exporter stable/2025.1: [stable only] Replace pkg_resources with importlib.resources  https://review.opendev.org/c/openstack/ironic-prometheus-exporter/+/99476816:10
opendevreviewRiccardo Pittau proposed openstack/ironic-prometheus-exporter stable/2025.1: [stable only] Replace pkg_resources with importlib.resources  https://review.opendev.org/c/openstack/ironic-prometheus-exporter/+/99476816:11
opendevreviewEsther Domfeh proposed openstack/ironic master: feat: add state, target_provision_state, and duration_seconds to node history  https://review.opendev.org/c/openstack/ironic/+/98999416:42
opendevreviewEsther Domfeh proposed openstack/ironic master: feat: populate node_history state fields  https://review.opendev.org/c/openstack/ironic/+/99320816:55
opendevreviewEsther Domfeh proposed openstack/ironic master: Add request context user tracking to node history records  https://review.opendev.org/c/openstack/ironic/+/99390118:19
opendevreviewClif Houck proposed openstack/ironic master: Add a custom configuration type KernelParameterString  https://review.opendev.org/c/openstack/ironic/+/99230620:41
opendevreviewClif Houck proposed openstack/ironic master: Add kernel parameter parsing to _prepare_iso_image  https://review.opendev.org/c/openstack/ironic/+/99230720:41
opendevreviewClif Houck proposed openstack/ironic master: Add kernel parameter parsing to build_extra_pxe_options  https://review.opendev.org/c/openstack/ironic/+/99230820:41
opendevreviewClif Houck proposed openstack/ironic master: Utilize KernelCommmandLine.parse() instead of ironic.common.utils.parse_kernel_params  https://review.opendev.org/c/openstack/ironic/+/99230920:41
opendevreviewClif Houck proposed openstack/ironic master: Add a tool to parse kernel command lines  https://review.opendev.org/c/openstack/ironic/+/99264120:42
opendevreviewClif Houck proposed openstack/ironic master: Add a ParsedKernelCommandLine type  https://review.opendev.org/c/openstack/ironic/+/99574820:42
opendevreviewClif Houck proposed openstack/ironic master: Add UnsafeKernelCommandLine class  https://review.opendev.org/c/openstack/ironic/+/99574920:42
opendevreviewClif Houck proposed openstack/ironic master: Add a deprecation notice for disable_kernel_parameter_parsing  https://review.opendev.org/c/openstack/ironic/+/99575020:42
clifmany commits ftw :)20:42
JayFso easy to review them one by one20:42
JayFit's like magic20:43
clifmostly, there's at least one 'L' chonker in there20:44
JayFhttps://review.opendev.org/c/openstack/ironic/+/992306/4/ironic/conf/types.py#80 makes me VERY curious about the semantics behind using a CONF object mid-initialization20:44
JayFnot just from a perspective of "will it break", but also from the perspective of "can we load it in such a way that we can ENSURE this option exists first"20:45
JayFI would assume if we have confidence that it's not going to be breaky to use  a CONF object inside a CONF type20:45
JayFthat it's likely we can figure out how to conquer #2 as well20:45
JayF(not saying we should remove the defensive code even if we get there, but I'd be surprised if this isn't a situation where it's either working/non-working pretty consistently based on import ordering)20:46
clifSo I don't see any easy way around the problem I encounterd there20:49
clifI think it's reasonable to short-circuit and not validate the default value because the default value should have a reasonably high chance of being correct20:49
JayFHow do you know that's operating against the default value? 20:50
JayFThat's sorta where I am, is I was under the impression that CONF was loaded at import time20:50
JayFnot lazily imported opt or group by group20:50
clifso think about the order of operations20:50
clifironic/conf/__init__.py is the first out the gate20:50
clifand it loads *everything* under conf basically20:51
clifand types is imported by whatever configuration options use it20:51
JayFis it?20:51
clifyes20:51
JayFwe have from oslo_config.cfg import CONF in some places20:51
JayFthat will entrypoint via ironic.conf first, too?20:51
cliftypes exists under ironic/conf20:52
cliftherefore its __init__.py *will* be loaded first thing20:52
clifas its part of the conf module20:52
JayFconductor.register_opts(CONF) gets called, and that calls register_opts on the conductor group20:52
JayFof which **both** of these options are a member, yeah?20:52
clifyes20:52
JayFI'm confused as to how it could *ever* be nondeterministic: it seems like it should get NoOptError everytime OR work everytime20:53
JayFthe weirdness for me is that it's coded defensively in a way that suggests we don't know the behavior to expect20:53
clifoslo.config evals the default values before it evals the loaded configuration values20:53
clifthe config doesn't get loaded until after all the import business gets resolved20:54
clifonce the importing is done, that option is available and things don't blow up20:54
clifbut until then I can't safely referennce it20:54
JayFso then it looks like: 1) first load of CONF happens with default values only 2) this means we take the "nosuchopt" fork in the validator20:54
cliffrom what I can tell olso.config evals the default value as soon as it ingests the option20:55
clifduring import time20:55
JayF3) load of custom CONF values happens in list() order, which the disable_kernel_parameter_parsing is NEWER than the existing ones (earlier in the list) so this is where it breaks for me20:55
JayFhow does #3 work20:56
JayFdoes our code in ir_types trigger CONF to load the boolean values? Is it done in an order other than listed orders?20:56
clifdepends on what you mean by 'to load'20:58
JayFso CONF.conductor.disable_kernel_parameter_parsing, if NoSuchOptError doesn't fire, can be presenting two values:20:58
JayF1) a default or explicit false20:58
JayF2) an explicit true20:59
JayFI think right now, we'll have different behavior depending on when the type/conf opt gets instantiated20:59
JayFif we hit register_opt(disable_parsing) before register_opt(kernel_params) it works as expected, if inverted, I think we'll always operate on the default value20:59
clifthat doesn't make sense to me21:00
JayFI'm explaining it badly21:01
JayFThere are three cases:21:01
clifKernelParameterString.__call__ gets called in several places21:01
JayF1) NoSuchOptError (oslo doesn't even know CONF.conductor.whatever exists yet)21:01
JayF2) False (explicit by user configuration)21:01
JayF3) True (default, or explicit by user configuration)21:01
JayFright now we differentiate 1 from (2+3)21:01
JayFbut we do NOTHING to ensure we're differentiating, or avoiding, the case where we use the default value for CONF.conductor.disable_kernel_parameter_parsing when deciding whether or not to parse, for instance, CONF.inspector.extra_kernel_params21:02
JayFright now it's my belief that in some cases, we'll decide to parse based on a default of true, but later, once the proper operator-chosen value is set for that (false) the behavior can change21:02
clifok I think I understand now what you're saying21:04
clifbut I don't know what to do about it21:05
JayFme either, but the code as written is -1 because it's worse than if that conf type didn't exist (inconsistently disobeying a user conf entry)21:06
clifother than maybe moving disable_kernel_parameter_parsing to some option group that is guaranteed to be loaded before anything that uses the KernelParameterString type21:06
JayFyes21:06
JayFthat's what I'm looking at 21:06
JayFwe also don't have to register the whole group at once21:06
JayFyou could split the kernel_params ones and register them into the groups separately at the end21:06
JayFthat is EXACTLY what I'm trying to see is feasible right now21:06
clifok I get it21:07
opendevreviewcid proposed openstack/ironic-specs master: Docker console container provider  https://review.opendev.org/c/openstack/ironic-specs/+/99274121:07
clifthis is what code review is for after all21:07
JayFif claude is to be believed, and I think I'm worked through this problem with it pretty well21:07
JayFit's suggesting that CONF.whatever.kernel_params will not be validated until it's accessed21:07
JayFif true; it means we should be OK21:07
clif.... really? that sounds weird to me21:08
JayFbut we should document this so it's not a footgun/hidden dependency later if so21:08
clifbut I don't profess to fully understand oslo.config21:08
clifwhat's the point of typing config values if you're not validating them at config load time21:08
clifand waiting until runtime for them to blow up in your face21:08
JayFI think you can I see "config load time" as import CONF from ironic.conf21:08
JayFbut oslo.config may see it as when CONF.blah is wanted21:08
clifdo you know when oslo.config actually loads configuration files?21:11
JayFhttps://etherpad.opendev.org/p/ironic-claudes-take-on-conf-dep-stuff I had claude dump my chat with citations in etherpad. I haven't reviewed it yet and am now.21:12
clifwell claude seems to like the way I did it :p21:15
JayFyeah for sure, it thinks it's fine, which I'm coming around to as well21:16
clifnot that I trust that clanker any further than I can throw it21:16
JayFyep21:16
JayFI use the clanker for ideas I validate with my own neurons lol21:16
clifvalid21:16
JayFand afaict it's right in this case21:16
JayFbut this does signal to me it might be wise to put an informational comment there about how this works21:16
JayFjust to save someone else the half-hour of WTF in 203621:17
clifmaybe, I don't like the fact that oslo.config's behavior is to not run the type validation until it's accessed, if that's true21:17
JayFmight imply there's value in an ironic/conf/__init__.py having a list of conf variables to _ = CONF.group.maybe_fail21:18
opendevreviewVerification of a change to openstack/ironic-python-agent unmaintained/zed failed: Fix CI issues  https://review.opendev.org/c/openstack/ironic-python-agent/+/99520121:24
JayFelodilles: I don't know if your employer has interest, but I know Ironic in the past has mostly curated our own unmaintained branches. As a core team, we're not really going to be working on anything older than um/2023.1 anymore. Should we close the branches or leave 'em open for you?21:26
clifJayF: I'm pretty sure claude is wrong, and that ConfigOpts._convert_value gets called on all configuration options at configuration load time, not just access time21:33
JayFI could easily belive that, can you point me to the code where that happens?21:34
JayFI was looking for it but couldn't find it21:34
clif_convert_value is what ends up calling opt.type() (which invokes the type's __call__ method)21:34
* JayF looking 21:35
JayF_convert_value() called three places: one is in _do_get() (in the convert method inside that method) 21:35
clifConfigOpts._parse_config_files calls ConfigOpts._validate_cli_options which calls ConfigOpts._convert_value(value, opt) for all valid opt, group pairs21:35
JayFguess what's on my screen right now (That code, I just found it :C)21:36
* clif punts claude into the sun21:36
JayF#@$%@!#21:36
JayFclif: hard for me to be annoyed at claude when it means my original brain was right21:36
JayFclif: I'd rather claude have been right than have the annoying problem lol21:37
JayFso how do we get outta this tangled mess, then?21:37
clifum21:37
JayFWait, is this still OK? as long as register_opt(conductor) happens first, it probably is?21:37
JayFWe *have* to be able to write a unit test that would exercise this properly, it would just take careful mocking21:38
clifI mean, that can be my next step at least.21:41
clifwrite a test, watch it fail (or pass maybe) then try to find a not-sucky way of solving this21:42
JayFI mean, at the end of the day if the answer is "we can't add the type validator until we deprecate disable_parameter_parsing" it's not awesome but it'd be OK21:42
clifsure, but at least one commit after that one depends on the assumption that the configuration type exists and is validating configuration inputs for kernel parameters21:44
clifso I'd rather solve this and have the type available21:45
* cardoe peeks from under the safety rock to see if its okay to come out yet/22:12
JayFit's never been okay22:19
cardoeI'm squirreled on custom hardware types22:21
cardoeand steps22:21
cardoeIt's a side quest to make the surface more clear to folks.22:22
JayFdon't get too deep without having a conversation with someone22:22
JayFand that someone is probably me :)22:22
cardoeYou got 10 minutes? :D22:23
cardoeYou just mark this side quest as failed and I'll move on quick.22:24
JayFsure22:25
JayFhttps://meetpad.opendev.org/cardoe-jay-wtf22:26
cardoehttps://review.opendev.org/c/openstack/ironic/+/995571 what spawned this22:46

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