Skip to content

Commit

Permalink
add parameter jvmOptions to launch slave agent with custom JavaVM
Browse files Browse the repository at this point in the history
options
  • Loading branch information
mavlyutov committed Jan 28, 2014
1 parent e613bc1 commit 0b48ea5
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ else if (bootstrapResult == SAMEUSER)
logger.println("Copying slave.jar");
scp.put(Hudson.getInstance().getJnlpJars("slave.jar").readFully(), "slave.jar", "/tmp");

String launchString = "cd /tmp && java -jar slave.jar";
String launchString = "cd /tmp && java " + slave.getJvmOptions() + " -jar slave.jar";
logger.println("Launching slave agent: " + launchString);
final Session sess = conn.openSession();
sess.execCommand(launchString);
Expand Down Expand Up @@ -185,6 +185,7 @@ private Connection connectToSsh(NodeMetadata nodeMetadata, PrintStream logger) t
logger.println("Connecting to " + host + " on port " + 22 + ". ");
Connection conn = new Connection(host, 22);
conn.connect(new ServerHostKeyVerifier() {
@Override
public boolean verifyServerHostKey(String hostname, int port, String serverHostKeyAlgorithm, byte[] serverHostKey) throws Exception {
return true;
}
Expand Down
20 changes: 16 additions & 4 deletions src/main/java/jenkins/plugins/jclouds/compute/JCloudsSlave.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,14 @@ public class JCloudsSlave extends AbstractCloudSlave {
private final String password;
private final String privateKey;
private final boolean authSudo;
private final String jvmOptions;

@DataBoundConstructor
@SuppressWarnings("rawtypes")
public JCloudsSlave(String cloudName, String name, String nodeDescription, String remoteFS, String numExecutors, Mode mode, String labelString,
ComputerLauncher launcher, RetentionStrategy retentionStrategy, List<? extends NodeProperty<?>> nodeProperties, boolean stopOnTerminate,
int overrideRetentionTime, String user, String password, String privateKey, boolean authSudo) throws Descriptor.FormException, IOException {
int overrideRetentionTime, String user, String password, String privateKey, boolean authSudo, String jvmOptions) throws Descriptor.FormException,
IOException {
super(name, nodeDescription, remoteFS, numExecutors, mode, labelString, launcher, retentionStrategy, nodeProperties);
this.stopOnTerminate = stopOnTerminate;
this.cloudName = cloudName;
Expand All @@ -50,6 +52,7 @@ public JCloudsSlave(String cloudName, String name, String nodeDescription, Strin
this.password = password;
this.privateKey = privateKey;
this.authSudo = authSudo;
this.jvmOptions = jvmOptions;
}

/**
Expand All @@ -75,14 +78,14 @@ public JCloudsSlave(String cloudName, String name, String nodeDescription, Strin
* @throws Descriptor.FormException
*/
public JCloudsSlave(final String cloudName, final String fsRoot, NodeMetadata metadata, final String labelString, final String description,
final String numExecutors, final boolean stopOnTerminate, final int overrideRetentionTime) throws IOException, Descriptor.FormException {
final String numExecutors, final boolean stopOnTerminate, final int overrideRetentionTime, String jvmOptions) throws IOException,
Descriptor.FormException {
this(cloudName, metadata.getName(), description, fsRoot, numExecutors, Mode.EXCLUSIVE, labelString, new JCloudsLauncher(),
new JCloudsRetentionStrategy(), Collections.<NodeProperty<?>> emptyList(), stopOnTerminate, overrideRetentionTime, metadata.getCredentials()
.getUser(), metadata.getCredentials().getPassword(), metadata.getCredentials().getPrivateKey(), metadata.getCredentials()
.shouldAuthenticateSudo());
.shouldAuthenticateSudo(), jvmOptions);
this.nodeMetaData = metadata;
this.nodeId = nodeMetaData.getId();

}

/**
Expand All @@ -98,6 +101,15 @@ public NodeMetadata getNodeMetaData() {
return nodeMetaData;
}

/**
* Get Jclouds Custom JVM Options associated with this Slave.
*
* @return jvmOptions
*/
public String getJvmOptions() {
return jvmOptions;
}

/**
* Get Jclouds LoginCredentials associated with this Slave.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public class JCloudsSlaveTemplate implements Describable<JCloudsSlaveTemplate>,
public final String vmUser;
public final String vmPassword;
public final boolean preInstalledJava;
private final String jvmOptions;
public final boolean preExistingJenkinsUser;
private final String jenkinsUser;
private final String fsRoot;
Expand All @@ -92,8 +93,8 @@ public class JCloudsSlaveTemplate implements Describable<JCloudsSlaveTemplate>,
public JCloudsSlaveTemplate(final String name, final String imageId, final String hardwareId, final double cores, final int ram, final String osFamily,
final String osVersion, final String labelString, final String description, final String initScript, final String userData,
final String numExecutors, final boolean stopOnTerminate, final String vmPassword, final String vmUser, final boolean preInstalledJava,
final String jenkinsUser, final boolean preExistingJenkinsUser, final String fsRoot, final boolean allowSudo, final int overrideRetentionTime,
final int spoolDelayMs, final boolean assignFloatingIp, final String keyPairName, final boolean assignPublicIp) {
final String jvmOptions, final String jenkinsUser, final boolean preExistingJenkinsUser, final String fsRoot, final boolean allowSudo,
final int overrideRetentionTime, final int spoolDelayMs, final boolean assignFloatingIp, final String keyPairName, final boolean assignPublicIp) {

this.name = Util.fixEmptyAndTrim(name);
this.imageId = Util.fixEmptyAndTrim(imageId);
Expand All @@ -110,6 +111,7 @@ public JCloudsSlaveTemplate(final String name, final String imageId, final Strin
this.vmPassword = Util.fixEmptyAndTrim(vmPassword);
this.vmUser = Util.fixEmptyAndTrim(vmUser);
this.preInstalledJava = preInstalledJava;
this.jvmOptions = Util.fixEmptyAndTrim(jvmOptions);
this.stopOnTerminate = stopOnTerminate;
this.jenkinsUser = Util.fixEmptyAndTrim(jenkinsUser);
this.preExistingJenkinsUser = preExistingJenkinsUser;
Expand Down Expand Up @@ -143,6 +145,14 @@ public String getJenkinsUser() {
}
}

public String getJvmOptions() {
if (jvmOptions == null || jenkinsUser.equals("")) {
return "";
} else {
return jvmOptions;
}
}

public int getNumExecutors() {
return Util.tryParseNumber(numExecutors, 1).intValue();
}
Expand All @@ -164,15 +174,14 @@ public JCloudsSlave provisionSlave(TaskListener listener) throws IOException {

try {
return new JCloudsSlave(getCloud().getDisplayName(), getFsRoot(), nodeMetadata, labelString, description, numExecutors, stopOnTerminate,
overrideRetentionTime);
overrideRetentionTime, getJvmOptions());
} catch (Descriptor.FormException e) {
throw new AssertionError("Invalid configuration " + e.getMessage());
}
}

public NodeMetadata get() {
LOGGER.info("Provisioning new jclouds node");

ImmutableMap<String, String> userMetadata = ImmutableMap.of("Name", name);
TemplateBuilder templateBuilder = getCloud().getCompute().templateBuilder();
if (!Strings.isNullOrEmpty(imageId)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,16 @@
<f:checkbox />
</f:entry>

<f:entry title="Custom JVM Options" field="jvmOptions">
<f:textbox />
</f:entry>

<f:entry title="${%Stop on Terminate}" field="stopOnTerminate">
<f:checkbox />
</f:entry>

<f:section title="Open Stack Options">
<f:entry title="Assign Floating IP" field="assignFloatingIp">
<f:entry title="Assign Floating IP" field="assignFloatingIp">
<f:checkbox />
</f:entry>
<f:entry title="Key Pair Name" field="keyPairName">
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div>
Custom JavaVM options a slave needs to be run
</div>

0 comments on commit 0b48ea5

Please sign in to comment.