Sorry forgot use reply-all. Also slight mistake below, ignore my comment about needing to look at deep_format. I'm pretty certain that it's just the dimensions piece you want to look at. Assuming I understand your intent correctly.
---------- Forwarded message ---------- From: Darragh Bailey <[email protected]> Date: 14 March 2016 at 14:51 Subject: Re: [OpenStack-Infra] JJB nested template variables To: Thanh Ha <[email protected]> Hi Thanh, On 9 Mar 2016 22:47, "Thanh Ha" <[email protected]> wrote: > Hi Everyone, > > I'm trying to nest template variables and discovered that JJB behaves in a > way I didn't expect when a template variable is nested. For example: > > - project: > name: test > jobs: > - '{name}-verify-{value}-{jdk}' > > value: > - a: > jdk: > - openjdk8 > > - job-template: > name: '{name}-verify-{value}-{jdk}' > > When jdk is nested under the value a. It generates a job with the name: > > *'test-verify-a-['\''openjdk8'\'']'* > Possibly we should through an exception and complain that it's not acceptable to have jdk resolve to a list instead of a string? Or is it you want to expand this to be an additional dimension upon which to generate more templates based on jdk being a list of possible values? I noticed that if I switch the above to: value: - a: jdk: openjdk8 That job is expanded as: test-verify-a-openjdk8 > You'll notice the name also includes extra single quotes at the beginning > and end of the job name itself in addition to a python list being passed > out in place of the jdk variable. However if you don't nest JDK and put it > by itself you get the expected name of *test-verify-a-openjdk8 *without > the extra single quotes and python list. > It's a little unclear what you formats you were referring to. > I'd be interested in attempting to fix this since I have a use case for > having job templates with nested variables. Would this be something that's > easy to fix or would this have some larger affect on the code base? > > Can someone point me to the code files related to the template name > scheme. I can have a poke at it and see if it's something that can be fixed. > I believe this involves looking at how the deep_format function works. The various values for jdk get stored in the dimensions variable in the jenkins_jobs/parser.py code see https://git.openstack.org/cgit/openstack-infra/jenkins-job-builder/tree/jenkins_jobs/parser.py?id=ccf682934d14f4a2395c7b9f6d463b9667b938c8#n253 Assuming what you want to do is allow the template to be expanded to different job names based on nested variables being a list, I think the exact piece of code to be changed is the loop that constructs the dimensions that is then iterated over to generate the jobs. See https://git.openstack.org/cgit/openstack-infra/jenkins-job-builder/tree/jenkins_jobs/parser.py?id=ccf682934d14f4a2395c7b9f6d463b9667b938c8#n258 This snippet is where you need to focus: for (k, v) in project.items(): tmpk = '{{{0}}}'.format(k) if tmpk not in template_name: continue if type(v) == list: dimensions.append(zip([k] * len(v), v)) > Thanks, > Thanh > -- Darragh Bailey "Nothing is foolproof to a sufficiently talented fool"
_______________________________________________ OpenStack-Infra mailing list [email protected] http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra
