From 3789c2039733784ce899b8f05a0ad0a310ecb9c7 Mon Sep 17 00:00:00 2001 From: papa Date: Wed, 11 Sep 2024 00:49:11 +0900 Subject: [PATCH 1/9] updated dependencies --- plugin/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index 80e0298e..4c7b68df 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -23,7 +23,7 @@ org.jenkins-ci.plugins plugin - 4.55 + 4.87 @@ -49,7 +49,7 @@ 3.11 3.9.1 - 2064.vcd3b_b_8f3f2b_a_ + 2265.v3da_49c8134d6 From 762e6c0040d952e6ccefa097060a33ebc0093fba Mon Sep 17 00:00:00 2001 From: kikmon <79066816+kikmon@users.noreply.github.com> Date: Fri, 20 Sep 2024 11:50:00 +0900 Subject: [PATCH 2/9] Update pom.xml --- plugin/pom.xml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index 4c7b68df..b90b1996 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -5,8 +5,8 @@ io.jenkins.tools.bom - bom-2.414.x - 2516.v113cb_3d00317 + bom-2.462.x + 3234.v5ca_5154341ef import pom @@ -28,14 +28,14 @@ openstack-cloud - 2.66-SNAPSHOT + 2.68-SNAPSHOT hpi OpenStack Cloud Plugin Allows Jenkins to build on OpenStack nodes https://github.com/jenkinsci/openstack-cloud-plugin - 2.414.1 + 2.462.2 11 1C false @@ -104,12 +104,10 @@ org.jenkins-ci.plugins config-file-provider - 3.7.1 org.jenkins-ci.plugins cloud-stats - 320.v96b_65297a_4b_b_ org.jenkins-ci.plugins From e6f26f2df051c58b404ea510ef10b7b3c4d60ebc Mon Sep 17 00:00:00 2001 From: papa Date: Tue, 24 Sep 2024 14:19:55 +0900 Subject: [PATCH 3/9] added support for comma separated metdata --- .../openstack/compute/JCloudsSlave.java | 1 + .../compute/JCloudsSlaveTemplate.java | 10 +++++++++ .../openstack/compute/SlaveOptions.java | 22 ++++++++++++++++++- .../compute/SlaveOptions/config.jelly | 3 +++ .../plugins/openstack/PluginTestRule.java | 3 ++- .../openstack/compute/JCloudsCloudTest.java | 4 ++-- .../openstack/compute/SlaveOptionsTest.java | 2 +- 7 files changed, 40 insertions(+), 5 deletions(-) diff --git a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlave.java b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlave.java index 7feb13f2..072b94b5 100644 --- a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlave.java +++ b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlave.java @@ -202,6 +202,7 @@ protected Object readResolve() { final Map result = new LinkedHashMap<>(); final SlaveOptions slaveOptions = getSlaveOptions(); putIfNotNullOrEmpty(result, "Network(s)", slaveOptions.getNetworkId()); + putIfNotNullOrEmpty(result, "Custom Metadata", slaveOptions.getCustomMetaData()); putIfNotNullOrEmpty(result, "Floating Ip Pool", slaveOptions.getFloatingIpPool()); putIfNotNullOrEmpty(result, "Security Groups", slaveOptions.getSecurityGroups()); putIfNotNullOrEmpty(result, "Start Timeout (ms)", slaveOptions.getStartTimeout()); diff --git a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java index d61f09d5..d8cce11f 100644 --- a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java +++ b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java @@ -269,6 +269,7 @@ public boolean canProvision(final Label label) { ) throws Openstack.ActionFailed { final String serverName = getServerName(); final SlaveOptions opts = getEffectiveSlaveOptions(); + final String customMetaData = opts.getCustomMetaData(); final ServerCreateBuilder builder = Builders.server(); builder.addMetadataItem(OPENSTACK_TEMPLATE_NAME_KEY, getName()); @@ -307,6 +308,15 @@ public boolean canProvision(final Label label) { builder.networks(networks); } + String metaData = opts.getCustomMetaData(); + if (Util.fixEmpty(metaData) != null) { + if (metaData != null) { + List> metadat = TokenGroup.from(metaData, ',', '='); + LOGGER.fine("Setting metadata to " + customMetaData); + builder.addMetadataItem(metadat.get(0).get(0), metadat.get(0).get(1)); + } + } + String securityGroups = opts.getSecurityGroups(); if (Util.fixEmpty(securityGroups) != null) { LOGGER.fine("Setting security groups to " + securityGroups); diff --git a/plugin/src/main/java/jenkins/plugins/openstack/compute/SlaveOptions.java b/plugin/src/main/java/jenkins/plugins/openstack/compute/SlaveOptions.java index 0416f854..b97b3e87 100644 --- a/plugin/src/main/java/jenkins/plugins/openstack/compute/SlaveOptions.java +++ b/plugin/src/main/java/jenkins/plugins/openstack/compute/SlaveOptions.java @@ -54,12 +54,13 @@ */ public class SlaveOptions implements Describable, Serializable { private static final long serialVersionUID = -1L; - private static final SlaveOptions EMPTY = new SlaveOptions(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); + private static final SlaveOptions EMPTY = new SlaveOptions(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); // Provisioning attributes private /*final*/ @CheckForNull BootSource bootSource; private final @CheckForNull String hardwareId; private final @CheckForNull String networkId; // csv list of networkIds, in fact + private final @CheckForNull String customMetaData; // csv list of keyvalue, in fact private final @CheckForNull String userDataId; private final Integer instanceCap; private final Integer instancesMin; @@ -106,6 +107,10 @@ public class SlaveOptions implements Describable, Serializable { return networkId; } + public @CheckForNull String getCustomMetaData() { + return customMetaData; + } + public @CheckForNull String getUserDataId() { return userDataId; } @@ -165,6 +170,7 @@ public SlaveOptions(Builder b) { b.bootSource, b.hardwareId, b.networkId, + b.customMetaData, b.userDataId, b.instanceCap, b.instancesMin, @@ -188,6 +194,7 @@ public SlaveOptions( @CheckForNull BootSource bootSource, String hardwareId, String networkId, + String customMetaData, String userDataId, Integer instanceCap, Integer instancesMin, @@ -207,6 +214,7 @@ public SlaveOptions( this.bootSource = bootSource; this.hardwareId = Util.fixEmpty(hardwareId); this.networkId = Util.fixEmpty(networkId); + this.customMetaData = Util.fixEmpty(customMetaData); this.userDataId = Util.fixEmpty(userDataId); this.instanceCap = instanceCap; this.instancesMin = instancesMin; @@ -244,6 +252,7 @@ private Object readResolve() { .bootSource(_override(this.bootSource, o.bootSource)) .hardwareId(_override(this.hardwareId, o.hardwareId)) .networkId(_override(this.networkId, o.networkId)) + .customMetaData(_override(this.customMetaData, o.customMetaData)) .userDataId(_override(this.userDataId, o.userDataId)) .instanceCap(_override(this.instanceCap, o.instanceCap)) .instancesMin(_override(this.instancesMin, o.instancesMin)) @@ -275,6 +284,7 @@ private Object readResolve() { .bootSource(_erase(this.bootSource, defaults.bootSource)) .hardwareId(_erase(this.hardwareId, defaults.hardwareId)) .networkId(_erase(this.networkId, defaults.networkId)) + .customMetaData(_erase(this.customMetaData, defaults.customMetaData)) .userDataId(_erase(this.userDataId, defaults.userDataId)) .instanceCap(_erase(this.instanceCap, defaults.instanceCap)) .instancesMin(_erase(this.instancesMin, defaults.instancesMin)) @@ -307,6 +317,7 @@ public String toString() { .append("bootSource", bootSource) .append("hardwareId", hardwareId) .append("networkId", networkId) + .append("customMetaData", customMetaData) .append("userDataId", userDataId) .append("instanceCap", instanceCap) .append("instancesMin", instancesMin) @@ -336,6 +347,7 @@ public boolean equals(Object o) { if (!Objects.equals(bootSource, that.bootSource)) return false; if (!Objects.equals(hardwareId, that.hardwareId)) return false; if (!Objects.equals(networkId, that.networkId)) return false; + if (!Objects.equals(customMetaData, that.customMetaData)) return false; if (!Objects.equals(userDataId, that.userDataId)) return false; if (!Objects.equals(instanceCap, that.instanceCap)) return false; if (!Objects.equals(instancesMin, that.instancesMin)) return false; @@ -358,6 +370,7 @@ public int hashCode() { int result = bootSource != null ? bootSource.hashCode() : 0; result = 31 * result + (hardwareId != null ? hardwareId.hashCode() : 0); result = 31 * result + (networkId != null ? networkId.hashCode() : 0); + result = 31 * result + (customMetaData != null ? customMetaData.hashCode() : 0); result = 31 * result + (userDataId != null ? userDataId.hashCode() : 0); result = 31 * result + (instanceCap != null ? instanceCap.hashCode() : 0); result = 31 * result + (instancesMin != null ? instancesMin.hashCode() : 0); @@ -384,6 +397,7 @@ public Builder getBuilder() { .bootSource(bootSource) .hardwareId(hardwareId) .networkId(networkId) + .customMetaData(customMetaData) .userDataId(userDataId) .instanceCap(instanceCap) .instancesMin(instancesMin) @@ -417,6 +431,7 @@ public static final class Builder { private @CheckForNull BootSource bootSource; private @CheckForNull String hardwareId; private @CheckForNull String networkId; + private @CheckForNull String customMetaData; private @CheckForNull String userDataId; private @CheckForNull Integer instanceCap; private @CheckForNull Integer instancesMin; @@ -456,6 +471,11 @@ public Builder() {} return this; } + public @Nonnull Builder customMetaData(String customMetaData) { + this.customMetaData = customMetaData; + return this; + } + public @Nonnull Builder userDataId(String userDataId) { this.userDataId = userDataId; return this; diff --git a/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/config.jelly b/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/config.jelly index 3ea4f467..7d35f922 100644 --- a/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/config.jelly +++ b/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/config.jelly @@ -27,6 +27,9 @@ + + + diff --git a/plugin/src/test/java/jenkins/plugins/openstack/PluginTestRule.java b/plugin/src/test/java/jenkins/plugins/openstack/PluginTestRule.java index 5bd8ec80..96fb2d01 100644 --- a/plugin/src/test/java/jenkins/plugins/openstack/PluginTestRule.java +++ b/plugin/src/test/java/jenkins/plugins/openstack/PluginTestRule.java @@ -88,6 +88,7 @@ import java.util.stream.Collectors; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; @@ -119,7 +120,7 @@ public static SlaveOptions dummySlaveOptions() { dummyUserData("dummyUserDataId"); } return new SlaveOptions( - new BootSource.VolumeSnapshot("id"), "hw", "nw1,mw2", "dummyUserDataId", 1, 2, "pool", "sg", "az", 1, null, 10, + new BootSource.VolumeSnapshot("id"), "hw", "nw1,mw2", "customdat=true", "dummyUserDataId", 1, 2, "pool", "sg", "az", 1, null, 10, "jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, mkListOfNodeProperties(1, 2), 1, null ); } diff --git a/plugin/src/test/java/jenkins/plugins/openstack/compute/JCloudsCloudTest.java b/plugin/src/test/java/jenkins/plugins/openstack/compute/JCloudsCloudTest.java index 0bf8a6c4..4be49d70 100644 --- a/plugin/src/test/java/jenkins/plugins/openstack/compute/JCloudsCloudTest.java +++ b/plugin/src/test/java/jenkins/plugins/openstack/compute/JCloudsCloudTest.java @@ -133,10 +133,10 @@ public void presentUIDefaults() throws Exception { String openstackAuth = j.dummyCredentials(); JCloudsSlaveTemplate template = new JCloudsSlaveTemplate("template", "label", new SlaveOptions( - new BootSource.Image("iid"), "hw", "nw", "ud", 1, 0, "public", "sg", "az", 2, "kp", 3, "jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, null, 4, false + new BootSource.Image("iid"), "hw", "nw", "cm","ud", 1, 0, "public", "sg", "az", 2, "kp", 3, "jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, null, 4, false )); JCloudsCloud cloud = new JCloudsCloud("openstack", "endPointUrl", false,"zone", new SlaveOptions( - new BootSource.VolumeSnapshot("vsid"), "HW", "NW", "UD", 6, 4, null, "SG", "AZ", 7, "KP", 8, "JVMO", "FSrOOT", new LauncherFactory.SSH("cid"), null, 9, false + new BootSource.VolumeSnapshot("vsid"), "HW", "NW", "CM", "UD", 6, 4, null, "SG", "AZ", 7, "KP", 8, "JVMO", "FSrOOT", new LauncherFactory.SSH("cid"), null, 9, false ), Collections.singletonList(template),openstackAuth); j.jenkins.clouds.add(cloud); diff --git a/plugin/src/test/java/jenkins/plugins/openstack/compute/SlaveOptionsTest.java b/plugin/src/test/java/jenkins/plugins/openstack/compute/SlaveOptionsTest.java index 877bdc4f..18108d37 100644 --- a/plugin/src/test/java/jenkins/plugins/openstack/compute/SlaveOptionsTest.java +++ b/plugin/src/test/java/jenkins/plugins/openstack/compute/SlaveOptionsTest.java @@ -99,7 +99,7 @@ public void eraseDefaults() { public void emptyStrings() { SlaveOptions nulls = SlaveOptions.empty(); SlaveOptions emptyStrings = new SlaveOptions( - null, "", "", "", null, null, "", "", "", null, "", null, "", "", null, null, null, null + null, "", "", "", "", null, null, "", "", "", null, "", null, "", "", null, null, null, null ); SlaveOptions emptyBuilt = SlaveOptions.builder() .hardwareId("") From b95ef8897a9ff6defb24be8a223ce956c8ed11c5 Mon Sep 17 00:00:00 2001 From: papa Date: Wed, 25 Sep 2024 11:29:16 +0900 Subject: [PATCH 4/9] updated jenkinsfile to test with supported Java versions (17 and 21) --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c62d8de3..5f08f553 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,7 +5,7 @@ buildPlugin( useContainerAgent: true, failFast: false, configurations: [ - [platform: 'linux', jdk: 11], [platform: 'linux', jdk: 17], - [platform: 'windows', jdk: 11], + [platform: 'linux', jdk: 21], + [platform: 'windows', jdk: 17], ]) From 25908d1001c71797294e66ac53dde88cfbc773ff Mon Sep 17 00:00:00 2001 From: papa Date: Wed, 25 Sep 2024 12:49:33 +0900 Subject: [PATCH 5/9] updated pom.xml to use java 17 --- plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index b90b1996..aeade997 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -36,7 +36,7 @@ 2.462.2 - 11 + 17 1C false false From 63640fc9602e52e6f45ba74cb90b97d8a83fb97a Mon Sep 17 00:00:00 2001 From: papa Date: Thu, 26 Sep 2024 12:41:03 +0900 Subject: [PATCH 6/9] removed deprecated property from pom --- plugin/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index aeade997..66fd02d1 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -36,7 +36,6 @@ 2.462.2 - 17 1C false false From 34dea904f225625bc8ec2effbd5255b133044aa9 Mon Sep 17 00:00:00 2001 From: papa Date: Thu, 26 Sep 2024 12:41:42 +0900 Subject: [PATCH 7/9] added support for multiple metadata --- .../openstack/compute/JCloudsSlaveTemplate.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java index d8cce11f..5bcefbea 100644 --- a/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java +++ b/plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java @@ -312,8 +312,18 @@ public boolean canProvision(final Label label) { if (Util.fixEmpty(metaData) != null) { if (metaData != null) { List> metadat = TokenGroup.from(metaData, ',', '='); - LOGGER.fine("Setting metadata to " + customMetaData); - builder.addMetadataItem(metadat.get(0).get(0), metadat.get(0).get(1)); + for (List keyvalue: metadat) { + if (keyvalue.size() == 2) { + LOGGER.fine("Setting metadata to " + customMetaData); + builder.addMetadataItem(keyvalue.get(0), keyvalue.get(1)); + } + else { + LOGGER.warning("Invalid MetaData"); + if (keyvalue.size() == 1) { + LOGGER.warning("Invalid empty value for MetaData " + keyvalue.get(0)); + } + } + } } } From 5ecaddfcae29c0a7d3630d879d8108683d34d899 Mon Sep 17 00:00:00 2001 From: papa Date: Thu, 26 Sep 2024 14:51:34 +0900 Subject: [PATCH 8/9] added help description for new paramter --- .../openstack/compute/SlaveOptions/help-customMetaData.html | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/help-customMetaData.html diff --git a/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/help-customMetaData.html b/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/help-customMetaData.html new file mode 100644 index 00000000..27baeaca --- /dev/null +++ b/plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/help-customMetaData.html @@ -0,0 +1,4 @@ +
+ Additional metadata passed when spawning a VM.
+ Field is a list of comma-separated Key=Value +
From 1f76cb8c81c03a0e0bf07a0558901094f34701b2 Mon Sep 17 00:00:00 2001 From: papa Date: Fri, 27 Sep 2024 11:54:24 +0900 Subject: [PATCH 9/9] reverted version to 2.66-SNAPSHOT --- plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/pom.xml b/plugin/pom.xml index 66fd02d1..6cbb3be7 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -28,7 +28,7 @@ openstack-cloud - 2.68-SNAPSHOT + 2.66-SNAPSHOT hpi OpenStack Cloud Plugin Allows Jenkins to build on OpenStack nodes