Merge "properties: cover lockable-resources plugin"
This commit is contained in:
commit
7f275c3236
@ -65,6 +65,24 @@ class MissingAttributeError(ModuleError):
|
||||
super(MissingAttributeError, self).__init__(message)
|
||||
|
||||
|
||||
class AttributeConflictError(ModuleError):
|
||||
|
||||
def __init__(
|
||||
self, attribute_name, attributes_in_conflict, module_name=None
|
||||
):
|
||||
module = module_name or self.get_module_name()
|
||||
message = (
|
||||
"Attribute '{0}' can not be used together with {1} in {2}".format(
|
||||
attribute_name,
|
||||
', '.join(
|
||||
"'{0}'".format(value) for value in attributes_in_conflict
|
||||
), module
|
||||
)
|
||||
)
|
||||
|
||||
super(AttributeConflictError, self).__init__(message)
|
||||
|
||||
|
||||
class YAMLFormatError(JenkinsJobsException):
|
||||
pass
|
||||
|
||||
|
@ -38,6 +38,7 @@ import xml.etree.ElementTree as XML
|
||||
from jenkins_jobs.errors import InvalidAttributeError
|
||||
from jenkins_jobs.errors import JenkinsJobsException
|
||||
from jenkins_jobs.errors import MissingAttributeError
|
||||
from jenkins_jobs.errors import AttributeConflictError
|
||||
import jenkins_jobs.modules.base
|
||||
import jenkins_jobs.modules.helpers as helpers
|
||||
|
||||
@ -946,6 +947,52 @@ def groovy_label(registry, xml_parent, data):
|
||||
XML.SubElement(entry, 'url').text = value
|
||||
|
||||
|
||||
def lockable_resources(registry, xml_parent, data):
|
||||
"""yaml: lockable-resources
|
||||
Requires the Jenkins :jenkins-wiki:`Lockable Resources Plugin
|
||||
<Lockable+Resources+Plugin>`.
|
||||
|
||||
:arg str resources: List of required resources, space separated.
|
||||
(required, mutual exclusive with label)
|
||||
:arg str label: If you have created a pool of resources, i.e. a label,
|
||||
you can take it into use here. The build will select the resource(s)
|
||||
from the pool that includes all resources sharing the given label.
|
||||
(required, mutual exclusive with resources)
|
||||
:arg str var-name: Name for the Jenkins variable to store the reserved
|
||||
resources in. Leave empty to disable. (default '')
|
||||
:arg int number: Number of resources to request, empty value or 0 means
|
||||
all. This is useful, if you have a pool of similar resources,
|
||||
from which you want one or more to be reserved. (default 0)
|
||||
|
||||
Example:
|
||||
|
||||
.. literalinclude::
|
||||
/../../tests/properties/fixtures/lockable_resources_minimal.yaml
|
||||
:language: yaml
|
||||
|
||||
.. literalinclude::
|
||||
/../../tests/properties/fixtures/lockable_resources_label.yaml
|
||||
:language: yaml
|
||||
|
||||
.. literalinclude::
|
||||
/../../tests/properties/fixtures/lockable_resources_full.yaml
|
||||
:language: yaml
|
||||
"""
|
||||
lockable_resources = XML.SubElement(
|
||||
xml_parent,
|
||||
'org.jenkins.plugins.lockableresources.RequiredResourcesProperty')
|
||||
if data.get('resources') and data.get('label'):
|
||||
raise AttributeConflictError('resources', ('label',))
|
||||
mapping = [
|
||||
('resources', 'resourceNames', ''),
|
||||
('var-name', 'resourceNamesVar', ''),
|
||||
('number', 'resourceNumber', 0),
|
||||
('label', 'labelName', ''),
|
||||
]
|
||||
helpers.convert_mapping_to_xml(
|
||||
lockable_resources, data, mapping, fail_required=True)
|
||||
|
||||
|
||||
class Properties(jenkins_jobs.modules.base.Base):
|
||||
sequence = 20
|
||||
|
||||
|
11
tests/properties/fixtures/lockable_resources_full.xml
Normal file
11
tests/properties/fixtures/lockable_resources_full.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<properties>
|
||||
<org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
<resourceNames>the-resource</resourceNames>
|
||||
<resourceNamesVar>RESOURCE_NAME</resourceNamesVar>
|
||||
<resourceNumber>10</resourceNumber>
|
||||
<labelName/>
|
||||
</org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
</properties>
|
||||
</project>
|
6
tests/properties/fixtures/lockable_resources_full.yaml
Normal file
6
tests/properties/fixtures/lockable_resources_full.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
properties:
|
||||
- lockable-resources:
|
||||
resources: "the-resource"
|
||||
var-name: "RESOURCE_NAME"
|
||||
number: 10
|
11
tests/properties/fixtures/lockable_resources_label.xml
Normal file
11
tests/properties/fixtures/lockable_resources_label.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<properties>
|
||||
<org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
<resourceNames/>
|
||||
<resourceNamesVar/>
|
||||
<resourceNumber>0</resourceNumber>
|
||||
<labelName>pool-1</labelName>
|
||||
</org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
</properties>
|
||||
</project>
|
4
tests/properties/fixtures/lockable_resources_label.yaml
Normal file
4
tests/properties/fixtures/lockable_resources_label.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
properties:
|
||||
- lockable-resources:
|
||||
label: "pool-1"
|
11
tests/properties/fixtures/lockable_resources_minimal.xml
Normal file
11
tests/properties/fixtures/lockable_resources_minimal.xml
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<project>
|
||||
<properties>
|
||||
<org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
<resourceNames>the-resource</resourceNames>
|
||||
<resourceNamesVar/>
|
||||
<resourceNumber>0</resourceNumber>
|
||||
<labelName/>
|
||||
</org.jenkins.plugins.lockableresources.RequiredResourcesProperty>
|
||||
</properties>
|
||||
</project>
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
properties:
|
||||
- lockable-resources:
|
||||
resources: "the-resource"
|
Loading…
Reference in New Issue
Block a user