summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java')
-rw-r--r--src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java37
1 files changed, 26 insertions, 11 deletions
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;
@@ -36,9 +43,6 @@ public class RemoteReboot extends AbstractTask
private String locationId;
@Expose
- private String locationName;
-
- @Expose
private String sshkey;
@Expose
@@ -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 )
{