From f0dedea25b6d1db68f35081bf587b2847b6f9d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=E1=BB=97=20Tr=E1=BB=8Dng=20H=E1=BA=A3i?= <41283691+hainenber@users.noreply.github.com> Date: Sun, 15 Dec 2024 11:23:19 +0700 Subject: [PATCH] fix: deleted agent not purged in Multipass (#8) * fix: terminate Multipass VM after agent got deleted * chore: check null directly for better readability --- .../hainenber/jenkins/multipass/MultipassAgent.java | 2 +- .../jenkins/multipass/MultipassAgentTemplate.java | 5 ++--- .../hainenber/jenkins/multipass/MultipassCloud.java | 12 ++++++------ .../jenkins/multipass/MultipassLauncher.java | 6 +++--- .../jenkins/multipass/sdk/MultipassClient.java | 2 +- .../jenkins/multipass/sdk/MultipassInstance.java | 2 +- 6 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/hainenber/jenkins/multipass/MultipassAgent.java b/src/main/java/io/hainenber/jenkins/multipass/MultipassAgent.java index 87d2863..d7d3fdb 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/MultipassAgent.java +++ b/src/main/java/io/hainenber/jenkins/multipass/MultipassAgent.java @@ -86,7 +86,7 @@ protected void _terminate(TaskListener listener) { try { LOGGER.info("[multipass-cloud]: Terminating instance named '{}'", instanceName); - MultipassClient multipassClient = cloud.getMultipassClient(); + MultipassClient multipassClient = new MultipassClient(); multipassClient.terminateInstance(instanceName); LOGGER.info("[multipass-cloud]: Terminated instance named '{}'", instanceName); Jenkins.get().removeNode(this); diff --git a/src/main/java/io/hainenber/jenkins/multipass/MultipassAgentTemplate.java b/src/main/java/io/hainenber/jenkins/multipass/MultipassAgentTemplate.java index b3a27d5..1d75a2a 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/MultipassAgentTemplate.java +++ b/src/main/java/io/hainenber/jenkins/multipass/MultipassAgentTemplate.java @@ -23,7 +23,6 @@ import java.io.Serializable; import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.Set; import jenkins.model.Jenkins; import org.kohsuke.stapler.AncestorInPath; @@ -58,7 +57,7 @@ public MultipassAgentTemplate( String label, String name) { Jenkins jenkins = Jenkins.getInstanceOrNull(); - if (Objects.nonNull(jenkins)) { + if (jenkins != null) { jenkins.checkPermission(Jenkins.ADMINISTER); } @@ -165,7 +164,7 @@ public void setSshCredentialsId(String sshCredentialsId) { * @return a @{link String} object. */ public String getDistroAlias() { - return Objects.isNull(distroAlias) ? DEFAULT_AGENT_DISTRIBUTION_ALIAS : distroAlias; + return distroAlias == null ? DEFAULT_AGENT_DISTRIBUTION_ALIAS : distroAlias; } /** diff --git a/src/main/java/io/hainenber/jenkins/multipass/MultipassCloud.java b/src/main/java/io/hainenber/jenkins/multipass/MultipassCloud.java index ca052f5..8310114 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/MultipassCloud.java +++ b/src/main/java/io/hainenber/jenkins/multipass/MultipassCloud.java @@ -63,22 +63,22 @@ public MultipassCloud(String name, List templates) { ? name : String.format( "multipass_cloud_%s", jenkinsController().clouds.size())); - this.templates = Objects.isNull(templates) ? Collections.emptyList() : templates; + this.templates = templates == null ? Collections.emptyList() : templates; LOGGER.info("[multipass-cloud] Initializing Cloud {}", this); } public List getTemplatesByLabel(Label label) { - return Objects.nonNull(this.templates) + return this.templates != null ? this.templates.stream() - .filter(t -> Objects.nonNull(t) && label.matches(t.getLabelSet())) + .filter(t -> t != null && label.matches(t.getLabelSet())) .toList() : Collections.emptyList(); } public List getTemplatesByName(String templateName) { - return Objects.nonNull(this.templates) + return this.templates != null ? this.templates.stream() - .filter(t -> Objects.nonNull(t) && t.getName().equals(templateName)) + .filter(t -> t != null && t.getName().equals(templateName)) .toList() : Collections.emptyList(); } @@ -131,7 +131,7 @@ public synchronized Collection provision(CloudState } for (MultipassAgentTemplate t : matchingTemplates) { - String labelName = Objects.isNull(label) ? t.getLabels() : label.getDisplayName(); + String labelName = label == null ? t.getLabels() : label.getDisplayName(); long currentlyProvisioningInstanceCount = getCurrentlyProvisionedAgentCount(); long numInstancesToLaunch = Math.max(excessWorkload - currentlyProvisioningInstanceCount, 0); LOGGER.info( diff --git a/src/main/java/io/hainenber/jenkins/multipass/MultipassLauncher.java b/src/main/java/io/hainenber/jenkins/multipass/MultipassLauncher.java index 15aa7fe..1044eac 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/MultipassLauncher.java +++ b/src/main/java/io/hainenber/jenkins/multipass/MultipassLauncher.java @@ -67,7 +67,7 @@ public void launch(@Nonnull SlaveComputer slaveComputer, @Nonnull TaskListener l "[multipass-cloud] Terminating Multipass agent {} due to problem launching or connecting to it.", slaveComputer.getName()); var multipassComputer = ((MultipassComputer) slaveComputer).getNode(); - if (Objects.nonNull(multipassComputer)) { + if (multipassComputer != null) { multipassComputer.terminate(); } } @@ -75,7 +75,7 @@ public void launch(@Nonnull SlaveComputer slaveComputer, @Nonnull TaskListener l protected void launchScript(MultipassComputer computer, TaskListener listener) throws IOException { Node node = computer.getNode(); - if (Objects.isNull(node)) { + if (node == null) { LOGGER.info("[multipass-cloud] Not launching {} since it is missing a node.", computer); return; } @@ -115,7 +115,7 @@ protected void launchScript(MultipassComputer computer, TaskListener listener) t throw new RuntimeException("Cannot find the instance named " + instanceName); } var instanceHostIp = instance.get().getIpv4(); - if (Objects.isNull(instanceHostIp)) { + if (instanceHostIp == null) { throw new RuntimeException("Cannot find the instance named " + instanceName); } var sshConnection = new Connection(instanceHostIp.get(0), computer.getSshPort()); diff --git a/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassClient.java b/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassClient.java index 6f2e792..a15271d 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassClient.java +++ b/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassClient.java @@ -33,7 +33,7 @@ public String getOutput(CommandLine cmd) throws IOException { } public List getDistributionAlias() throws IOException { - if (Objects.nonNull(availableDistroAliases)) { + if (availableDistroAliases != null) { return availableDistroAliases; } diff --git a/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassInstance.java b/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassInstance.java index 056f9f4..534882c 100644 --- a/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassInstance.java +++ b/src/main/java/io/hainenber/jenkins/multipass/sdk/MultipassInstance.java @@ -33,7 +33,7 @@ public void setSnapshots(int snapshots) { @Nullable public List getIpv4() { - return Objects.isNull(ipv4) ? new ArrayList<>() : ipv4; + return ipv4 == null ? new ArrayList<>() : ipv4; } public void setIpv4(@Nullable List ipv4) {