Allow template-name in the global defaults
Inject the template-name into parameters earlier, so it's possible to use it in the global defaults. Mark the template name as 'verbatim' so the interpolation is skipped by the formatter. Change-Id: I5d98e32ed2bedaa6b536e61fbdec589f358f861f
This commit is contained in:
parent
cc200dade0
commit
28cab53d5d
@ -401,6 +401,9 @@ You can define variables that will be realized in a `Job Template`.
|
||||
|
||||
Would create jobs ``build-i386`` and ``build-amd64``.
|
||||
|
||||
You can also reference a variable ``{template-name}`` in any value and it will
|
||||
be subtitued by the name of the current job template being processed.
|
||||
|
||||
.. _variable_references:
|
||||
|
||||
Variable References
|
||||
|
@ -32,7 +32,9 @@ def deep_format(obj, paramdict, allow_empty=False):
|
||||
# limitations on the values in paramdict - the post-format result must
|
||||
# still be valid YAML (so substituting-in a string containing quotes, for
|
||||
# example, is problematic).
|
||||
if hasattr(obj, 'format'):
|
||||
if getattr(obj, 'verbatim', False) is True:
|
||||
ret = obj
|
||||
elif hasattr(obj, 'format'):
|
||||
try:
|
||||
ret = CustomFormatter(allow_empty).format(obj, **paramdict)
|
||||
except KeyError as exc:
|
||||
@ -124,3 +126,10 @@ class CustomFormatter(Formatter):
|
||||
)
|
||||
return ''
|
||||
raise
|
||||
|
||||
|
||||
class VerbatimString(str):
|
||||
"""
|
||||
String which is not expanded by `deep_format`.
|
||||
"""
|
||||
verbatim = True
|
||||
|
@ -24,7 +24,7 @@ import os
|
||||
|
||||
from jenkins_jobs.constants import MAGIC_MANAGE_STRING
|
||||
from jenkins_jobs.errors import JenkinsJobsException
|
||||
from jenkins_jobs.formatter import deep_format
|
||||
from jenkins_jobs.formatter import deep_format, VerbatimString
|
||||
import jenkins_jobs.local_yaml as local_yaml
|
||||
from jenkins_jobs import utils
|
||||
|
||||
@ -337,6 +337,7 @@ class YamlParser(object):
|
||||
|
||||
for values in itertools.product(*dimensions):
|
||||
params = copy.deepcopy(project)
|
||||
params['template-name'] = VerbatimString(template_name)
|
||||
params = self._applyDefaults(params, template)
|
||||
|
||||
try:
|
||||
@ -378,7 +379,6 @@ class YamlParser(object):
|
||||
if key not in params:
|
||||
params[key] = template[key]
|
||||
|
||||
params['template-name'] = template_name
|
||||
try:
|
||||
expanded = deep_format(
|
||||
template, params,
|
||||
|
@ -1,7 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<actions/>
|
||||
<description><!-- Managed by Jenkins Job Builder --></description>
|
||||
<description>JJB template: complete001_{version}
|
||||
<!-- Managed by Jenkins Job Builder --></description>
|
||||
<keepDependencies>false</keepDependencies>
|
||||
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
||||
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
||||
|
@ -1,3 +1,8 @@
|
||||
- defaults:
|
||||
name: global
|
||||
description: |
|
||||
JJB template: {template-name}
|
||||
|
||||
- wrapper:
|
||||
name: timeout-wrapper
|
||||
wrappers:
|
||||
@ -85,10 +90,11 @@
|
||||
version:
|
||||
- 1.2
|
||||
jobs:
|
||||
- 'complete001_{version}'
|
||||
- 'complete001'
|
||||
|
||||
- job-template:
|
||||
name: 'complete001_{version}'
|
||||
id: 'complete001'
|
||||
scm:
|
||||
- gerrit-scm:
|
||||
project_pattern: openstack-infra/jenkins-job-builder
|
||||
|
Loading…
Reference in New Issue
Block a user