From 6581210de2a1644fcf665b93819b5cb08aa9b1b2 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 12 Feb 2019 15:03:04 +0100 Subject: [CompileIPxe*] Separate legacy pxelinux and new ipxe-only approach --- .../openslx/taskmanager/tasks/RemoteReboot.java | 37 +++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java') diff --git a/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java b/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java index d7f17cf..0e09a85 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java +++ b/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java @@ -23,11 +23,18 @@ import com.jcraft.jsch.Session; public class RemoteReboot extends AbstractTask { + + static enum Mode { + SHUTDOWN, + REBOOT, + KEXEC_REBOOT, + } + @Expose private Client[] clients; @Expose - private boolean shutdown; + private Mode mode; @Expose private int minutes; @@ -35,9 +42,6 @@ public class RemoteReboot extends AbstractTask @Expose private String locationId; - @Expose - private String locationName; - @Expose private String sshkey; @@ -48,9 +52,13 @@ public class RemoteReboot extends AbstractTask private Output status = new Output(); - private static final String REBOOT_CMD = "/opt/openslx/scripts/idleaction-scheduled_action --detach reboot"; + private static final String BASE_CMD = "/opt/openslx/scripts/idleaction-scheduled_action --detach"; + + private static final String REBOOT_CMD = BASE_CMD + " reboot"; + + private static final String KEXEC_CMD = BASE_CMD + " kexec-reboot"; - private static final String SHUTDOWN_CMD = "/opt/openslx/scripts/idleaction-scheduled_action --detach poweroff"; + private static final String SHUTDOWN_CMD = BASE_CMD + " poweroff"; @Override protected boolean initTask() @@ -66,16 +74,19 @@ public class RemoteReboot extends AbstractTask if ( port < 1 || port > 65535 ) { status.addError( "Invalid port number" ); } + if (mode == null) { + status.addError( "Invalid/no mode of operation" ); + } if ( status.error != null ) return false; - + status.clients = clients; Date shutdownTime = new Date( System.currentTimeMillis() + minutes * 60 * 1000 ); SimpleDateFormat sdf = new SimpleDateFormat( "HH:mm" ); status.time = sdf.format( shutdownTime ); status.locationId = locationId; - status.locationName = locationName; + status.mode = mode; JSch.setConfig( "StrictHostKeyChecking", "no" ); sshClient = new JSch(); @@ -115,11 +126,15 @@ public class RemoteReboot extends AbstractTask channel = (ChannelExec)session.openChannel( "exec" ); String args = " " + minutes + " " + String.format( "'%s'", client.machineuuid.replace( "'", "'\\''" ) ); - if ( shutdown ) { + if ( mode == Mode.SHUTDOWN ) { ret = execCommand( channel, SHUTDOWN_CMD + args ); status.clientStatus.put( client.machineuuid, minutes == 0 ? ClientStatus.SHUTDOWN : ClientStatus.SHUTDOWN_AT ); } else { - ret = execCommand( channel, REBOOT_CMD + args ); + if ( mode == Mode.REBOOT ) { + ret = execCommand( channel, REBOOT_CMD + args ); + } else { + ret = execCommand( channel, KEXEC_CMD + args ); + } if ( ret == 0 ) { status.clientStatus.put( client.machineuuid, minutes == 0 ? ClientStatus.REBOOTING : ClientStatus.REBOOT_AT ); rebootingClients.add( client ); @@ -255,8 +270,8 @@ public class RemoteReboot extends AbstractTask private Client[] clients; private String time; private String locationId; - private String locationName; private String error; + private Mode mode; private synchronized void addError( String e ) { -- cgit v1.2.3-55-g7522