package hudson.plugins.vmware; import hudson.Extension; import java.util.List; import hudson.model.Descriptor; import hudson.model.TaskListener; import hudson.plugins.vmware.vix.VixHost; import hudson.plugins.vmware.vix.VixHostConfig; import hudson.plugins.vmware.vix.VixLibraryManager; import hudson.plugins.vmware.vix.VixVirtualComputer; import hudson.plugins.vmware.vix.VixVirtualComputerConfig; import hudson.slaves.ComputerLauncher; import hudson.slaves.SlaveComputer; import hudson.slaves.JNLPLauncher; import org.kohsuke.stapler.DataBoundConstructor; /** * TODO javadoc. * * @author Stephen Connolly * @since 20-May-2008 21:48:04 */ public class VMwareLauncher extends JNLPLauncher { private final VixVirtualComputerConfig virtualMachine; @DataBoundConstructor public VMwareLauncher(VixVirtualComputerConfig virtualMachine) { this.virtualMachine = virtualMachine; } @Override public void launch(SlaveComputer slaveComputer, TaskListener taskListener) { taskListener.getLogger().println("[VMware] Opening virtual machine..."); VixHost host = VixLibraryManager.getHostInstance(virtualMachine.getHost()); VixVirtualComputer vm = host.open(virtualMachine); try { taskListener.getLogger().println("[VMware] Powering up virtual machine..."); vm.powerOn(); taskListener.getLogger().println("[VMware] Launching slave process..."); } finally { host.close(vm); } super.launch(slaveComputer, taskListener); } @Override public void afterDisconnect(SlaveComputer slaveComputer, TaskListener taskListener) { super.afterDisconnect(slaveComputer, taskListener); taskListener.getLogger().println("[VMware] Closing virtual machine..."); VixHost host = VixLibraryManager.getHostInstance(virtualMachine.getHost()); VixVirtualComputer vm = host.open(virtualMachine); try { taskListener.getLogger().println("[VMware] Powering down virtual machine..."); vm.powerOff(); } finally { host.close(vm); } } public VixVirtualComputerConfig getVirtualMachine() { return virtualMachine; } @Extension public static class DescriptorImpl extends Descriptor<ComputerLauncher> { public DescriptorImpl() { super(VMwareLauncher.class); } public String getDisplayName() { return "Launch a VMware virtual machine based slave"; } public List<VixHostConfig> getHosts() { return VMwareActivationWrapper.DESCRIPTOR.getHosts(); } } }