From 3308fd53bb7295ffdec1d51f0df19f6f594e6ab7 Mon Sep 17 00:00:00 2001 From: tanhengyeow Date: Sun, 27 May 2018 03:56:25 +0800 Subject: [PATCH] Improve support for nodelabelparameter Adds support for all fields for nodelabelparameter. Uploaded new tests, including one that covers existing behavior to prevent regression. Story: #2001287 Task: #5835 Change-Id: I9dc4574427626fd56ba41149f0f6ab131a22e966 --- jenkins_jobs/modules/parameters.py | 44 ++++++++++++++++---- tests/parameters/fixtures/node-label001.xml | 17 ++++++++ tests/parameters/fixtures/node-label001.yaml | 6 +++ tests/parameters/fixtures/node-label002.xml | 17 ++++++++ tests/parameters/fixtures/node-label002.yaml | 6 +++ tests/parameters/fixtures/node-label003.xml | 17 ++++++++ tests/parameters/fixtures/node-label003.yaml | 6 +++ tests/parameters/fixtures/node-label004.xml | 17 ++++++++ tests/parameters/fixtures/node-label004.yaml | 4 ++ 9 files changed, 127 insertions(+), 7 deletions(-) create mode 100644 tests/parameters/fixtures/node-label001.xml create mode 100644 tests/parameters/fixtures/node-label001.yaml create mode 100644 tests/parameters/fixtures/node-label002.xml create mode 100644 tests/parameters/fixtures/node-label002.yaml create mode 100644 tests/parameters/fixtures/node-label003.xml create mode 100644 tests/parameters/fixtures/node-label003.yaml create mode 100644 tests/parameters/fixtures/node-label004.xml create mode 100644 tests/parameters/fixtures/node-label004.yaml diff --git a/jenkins_jobs/modules/parameters.py b/jenkins_jobs/modules/parameters.py index 957320614..49d8cd0b7 100644 --- a/jenkins_jobs/modules/parameters.py +++ b/jenkins_jobs/modules/parameters.py @@ -191,19 +191,49 @@ def label_param(registry, xml_parent, data): :arg str name: the name of the parameter :arg str default: the default value of the parameter (optional) :arg str description: a description of the parameter (optional) + :arg str matching-label: to run all nodes matching label + 'success', 'unstable' or 'allCases' (optional) + :arg str node-eligibility: all nodes, ignore temporary nodes or + ignore temporary offline nodes (optional, default all nodes) - Example:: + Example: + + .. literalinclude:: /../../tests/parameters/fixtures/node-label001.yaml + :language: yaml - parameters: - - label: - name: node - default: precise - description: "The node on which to run the job" """ - base_param(registry, xml_parent, data, True, + + pdef = base_param(registry, xml_parent, data, True, 'org.jvnet.jenkins.plugins.nodelabelparameter.' 'LabelParameterDefinition') + XML.SubElement(pdef, 'allNodesMatchingLabel').text = "true" + + valid_types = ['allCases', 'success', 'unstable'] + mapping = [ + ('matching-label', 'triggerIfResult', 'allCases', valid_types) + ] + convert_mapping_to_xml(pdef, data, mapping, fail_required=True) + + eligibility_label = data.get('node-eligibility', 'all').lower() + eligibility_label_dict = { + 'all': 'org.jvnet.jenkins.plugins.' + 'nodelabelparameter.node.' + 'AllNodeEligibility', + 'ignore-offline': 'org.jvnet.jenkins.plugins.' + 'nodelabelparameter.node.' + 'IgnoreOfflineNodeEligibility', + 'ignore-temp-offline': 'org.jvnet.jenkins.plugins.' + 'nodelabelparameter.node.' + 'IgnoreTempOfflineNodeEligibility', + } + if eligibility_label not in eligibility_label_dict: + raise InvalidAttributeError(eligibility_label, eligibility_label, + eligibility_label_dict.keys()) + + XML.SubElement(pdef, 'nodeEligibility').set( + "class", eligibility_label_dict[eligibility_label]) + def node_param(registry, xml_parent, data): """yaml: node diff --git a/tests/parameters/fixtures/node-label001.xml b/tests/parameters/fixtures/node-label001.xml new file mode 100644 index 000000000..9157ccc6b --- /dev/null +++ b/tests/parameters/fixtures/node-label001.xml @@ -0,0 +1,17 @@ + + + + + + + EXAMPLE LABEL 1 + EXAMPLE LABEL DESCRIPTION 1 + + true + success + + + + + + diff --git a/tests/parameters/fixtures/node-label001.yaml b/tests/parameters/fixtures/node-label001.yaml new file mode 100644 index 000000000..3028d1a4d --- /dev/null +++ b/tests/parameters/fixtures/node-label001.yaml @@ -0,0 +1,6 @@ +parameters: + - label: + name: EXAMPLE LABEL 1 + description: "EXAMPLE LABEL DESCRIPTION 1" + matching-label: "success" + node-eligibility: "all" \ No newline at end of file diff --git a/tests/parameters/fixtures/node-label002.xml b/tests/parameters/fixtures/node-label002.xml new file mode 100644 index 000000000..4416dc8e1 --- /dev/null +++ b/tests/parameters/fixtures/node-label002.xml @@ -0,0 +1,17 @@ + + + + + + + EXAMPLE LABEL 2 + EXAMPLE LABEL DESCRIPTION 2 + + true + unstable + + + + + + diff --git a/tests/parameters/fixtures/node-label002.yaml b/tests/parameters/fixtures/node-label002.yaml new file mode 100644 index 000000000..4b61f8f31 --- /dev/null +++ b/tests/parameters/fixtures/node-label002.yaml @@ -0,0 +1,6 @@ +parameters: + - label: + name: EXAMPLE LABEL 2 + description: "EXAMPLE LABEL DESCRIPTION 2" + matching-label: "unstable" + node-eligibility: "ignore-offline" \ No newline at end of file diff --git a/tests/parameters/fixtures/node-label003.xml b/tests/parameters/fixtures/node-label003.xml new file mode 100644 index 000000000..9a2b493df --- /dev/null +++ b/tests/parameters/fixtures/node-label003.xml @@ -0,0 +1,17 @@ + + + + + + + EXAMPLE LABEL 3 + EXAMPLE LABEL DESCRIPTION 3 + + true + allCases + + + + + + diff --git a/tests/parameters/fixtures/node-label003.yaml b/tests/parameters/fixtures/node-label003.yaml new file mode 100644 index 000000000..93d6f4c92 --- /dev/null +++ b/tests/parameters/fixtures/node-label003.yaml @@ -0,0 +1,6 @@ +parameters: + - label: + name: EXAMPLE LABEL 3 + description: "EXAMPLE LABEL DESCRIPTION 3" + matching-label: "allCases" + node-eligibility: "ignore-temp-offline" \ No newline at end of file diff --git a/tests/parameters/fixtures/node-label004.xml b/tests/parameters/fixtures/node-label004.xml new file mode 100644 index 000000000..788e27422 --- /dev/null +++ b/tests/parameters/fixtures/node-label004.xml @@ -0,0 +1,17 @@ + + + + + + + EXAMPLE LABEL 4 + EXAMPLE LABEL DESCRIPTION 4 + + true + allCases + + + + + + diff --git a/tests/parameters/fixtures/node-label004.yaml b/tests/parameters/fixtures/node-label004.yaml new file mode 100644 index 000000000..f6610b664 --- /dev/null +++ b/tests/parameters/fixtures/node-label004.yaml @@ -0,0 +1,4 @@ +parameters: + - label: + name: EXAMPLE LABEL 4 + description: "EXAMPLE LABEL DESCRIPTION 4"