Skip to content

Commit e6f26f2

Browse files
papapapa
authored andcommitted
added support for comma separated metdata
1 parent 762e6c0 commit e6f26f2

File tree

7 files changed

+40
-5
lines changed

7 files changed

+40
-5
lines changed

plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlave.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ protected Object readResolve() {
202202
final Map<String, String> result = new LinkedHashMap<>();
203203
final SlaveOptions slaveOptions = getSlaveOptions();
204204
putIfNotNullOrEmpty(result, "Network(s)", slaveOptions.getNetworkId());
205+
putIfNotNullOrEmpty(result, "Custom Metadata", slaveOptions.getCustomMetaData());
205206
putIfNotNullOrEmpty(result, "Floating Ip Pool", slaveOptions.getFloatingIpPool());
206207
putIfNotNullOrEmpty(result, "Security Groups", slaveOptions.getSecurityGroups());
207208
putIfNotNullOrEmpty(result, "Start Timeout (ms)", slaveOptions.getStartTimeout());

plugin/src/main/java/jenkins/plugins/openstack/compute/JCloudsSlaveTemplate.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ public boolean canProvision(final Label label) {
269269
) throws Openstack.ActionFailed {
270270
final String serverName = getServerName();
271271
final SlaveOptions opts = getEffectiveSlaveOptions();
272+
final String customMetaData = opts.getCustomMetaData();
272273
final ServerCreateBuilder builder = Builders.server();
273274

274275
builder.addMetadataItem(OPENSTACK_TEMPLATE_NAME_KEY, getName());
@@ -307,6 +308,15 @@ public boolean canProvision(final Label label) {
307308
builder.networks(networks);
308309
}
309310

311+
String metaData = opts.getCustomMetaData();
312+
if (Util.fixEmpty(metaData) != null) {
313+
if (metaData != null) {
314+
List<List<String>> metadat = TokenGroup.from(metaData, ',', '=');
315+
LOGGER.fine("Setting metadata to " + customMetaData);
316+
builder.addMetadataItem(metadat.get(0).get(0), metadat.get(0).get(1));
317+
}
318+
}
319+
310320
String securityGroups = opts.getSecurityGroups();
311321
if (Util.fixEmpty(securityGroups) != null) {
312322
LOGGER.fine("Setting security groups to " + securityGroups);

plugin/src/main/java/jenkins/plugins/openstack/compute/SlaveOptions.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,13 @@
5454
*/
5555
public class SlaveOptions implements Describable<SlaveOptions>, Serializable {
5656
private static final long serialVersionUID = -1L;
57-
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);
57+
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);
5858

5959
// Provisioning attributes
6060
private /*final*/ @CheckForNull BootSource bootSource;
6161
private final @CheckForNull String hardwareId;
6262
private final @CheckForNull String networkId; // csv list of networkIds, in fact
63+
private final @CheckForNull String customMetaData; // csv list of keyvalue, in fact
6364
private final @CheckForNull String userDataId;
6465
private final Integer instanceCap;
6566
private final Integer instancesMin;
@@ -106,6 +107,10 @@ public class SlaveOptions implements Describable<SlaveOptions>, Serializable {
106107
return networkId;
107108
}
108109

110+
public @CheckForNull String getCustomMetaData() {
111+
return customMetaData;
112+
}
113+
109114
public @CheckForNull String getUserDataId() {
110115
return userDataId;
111116
}
@@ -165,6 +170,7 @@ public SlaveOptions(Builder b) {
165170
b.bootSource,
166171
b.hardwareId,
167172
b.networkId,
173+
b.customMetaData,
168174
b.userDataId,
169175
b.instanceCap,
170176
b.instancesMin,
@@ -188,6 +194,7 @@ public SlaveOptions(
188194
@CheckForNull BootSource bootSource,
189195
String hardwareId,
190196
String networkId,
197+
String customMetaData,
191198
String userDataId,
192199
Integer instanceCap,
193200
Integer instancesMin,
@@ -207,6 +214,7 @@ public SlaveOptions(
207214
this.bootSource = bootSource;
208215
this.hardwareId = Util.fixEmpty(hardwareId);
209216
this.networkId = Util.fixEmpty(networkId);
217+
this.customMetaData = Util.fixEmpty(customMetaData);
210218
this.userDataId = Util.fixEmpty(userDataId);
211219
this.instanceCap = instanceCap;
212220
this.instancesMin = instancesMin;
@@ -244,6 +252,7 @@ private Object readResolve() {
244252
.bootSource(_override(this.bootSource, o.bootSource))
245253
.hardwareId(_override(this.hardwareId, o.hardwareId))
246254
.networkId(_override(this.networkId, o.networkId))
255+
.customMetaData(_override(this.customMetaData, o.customMetaData))
247256
.userDataId(_override(this.userDataId, o.userDataId))
248257
.instanceCap(_override(this.instanceCap, o.instanceCap))
249258
.instancesMin(_override(this.instancesMin, o.instancesMin))
@@ -275,6 +284,7 @@ private Object readResolve() {
275284
.bootSource(_erase(this.bootSource, defaults.bootSource))
276285
.hardwareId(_erase(this.hardwareId, defaults.hardwareId))
277286
.networkId(_erase(this.networkId, defaults.networkId))
287+
.customMetaData(_erase(this.customMetaData, defaults.customMetaData))
278288
.userDataId(_erase(this.userDataId, defaults.userDataId))
279289
.instanceCap(_erase(this.instanceCap, defaults.instanceCap))
280290
.instancesMin(_erase(this.instancesMin, defaults.instancesMin))
@@ -307,6 +317,7 @@ public String toString() {
307317
.append("bootSource", bootSource)
308318
.append("hardwareId", hardwareId)
309319
.append("networkId", networkId)
320+
.append("customMetaData", customMetaData)
310321
.append("userDataId", userDataId)
311322
.append("instanceCap", instanceCap)
312323
.append("instancesMin", instancesMin)
@@ -336,6 +347,7 @@ public boolean equals(Object o) {
336347
if (!Objects.equals(bootSource, that.bootSource)) return false;
337348
if (!Objects.equals(hardwareId, that.hardwareId)) return false;
338349
if (!Objects.equals(networkId, that.networkId)) return false;
350+
if (!Objects.equals(customMetaData, that.customMetaData)) return false;
339351
if (!Objects.equals(userDataId, that.userDataId)) return false;
340352
if (!Objects.equals(instanceCap, that.instanceCap)) return false;
341353
if (!Objects.equals(instancesMin, that.instancesMin)) return false;
@@ -358,6 +370,7 @@ public int hashCode() {
358370
int result = bootSource != null ? bootSource.hashCode() : 0;
359371
result = 31 * result + (hardwareId != null ? hardwareId.hashCode() : 0);
360372
result = 31 * result + (networkId != null ? networkId.hashCode() : 0);
373+
result = 31 * result + (customMetaData != null ? customMetaData.hashCode() : 0);
361374
result = 31 * result + (userDataId != null ? userDataId.hashCode() : 0);
362375
result = 31 * result + (instanceCap != null ? instanceCap.hashCode() : 0);
363376
result = 31 * result + (instancesMin != null ? instancesMin.hashCode() : 0);
@@ -384,6 +397,7 @@ public Builder getBuilder() {
384397
.bootSource(bootSource)
385398
.hardwareId(hardwareId)
386399
.networkId(networkId)
400+
.customMetaData(customMetaData)
387401
.userDataId(userDataId)
388402
.instanceCap(instanceCap)
389403
.instancesMin(instancesMin)
@@ -417,6 +431,7 @@ public static final class Builder {
417431
private @CheckForNull BootSource bootSource;
418432
private @CheckForNull String hardwareId;
419433
private @CheckForNull String networkId;
434+
private @CheckForNull String customMetaData;
420435
private @CheckForNull String userDataId;
421436
private @CheckForNull Integer instanceCap;
422437
private @CheckForNull Integer instancesMin;
@@ -456,6 +471,11 @@ public Builder() {}
456471
return this;
457472
}
458473

474+
public @Nonnull Builder customMetaData(String customMetaData) {
475+
this.customMetaData = customMetaData;
476+
return this;
477+
}
478+
459479
public @Nonnull Builder userDataId(String userDataId) {
460480
this.userDataId = userDataId;
461481
return this;

plugin/src/main/resources/jenkins/plugins/openstack/compute/SlaveOptions/config.jelly

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
<f:entry title="User Data" field="userDataId">
2828
<f:select checkMethod="post"/>
2929
</f:entry>
30+
<f:entry title="Custom Metadata" field="customMetaData">
31+
<f:textbox checkMethod="post"/>
32+
</f:entry>
3033
<f:entry title="Max. No. of Instances" field="instanceCap">
3134
<f:number checkMethod="post"/>
3235
</f:entry>

plugin/src/test/java/jenkins/plugins/openstack/PluginTestRule.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import java.util.stream.Collectors;
8989

9090
import static org.hamcrest.MatcherAssert.assertThat;
91+
import static org.mockito.Matchers.any;
9192
import static org.mockito.Mockito.*;
9293

9394

@@ -119,7 +120,7 @@ public static SlaveOptions dummySlaveOptions() {
119120
dummyUserData("dummyUserDataId");
120121
}
121122
return new SlaveOptions(
122-
new BootSource.VolumeSnapshot("id"), "hw", "nw1,mw2", "dummyUserDataId", 1, 2, "pool", "sg", "az", 1, null, 10,
123+
new BootSource.VolumeSnapshot("id"), "hw", "nw1,mw2", "customdat=true", "dummyUserDataId", 1, 2, "pool", "sg", "az", 1, null, 10,
123124
"jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, mkListOfNodeProperties(1, 2), 1, null
124125
);
125126
}

plugin/src/test/java/jenkins/plugins/openstack/compute/JCloudsCloudTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,10 @@ public void presentUIDefaults() throws Exception {
133133
String openstackAuth = j.dummyCredentials();
134134

135135
JCloudsSlaveTemplate template = new JCloudsSlaveTemplate("template", "label", new SlaveOptions(
136-
new BootSource.Image("iid"), "hw", "nw", "ud", 1, 0, "public", "sg", "az", 2, "kp", 3, "jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, null, 4, false
136+
new BootSource.Image("iid"), "hw", "nw", "cm","ud", 1, 0, "public", "sg", "az", 2, "kp", 3, "jvmo", "fsRoot", LauncherFactory.JNLP.JNLP, null, 4, false
137137
));
138138
JCloudsCloud cloud = new JCloudsCloud("openstack", "endPointUrl", false,"zone", new SlaveOptions(
139-
new BootSource.VolumeSnapshot("vsid"), "HW", "NW", "UD", 6, 4, null, "SG", "AZ", 7, "KP", 8, "JVMO", "FSrOOT", new LauncherFactory.SSH("cid"), null, 9, false
139+
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
140140
), Collections.singletonList(template),openstackAuth);
141141
j.jenkins.clouds.add(cloud);
142142

plugin/src/test/java/jenkins/plugins/openstack/compute/SlaveOptionsTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void eraseDefaults() {
9999
public void emptyStrings() {
100100
SlaveOptions nulls = SlaveOptions.empty();
101101
SlaveOptions emptyStrings = new SlaveOptions(
102-
null, "", "", "", null, null, "", "", "", null, "", null, "", "", null, null, null, null
102+
null, "", "", "", "", null, null, "", "", "", null, "", null, "", "", null, null, null, null
103103
);
104104
SlaveOptions emptyBuilt = SlaveOptions.builder()
105105
.hardwareId("")

0 commit comments

Comments
 (0)