diff --git a/deploy/crds/vms-crd.yaml b/deploy/crds/vms-crd.yaml index 101784f..c2a7a66 100644 --- a/deploy/crds/vms-crd.yaml +++ b/deploy/crds/vms-crd.yaml @@ -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. diff --git a/dev-example/test-vm.tpl.yaml b/dev-example/test-vm.tpl.yaml index b6aa65a..76adfba 100644 --- a/dev-example/test-vm.tpl.yaml +++ b/dev-example/test-vm.tpl.yaml @@ -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: diff --git a/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/Constants.java b/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/Constants.java index 83b261e..67939de 100644 --- a/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/Constants.java +++ b/org.jdrupes.vmoperator.common/src/org/jdrupes/vmoperator/common/Constants.java @@ -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"; diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/AbstractMonitor.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/AbstractMonitor.java index 2deb9ab..56440f9 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/AbstractMonitor.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/AbstractMonitor.java @@ -220,6 +220,9 @@ public abstract class AbstractMonitor(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) { diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/PodReconciler.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/PodReconciler.java index 4ee96d8..c3ab422 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/PodReconciler.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/PodReconciler.java @@ -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); diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java index 700e068..77fa281 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java @@ -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; } diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java index 1a559b3..e4ee0a0 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/VmMonitor.java @@ -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(); 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); } diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/StatusUpdater.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/StatusUpdater.java index b1580ae..bd4ddb4 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/StatusUpdater.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/StatusUpdater.java @@ -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; }); diff --git a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/VmMgmt-view.ftl.html b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/VmMgmt-view.ftl.html index 533b2f4..5a28cb8 100644 --- a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/VmMgmt-view.ftl.html +++ b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/VmMgmt-view.ftl.html @@ -127,15 +127,16 @@ >{{ cic.error }} - - - - - - - - -
{{ entry.status?.osinfo?.["pretty-name"] || "" }}
{{ localize("usedFrom") }}{{ entry.usedFrom }}
+

+ + + +

diff --git a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n.properties b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n.properties index fb0362f..ef55662 100644 --- a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n.properties +++ b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n.properties @@ -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 diff --git a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n_de.properties b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n_de.properties index a9b9600..b8ece92 100644 --- a/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n_de.properties +++ b/org.jdrupes.vmoperator.vmmgmt/resources/org/jdrupes/vmoperator/vmmgmt/l10n_de.properties @@ -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 diff --git a/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/browser/VmMgmt-style.scss b/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/browser/VmMgmt-style.scss index 248df56..eb1b556 100644 --- a/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/browser/VmMgmt-style.scss +++ b/org.jdrupes.vmoperator.vmmgmt/src/org/jdrupes/vmoperator/vmmgmt/browser/VmMgmt-style.scss @@ -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; + } } }