Add condition for logged in state.
This commit is contained in:
parent
bfe4c2bb32
commit
04ccdd7dee
4 changed files with 74 additions and 8 deletions
|
|
@ -1534,6 +1534,24 @@ spec:
|
||||||
lastTransitionTime: "1970-01-01T00:00:00Z"
|
lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
reason: Creation
|
reason: Creation
|
||||||
message: "Creation of CR"
|
message: "Creation of CR"
|
||||||
|
- type: Booted
|
||||||
|
status: "False"
|
||||||
|
observedGeneration: 1
|
||||||
|
lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
|
reason: Creation
|
||||||
|
message: "Creation of CR"
|
||||||
|
- type: VmopAgentConnected
|
||||||
|
status: "False"
|
||||||
|
observedGeneration: 1
|
||||||
|
lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
|
reason: Creation
|
||||||
|
message: "Creation of CR"
|
||||||
|
- type: UserLoggedIn
|
||||||
|
status: "False"
|
||||||
|
observedGeneration: 1
|
||||||
|
lastTransitionTime: "1970-01-01T00:00:00Z"
|
||||||
|
reason: Creation
|
||||||
|
message: "Creation of CR"
|
||||||
- type: ConsoleConnected
|
- type: ConsoleConnected
|
||||||
status: "False"
|
status: "False"
|
||||||
observedGeneration: 1
|
observedGeneration: 1
|
||||||
|
|
|
||||||
|
|
@ -74,6 +74,21 @@ public class Constants {
|
||||||
|
|
||||||
/** The Constant ASSIGNMENT. */
|
/** The Constant ASSIGNMENT. */
|
||||||
public static final String ASSIGNMENT = "assignment";
|
public static final String ASSIGNMENT = "assignment";
|
||||||
|
|
||||||
|
/** The Constant COND_RUNNING. */
|
||||||
|
public static final String COND_RUNNING = "Running";
|
||||||
|
|
||||||
|
/** The Constant COND_BOOTED. */
|
||||||
|
public static final String COND_BOOTED = "Booted";
|
||||||
|
|
||||||
|
/** The Constant COND_VMOP_AGENT. */
|
||||||
|
public static final String COND_VMOP_AGENT = "VmopAgentConnected";
|
||||||
|
|
||||||
|
/** The Constant COND_USER_LOGGED_IN. */
|
||||||
|
public static final String COND_USER_LOGGED_IN = "UserLoggedIn";
|
||||||
|
|
||||||
|
/** The Constant COND_CONSOLE. */
|
||||||
|
public static final String COND_CONSOLE = "ConsoleConnected";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
private boolean guestShutdownStops;
|
private boolean guestShutdownStops;
|
||||||
private boolean shutdownByGuest;
|
private boolean shutdownByGuest;
|
||||||
private VmDefinitionStub vmStub;
|
private VmDefinitionStub vmStub;
|
||||||
|
private String loggedInUser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiates a new status updater.
|
* Instantiates a new status updater.
|
||||||
|
|
@ -143,6 +144,7 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
public void onConfigureQemu(ConfigureQemu event)
|
public void onConfigureQemu(ConfigureQemu event)
|
||||||
throws ApiException {
|
throws ApiException {
|
||||||
guestShutdownStops = event.configuration().guestShutdownStops;
|
guestShutdownStops = event.configuration().guestShutdownStops;
|
||||||
|
loggedInUser = event.configuration().vm.display.loggedInUser;
|
||||||
|
|
||||||
// Remainder applies only if we have a connection to k8s.
|
// Remainder applies only if we have a connection to k8s.
|
||||||
if (vmStub == null) {
|
if (vmStub == null) {
|
||||||
|
|
@ -169,10 +171,12 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
status.addProperty(Status.DISPLAY_PASSWORD_SERIAL, -1);
|
status.addProperty(Status.DISPLAY_PASSWORD_SERIAL, -1);
|
||||||
}
|
}
|
||||||
status.getAsJsonArray("conditions").asList().stream()
|
status.getAsJsonArray("conditions").asList().stream()
|
||||||
.map(cond -> (JsonObject) cond).filter(cond -> "Running"
|
.map(cond -> (JsonObject) cond)
|
||||||
|
.filter(cond -> Status.COND_RUNNING
|
||||||
.equals(cond.get("type").getAsString()))
|
.equals(cond.get("type").getAsString()))
|
||||||
.forEach(cond -> cond.addProperty("observedGeneration",
|
.forEach(cond -> cond.addProperty("observedGeneration",
|
||||||
from.getMetadata().getGeneration()));
|
from.getMetadata().getGeneration()));
|
||||||
|
updateUserLoggedIn(from);
|
||||||
return status;
|
return status;
|
||||||
}, vmDef);
|
}, vmDef);
|
||||||
}
|
}
|
||||||
|
|
@ -194,9 +198,9 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
}
|
}
|
||||||
vmStub.updateStatus(from -> {
|
vmStub.updateStatus(from -> {
|
||||||
boolean running = event.runState().vmRunning();
|
boolean running = event.runState().vmRunning();
|
||||||
updateCondition(vmDef, "Running", running, event.reason(),
|
updateCondition(vmDef, Status.COND_RUNNING, running, event.reason(),
|
||||||
event.message());
|
event.message());
|
||||||
JsonObject status = updateCondition(vmDef, "Booted",
|
JsonObject status = updateCondition(vmDef, Status.COND_BOOTED,
|
||||||
event.runState() == RunState.BOOTED, event.reason(),
|
event.runState() == RunState.BOOTED, event.reason(),
|
||||||
event.message());
|
event.message());
|
||||||
if (event.runState() == RunState.STARTING) {
|
if (event.runState() == RunState.STARTING) {
|
||||||
|
|
@ -212,10 +216,12 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
if (!running) {
|
if (!running) {
|
||||||
// In case console connection was still present
|
// In case console connection was still present
|
||||||
status.addProperty(Status.CONSOLE_CLIENT, "");
|
status.addProperty(Status.CONSOLE_CLIENT, "");
|
||||||
updateCondition(from, "ConsoleConnected", false, "VmStopped",
|
updateCondition(from, Status.COND_CONSOLE, false, "VmStopped",
|
||||||
"The VM is not running");
|
"The VM is not running");
|
||||||
|
|
||||||
// In case we had an irregular shutdown
|
// In case we had an irregular shutdown
|
||||||
|
updateCondition(from, Status.COND_USER_LOGGED_IN, false,
|
||||||
|
"VmStopped", "The VM is not running");
|
||||||
status.remove(Status.OSINFO);
|
status.remove(Status.OSINFO);
|
||||||
updateCondition(vmDef, "VmopAgentConnected", false, "VmStopped",
|
updateCondition(vmDef, "VmopAgentConnected", false, "VmStopped",
|
||||||
"The VM is not running");
|
"The VM is not running");
|
||||||
|
|
@ -245,6 +251,26 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
K8s.createEvent(apiClient, vmDef, evt);
|
K8s.createEvent(apiClient, vmDef, evt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateUserLoggedIn(VmDefinition from) {
|
||||||
|
if (loggedInUser == null) {
|
||||||
|
updateCondition(from, Status.COND_USER_LOGGED_IN, false,
|
||||||
|
"NotRequested", "No user to be logged in");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!from.conditionStatus(Status.COND_VMOP_AGENT).orElse(false)) {
|
||||||
|
updateCondition(from, Status.COND_USER_LOGGED_IN, false,
|
||||||
|
"VmopAgentDisconnected", "Waiting for VMOP agent to connect");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!from.fromStatus(Status.LOGGED_IN_USER).map(loggedInUser::equals)
|
||||||
|
.orElse(false)) {
|
||||||
|
updateCondition(from, Status.COND_USER_LOGGED_IN, false,
|
||||||
|
"Processing", "Waiting for user to be logged in");
|
||||||
|
}
|
||||||
|
updateCondition(from, Status.COND_USER_LOGGED_IN, true,
|
||||||
|
"UserLoggedIn", "User is logged in");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* On ballon change.
|
* On ballon change.
|
||||||
*
|
*
|
||||||
|
|
@ -348,8 +374,10 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vmStub.updateStatus(from -> {
|
vmStub.updateStatus(from -> {
|
||||||
return updateCondition(vmDef, "VmopAgentConnected",
|
var status = updateCondition(vmDef, "VmopAgentConnected",
|
||||||
true, "VmopAgentStarted", "The VM operator agent is running");
|
true, "VmopAgentStarted", "The VM operator agent is running");
|
||||||
|
updateUserLoggedIn(from);
|
||||||
|
return status;
|
||||||
}, vmDef);
|
}, vmDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -365,6 +393,7 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
JsonObject status = from.statusJson();
|
JsonObject status = from.statusJson();
|
||||||
status.addProperty(Status.LOGGED_IN_USER,
|
status.addProperty(Status.LOGGED_IN_USER,
|
||||||
event.triggering().user());
|
event.triggering().user());
|
||||||
|
updateUserLoggedIn(from);
|
||||||
return status;
|
return status;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -380,6 +409,7 @@ public class StatusUpdater extends VmDefUpdater {
|
||||||
vmStub.updateStatus(from -> {
|
vmStub.updateStatus(from -> {
|
||||||
JsonObject status = from.statusJson();
|
JsonObject status = from.statusJson();
|
||||||
status.remove(Status.LOGGED_IN_USER);
|
status.remove(Status.LOGGED_IN_USER);
|
||||||
|
updateUserLoggedIn(from);
|
||||||
return status;
|
return status;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -129,9 +129,12 @@ public class VmDefUpdater extends Component {
|
||||||
var current = status.getAsJsonArray("conditions").asList().stream()
|
var current = status.getAsJsonArray("conditions").asList().stream()
|
||||||
.map(cond -> (JsonObject) cond)
|
.map(cond -> (JsonObject) cond)
|
||||||
.filter(cond -> type.equals(cond.get("type").getAsString()))
|
.filter(cond -> type.equals(cond.get("type").getAsString()))
|
||||||
.findFirst()
|
.findFirst();
|
||||||
.map(cond -> "True".equals(cond.get("status").getAsString()));
|
if (current.isPresent()
|
||||||
if (current.isPresent() && current.get() == state) {
|
&& current.map(c -> c.get("status").getAsString())
|
||||||
|
.map("True"::equals).map(s -> s == state).orElse(false)
|
||||||
|
&& current.map(c -> c.get("reason").getAsString())
|
||||||
|
.map(reason::equals).orElse(false)) {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue