Move api client to base class.

This commit is contained in:
Michael Lipp 2024-11-14 11:59:14 +01:00
parent f1d973502d
commit 811164f7b9
3 changed files with 23 additions and 22 deletions

View file

@ -44,7 +44,6 @@ import org.jgrapes.core.events.Start;
@SuppressWarnings("PMD.DataflowAnomalyAnalysis") @SuppressWarnings("PMD.DataflowAnomalyAnalysis")
public class ConsoleTracker extends VmDefUpdater { public class ConsoleTracker extends VmDefUpdater {
private final K8sClient apiClient;
private VmDefinitionStub vmStub; private VmDefinitionStub vmStub;
private String mainChannelClientHost; private String mainChannelClientHost;
private long mainChannelClientPort; private long mainChannelClientPort;
@ -109,7 +108,7 @@ public class ConsoleTracker extends VmDefUpdater {
vmStub.updateStatus(from -> { vmStub.updateStatus(from -> {
JsonObject status = from.status(); JsonObject status = from.status();
status.addProperty("consoleClient", event.clientHost()); status.addProperty("consoleClient", event.clientHost());
updateCondition(apiClient, from, status, "ConsoleConnected", updateCondition(from, status, "ConsoleConnected",
true, "Connection from " + event.clientHost(), null); true, "Connection from " + event.clientHost(), null);
return status; return status;
}); });
@ -144,7 +143,7 @@ public class ConsoleTracker extends VmDefUpdater {
vmStub.updateStatus(from -> { vmStub.updateStatus(from -> {
JsonObject status = from.status(); JsonObject status = from.status();
status.addProperty("consoleClient", ""); status.addProperty("consoleClient", "");
updateCondition(apiClient, from, status, "ConsoleConnected", updateCondition(from, status, "ConsoleConnected",
false, event.clientHost() + " has disconnected", null); false, event.clientHost() + " has disconnected", null);
return status; return status;
}); });

View file

@ -33,7 +33,6 @@ import static org.jdrupes.vmoperator.common.Constants.APP_NAME;
import static org.jdrupes.vmoperator.common.Constants.VM_OP_GROUP; import static org.jdrupes.vmoperator.common.Constants.VM_OP_GROUP;
import static org.jdrupes.vmoperator.common.Constants.VM_OP_KIND_VM; import static org.jdrupes.vmoperator.common.Constants.VM_OP_KIND_VM;
import org.jdrupes.vmoperator.common.K8s; import org.jdrupes.vmoperator.common.K8s;
import org.jdrupes.vmoperator.common.K8sClient;
import org.jdrupes.vmoperator.common.VmDefinitionModel; import org.jdrupes.vmoperator.common.VmDefinitionModel;
import org.jdrupes.vmoperator.common.VmDefinitionStub; import org.jdrupes.vmoperator.common.VmDefinitionStub;
import org.jdrupes.vmoperator.runner.qemu.events.BalloonChangeEvent; import org.jdrupes.vmoperator.runner.qemu.events.BalloonChangeEvent;
@ -59,7 +58,6 @@ public class StatusUpdater extends VmDefUpdater {
private static final Set<RunState> RUNNING_STATES private static final Set<RunState> RUNNING_STATES
= Set.of(RunState.RUNNING, RunState.TERMINATING); = Set.of(RunState.RUNNING, RunState.TERMINATING);
private K8sClient apiClient;
private long observedGeneration; private long observedGeneration;
private boolean guestShutdownStops; private boolean guestShutdownStops;
private boolean shutdownByGuest; private boolean shutdownByGuest;
@ -73,15 +71,6 @@ public class StatusUpdater extends VmDefUpdater {
@SuppressWarnings("PMD.ConstructorCallsOverridableMethod") @SuppressWarnings("PMD.ConstructorCallsOverridableMethod")
public StatusUpdater(Channel componentChannel) { public StatusUpdater(Channel componentChannel) {
super(componentChannel); super(componentChannel);
try {
apiClient = new K8sClient();
io.kubernetes.client.openapi.Configuration
.setDefaultApiClient(apiClient);
} catch (IOException e) {
logger.log(Level.SEVERE, e,
() -> "Cannot access events API, terminating.");
fire(new Exit(1));
}
attach(new ConsoleTracker(componentChannel)); attach(new ConsoleTracker(componentChannel));
} }
@ -187,8 +176,8 @@ public class StatusUpdater extends VmDefUpdater {
vmStub.updateStatus(vmDef, from -> { vmStub.updateStatus(vmDef, from -> {
JsonObject status = from.status(); JsonObject status = from.status();
boolean running = RUNNING_STATES.contains(event.runState()); boolean running = RUNNING_STATES.contains(event.runState());
updateCondition(apiClient, vmDef, vmDef.status(), "Running", updateCondition(vmDef, vmDef.status(), "Running", running,
running, event.reason(), event.message()); event.reason(), event.message());
if (event.runState() == RunState.STARTING) { if (event.runState() == RunState.STARTING) {
status.addProperty("ram", GsonPtr.to(from.data()) status.addProperty("ram", GsonPtr.to(from.data())
.getAsString("spec", "vm", "maximumRam").orElse("0")); .getAsString("spec", "vm", "maximumRam").orElse("0"));
@ -201,8 +190,8 @@ public class StatusUpdater extends VmDefUpdater {
// In case console connection was still present // In case console connection was still present
if (!running) { if (!running) {
status.addProperty("consoleClient", ""); status.addProperty("consoleClient", "");
updateCondition(apiClient, from, status, "ConsoleConnected", updateCondition(from, status, "ConsoleConnected", false,
false, "VM has stopped", null); "VM has stopped", null);
} }
return status; return status;
}); });

View file

@ -19,7 +19,6 @@
package org.jdrupes.vmoperator.runner.qemu; package org.jdrupes.vmoperator.runner.qemu;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import io.kubernetes.client.openapi.ApiClient;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -31,7 +30,9 @@ import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.jdrupes.vmoperator.common.K8sClient;
import org.jdrupes.vmoperator.common.VmDefinitionModel; import org.jdrupes.vmoperator.common.VmDefinitionModel;
import org.jdrupes.vmoperator.runner.qemu.events.Exit;
import org.jgrapes.core.Channel; import org.jgrapes.core.Channel;
import org.jgrapes.core.Component; import org.jgrapes.core.Component;
import org.jgrapes.core.annotation.Handler; import org.jgrapes.core.annotation.Handler;
@ -46,15 +47,28 @@ public class VmDefUpdater extends Component {
protected String namespace; protected String namespace;
protected String vmName; protected String vmName;
protected K8sClient apiClient;
/** /**
* Instantiates a new status updater. * Instantiates a new status updater.
* *
* @param componentChannel the component channel * @param componentChannel the component channel
* @throws IOException
*/ */
@SuppressWarnings("PMD.ConstructorCallsOverridableMethod") @SuppressWarnings("PMD.ConstructorCallsOverridableMethod")
public VmDefUpdater(Channel componentChannel) { public VmDefUpdater(Channel componentChannel) {
super(componentChannel); super(componentChannel);
if (apiClient == null) {
try {
apiClient = new K8sClient();
io.kubernetes.client.openapi.Configuration
.setDefaultApiClient(apiClient);
} catch (IOException e) {
logger.log(Level.SEVERE, e,
() -> "Cannot access events API, terminating.");
fire(new Exit(1));
}
}
} }
/** /**
@ -104,9 +118,8 @@ public class VmDefUpdater extends Component {
* @param state the new state * @param state the new state
* @param reason the reason for the change * @param reason the reason for the change
*/ */
protected void updateCondition(ApiClient apiClient, VmDefinitionModel from, protected void updateCondition(VmDefinitionModel from, JsonObject status,
JsonObject status, String type, boolean state, String reason, String type, boolean state, String reason, String message) {
String message) {
// Optimize, as we can get this several times // Optimize, as we can get this several times
var current = status.getAsJsonArray("conditions").asList().stream() var current = status.getAsJsonArray("conditions").asList().stream()
.map(cond -> (JsonObject) cond) .map(cond -> (JsonObject) cond)