From 19968ab73e70ec7f8e8c6e6e1e74a2896cb99291 Mon Sep 17 00:00:00 2001 From: "Michael N. Lipp" Date: Wed, 12 Mar 2025 15:04:03 +0100 Subject: [PATCH] Move code to agent. --- .../runner/qemu/AgentConnector.java | 33 ++++++++++++++-- .../vmoperator/runner/qemu/Runner.java | 38 +++---------------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/AgentConnector.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/AgentConnector.java index 40db84a..3320a04 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/AgentConnector.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/AgentConnector.java @@ -20,6 +20,7 @@ package org.jdrupes.vmoperator.runner.qemu; import java.io.IOException; import java.nio.file.Path; +import java.util.List; import org.jdrupes.vmoperator.runner.qemu.events.VserportChangeEvent; import org.jgrapes.core.Channel; import org.jgrapes.core.annotation.Handler; @@ -52,12 +53,36 @@ public abstract class AgentConnector extends QemuConnector { * for the {@link ConfigurationUpdate} event. The values are * forwarded from the {@link Runner} instead. * - * @param channelId the channel id - * @param socketPath the socket path + * @param command the command + * @param chardev the chardev */ - /* default */ void configure(String channelId, Path socketPath) { + @SuppressWarnings("PMD.CognitiveComplexity") + protected void configure(List command, String chardev) { + Path socketPath = null; + for (var arg : command) { + if (arg.startsWith("virtserialport,") + && arg.contains("chardev=" + chardev)) { + for (var prop : arg.split(",")) { + if (prop.startsWith("id=")) { + channelId = prop.substring(3); + } + } + } + if (arg.startsWith("socket,") + && arg.contains("id=" + chardev)) { + for (var prop : arg.split(",")) { + if (prop.startsWith("path=")) { + socketPath = Path.of(prop.substring(5)); + } + } + } + } + if (channelId == null || socketPath == null) { + logger.warning(() -> "Definition of chardev " + chardev + + " missing in runner template."); + return; + } super.configure(socketPath); - this.channelId = channelId; logger.fine(() -> getClass().getSimpleName() + " configured with" + " channelId=" + channelId); } diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java index e3aa70a..8aa2b7c 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java @@ -192,7 +192,7 @@ import org.jgrapes.util.events.WatchFile; */ @SuppressWarnings({ "PMD.ExcessiveImports", "PMD.AvoidPrintStackTrace", "PMD.DataflowAnomalyAnalysis", "PMD.TooManyMethods", - "PMD.CouplingBetweenObjects", "PMD.TooManyFields", "PMD.GodClass" }) + "PMD.CouplingBetweenObjects", "PMD.TooManyFields" }) public class Runner extends Component { private static final String QEMU = "qemu"; @@ -362,8 +362,10 @@ public class Runner extends Component { // Forward some values to child components qemuMonitor.configure(initialConfig.monitorSocket, initialConfig.vm.powerdownTimeout); - configureAgentClient(guestAgentClient, "guest-agent-socket"); - configureAgentClient(vmopAgentClient, "vmop-agent-socket"); + guestAgentClient.configure(qemuDefinition.command, + "guest-agent-socket"); + vmopAgentClient.configure(qemuDefinition.command, + "vmop-agent-socket"); } catch (IllegalArgumentException | IOException | TemplateException e) { logger.log(Level.SEVERE, e, () -> "Invalid configuration: " + e.getMessage()); @@ -486,36 +488,6 @@ public class Runner extends Component { } } - @SuppressWarnings("PMD.CognitiveComplexity") - private void configureAgentClient(AgentConnector client, String chardev) { - String id = null; - Path path = null; - for (var arg : qemuDefinition.command) { - if (arg.startsWith("virtserialport,") - && arg.contains("chardev=" + chardev)) { - for (var prop : arg.split(",")) { - if (prop.startsWith("id=")) { - id = prop.substring(3); - } - } - } - if (arg.startsWith("socket,") - && arg.contains("id=" + chardev)) { - for (var prop : arg.split(",")) { - if (prop.startsWith("path=")) { - path = Path.of(prop.substring(5)); - } - } - } - } - if (id == null || path == null) { - logger.warning(() -> "Definition of chardev " + chardev - + " missing in runner template."); - return; - } - client.configure(id, path); - } - /** * Handle the started event. *