Tuesday, 2025-05-20

*** mhen_ is now known as mhen01:33
opendevreviewMerged openstack/devstack master: lib/neutron: Deploy under uWSGI by default  https://review.opendev.org/c/openstack/devstack/+/93219905:07
opendevreviewMaxim Sava proposed openstack/tempest master: Add test for parallel image upload  https://review.opendev.org/c/openstack/tempest/+/94532007:33
opendevreviewMaxim Sava proposed openstack/tempest master: Add SRBAC alt manager persona to dynamic credentials  https://review.opendev.org/c/openstack/tempest/+/82231809:44
opendevreviewMaxim Sava proposed openstack/tempest master: Add test for parallel image upload  https://review.opendev.org/c/openstack/tempest/+/94532013:46
opendevreviewMerged openstack/devstack-plugin-nfs master: Update CI jobs for Flamingo  https://review.opendev.org/c/openstack/devstack-plugin-nfs/+/95031714:20
opendevreviewTakashi Kajinami proposed openstack/grenade master: Remove transition code for old python-openstackclient release  https://review.opendev.org/c/openstack/grenade/+/93610714:20
opendevreviewLuigi Toscano proposed openstack/devstack-plugin-nfs master: zuul: run cinder-tempest-plugin tests too  https://review.opendev.org/c/openstack/devstack-plugin-nfs/+/89896514:54
*** ralonsoh is now known as ralonsoh_out15:08
opendevreviewMerged openstack/devstack master: lib/neutron: Remove NEUTRON_DEPLOY_MOD_WSGI  https://review.opendev.org/c/openstack/devstack/+/93220317:03
opendevreviewEric Harney proposed openstack/devstack master: Silence SyntaxWarnings in outfilter.py  https://review.opendev.org/c/openstack/devstack/+/95044917:19
opendevreviewFernando Ferraz proposed openstack/devstack-plugin-nfs master: zuul: run cinder-tempest-plugin tests too  https://review.opendev.org/c/openstack/devstack-plugin-nfs/+/89896517:25
opendevreviewFernando Ferraz proposed openstack/devstack-plugin-nfs master: [DNM] Run Glance with Cinder as backend  https://review.opendev.org/c/openstack/devstack-plugin-nfs/+/94048217:25
opendevreviewMaxim Sava proposed openstack/tempest master: Add test for parallel image upload  https://review.opendev.org/c/openstack/tempest/+/94532018:12
clarkbgibi: sean-k-mooney I left a question on https://review.opendev.org/c/openstack/devstack/+/94843621:07
sean-k-mooneyclarkb: the motivation to do it this way is so that we could be very explcit in speicific jobs which service have this set. and specificly we wantted to do this onece and have it work for all plugins or existign service without code change 21:39
clarkbright, the problem with that is 6 months from now making it a default is painful21:40
sean-k-mooneywell this is for the eventlet transition21:40
clarkbbecause now you have to merge bash arrays and prefer one side or another. If you have a normal var like PLACEMENT_THREADS then you just change its default from false to true21:41
sean-k-mooneyso when we make ti the default we will change the defualt in nova21:41
sean-k-mooneywhat is the other method you were suiggesting21:41
sean-k-mooneyby the way to me this is identical to how the git repos and branches work21:42
clarkbsean-k-mooney: typically it is easier to manage defaults and make them human readable/manageable if you have a var like PLACEMENT_RUNTIME={$PLACEMENT_RUNTIME:-eventlet} that you override and then just pass that to run_process' env  var list21:42
sean-k-mooneyhttps://github.com/openstack/devstack/blob/master/stackrc#L322-L32321:42
clarkbthe difference is the array21:43
clarkbthe array can contain arbitrary env vars so merging them / changing defaults later is much more painful21:43
sean-k-mooneyright but having ti be unrestircted was kind of the point21:43
sean-k-mooneyso tha twe dont have to keep going back for each service and adding a spcific value21:44
clarkbright you're basically punting the maintenance bruden into the future21:44
clarkband when you get to the point where you have to manage that outside of specific jobs it will be painful21:44
sean-k-mooneyi dont see this as a mantance burden honestly21:44
clarkbif we're more explicit about the settings now that means we can manage them directly and set defaulst that make sense over time21:45
clarkbwith this proposal you're going to have to curate this at a job level and if you ever need to manage it within devstack proper it will be annoying to merge the values21:45
sean-k-mooneyi dont see why we cant with thsi apprch21:45
sean-k-mooneyclarkb: actully my orginal propsal was to directly render systemd drop in files to set it21:46
clarkbbecause array[service] is pointing to a string of vars. If I want to set an additional var, or modify one of those vars in the string, etc I have to jump through more hoops21:46
sean-k-mooneygibi tought following the patten we have for the git repos would be cleaner21:46
clarkbthe difference with git repos is the values are singletons21:46
clarkbthere is one repo location and one repo branch21:46
sean-k-mooneyso your object is to thte fact you can have multiple vars21:46
clarkbenv vars are a list. Its still doable21:46
sean-k-mooneythe problem is the name of the var will be diffent for each project21:47
clarkbbut much more painful to manage if you're merging values or overriding things for defaults etc21:47
clarkbsean-k-mooney: that seems like a bug21:47
clarkbsean-k-mooney: it could just be OSLO_RUNTIME and be consistent everywhere?21:47
sean-k-mooneythat intentional21:47
clarkbthen you set it to thread or eventlet or async or whatever but then operators don't need to know the different var names21:47
sean-k-mooneywe could revisit it but we didnt want to confirue this form the oslo side21:48
clarkbyou don't have to configure it from the oslo side21:48
clarkbbut the input is configuring oslo21:48
clarkb(or at least that is what the blog post I read implied)21:48
sean-k-mooneyclarkb: i mean have the env var be somethign that oslo provides21:48
sean-k-mooneyi dont recall what the explcit reason was to not do that21:49
clarkbright I don't think you have to do that. Just give it a consistent name that refers to what it does (whcih is configure oslo service's runtime between different operational modes)21:49
sean-k-mooneyalthogh it may have been so we can make sure you cant opt into an unsupproted mode21:49
clarkbanyway I'm not going to say no to any of this. I just want to call out this adds a second mode of setting unit file env vars and one that is far more tricky to manage down the road when you want to set multiple vars and change defaults and manage them directly rather than set once in a job definition21:49
sean-k-mooneyso i dont really expect devstack or the tempets team to manage these21:50
sean-k-mooneybut perhasp there is a reason for them to 21:50
sean-k-mooneyi was not expecting neutron for exampel to want to test with novas schduler runnign without event let21:51
clarkbno but in 6 months that will probably be the case21:51
clarkb(or the inverse)21:52
sean-k-mooneymaybe. my orginal propsoal was each nova service woould only supprot one mode in any release21:52
clarkbthinking about it more maybe a way to mitigate my concern is to flip the order of the vars21:52
sean-k-mooneydan ask to supprot both so we had to come up with a way to swap without using config files21:52
clarkbso that the internal state overrides the external state if that makes sense21:52
clarkbthat way if devstack grwos the ability to configure things directly it will override the one off state in the top level job def and you'll have to set the vars the devstack way21:53
clarkbthen you don't even need to worry about merging the array in properly21:53
sean-k-mooneyyou mean when we are generating the file21:53
clarkbhttps://review.opendev.org/c/openstack/devstack/+/948436/2/functions-common yes on line 164921:53
clarkbflip the order21:53
sean-k-mooneyso ya we could do that i guess21:54
clarkbbasically as long as devstack has no need to worry about an env var doing it this way is unaffected. As soon as devstack does have a need to manage things directly you must use the devstack method21:54
clarkbbut that avoid needing to do string parsing into var lists and so on21:54
sean-k-mooneythough i htink the current order make more sense since we want to overried the defualt state21:54
clarkbbut there is no default state according to the above21:54
clarkbnot in devstack anyway. And thats my point if devstack did become away of any of these vars you should manage it with devstack21:55
clarkbbut if it isn't aware then using this array won't hurt anything21:55
sean-k-mooneyclarkb: honestly i have jsut beeing think in my head woudl it be better to move the nova install into novas plugin so that devsnck never has to manage it21:56
clarkbthat doesn't chagne the problem I'm trying to describe21:56
clarkbwhether its devstack or the nova devstack plugin you still have this configuration layer UX that gets processed through sane defaults and emits a localrc configuration. That configuration then feeds into the configuration of services21:57
sean-k-mooneyclarkb: we didnt really want to allow operator to choose how the service run to the idea that devstack or other proejct was not a consideratoin for this approch at leat not by me21:57
clarkbsean-k-mooney: right but lets ignore the specific eventlet vs threads problem for now21:57
clarkbsean-k-mooney: this chagne adds a new feature to devstack that allows you to do a complete end around that configuration layer UX21:58
clarkbthat is the problem21:58
clarkband I think its ok to do as long as the devstack internals win if they care about specific options21:58
sean-k-mooneyya im conflicted.21:59
sean-k-mooneyi see where your coming form21:59
sean-k-mooneyin this specific sate we are modifying nova internal state that we didtn want to expose to anyoen, we have to for testing but thats it. but in the generic case i see why you would want to keep the defaulting in devstacck22:00
clarkbthe vast majory of my interaction with devstack these days is "my job exploded I don't understand why" and the vast majority of times the answer is "because you cowboyed some weird configuration like forcing ipv6 addresses when there is no ipv6"22:00
sean-k-mooneyclarkb: woudl you prefer if we added a varible per servcie and by service i mean per binary so nova would need 1 for the schduler another for the api22:00
clarkbfeatures like this make those problems worse not better22:00
clarkbsean-k-mooney: that was my initial thought (note the env var that goes into the unit file may be the same name for each service then you control its value per service). But I think I'ev managed to convince myself that this new feature of env var array stuff is ok as long as the internal env values override the matrix array values22:02
clarkbsince that will force ouy to use the internal env var values if they exist22:02
sean-k-mooneyi guess that works if your happy with it22:03
sean-k-mooneyi know enough of the internal of devstack ot be   able to bypass and of the protectin sif i need to so i can cobowy in somehting if i need to test someitn in a DNM later :)22:03
clarkbtheoretically devstack exists as a shim between human intention and service configuration22:04
sean-k-mooneyclarkb: my two intila tough were pre-run playbook to drop in a systemd env file or use the fact we can write any file we like with the local.conf :)22:04
clarkbwe're removing that shim here. I think that is ok as long as the shim can take over when it needs to22:04
sean-k-mooneyit does but i tought we wanted to move aware from acros22:05
clarkbI'm not sure I understand that statement22:05
sean-k-mooneywe can totally follwo the patther or the *_MOD_WSGI* vars we are removing if that is preferable too22:05
clarkb(and really most of this is selfish I don't want to have to debug something really crazy because someone discovers this feature to start setting random env vars on random services)22:06
clarkbbasically the more devstack hand holds these things the less likely people are to randomly footgun22:06
sean-k-mooneyya thats fiar. i kind of saw that as a feature not a bug because it ment i did not need ot bother you when we hit a road block22:06
clarkband I understand that in this particular case hand holding all the various services taht need stuff set to toggle eventlet on and off is annoying so maybe we allow that feature in just with some borders22:07
sean-k-mooneyclarkb: i think i have jsut used devstack too long to be able to see it as handloding22:07
sean-k-mooneyto me its not a black box it somehting if have read most of the code of at this point several times over22:08
clarkbya but thats not true for most people using it22:08
sean-k-mooneyright.22:08
sean-k-mooneyso to summerise for gibi 22:08
sean-k-mooneyif we invert the precidence and maybe add a comment to say this is not intened as a generic feature22:09
sean-k-mooneythen that would be more suprotabel and allow devstack to manage the defaults over time22:09
clarkbya I'm not even sure we need the comment warning since there is zero documentation of the feature in the current patchset :) but I don't think the comment hurts either22:09
sean-k-mooneywould it help or hurt ot hide it behiand a function like enable_plugin ?22:10
sean-k-mooneyhttps://github.com/openstack/devstack/blob/master/functions-common#L1737-L174822:10
sean-k-mooneyi.e. set_service_var n-cpu whatever 4222:11
clarkbthe existing env var manipulation is currently hiding behind run_process I think22:11
clarkbbut its not that specific either its just collecting the env list and passing it along22:12
sean-k-mooneyright but that not mutable via local.conf22:12
sean-k-mooneythat was part of the goal have it trivally setable via local.conf since that makes it simple to do locally or in ci22:12
sean-k-mooneyclarkb: i have a related quesiont regarding enable_plugin by the way. but its a slightly differnt topic22:13
sean-k-mooneyclarkb: before askign it i was going to wait and see fi you wanted to discuss this more.22:16
clarkbI think we've reached a reasonable conclusion. Basically keep the power user feature but allow devstack to retain control for any env vars it may choose to control later22:17
sean-k-mooneyack, so my other question is also about defaultign but in this case its defintly a bug22:17
sean-k-mooneyor well unintiutive behavior22:17
sean-k-mooneyso enable_plugin take a name for the directory under $DEST i.e. under /opt/stack22:18
sean-k-mooneya url for the plugin repo22:18
sean-k-mooneyand an optional branch which defaults to master 22:19
sean-k-mooneyhttps://github.com/openstack/devstack/blob/master/functions-common#L174022:19
sean-k-mooneythen assumeing the directoy does not exist and error on clone is not enabled22:19
sean-k-mooneywe evnetully clone it here https://github.com/openstack/devstack/blob/master/functions-common#L634-L63622:19
sean-k-mooney            git_timed clone --no-checkout $git_clone_flags $git_remote $git_dest22:19
sean-k-mooney            cd $git_dest22:19
sean-k-mooney            git_timed fetch $git_clone_flags origin $git_ref22:19
sean-k-mooneyso fun fact22:20
sean-k-mooneyafter the first two command your in the cloned repo checked out to the drfault branch22:20
sean-k-mooneyif that is main an you forgot to pass that then the fetch fails assuming the repo does not have a master braanch22:20
sean-k-mooneyso if you unstack fix your local.conf and stack again22:21
sean-k-mooneyyou install runs to completion but does not actully checkout main22:21
sean-k-mooneyso your plugin is never run22:21
sean-k-mooneyand the service is not enabled22:21
clarkbright the clone will checkout the upstream default branch HEAD22:21
sean-k-mooneybecause the git repo exist with no work tree chekced out22:21
clarkband you're relying on the fetch && checkout FETCH_HEAD to switch to the requested branch22:22
clarkban easy fix here may be to delete the git repo if the fetch or checkout FETCH_HEAD fail22:22
sean-k-mooneyya so two questions 1 can i set the default barnch in enabled plugins to a sential22:22
sean-k-mooneyand then move the defaulting to git_clone?22:22
clarkbno I mean you'd run the first time and fail and it would clean up the git repo so after you fix the config and rerun it will clone and fetch again22:23
sean-k-mooneyand the second question is there a better way to have it default to the default branch if none is passsed22:23
clarkbthe problem is that it isn't recloning, fetching and checking out the second pass I think beacuse the repo already exists22:23
clarkbbut now that you mention having git clone do it I wonder if that is possible22:23
sean-k-mooneywell we only need to do the fetuch if your fetching the non default branch22:24
sean-k-mooneylike if we remove the --no-checkout22:25
clarkblooks like git clone --branch $branch would do it22:25
clarkbbut your second question would be defeated by ^ I think22:25
clarkbyou basically want to rely on the upstream default if there is no default set locally22:25
clarkband if a default is set locally it should handle errors better22:25
sean-k-mooneyright22:25
sean-k-mooneyit didnt take long to figure out what was broken once i went looking22:26
sean-k-mooneymost of our repos obvisouly use master22:26
sean-k-mooneyso this is normally not a problem22:26
clarkbidea: https://github.com/openstack/devstack/blob/master/functions-common#L1740 make the default there empty string. Then test if empty string drop the --no-checkout. If not the empty string replace --no-checkout with --branch $thatvalue22:26
sean-k-mooneyya i was wondering if empty string would be a good sentinal22:27
clarkbI think something along ^ those lines would work. It make break plugins that are in a weird situation where the default branch isn't master but master is present22:27
clarkbI doubt there are many cases or any of that though22:27
sean-k-mooneyhum well not in ci but it might22:28
sean-k-mooneyso it will break one usecase i had but that you didnt want to supprot22:28
sean-k-mooneywell perhaps it was not you i shoudl say devstack22:28
sean-k-mooneyso fun fact you can set git_ref to a branch or /ref/for/wahtever or a tag or a git commit22:29
sean-k-mooneybut only if you have reclone=true or the repo does nto exist22:29
sean-k-mooneycommit shas dont work i belive in general22:29
sean-k-mooneyif we use --branch22:30
sean-k-mooneythat may or may not impact which of those 4 options work22:30
sean-k-mooneyi assume --barnch actully needs to be a branch22:30
sean-k-mooneyclarkb: i can push up 1 or 2 patches to compare the options and see what peopel think22:33
sean-k-mooneyclarkb: the reason i used to care about commits is the two plugins i used to maintian to complie "ovs with dpdk" or libvirt+qemu22:35
sean-k-mooneybut supproted checking out specific commitn and then applying patches form the relevnet mailing list (via patchwork)22:35
sean-k-mooneyso i used to maintain my onw similar version to add that functionatliy 22:36
sean-k-mooneyhttps://opendev.org/x/devstack-plugin-libvirt-qemu/src/branch/master/devstack/libs/libvirt#L10-L6922:36
clarkbya I think --branch may break you arbitrary ref thing22:38
clarkbwhich is maybe why it does no checkout then checkout after22:38
clarkbI think we can preserve that with better error handling and cleanup though22:38
clarkbbasically don't use --branch. Handle empty default to mean use the default (so drop the --no-checkout in that case). If tehre is a value set then do no-checkout, then fetch if the fetch fails delete the git repo. if the fetch succeeds check it out22:39
sean-k-mooneyya. well honestly what i care more about woudl be making sure gerrit refs still work, but that is its own branch https://github.com/openstack/devstack/blob/master/functions-common#L61422:39
sean-k-mooneyso it shoud proably be fine22:40
sean-k-mooneyclarkb: ya that sound like it should work and is unlike to regress anything22:40
sean-k-mooneyclarkb: when i test that and submit a patch should i file a bug for it our just give it a good commit messange and sane topic 22:43
sean-k-mooneyim not sure how much devstack lauchpad bug trackker is actully used22:44
clarkbI'm always a fan of making things easy. If it were me I'd probably not bother with a separate issue since this something that should be able to eb captured in a commit message22:44
sean-k-mooneyack22:44
clarkbif this required updates across projects then its probably worth tracking in launchpad22:44
clarkbbut it shouldn't22:45

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