package org.jenkinsci.plugins.nomad; import hudson.Extension; import hudson.model.Descriptor; import hudson.model.Node; import hudson.model.TaskListener; import hudson.slaves.*; import java.io.IOException; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public class NomadSlave extends AbstractCloudSlave implements EphemeralNode { private static final Logger LOGGER = Logger.getLogger(NomadSlave.class.getName()); private final NomadCloud cloud; public NomadSlave( NomadCloud cloud, String name, String nodeDescription, NomadSlaveTemplate template, String labelString, Mode mode, hudson.slaves.RetentionStrategy retentionStrategy, List<? extends NodeProperty<?>> nodeProperties ) throws Descriptor.FormException, IOException { super( name, nodeDescription, template.getRemoteFs(), template.getNumExecutors(), mode, labelString, new JNLPLauncher(), retentionStrategy, nodeProperties ); this.cloud = cloud; } @Override public Node asNode() { return this; } @Extension public static class DescriptorImpl extends SlaveDescriptor { @Override public String getDisplayName() { return "Nomad Slave"; } /** * We only create these kinds of nodes programatically. */ @Override public boolean isInstantiable() { return false; } } @Override public AbstractCloudComputer createComputer() { return new NomadComputer(this); } @Override protected void _terminate(TaskListener listener) { LOGGER.log(Level.INFO, "Asking Nomad to deregister slave '" + getNodeName() + "'"); cloud.Nomad().stopSlave(getNodeName()); } public NomadCloud getCloud() { return cloud; } }