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)
|
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):
|
class YAMLFormatError(JenkinsJobsException):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import xml.etree.ElementTree as XML
|
|||||||
from jenkins_jobs.errors import InvalidAttributeError
|
from jenkins_jobs.errors import InvalidAttributeError
|
||||||
from jenkins_jobs.errors import JenkinsJobsException
|
from jenkins_jobs.errors import JenkinsJobsException
|
||||||
from jenkins_jobs.errors import MissingAttributeError
|
from jenkins_jobs.errors import MissingAttributeError
|
||||||
|
from jenkins_jobs.errors import AttributeConflictError
|
||||||
import jenkins_jobs.modules.base
|
import jenkins_jobs.modules.base
|
||||||
import jenkins_jobs.modules.helpers as helpers
|
import jenkins_jobs.modules.helpers as helpers
|
||||||
|
|
||||||
@ -946,6 +947,52 @@ def groovy_label(registry, xml_parent, data):
|
|||||||
XML.SubElement(entry, 'url').text = value
|
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):
|
class Properties(jenkins_jobs.modules.base.Base):
|
||||||
sequence = 20
|
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