Merge branch 'feature/vm-info'
Some checks failed
Java CI with Gradle / build (push) Has been cancelled

This commit is contained in:
Michael Lipp 2025-03-14 18:39:34 +01:00
commit a3d6db3178
12 changed files with 42 additions and 15 deletions

View file

@ -1470,6 +1470,10 @@ spec:
type: object
default: {}
properties:
runnerVersion:
description: >-
The version string of the runner.
type: string
cpus:
description: >-
Number of CPUs currently in use.

View file

@ -2,7 +2,7 @@ apiVersion: "vmoperator.jdrupes.org/v1"
kind: VirtualMachine
metadata:
namespace: vmop-dev
name: test-vm<%= ${number} %>
name: test-vm<%= $(printf "%02d" ${number}) %>
annotations:
argocd.argoproj.io/sync-wave: "20"
@ -13,6 +13,9 @@ spec:
# source: docker-registry.lan.mnl.de/vmoperator/org.jdrupes.vmoperator.runner.qemu-arch:latest
pullPolicy: Always
runnerTemplate:
update: true
permissions:
- role: admin
may:

View file

@ -50,6 +50,9 @@ public class Constants {
* Status related constants.
*/
public static class Status {
/** The Constant RUNNER_VERSION. */
public static final String RUNNER_VERSION = "runnerVersion";
/** The Constant CPUS. */
public static final String CPUS = "cpus";

View file

@ -220,6 +220,9 @@ public abstract class AbstractMonitor<O extends KubernetesObject,
new K8sObserver<>(objectClass, objectListClass, client,
K8s.preferred(context, version), namespace, options)
.handler((c, r) -> {
logger.fine(() -> "Resource " + context.getKind()
+ "/" + r.object.getMetadata().getName() + " "
+ r.type);
handleChange(c, r);
}).onTerminated((o, t) -> {
if (observerCounter.decrementAndGet() == 0) {

View file

@ -91,6 +91,7 @@ import org.yaml.snakeyaml.constructor.SafeConstructor;
}
// Create pod. First combine template and data and parse result
logger.fine(() -> "Create/update pod " + podStub.name());
var fmTemplate = fmConfig.getTemplate("runnerPod.ftl.yaml");
StringWriter out = new StringWriter();
fmTemplate.process(model, out);

View file

@ -215,8 +215,6 @@ public class Reconciler extends Component {
throws ApiException, TemplateException, IOException {
// Ownership relationships takes care of deletions
if (event.type() == K8sObserver.ResponseType.DELETED) {
logger.fine(
() -> "VM \"" + event.vmDefinition().name() + "\" deleted");
return;
}

View file

@ -205,13 +205,13 @@ public class VmMonitor extends
= K8sV1PodStub.list(client, namespace(), podSearch);
for (var podStub : podList) {
var nodeName = podStub.model().get().getSpec().getNodeName();
logger.fine(() -> "Adding node name " + nodeName
logger.finer(() -> "Adding node name " + nodeName
+ " to VM info for " + vmDef.name());
@SuppressWarnings("PMD.AvoidInstantiatingObjectsInLoops")
var addrs = new ArrayList<String>();
podStub.model().get().getStatus().getPodIPs().stream()
.map(ip -> ip.getIp()).forEach(addrs::add);
logger.fine(() -> "Adding node addresses " + addrs
logger.finer(() -> "Adding node addresses " + addrs
+ " to VM info for " + vmDef.name());
extra.nodeInfo(nodeName, addrs);
}

View file

@ -31,6 +31,7 @@ import io.kubernetes.client.openapi.JSON;
import io.kubernetes.client.openapi.models.EventsV1Event;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.logging.Level;
import static org.jdrupes.vmoperator.common.Constants.APP_NAME;
import org.jdrupes.vmoperator.common.Constants.Crd;
@ -124,6 +125,9 @@ public class StatusUpdater extends VmDefUpdater {
observedGeneration = vmDef.getMetadata().getGeneration();
vmStub.updateStatus(from -> {
JsonObject status = from.statusJson();
status.addProperty(Status.RUNNER_VERSION, Optional.ofNullable(
Runner.class.getPackage().getImplementationVersion())
.orElse("(unknown)"));
status.remove(Status.LOGGED_IN_USER);
return status;
});

View file

@ -127,15 +127,16 @@
><span>{{ cic.error }}</span></form></td>
</tr>
</table>
<table class="table--basic table--basic--autoStriped">
<tr>
<td colspan="2">{{ entry.status?.osinfo?.["pretty-name"] || "" }}</td>
</tr>
<tr>
<td>{{ localize("usedFrom") }}</td>
<td>{{ entry.usedFrom }}</td>
</tr>
</table>
<p>
<template v-if="entry.status?.runnerVersion">
{{ localize("runnerVersion") }}:
{{ entry.status.runnerVersion }}<br></template>
<template v-if="entry.status?.osinfo">
{{ localize("guestOs") }}:
{{ entry.status?.osinfo?.["pretty-name"] || "" }}<br></template>
<template v-if="entry.usedFrom">{{ localize("usedFrom") }}:
{{ entry.usedFrom }}<br></template>
</p>
</td>
</tr>
</template>

View file

@ -5,12 +5,14 @@ VMsSummary = VMs (running/total)
assignedTo = Assigned to
currentCpus = Current CPUs
currentRam = Current RAM
guestOs = Guest OS
maximumCpus = Maximum CPUs
maximumRam = Maximum RAM
notInUse = Currently closed
nodeName = Node
requestedCpus = Requested CPUs
requestedRam = Requested RAM
runnerVersion = Runner version
running = Running
since = Since
usedBy = Used by

View file

@ -9,12 +9,14 @@ Last\ day = Letzter Tag
assignedTo = Zugewiesen an
currentCpus = Aktuelle CPUs
currentRam = Akuelles RAM
guestOs = Gast BS
maximumCpus = Maximale CPUs
maximumRam = Maximales RAM
nodeName = Knoten
notInUse = Derzeit geschlossen
requestedCpus = Angeforderte CPUs
requestedRam = Angefordertes RAM
runnerVersion = Runner-Version
running = Gestartet
since = Seit
usedBy = Benutzt durch

View file

@ -82,7 +82,7 @@
padding-left: 0;
table {
display: inline;
display: inline-block;
td:nth-child(2) {
min-width: 7em;
@ -97,6 +97,12 @@
color: var(--danger);
}
}
p {
display: inline-block;
margin: 0.25rem 0.5rem 0.25rem 0.5rem;
vertical-align: top;
}
}
}