From f9571b2c80a9a3f0640bb94d8d2bbc004f406aae Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 6 Oct 2023 11:19:41 +0200 Subject: [PATCH 01/41] [broken] wip Signed-off-by: Thorsten Scherler --- pom.xml | 2 +- .../plugins/kubernetes/KubernetesCloud.java | 43 ++++++++++++++++++- .../kubernetes/PodTemplatesAction.java | 22 ++++++++++ .../plugins/kubernetes/TemplatesLink.java | 43 +++++++++++++++++++ .../kubernetes/KubernetesCloud/config.jelly | 29 ++++++++++++- .../KubernetesCloud/sidepanel.jelly | 41 ++++++++++++++++++ .../kubernetes/PodTemplatesAction/index.jelly | 4 ++ 7 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java create mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly diff --git a/pom.xml b/pom.xml index 4118ded4b2..3b19461182 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ - 2.401.1 + 2.414.2 2.401.x 2357.v1043f8578392 false diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 4dd242e668..f95318a696 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,7 +19,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; - +import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -34,12 +34,20 @@ import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuth; import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthException; import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.HttpResponses; import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.StaplerProxy; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.WebMethod; import org.kohsuke.stapler.interceptor.RequirePOST; - +import org.kohsuke.stapler.verb.GET; import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.common.StandardCredentials; import com.cloudbees.plugins.credentials.common.StandardListBoxModel; @@ -65,6 +73,7 @@ import io.fabric8.kubernetes.client.VersionInfo; import jenkins.model.Jenkins; import jenkins.model.JenkinsLocationConfiguration; +import jenkins.security.stapler.StaplerDispatchable; import jenkins.authentication.tokens.api.AuthenticationTokens; import static java.nio.charset.StandardCharsets.UTF_8; import static org.csanchez.jenkins.plugins.kubernetes.MetricNames.metricNameForLabel; @@ -218,6 +227,35 @@ public List getTemplates() { return templates; } + // @GET + // @WebMethod(name = "templates") + // @StaplerDispatchable + // @Restricted(NoExternalUse.class) + // public synchronized HttpResponse doTemplates(StaplerRequest req, StaplerResponse rsp, + // @QueryParameter String name) throws IOException, ServletException { + // LOGGER.log(Level.WARNING, "Handling KubernetesCloud.doTemplates"); + // final Jenkins jenkins = Jenkins.get(); + // jenkins.checkPermission(Jenkins.ADMINISTER); + // // req.getView(this, "templates.jelly").forward(req, rsp); + // LOGGER.log(Level.WARNING, req.toString()); + // return HttpResponses.ok(); + + // RequestDispatcher dispatcher = req.getView(this, "templates.jelly"); + // try {r + // dispatcher.forward(req, rsp); + // } catch (Exception e) { + // throw new ServletException(e); + // } + // return req.getView(this, "templates.jelly"); + // .forward(req, rsp); + // return HttpResponses.redirectTo("."); + // } + + // @NonNull + // public List getTemplatesString() { + // return templates.stream().map(PodTemplate::getName).collect(java.util.stream.Collectors.toList()); + // } + /** * Returns all pod templates for this cloud including the dynamic ones. * @return all pod templates for this cloud including the dynamic ones. @@ -985,4 +1023,5 @@ public static void hpiRunInit() { } } } + } diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java new file mode 100644 index 0000000000..3701a2f8e1 --- /dev/null +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java @@ -0,0 +1,22 @@ +package org.csanchez.jenkins.plugins.kubernetes; + +import hudson.model.Action; + +public class PodTemplatesAction implements Action { + + @Override + public String getIconFileName() { + return "symbol-terminal"; + } + + @Override + public String getDisplayName() { + return "Pod Templates"; + } + + @Override + public String getUrlName() { + return "templates"; + } + +} diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java new file mode 100644 index 0000000000..bf4b61e3e7 --- /dev/null +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java @@ -0,0 +1,43 @@ +package org.csanchez.jenkins.plugins.kubernetes; +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Extension; +import hudson.model.ManagementLink; +import hudson.security.Permission; +import jenkins.model.Jenkins; + +@Extension +public class TemplatesLink extends ManagementLink { + + @Override + public String getDisplayName() { + return "Messages.CloudsLink_DisplayName()"; + } + + @Override + public String getDescription() { + return "Messages.CloudsLink_Description()"; + } + + @Override + public String getIconFileName() { + return "symbol-cloud"; + } + + @Override + public String getUrlName() { + return "templates"; + } + + @NonNull + @Override + public Category getCategory() { + return Category.CONFIGURATION; + } + + @NonNull + @Override + public Permission getRequiredPermission() { + return Jenkins.SYSTEM_READ; + } +} + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly index 5567abb25e..12490c179c 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly @@ -104,8 +104,33 @@ - - + + new -> + + + + + + + + + + + + + + +
${%Name} +
+ ${cloud} + +
+ + + +
+
+move -> diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly new file mode 100644 index 0000000000..6a19870a1e --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly new file mode 100644 index 0000000000..cc633a4c64 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly @@ -0,0 +1,4 @@ + + +templates + \ No newline at end of file From be4fca75c4e94309d9f49f794c8d4794a9898125 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 9 Oct 2023 12:45:17 +0200 Subject: [PATCH 02/41] [BEE-30772] working listing page Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 36 +++++-------------- .../kubernetes/PodTemplatesAction.java | 22 ------------ .../kubernetes/KubernetesCloud/box.jelly | 32 +++++++++++++++++ .../kubernetes/KubernetesCloud/main2.jelly | 4 +++ .../kubernetes/KubernetesCloud/panel.jelly | 30 ++++++++++++++++ .../KubernetesCloud/templates.jelly | 36 +++++++++++++++++++ 6 files changed, 110 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index f95318a696..e0622ad106 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -227,34 +227,14 @@ public List getTemplates() { return templates; } - // @GET - // @WebMethod(name = "templates") - // @StaplerDispatchable - // @Restricted(NoExternalUse.class) - // public synchronized HttpResponse doTemplates(StaplerRequest req, StaplerResponse rsp, - // @QueryParameter String name) throws IOException, ServletException { - // LOGGER.log(Level.WARNING, "Handling KubernetesCloud.doTemplates"); - // final Jenkins jenkins = Jenkins.get(); - // jenkins.checkPermission(Jenkins.ADMINISTER); - // // req.getView(this, "templates.jelly").forward(req, rsp); - // LOGGER.log(Level.WARNING, req.toString()); - // return HttpResponses.ok(); - - // RequestDispatcher dispatcher = req.getView(this, "templates.jelly"); - // try {r - // dispatcher.forward(req, rsp); - // } catch (Exception e) { - // throw new ServletException(e); - // } - // return req.getView(this, "templates.jelly"); - // .forward(req, rsp); - // return HttpResponses.redirectTo("."); - // } - - // @NonNull - // public List getTemplatesString() { - // return templates.stream().map(PodTemplate::getName).collect(java.util.stream.Collectors.toList()); - // } + public void doTemplates(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { + req.getView(this, "templates.jelly").forward(req, rsp); + } + + @NonNull + public List getTemplatesString() { + return templates.stream().map(PodTemplate::getName).collect(java.util.stream.Collectors.toList()); + } /** * Returns all pod templates for this cloud including the dynamic ones. diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java deleted file mode 100644 index 3701a2f8e1..0000000000 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.csanchez.jenkins.plugins.kubernetes; - -import hudson.model.Action; - -public class PodTemplatesAction implements Action { - - @Override - public String getIconFileName() { - return "symbol-terminal"; - } - - @Override - public String getDisplayName() { - return "Pod Templates"; - } - - @Override - public String getUrlName() { - return "templates"; - } - -} diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly new file mode 100644 index 0000000000..62c237ed11 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly new file mode 100644 index 0000000000..bb7f78566b --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly @@ -0,0 +1,4 @@ + + +status + \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly new file mode 100644 index 0000000000..1e48ae48aa --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly new file mode 100644 index 0000000000..3494bbf37d --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -0,0 +1,36 @@ + + + + + + + ${it.url} + + + + + + + + + + + + + + +
${%Name} +
+ ${cloud} + +
+ + + +
+
+
+
+
\ No newline at end of file From 2e89c5730a82c41fbbb5666bc08e1cf1c080f0c8 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 12:20:47 +0200 Subject: [PATCH 03/41] [BEE-30772] WIP Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 22 +++++- .../plugins/kubernetes/TemplateSet.java | 68 +++++++++++++++++++ .../kubernetes/KubernetesCloud/template.jelly | 24 +++++++ .../KubernetesCloud/templates.jelly | 63 ++++++++++------- .../plugins/kubernetes/Messages.properties | 1 + .../kubernetes/TemplateSet/index.jelly | 53 +++++++++++++++ 6 files changed, 204 insertions(+), 27 deletions(-) create mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index e0622ad106..255c0bbabf 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -146,6 +146,16 @@ public class KubernetesCloud extends Cloud { @CheckForNull private PodRetention podRetention = PodRetention.getKubernetesCloudDefault(); + @SuppressWarnings("unused") // stapler + private PodTemplate template; + + public PodTemplate getTemplate() { + return template; + } + + public void setTemplate(PodTemplate template) { + this.template = template; + } @DataBoundConstructor public KubernetesCloud(String name) { @@ -227,9 +237,15 @@ public List getTemplates() { return templates; } - public void doTemplates(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { - req.getView(this, "templates.jelly").forward(req, rsp); - } + // public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter String id) + // throws IOException, ServletException { + // if(id!=null) { + // template = getTemplateById(id); + // }else{ + // template = null; + // } + // req.getView(this, "templates.jelly").forward(req, rsp); + // } @NonNull public List getTemplatesString() { diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java new file mode 100644 index 0000000000..38579d11af --- /dev/null +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java @@ -0,0 +1,68 @@ +package org.csanchez.jenkins.plugins.kubernetes; + +import hudson.Extension; +import hudson.model.AbstractModelObject; +import hudson.model.Describable; +import hudson.model.Descriptor; +import hudson.model.RootAction; +import jenkins.model.Jenkins; +import jenkins.model.ModelObjectWithChildren; +import jenkins.model.ModelObjectWithContextMenu; +import jenkins.model.ModelObjectWithContextMenu.ContextMenu; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.StaplerProxy; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +@Restricted(NoExternalUse.class) +public class TemplateSet extends AbstractModelObject implements Describable, ModelObjectWithChildren, RootAction, StaplerProxy{ + + @Override + public String getDisplayName() { + return "Templates"; + } + + @Override + public String getSearchUrl() { + return "/templates"; + } + + @Override + public String getIconFileName() { + return "symbol-cloud"; + } + + @Override + public String getUrlName() { + return "/templates/"; + } + + @Override + public Object getTarget() { + Jenkins.get().checkPermission(Jenkins.ADMINISTER); + return this; + } + + @Override + public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception { + ModelObjectWithContextMenu.ContextMenu m = new ModelObjectWithContextMenu.ContextMenu(); + Jenkins.get().clouds.stream().forEach(c -> m.add(c));//not sure about this + return m; + } + + @Override + public Descriptor getDescriptor() { + return Jenkins.get().getDescriptorOrDie(TemplateSet.class); + } + + @Extension + public static class DescriptorImpl extends Descriptor implements StaplerProxy { + + @Override + public Object getTarget() { + Jenkins.get().checkPermission(Jenkins.ADMINISTER); + return this; + } + } +} diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly new file mode 100644 index 0000000000..1b37fb0f30 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly @@ -0,0 +1,24 @@ + + + + + + + + + + + +
+ +
+
+
+
+
+ xxx +
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 3494bbf37d..e18c820837 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -6,31 +6,46 @@ type="${request.hasParameter('expand') ? 'full-screen' : 'two-column'}"> - ${it.url} - - - - - - - - - - - + + + + + + +
+ +
+
+
+
+
+
+ +
${%Name} -
- ${cloud} - -
- - - -
-
+ + + + - - -
${%Name}
+ + + + + + ${template.name} + + +
+ + + +
+ + +
+ + +
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index 75994e8b6b..bdbeeb427d 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -9,3 +9,4 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo entry in /etc/passwd. Please add a user to your Dockerfile or set the HOME environment \ variable to a valid directory in the pod template definition. KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} +TemplateSet_DisplayName=templates diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly new file mode 100644 index 0000000000..86ed0ecc24 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly @@ -0,0 +1,53 @@ + + + + + + + + TemplateSet + + xxx import + + + + +
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + +
${%Name} +
+ ${template.name} + +
+ + + +
+
+
+
+
+
\ No newline at end of file From b7bdefeb6c1904de4999fc84e6951c0ac52b5353 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 20:36:56 +0200 Subject: [PATCH 04/41] [BEE-30772] Working edit of template, missing new Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 17 ++--- .../plugins/kubernetes/PodTemplate.java | 44 +++++++++++- .../plugins/kubernetes/TemplateSet.java | 68 ------------------- .../plugins/kubernetes/TemplatesLink.java | 43 ------------ .../kubernetes/KubernetesCloud/template.jelly | 24 ------- .../KubernetesCloud/templates.jelly | 2 +- .../kubernetes/PodTemplate/configure.jelly | 28 ++++++++ .../kubernetes/PodTemplate/sidepanel.jelly | 41 +++++++++++ .../kubernetes/TemplateSet/index.jelly | 53 --------------- 9 files changed, 119 insertions(+), 201 deletions(-) delete mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java delete mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 255c0bbabf..172db90d09 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -73,7 +73,7 @@ import io.fabric8.kubernetes.client.VersionInfo; import jenkins.model.Jenkins; import jenkins.model.JenkinsLocationConfiguration; -import jenkins.security.stapler.StaplerDispatchable; +import jenkins.security.stapler.StaplerAccessibleType; import jenkins.authentication.tokens.api.AuthenticationTokens; import static java.nio.charset.StandardCharsets.UTF_8; import static org.csanchez.jenkins.plugins.kubernetes.MetricNames.metricNameForLabel; @@ -87,6 +87,7 @@ * * @author Carlos Sanchez carlos@apache.org */ +@StaplerAccessibleType public class KubernetesCloud extends Cloud { public static final int DEFAULT_MAX_REQUESTS_PER_HOST = 32; public static final Integer DEFAULT_WAIT_FOR_POD_SEC = 600; @@ -147,15 +148,6 @@ public class KubernetesCloud extends Cloud { @CheckForNull private PodRetention podRetention = PodRetention.getKubernetesCloudDefault(); @SuppressWarnings("unused") // stapler - private PodTemplate template; - - public PodTemplate getTemplate() { - return template; - } - - public void setTemplate(PodTemplate template) { - this.template = template; - } @DataBoundConstructor public KubernetesCloud(String name) { @@ -634,6 +626,11 @@ public boolean canProvision(@NonNull Cloud.CloudState state) { public PodTemplate getTemplate(@CheckForNull Label label) { return PodTemplateUtils.getTemplateByLabel(label, getAllTemplates()); } + + @CheckForNull + public PodTemplate getTemplate(@NonNull String id) { + return getTemplateById(id); + } @CheckForNull public PodTemplate getTemplateById(@NonNull String id) { diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index a8e915f91f..6b0eae9b0a 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -1,5 +1,6 @@ package org.csanchez.jenkins.plugins.kubernetes; +import java.io.IOException; import java.io.Serializable; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -15,7 +16,9 @@ import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; - +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -39,16 +42,23 @@ import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; - +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; import hudson.Extension; +import hudson.Functions; import hudson.Util; import hudson.model.labels.LabelAtom; +import hudson.slaves.Cloud; import hudson.slaves.NodeProperty; +import hudson.util.FormApply; import hudson.util.XStream2; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.client.KubernetesClient; import java.io.StringReader; import jenkins.model.Jenkins; +import net.sf.json.JSONObject; /** * Kubernetes Pod Template @@ -631,6 +641,36 @@ public void addEnvVars(List envVars) { } } + @POST + public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + String context = Functions.getNearestAncestorUrl(req, this); + // Define regular expressions to match the desired substrings + // there maybe a better way to do this, but I don't know how to do it. + String regex1 = ".*/cloud/(.*)/template/(.*)"; + Pattern pattern = Pattern.compile(regex1); + Matcher matcher = pattern.matcher(context); + + // Find and extract the substrings + if (matcher.find()) { + String cloudName = matcher.group(1); // cloud name + Cloud cloud = Jenkins.get().getCloud(cloudName); + if (cloud instanceof KubernetesCloud) { + KubernetesCloud kubernetesCloud = (KubernetesCloud) cloud; + // maybe there is a smarter way to modify? + kubernetesCloud.removeTemplate(this); + PodTemplate newTemplate = reconfigure(req, req.getSubmittedForm()); + kubernetesCloud.addTemplate(newTemplate); + } + } + // take the user back to the cloud top page. + return FormApply.success("../../templates"); + } + + private PodTemplate reconfigure(@NonNull final StaplerRequest req, JSONObject form) throws Descriptor.FormException { + if (form == null) return null; + return getDescriptor().newInstance(req, form); + } + @DataBoundSetter public void setEnvVars(List envVars) { if (envVars != null) { diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java deleted file mode 100644 index 38579d11af..0000000000 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplateSet.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.csanchez.jenkins.plugins.kubernetes; - -import hudson.Extension; -import hudson.model.AbstractModelObject; -import hudson.model.Describable; -import hudson.model.Descriptor; -import hudson.model.RootAction; -import jenkins.model.Jenkins; -import jenkins.model.ModelObjectWithChildren; -import jenkins.model.ModelObjectWithContextMenu; -import jenkins.model.ModelObjectWithContextMenu.ContextMenu; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; -import org.kohsuke.stapler.StaplerProxy; -import org.kohsuke.stapler.StaplerRequest; -import org.kohsuke.stapler.StaplerResponse; - -@Restricted(NoExternalUse.class) -public class TemplateSet extends AbstractModelObject implements Describable, ModelObjectWithChildren, RootAction, StaplerProxy{ - - @Override - public String getDisplayName() { - return "Templates"; - } - - @Override - public String getSearchUrl() { - return "/templates"; - } - - @Override - public String getIconFileName() { - return "symbol-cloud"; - } - - @Override - public String getUrlName() { - return "/templates/"; - } - - @Override - public Object getTarget() { - Jenkins.get().checkPermission(Jenkins.ADMINISTER); - return this; - } - - @Override - public ContextMenu doChildrenContextMenu(StaplerRequest request, StaplerResponse response) throws Exception { - ModelObjectWithContextMenu.ContextMenu m = new ModelObjectWithContextMenu.ContextMenu(); - Jenkins.get().clouds.stream().forEach(c -> m.add(c));//not sure about this - return m; - } - - @Override - public Descriptor getDescriptor() { - return Jenkins.get().getDescriptorOrDie(TemplateSet.class); - } - - @Extension - public static class DescriptorImpl extends Descriptor implements StaplerProxy { - - @Override - public Object getTarget() { - Jenkins.get().checkPermission(Jenkins.ADMINISTER); - return this; - } - } -} diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java deleted file mode 100644 index bf4b61e3e7..0000000000 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/TemplatesLink.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.csanchez.jenkins.plugins.kubernetes; -import edu.umd.cs.findbugs.annotations.NonNull; -import hudson.Extension; -import hudson.model.ManagementLink; -import hudson.security.Permission; -import jenkins.model.Jenkins; - -@Extension -public class TemplatesLink extends ManagementLink { - - @Override - public String getDisplayName() { - return "Messages.CloudsLink_DisplayName()"; - } - - @Override - public String getDescription() { - return "Messages.CloudsLink_Description()"; - } - - @Override - public String getIconFileName() { - return "symbol-cloud"; - } - - @Override - public String getUrlName() { - return "templates"; - } - - @NonNull - @Override - public Category getCategory() { - return Category.CONFIGURATION; - } - - @NonNull - @Override - public Permission getRequiredPermission() { - return Jenkins.SYSTEM_READ; - } -} - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly deleted file mode 100644 index 1b37fb0f30..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/template.jelly +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - -
- -
-
-
-
-
- xxx -
-
-
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index e18c820837..b97cfb716b 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -36,7 +36,7 @@ diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly new file mode 100644 index 0000000000..3478331311 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly @@ -0,0 +1,28 @@ + + + + + + + +

${%title(it.name)}

+ + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly new file mode 100644 index 0000000000..c3ff127310 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly deleted file mode 100644 index 86ed0ecc24..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/TemplateSet/index.jelly +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - TemplateSet - - xxx import - - - - -
- -
-
-
-
-
-
- - - - - - - - - - - - - - - -
${%Name} -
- ${template.name} - -
- - - -
-
-
-
-
-
\ No newline at end of file From cee3420c516203f58db4f34c37bdb2b6533045d9 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 20:41:13 +0200 Subject: [PATCH 05/41] [BEE-30772] remove unused imports Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/KubernetesCloud.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 172db90d09..8efeafe931 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,7 +19,6 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -34,20 +33,11 @@ import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuth; import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthException; import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl; -import org.kohsuke.accmod.Restricted; -import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import org.kohsuke.stapler.HttpResponse; -import org.kohsuke.stapler.HttpResponses; import org.kohsuke.stapler.QueryParameter; -import org.kohsuke.stapler.StaplerProxy; -import org.kohsuke.stapler.StaplerRequest; -import org.kohsuke.stapler.StaplerResponse; -import org.kohsuke.stapler.WebMethod; import org.kohsuke.stapler.interceptor.RequirePOST; -import org.kohsuke.stapler.verb.GET; import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.common.StandardCredentials; import com.cloudbees.plugins.credentials.common.StandardListBoxModel; From b183580ca02064bd45fdcaed712c2c97981f97b5 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 20:41:54 +0200 Subject: [PATCH 06/41] [BEE-30772] remove unused code Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/KubernetesCloud.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 8efeafe931..f01c276e2b 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -219,16 +219,6 @@ public List getTemplates() { return templates; } - // public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter String id) - // throws IOException, ServletException { - // if(id!=null) { - // template = getTemplateById(id); - // }else{ - // template = null; - // } - // req.getView(this, "templates.jelly").forward(req, rsp); - // } - @NonNull public List getTemplatesString() { return templates.stream().map(PodTemplate::getName).collect(java.util.stream.Collectors.toList()); From 558cb4270c62ef4d6c1331d05b7e76bcd87c5c10 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 20:44:32 +0200 Subject: [PATCH 07/41] [BEE-30772] remove unused code Signed-off-by: Thorsten Scherler --- .../csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index f01c276e2b..62f3bc507e 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -219,11 +219,6 @@ public List getTemplates() { return templates; } - @NonNull - public List getTemplatesString() { - return templates.stream().map(PodTemplate::getName).collect(java.util.stream.Collectors.toList()); - } - /** * Returns all pod templates for this cloud including the dynamic ones. * @return all pod templates for this cloud including the dynamic ones. From 0661f6d329c53fd39f89d7381bec6a5e988dafe1 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 21:06:44 +0200 Subject: [PATCH 08/41] [BEE-30772] remove unused code Signed-off-by: Thorsten Scherler --- .../kubernetes/KubernetesCloud/box.jelly | 32 ---------- .../kubernetes/KubernetesCloud/main2.jelly | 4 -- .../kubernetes/KubernetesCloud/panel.jelly | 30 --------- .../KubernetesCloud/templates.jelly | 63 ++++++++----------- .../plugins/kubernetes/Messages.properties | 1 - .../{configure.jelly => index.jelly} | 2 +- 6 files changed, 26 insertions(+), 106 deletions(-) delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly rename src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/{configure.jelly => index.jelly} (96%) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly deleted file mode 100644 index 62c237ed11..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/box.jelly +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly deleted file mode 100644 index bb7f78566b..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/main2.jelly +++ /dev/null @@ -1,4 +0,0 @@ - - -status - \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly deleted file mode 100644 index 1e48ae48aa..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/panel.jelly +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index b97cfb716b..842d83e374 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -4,48 +4,35 @@ + + - - - - - -
- -
-
-
-
-
-
- - - - - -
${%Name} + + + + + + + + + + + - - - - - - - - - -
${%Name} +
+ ${template.name} + +
+ + + +
+
- ${template.name} - -
- - - -
-
- + + +
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index bdbeeb427d..75994e8b6b 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -9,4 +9,3 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo entry in /etc/passwd. Please add a user to your Dockerfile or set the HOME environment \ variable to a valid directory in the pod template definition. KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} -TemplateSet_DisplayName=templates diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly similarity index 96% rename from src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly rename to src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly index 3478331311..95123de52f 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/configure.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly @@ -5,7 +5,7 @@ -

${%title(it.name)}

+

${%Pod template settings}

From f1d29e6572b10bde8e2d58f9fa1d229e13e26c52 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 21:11:41 +0200 Subject: [PATCH 09/41] [BEE-30772] remove unused code Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 4 +- .../kubernetes/KubernetesCloud/config.jelly | 37 ------------------- 2 files changed, 2 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 62f3bc507e..5ba53e3a75 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,6 +19,7 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; + import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -38,6 +39,7 @@ import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.interceptor.RequirePOST; + import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.common.StandardCredentials; import com.cloudbees.plugins.credentials.common.StandardListBoxModel; @@ -63,7 +65,6 @@ import io.fabric8.kubernetes.client.VersionInfo; import jenkins.model.Jenkins; import jenkins.model.JenkinsLocationConfiguration; -import jenkins.security.stapler.StaplerAccessibleType; import jenkins.authentication.tokens.api.AuthenticationTokens; import static java.nio.charset.StandardCharsets.UTF_8; import static org.csanchez.jenkins.plugins.kubernetes.MetricNames.metricNameForLabel; @@ -77,7 +78,6 @@ * * @author Carlos Sanchez carlos@apache.org */ -@StaplerAccessibleType public class KubernetesCloud extends Cloud { public static final int DEFAULT_MAX_REQUESTS_PER_HOST = 32; public static final Integer DEFAULT_WAIT_FOR_POD_SEC = 600; diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly index 12490c179c..d089ffd59f 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly @@ -105,42 +105,5 @@
- new -> - - - - - - - - - - - - - - -
${%Name} -
- ${cloud} - -
- - - -
-
-move -> - - - - -
- -
-
-
-
-
From 5848de284e2da4d8a6fc9e66a9e2aefbe4771d03 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 21:12:11 +0200 Subject: [PATCH 10/41] [BEE-30772] remove unused code Signed-off-by: Thorsten Scherler --- .../org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 5ba53e3a75..087c8c76ea 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -137,7 +137,6 @@ public class KubernetesCloud extends Cloud { @CheckForNull private PodRetention podRetention = PodRetention.getKubernetesCloudDefault(); - @SuppressWarnings("unused") // stapler @DataBoundConstructor public KubernetesCloud(String name) { From 227712ccf9b2f961a89c721c004bd3be6a9f1f84 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 10 Oct 2023 22:48:07 +0200 Subject: [PATCH 11/41] [BEE-30772] try the action Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/PodTemplateAction.java | 37 +++++++++++++++++++ .../{sidepanel.jelly => sidepanelx.jelly} | 0 .../kubernetes/PodTemplateAction/box.jelly | 6 +++ 3 files changed, 43 insertions(+) create mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java rename src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/{sidepanel.jelly => sidepanelx.jelly} (100%) create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java new file mode 100644 index 0000000000..b58acd3d59 --- /dev/null +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java @@ -0,0 +1,37 @@ +package org.csanchez.jenkins.plugins.kubernetes; + +import hudson.model.Action; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import jenkins.model.TransientActionFactory; + +public class PodTemplateAction extends TransientActionFactory implements Action{ + + @Override + public String getIconFileName() { + return "symbol-copy"; + } + + @Override + public String getDisplayName() { + return "PodTemplates"; + } + + @Override + public String getUrlName() { + return "templates"; + } + + @Override + public Class type() { + return KubernetesCloud.class; + } + + @Override + public Collection createFor(KubernetesCloud target) { + List actions = new ArrayList<>(); + actions.add(new PodTemplateAction()); + return actions; + } +} diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanelx.jelly similarity index 100% rename from src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly rename to src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanelx.jelly diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly new file mode 100644 index 0000000000..1a677651b7 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file From aefb1d9daafa9cd7e91bae90340239ebc7c837a6 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 11 Oct 2023 13:01:46 +0200 Subject: [PATCH 12/41] [BEE-30772] implement new template Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 26 ++++++- .../plugins/kubernetes/PodTemplate.java | 2 +- .../plugins/kubernetes/PodTemplateAction.java | 2 + .../kubernetes/KubernetesCloud/new.jelly | 25 +++++++ .../KubernetesCloud/templates.jelly | 69 ++++++++++++------- .../plugins/kubernetes/Messages.properties | 1 + .../kubernetes/PodTemplate/index.jelly | 8 ++- .../kubernetes/PodTemplateAction/box.jelly | 6 -- 8 files changed, 103 insertions(+), 36 deletions(-) create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 087c8c76ea..fc15eaa323 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -37,9 +37,12 @@ import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; import org.kohsuke.stapler.interceptor.RequirePOST; - +import org.kohsuke.stapler.verb.POST; import com.cloudbees.plugins.credentials.CredentialsMatchers; import com.cloudbees.plugins.credentials.common.StandardCredentials; import com.cloudbees.plugins.credentials.common.StandardListBoxModel; @@ -54,10 +57,12 @@ import hudson.init.Initializer; import hudson.model.Descriptor; import hudson.model.DescriptorVisibilityFilter; +import hudson.model.Failure; import hudson.model.Label; import hudson.security.ACL; import hudson.slaves.Cloud; import hudson.slaves.NodeProvisioner; +import hudson.util.FormApply; import hudson.util.FormValidation; import hudson.util.ListBoxModel; import io.fabric8.kubernetes.client.KubernetesClient; @@ -100,6 +105,10 @@ public class KubernetesCloud extends Cloud { @NonNull private List templates = new ArrayList<>(); + + public boolean hasTemplates() { + return templates.size() > 0; + } private String serverUrl; private boolean useJenkinsProxy; @CheckForNull @@ -721,6 +730,21 @@ public void setWaitForPodSec(Integer waitForPodSec) { this.waitForPodSec = waitForPodSec; } + /** + * Creating a new template. + */ + @POST + public HttpResponse doCreate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + PodTemplate newTemplate=new PodTemplate().getDescriptor().newInstance(req, req.getSubmittedForm()); + addTemplate(newTemplate); + // take the user back. + return FormApply.success("templates"); + } + + public PodTemplate getNewTemplate(){ + return new PodTemplate(); + } + @Extension public static class DescriptorImpl extends Descriptor { @Override diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 6b0eae9b0a..e1e6ed1965 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -662,7 +662,7 @@ public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) thro kubernetesCloud.addTemplate(newTemplate); } } - // take the user back to the cloud top page. + // take the user back. return FormApply.success("../../templates"); } diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java index b58acd3d59..fc2709f7e6 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java @@ -1,11 +1,13 @@ package org.csanchez.jenkins.plugins.kubernetes; +import hudson.Extension; import hudson.model.Action; import java.util.ArrayList; import java.util.Collection; import java.util.List; import jenkins.model.TransientActionFactory; +@Extension public class PodTemplateAction extends TransientActionFactory implements Action{ @Override diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly new file mode 100644 index 0000000000..23a187eaf8 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -0,0 +1,25 @@ + + + + + + + + +

${%New Pod template settings}

+ + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 842d83e374..9ef5148542 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -2,37 +2,56 @@ - - - - - - - - - - - - - - - -
${%Name} -
- ${template.name} - -
- - - -
-
+ + + ` + + ${%Add a pod template} + ` + + + + + + + + + + + + + + + + + + +
${%Name} +
+ ${template.name} + +
+ + + +
+
+
+ +
+
+ No pod template added yet. +
+
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index 75994e8b6b..b520642c2d 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -9,3 +9,4 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo entry in /etc/passwd. Please add a user to your Dockerfile or set the HOME environment \ variable to a valid directory in the pod template definition. KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} +TemplateAlreadyExists=Template called ‘{0}’ already exists diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly index 95123de52f..cb3a32f317 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly @@ -1,9 +1,8 @@ - + - - +

${%Pod template settings}

@@ -17,6 +16,9 @@ + + ${%Back to pod templates} + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly deleted file mode 100644 index 1a677651b7..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction/box.jelly +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From 20c0acf914bf344da3eda05db363617aeb872ba5 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 11 Oct 2023 15:08:05 +0200 Subject: [PATCH 13/41] [BEE-30772] working delete basically Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 2 ++ .../plugins/kubernetes/PodTemplate.java | 33 ++++++++++++++++- .../plugins/kubernetes/PodTemplateAction.java | 4 +-- src/main/resources/images/symbols/copy.svg | 3 ++ .../kubernetes/KubernetesCloud/new.jelly | 1 + .../KubernetesCloud/templates.jelly | 35 +++++++++++++------ .../kubernetes/PodTemplate/delete.jelly | 17 +++++++++ .../kubernetes/PodTemplate/delete.properties | 2 ++ .../kubernetes/PodTemplate/index.jelly | 6 +++- 9 files changed, 89 insertions(+), 14 deletions(-) create mode 100644 src/main/resources/images/symbols/copy.svg create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index fc15eaa323..e91c9b16a4 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -737,6 +737,8 @@ public void setWaitForPodSec(Integer waitForPodSec) { public HttpResponse doCreate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { PodTemplate newTemplate=new PodTemplate().getDescriptor().newInstance(req, req.getSubmittedForm()); addTemplate(newTemplate); + Jenkins j = Jenkins.get(); + j.save(); // take the user back. return FormApply.success("templates"); } diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index e1e6ed1965..8ba63bc0a9 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -42,9 +42,11 @@ import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import org.kohsuke.stapler.HttpRedirect; import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.interceptor.RequirePOST; import org.kohsuke.stapler.verb.POST; import hudson.Extension; import hudson.Functions; @@ -641,6 +643,33 @@ public void addEnvVars(List envVars) { } } + /** + * Deletes the cloud. + */ + @RequirePOST + public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException { + String context = Functions.getNearestAncestorUrl(req, this); + // Define regular expressions to match the desired substrings + // there maybe a better way to do this, but I don't know how to do it. + String regex1 = ".*/cloud/(.*)/template/(.*)"; + Pattern pattern = Pattern.compile(regex1); + Matcher matcher = pattern.matcher(context); + // Find and extract the substrings + if (matcher.find()) { + String cloudName = matcher.group(1); // cloud name + Jenkins j = Jenkins.get(); + Cloud cloud = j.getCloud(cloudName); + if (cloud instanceof KubernetesCloud) { + KubernetesCloud kubernetesCloud = (KubernetesCloud) cloud; + // maybe there is a smarter way to modify? + kubernetesCloud.removeTemplate(this); + j.save(); + } + } + // take the user back. + return new HttpRedirect("../../templates"); + } + @POST public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { String context = Functions.getNearestAncestorUrl(req, this); @@ -653,13 +682,15 @@ public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) thro // Find and extract the substrings if (matcher.find()) { String cloudName = matcher.group(1); // cloud name - Cloud cloud = Jenkins.get().getCloud(cloudName); + Jenkins j = Jenkins.get(); + Cloud cloud = j.getCloud(cloudName); if (cloud instanceof KubernetesCloud) { KubernetesCloud kubernetesCloud = (KubernetesCloud) cloud; // maybe there is a smarter way to modify? kubernetesCloud.removeTemplate(this); PodTemplate newTemplate = reconfigure(req, req.getSubmittedForm()); kubernetesCloud.addTemplate(newTemplate); + j.save(); } } // take the user back. diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java index fc2709f7e6..2e4f90e189 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java @@ -12,12 +12,12 @@ public class PodTemplateAction extends TransientActionFactory i @Override public String getIconFileName() { - return "symbol-copy"; + return "symbol-copy-outline plugin-ionicons-api"; } @Override public String getDisplayName() { - return "PodTemplates"; + return "Pod templates"; } @Override diff --git a/src/main/resources/images/symbols/copy.svg b/src/main/resources/images/symbols/copy.svg new file mode 100644 index 0000000000..e84ed7e95d --- /dev/null +++ b/src/main/resources/images/symbols/copy.svg @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index 23a187eaf8..55cdc62537 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -14,6 +14,7 @@ + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 9ef5148542..934d7617b2 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -11,10 +11,12 @@ - ` - - ${%Add a pod template} - ` + + + + ${%Add a pod template} + + @@ -34,9 +36,14 @@ @@ -46,9 +53,17 @@
-
- No pod template added yet. -
+
+
+
No pod template added yet.
+ +
+
diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly new file mode 100644 index 0000000000..9dfa26c190 --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly @@ -0,0 +1,17 @@ + + + + + +
+

${%delete.template(it.name)}

+ + + + ${%Back to pod templates} + + +
+
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties new file mode 100644 index 0000000000..135f38207b --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties @@ -0,0 +1,2 @@ +title=Delete the pod template ‘{0}‘? +delete.template=Delete the pod template ‘{0}’? \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly index cb3a32f317..6821dd66a5 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly @@ -15,10 +15,14 @@ - ${%Back to pod templates} + + + From 2dbd016ae05a1a091c0d37d8c6db555ceee9eeae Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 11 Oct 2023 17:34:58 +0200 Subject: [PATCH 14/41] [BEE-30772] refactor so all stays in one class Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 33 +++++++++++++++++- .../KubernetesCloud/templates.jelly | 34 ++++++++++++++++--- .../kubernetes/PodTemplate/delete.jelly | 2 +- 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index e91c9b16a4..10f574e9ff 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,7 +19,8 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; - +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -51,6 +52,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.Extension; +import hudson.Functions; import hudson.TcpSlaveAgentListener; import hudson.Util; import hudson.init.InitMilestone; @@ -75,6 +77,7 @@ import static org.csanchez.jenkins.plugins.kubernetes.MetricNames.metricNameForLabel; import jenkins.websocket.WebSockets; +import net.sf.json.JSONObject; /** * Kubernetes cloud provider. @@ -615,6 +618,34 @@ public PodTemplate getTemplate(@NonNull String id) { return getTemplateById(id); } + public PodTemplate currentTemplate; + + public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter String id) + throws IOException, ServletException { + if (id != null) { + currentTemplate = getTemplateById(id); + } else { + currentTemplate = null; + } + req.getView(this, "templates.jelly").forward(req, rsp); + } + + @POST + public HttpResponse doUpdateTemplate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + Jenkins j = Jenkins.get(); + removeTemplate(currentTemplate); + PodTemplate newTemplate = reconfigureTemplate(req, req.getSubmittedForm()); + addTemplate(newTemplate); + j.save(); + // take the user back. + return FormApply.success("./templates"); + } + + private PodTemplate reconfigureTemplate(@NonNull final StaplerRequest req, JSONObject form) throws Descriptor.FormException { + if (form == null) return null; + return currentTemplate.getDescriptor().newInstance(req, form); + } + @CheckForNull public PodTemplate getTemplateById(@NonNull String id) { return getAllTemplates().stream().filter(t -> id.equals(t.getId())).findFirst().orElse(null); diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 934d7617b2..d8919b7df5 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -9,6 +9,30 @@ + + + + + + + + +

${%Pod template settings}

+ + + + + + + + + + + +
+ @@ -52,11 +76,11 @@ -
-
+
+
-
No pod template added yet.
-
+
No pod template added yet.
+ + + \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly index 9dfa26c190..b981f02f11 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly @@ -8,7 +8,7 @@ - ${%Back to pod templates} + ${%No} From d921fc9450d7007e871b7e18d23df269858f1ee9 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 11 Oct 2023 17:59:34 +0200 Subject: [PATCH 15/41] [BEE-30772] fix different issues Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/KubernetesCloud/new.jelly | 8 ++++---- .../plugins/kubernetes/KubernetesCloud/templates.jelly | 7 +------ 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index 55cdc62537..d4ee863839 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -1,12 +1,13 @@ - + - + + -

${%New Pod template settings}

+

${%New pod template settings}

@@ -14,7 +15,6 @@ - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index d8919b7df5..5ab660c8c8 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -23,11 +23,6 @@ - - - @@ -60,7 +55,7 @@
- + From 189c5ac637814646b961494da9558f74597056aa Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 11 Oct 2023 22:06:46 +0200 Subject: [PATCH 16/41] [BEE-30772] wrap up Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 20 +++ .../KubernetesCloud/configure.jelly | 28 ++++ .../KubernetesCloud/templates.jelly | 149 +++++++++--------- 3 files changed, 122 insertions(+), 75 deletions(-) create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 10f574e9ff..ad87f35bba 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -630,6 +630,26 @@ public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter req.getView(this, "templates.jelly").forward(req, rsp); } + @POST + public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + Jenkins j = Jenkins.get(); + Cloud cloud = j.getCloud(this.name); + if (cloud == null) { + throw new ServletException("No such cloud " + this.name); + } + KubernetesCloud result = (KubernetesCloud) cloud.reconfigure(req, req.getSubmittedForm()); + String proposedName = result.name; + if (!proposedName.equals(this.name) + && j.getCloud(proposedName) != null) { + throw new Descriptor.FormException(jenkins.agents.Messages.CloudSet_CloudAlreadyExists(proposedName), "name"); + } + result.templates = this.templates; + j.clouds.replace(this, result); + j.save(); + // take the user back to the cloud top page. + return FormApply.success(".."); + } + @POST public HttpResponse doUpdateTemplate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { Jenkins j = Jenkins.get(); diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly new file mode 100644 index 0000000000..eee41a214d --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly @@ -0,0 +1,28 @@ + + + + + + + + +

${%Cloud settings}

+ + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 5ab660c8c8..940d0ce92f 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -9,85 +9,84 @@ - - - - + + + + - - - -

${%Pod template settings}

- - - - - - - - -
- - - - -
- - ${%Add a pod template} - - - - - - - - - - - - - - - - - + + + +

${%Pod template settings}

+ + + + + + + + +
+ + + + + + + ${%Add a pod template} + + + + + + +
${%Name} -
- ${template.name} - - -
+ + + + - - -
${%Name}
-
- -
-
-
-
No pod template added yet.
+ + + + + + ${template.name} + + + + + + + + + + +
+
-
-
-
-
-
- - +
+
+ + + \ No newline at end of file From a011a9db801da14f8ec40d023f627ac1caeb258c Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 10:22:31 +0200 Subject: [PATCH 17/41] [BEE-30772] fix test as pointed out by james Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloudTest.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java index 87e25c03ed..7cdef6c017 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java @@ -69,21 +69,12 @@ public void configRoundTrip() throws Exception { j.jenkins.clouds.add(cloud); j.jenkins.save(); JenkinsRule.WebClient wc = j.createWebClient(); - HtmlPage p = getCloudPage(wc); + HtmlPage p = wc.goTo("cloud/kubernetes/configure"); HtmlForm f = p.getFormByName("config"); j.submit(f); assertEquals("PodTemplate{id='"+podTemplate.getId()+"', name='test-template', label='test'}", podTemplate.toString()); } - // TODO 2.414+ delete - private HtmlPage getCloudPage(JenkinsRule.WebClient wc) throws IOException, SAXException { - if (Jenkins.getVersion().isNewerThanOrEqualTo(new VersionNumber("2.414"))) { - return wc.goTo("cloud/kubernetes/configure"); - } else { - return wc.goTo("configureClouds/"); - } - } - @Test public void testInheritance() { @@ -269,7 +260,7 @@ public void defaultWorkspaceVolume() throws Exception { j.jenkins.clouds.add(cloud); j.jenkins.save(); JenkinsRule.WebClient wc = j.createWebClient(); - HtmlPage p = getCloudPage(wc); + HtmlPage p = wc.goTo("cloud/kubernetes/configure"); HtmlForm f = p.getFormByName("config"); HtmlButton buttonExtends = getButton(f, "Pod Templates"); buttonExtends.click(); From d31ac1f138b3f617a1d38d9d28fd29e4c6c06c21 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 11:00:37 +0200 Subject: [PATCH 18/41] [BEE-30772] fix delete and add security check Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 6 ++++- .../plugins/kubernetes/PodTemplate.java | 24 ++++++------------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index ad87f35bba..e357c3985a 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -632,7 +632,9 @@ public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter @POST public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + Jenkins j = Jenkins.get(); + j.checkPermission(Jenkins.ADMINISTER); Cloud cloud = j.getCloud(this.name); if (cloud == null) { throw new ServletException("No such cloud " + this.name); @@ -653,6 +655,7 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE @POST public HttpResponse doUpdateTemplate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { Jenkins j = Jenkins.get(); + j.checkPermission(Jenkins.ADMINISTER); removeTemplate(currentTemplate); PodTemplate newTemplate = reconfigureTemplate(req, req.getSubmittedForm()); addTemplate(newTemplate); @@ -786,9 +789,10 @@ public void setWaitForPodSec(Integer waitForPodSec) { */ @POST public HttpResponse doCreate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + Jenkins j = Jenkins.get(); + j.checkPermission(Jenkins.ADMINISTER); PodTemplate newTemplate=new PodTemplate().getDescriptor().newInstance(req, req.getSubmittedForm()); addTemplate(newTemplate); - Jenkins j = Jenkins.get(); j.save(); // take the user back. return FormApply.success("templates"); diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 8ba63bc0a9..d351984390 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -648,24 +648,14 @@ public void addEnvVars(List envVars) { */ @RequirePOST public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException { - String context = Functions.getNearestAncestorUrl(req, this); - // Define regular expressions to match the desired substrings - // there maybe a better way to do this, but I don't know how to do it. - String regex1 = ".*/cloud/(.*)/template/(.*)"; - Pattern pattern = Pattern.compile(regex1); - Matcher matcher = pattern.matcher(context); - // Find and extract the substrings - if (matcher.find()) { - String cloudName = matcher.group(1); // cloud name - Jenkins j = Jenkins.get(); - Cloud cloud = j.getCloud(cloudName); - if (cloud instanceof KubernetesCloud) { - KubernetesCloud kubernetesCloud = (KubernetesCloud) cloud; - // maybe there is a smarter way to modify? - kubernetesCloud.removeTemplate(this); - j.save(); - } + Jenkins j = Jenkins.get(); + j.checkPermission(Jenkins.ADMINISTER); + KubernetesCloud kubernetesCloud = req.findAncestorObject(KubernetesCloud.class); + if (kubernetesCloud == null) { + throw new IllegalStateException("Cloud could not be found"); } + kubernetesCloud.removeTemplate(this); + j.save(); // take the user back. return new HttpRedirect("../../templates"); } From 30753a8bbaf9db8a55fcc41c2bebb46802614af5 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 11:01:39 +0200 Subject: [PATCH 19/41] Update src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java Co-authored-by: Vincent Latombe --- .../csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index e357c3985a..a796e649f7 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -110,7 +110,7 @@ public class KubernetesCloud extends Cloud { private List templates = new ArrayList<>(); public boolean hasTemplates() { - return templates.size() > 0; + return !templates.isEmpty(); } private String serverUrl; private boolean useJenkinsProxy; From c86ad898917fb7018a087ba8f4be3c3f38bf3bba Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 11:10:20 +0200 Subject: [PATCH 20/41] [BEE-30772] fix idiom of code Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/PodTemplateAction.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java index 2e4f90e189..62bebaffeb 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java @@ -1,14 +1,15 @@ package org.csanchez.jenkins.plugins.kubernetes; +import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; import hudson.model.Action; -import java.util.ArrayList; +import hudson.slaves.Cloud; import java.util.Collection; -import java.util.List; +import java.util.Collections; import jenkins.model.TransientActionFactory; @Extension -public class PodTemplateAction extends TransientActionFactory implements Action{ +public class PodTemplateAction implements Action{ @Override public String getIconFileName() { @@ -25,15 +26,20 @@ public String getUrlName() { return "templates"; } - @Override - public Class type() { - return KubernetesCloud.class; - } + @Extension + public static final class CloudActionFactory extends TransientActionFactory { + @Override + public Class type() { + return Cloud.class; + } - @Override - public Collection createFor(KubernetesCloud target) { - List actions = new ArrayList<>(); - actions.add(new PodTemplateAction()); - return actions; + @NonNull + @Override + public Collection createFor(@NonNull Cloud target) { + if (target instanceof KubernetesCloud) { + return Collections.singleton(new PodTemplateAction()); + } + return Collections.emptyList(); + } } } From 75b7c78f12aa0f00d1470362c27005397c421177 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 11:25:57 +0200 Subject: [PATCH 21/41] [BEE-30772] remove custom icon Signed-off-by: Thorsten Scherler --- .../csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java | 2 +- src/main/resources/images/symbols/copy.svg | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100644 src/main/resources/images/symbols/copy.svg diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java index 62bebaffeb..13cb43c3ac 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java @@ -13,7 +13,7 @@ public class PodTemplateAction implements Action{ @Override public String getIconFileName() { - return "symbol-copy-outline plugin-ionicons-api"; + return "symbol-details"; } @Override diff --git a/src/main/resources/images/symbols/copy.svg b/src/main/resources/images/symbols/copy.svg deleted file mode 100644 index e84ed7e95d..0000000000 --- a/src/main/resources/images/symbols/copy.svg +++ /dev/null @@ -1,3 +0,0 @@ - \ No newline at end of file From c1342c6171f92213acd7a8624a78147ef29e9e23 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 12:08:14 +0200 Subject: [PATCH 22/41] [BEE-30772] fix different issues Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 2 +- .../plugins/kubernetes/PodTemplate.java | 35 ++++++------------- .../plugins/kubernetes/Messages.properties | 1 + .../kubernetes/PodTemplate/index.jelly | 9 ++--- .../{sidepanel.jelly => sidepanelx.jelly} | 0 5 files changed, 15 insertions(+), 32 deletions(-) rename src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/{sidepanel.jelly => sidepanelx.jelly} (100%) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index a796e649f7..9f6a915e91 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -643,7 +643,7 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE String proposedName = result.name; if (!proposedName.equals(this.name) && j.getCloud(proposedName) != null) { - throw new Descriptor.FormException(jenkins.agents.Messages.CloudSet_CloudAlreadyExists(proposedName), "name"); + throw new Descriptor.FormException(Messages.CloudAlreadyExists(proposedName), "name"); } result.templates = this.templates; j.clouds.replace(this, result); diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index d351984390..183ad4d9bc 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -16,8 +16,6 @@ import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; @@ -49,10 +47,8 @@ import org.kohsuke.stapler.interceptor.RequirePOST; import org.kohsuke.stapler.verb.POST; import hudson.Extension; -import hudson.Functions; import hudson.Util; import hudson.model.labels.LabelAtom; -import hudson.slaves.Cloud; import hudson.slaves.NodeProperty; import hudson.util.FormApply; import hudson.util.XStream2; @@ -644,7 +640,7 @@ public void addEnvVars(List envVars) { } /** - * Deletes the cloud. + * Deletes the template. */ @RequirePOST public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException { @@ -662,27 +658,16 @@ public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws I @POST public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { - String context = Functions.getNearestAncestorUrl(req, this); - // Define regular expressions to match the desired substrings - // there maybe a better way to do this, but I don't know how to do it. - String regex1 = ".*/cloud/(.*)/template/(.*)"; - Pattern pattern = Pattern.compile(regex1); - Matcher matcher = pattern.matcher(context); - - // Find and extract the substrings - if (matcher.find()) { - String cloudName = matcher.group(1); // cloud name - Jenkins j = Jenkins.get(); - Cloud cloud = j.getCloud(cloudName); - if (cloud instanceof KubernetesCloud) { - KubernetesCloud kubernetesCloud = (KubernetesCloud) cloud; - // maybe there is a smarter way to modify? - kubernetesCloud.removeTemplate(this); - PodTemplate newTemplate = reconfigure(req, req.getSubmittedForm()); - kubernetesCloud.addTemplate(newTemplate); - j.save(); - } + Jenkins j = Jenkins.get(); + j.checkPermission(Jenkins.ADMINISTER); + KubernetesCloud kubernetesCloud = req.findAncestorObject(KubernetesCloud.class); + if (kubernetesCloud == null) { + throw new IllegalStateException("Cloud could not be found"); } + kubernetesCloud.removeTemplate(this); + PodTemplate newTemplate = reconfigure(req, req.getSubmittedForm()); + kubernetesCloud.addTemplate(newTemplate); + j.save(); // take the user back. return FormApply.success("../../templates"); } diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index b520642c2d..454d373518 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -10,3 +10,4 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo variable to a valid directory in the pod template definition. KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} TemplateAlreadyExists=Template called ‘{0}’ already exists +CloudAlreadyExists=Cloud called ‘{0}’ already exists \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly index 6821dd66a5..52f60a7163 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly @@ -1,8 +1,10 @@ - + + +

${%Pod template settings}

@@ -18,11 +20,6 @@ ${%Back to pod templates} - - - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanelx.jelly similarity index 100% rename from src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly rename to src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanelx.jelly From bee1a7f908e536b3dc5a5f83c57ff3f2d2019181 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 13 Oct 2023 13:43:25 +0200 Subject: [PATCH 23/41] [BEE-30772] fix test Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 2 +- .../kubernetes/KubernetesCloud/templates.jelly | 4 ++-- .../plugins/kubernetes/Messages.properties | 4 ++-- .../{sidepanelx.jelly => sidepanel.jelly} | 2 +- .../plugins/kubernetes/KubernetesCloudTest.java | 15 ++++++--------- 5 files changed, 12 insertions(+), 15 deletions(-) rename src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/{sidepanelx.jelly => sidepanel.jelly} (95%) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 9f6a915e91..a2d3a20119 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -643,7 +643,7 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE String proposedName = result.name; if (!proposedName.equals(this.name) && j.getCloud(proposedName) != null) { - throw new Descriptor.FormException(Messages.CloudAlreadyExists(proposedName), "name"); + throw new Descriptor.FormException(Messages.cloudAlreadyExists(proposedName), "name"); } result.templates = this.templates; j.clouds.replace(this, result); diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 940d0ce92f..797110684d 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -31,7 +31,7 @@ - + ${%Add a pod template} @@ -76,7 +76,7 @@
No pod template added yet.
- + ${%Add a pod template} diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index 454d373518..9e553abac2 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -9,5 +9,5 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo entry in /etc/passwd. Please add a user to your Dockerfile or set the HOME environment \ variable to a valid directory in the pod template definition. KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} -TemplateAlreadyExists=Template called ‘{0}’ already exists -CloudAlreadyExists=Cloud called ‘{0}’ already exists \ No newline at end of file +templateAlreadyExists=Template called ‘{0}’ already exists +cloudAlreadyExists=Cloud called ‘{0}’ already exists \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanelx.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly similarity index 95% rename from src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanelx.jelly rename to src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly index c3ff127310..5ffc89185f 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanelx.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly @@ -28,7 +28,7 @@ THE SOFTWARE. - + diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java index 7cdef6c017..9bed5e9ae0 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java @@ -20,6 +20,7 @@ import org.htmlunit.ElementNotFoundException; import org.htmlunit.html.DomElement; import org.htmlunit.html.DomNodeList; +import org.htmlunit.html.HtmlAnchor; import org.htmlunit.html.HtmlButton; import org.htmlunit.html.HtmlElement; import org.htmlunit.html.HtmlForm; @@ -260,17 +261,13 @@ public void defaultWorkspaceVolume() throws Exception { j.jenkins.clouds.add(cloud); j.jenkins.save(); JenkinsRule.WebClient wc = j.createWebClient(); - HtmlPage p = wc.goTo("cloud/kubernetes/configure"); - HtmlForm f = p.getFormByName("config"); - HtmlButton buttonExtends = getButton(f, "Pod Templates"); - buttonExtends.click(); - HtmlButton buttonAdd = getButton(f, "Add Pod Template"); - buttonAdd.click(); + HtmlPage p = wc.goTo("cloud/kubernetes/new"); + HtmlForm f= p.getFormByName("config"); + HtmlInput templateName = getInputByName(f, "_.name"); + templateName.setValue("default-workspace-volume"); + // make sure the details button still works HtmlButton buttonDetails = getButton(f, "Pod Template details"); buttonDetails.click(); - DomElement templates = p.getElementByName("templates"); - HtmlInput templateName = getInputByName(templates, "_.name"); - templateName.setValue("default-workspace-volume"); j.submit(f); cloud = j.jenkins.clouds.get(KubernetesCloud.class); PodTemplate podTemplate = cloud.getTemplates().get(0); From 3c2a4a30c1c053b50d857afc7d0b443bbc0a9fae Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 16 Oct 2023 11:03:32 +0200 Subject: [PATCH 24/41] [BEE-30772] better code thanks to vincent Signed-off-by: Thorsten Scherler --- pom.xml | 2 +- .../plugins/kubernetes/KubernetesCloud.java | 29 --- .../plugins/kubernetes/PodTemplateAction.java | 45 ---- .../kubernetes/KubernetesCloud/new.jelly | 2 +- .../{sidepanelx.jelly => sidepanel.jelly} | 2 +- .../KubernetesCloud/sidepanel.properties | 1 + .../KubernetesCloud/templates.jelly | 17 +- .../kubernetes/PodTemplate/config.jelly | 197 +++++++++--------- .../kubernetes/PodTemplate/delete.jelly | 17 -- .../kubernetes/PodTemplate/delete.properties | 2 - .../kubernetes/PodTemplate/index.jelly | 13 +- .../kubernetes/PodTemplate/sidepanel.jelly | 9 +- .../PodTemplate/sidepanel.properties | 1 + 13 files changed, 114 insertions(+), 223 deletions(-) delete mode 100644 src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java rename src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/{sidepanelx.jelly => sidepanel.jelly} (95%) create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties create mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties diff --git a/pom.xml b/pom.xml index 11977b5c42..cb48a0a041 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ - 2.414.2 + 2.415 2.401.x 2357.v1043f8578392 false diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index a2d3a20119..b1bacff006 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -618,18 +618,6 @@ public PodTemplate getTemplate(@NonNull String id) { return getTemplateById(id); } - public PodTemplate currentTemplate; - - public void doTemplates(StaplerRequest req, StaplerResponse rsp, @QueryParameter String id) - throws IOException, ServletException { - if (id != null) { - currentTemplate = getTemplateById(id); - } else { - currentTemplate = null; - } - req.getView(this, "templates.jelly").forward(req, rsp); - } - @POST public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { @@ -652,23 +640,6 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE return FormApply.success(".."); } - @POST - public HttpResponse doUpdateTemplate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { - Jenkins j = Jenkins.get(); - j.checkPermission(Jenkins.ADMINISTER); - removeTemplate(currentTemplate); - PodTemplate newTemplate = reconfigureTemplate(req, req.getSubmittedForm()); - addTemplate(newTemplate); - j.save(); - // take the user back. - return FormApply.success("./templates"); - } - - private PodTemplate reconfigureTemplate(@NonNull final StaplerRequest req, JSONObject form) throws Descriptor.FormException { - if (form == null) return null; - return currentTemplate.getDescriptor().newInstance(req, form); - } - @CheckForNull public PodTemplate getTemplateById(@NonNull String id) { return getAllTemplates().stream().filter(t -> id.equals(t.getId())).findFirst().orElse(null); diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java deleted file mode 100644 index 13cb43c3ac..0000000000 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplateAction.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.csanchez.jenkins.plugins.kubernetes; - -import edu.umd.cs.findbugs.annotations.NonNull; -import hudson.Extension; -import hudson.model.Action; -import hudson.slaves.Cloud; -import java.util.Collection; -import java.util.Collections; -import jenkins.model.TransientActionFactory; - -@Extension -public class PodTemplateAction implements Action{ - - @Override - public String getIconFileName() { - return "symbol-details"; - } - - @Override - public String getDisplayName() { - return "Pod templates"; - } - - @Override - public String getUrlName() { - return "templates"; - } - - @Extension - public static final class CloudActionFactory extends TransientActionFactory { - @Override - public Class type() { - return Cloud.class; - } - - @NonNull - @Override - public Collection createFor(@NonNull Cloud target) { - if (target instanceof KubernetesCloud) { - return Collections.singleton(new PodTemplateAction()); - } - return Collections.emptyList(); - } - } -} diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index d4ee863839..11640e0467 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -1,6 +1,6 @@ - + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanelx.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly similarity index 95% rename from src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanelx.jelly rename to src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly index 6a19870a1e..7f1f8db779 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanelx.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly @@ -28,7 +28,7 @@ THE SOFTWARE. - + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties new file mode 100644 index 0000000000..91bc5ed84a --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties @@ -0,0 +1 @@ +delete.cloud=Delete the cloud? diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 797110684d..2aa29cb491 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -2,11 +2,9 @@ - - - - + @@ -51,18 +49,13 @@ - ${template.name} + ${template.name} @@ -89,4 +82,4 @@ - \ No newline at end of file + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly index bb7c393835..4c6a259424 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly @@ -12,105 +12,102 @@ - - - - - - - - - - - - ${it.description} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + ${it.description} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly deleted file mode 100644 index b981f02f11..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.jelly +++ /dev/null @@ -1,17 +0,0 @@ - - - - - -
-

${%delete.template(it.name)}

- - - - ${%No} - - -
-
-
-
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties deleted file mode 100644 index 135f38207b..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/delete.properties +++ /dev/null @@ -1,2 +0,0 @@ -title=Delete the pod template ‘{0}‘? -delete.template=Delete the pod template ‘{0}’? \ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly index 52f60a7163..b6f04f2968 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/index.jelly @@ -1,10 +1,10 @@ - + - + - +

${%Pod template settings}

@@ -17,15 +17,12 @@ - - ${%Back to pod templates} - - +
-
\ No newline at end of file + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly index 5ffc89185f..0e17aa3fa1 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly @@ -27,15 +27,10 @@ THE SOFTWARE. - - - - + - - - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties new file mode 100644 index 0000000000..8dee41200a --- /dev/null +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties @@ -0,0 +1 @@ +delete.template=Delete the pod template? From 4442a4a1b8364fae9dec13904943d552abde78c9 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 16 Oct 2023 12:00:10 +0200 Subject: [PATCH 25/41] [BEE-30772] fix test Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 5 ----- .../plugins/kubernetes/KubernetesCloudTest.java | 15 --------------- 2 files changed, 20 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index b1bacff006..d0a6bce3c1 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -19,8 +19,6 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.servlet.ServletException; import edu.umd.cs.findbugs.annotations.CheckForNull; @@ -52,14 +50,12 @@ import edu.umd.cs.findbugs.annotations.NonNull; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.Extension; -import hudson.Functions; import hudson.TcpSlaveAgentListener; import hudson.Util; import hudson.init.InitMilestone; import hudson.init.Initializer; import hudson.model.Descriptor; import hudson.model.DescriptorVisibilityFilter; -import hudson.model.Failure; import hudson.model.Label; import hudson.security.ACL; import hudson.slaves.Cloud; @@ -77,7 +73,6 @@ import static org.csanchez.jenkins.plugins.kubernetes.MetricNames.metricNameForLabel; import jenkins.websocket.WebSockets; -import net.sf.json.JSONObject; /** * Kubernetes cloud provider. diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java index 9bed5e9ae0..904b895eee 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java @@ -265,9 +265,6 @@ public void defaultWorkspaceVolume() throws Exception { HtmlForm f= p.getFormByName("config"); HtmlInput templateName = getInputByName(f, "_.name"); templateName.setValue("default-workspace-volume"); - // make sure the details button still works - HtmlButton buttonDetails = getButton(f, "Pod Template details"); - buttonDetails.click(); j.submit(f); cloud = j.jenkins.clouds.get(KubernetesCloud.class); PodTemplate podTemplate = cloud.getTemplates().get(0); @@ -275,18 +272,6 @@ public void defaultWorkspaceVolume() throws Exception { assertEquals(WorkspaceVolume.getDefault(), podTemplate.getWorkspaceVolume()); } - // TODO 2.385+ delete - private HtmlButton getButton(HtmlForm f, String buttonText) { - HtmlButton button; - try { - button = HtmlFormUtil.getButtonByCaption(f, buttonText); - } catch (ElementNotFoundException e) { - // before https://github.com/jenkinsci/jenkins/pull/7173 the 3 dots where added by core - button = HtmlFormUtil.getButtonByCaption(f, buttonText + "..."); - } - return button; - } - @Test public void minRetentionTimeout() { KubernetesCloud cloud = new KubernetesCloud("kubernetes"); From a6295db191367b5a5fdd4ff7da1636291d0f0f28 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 16 Oct 2023 19:30:38 +0200 Subject: [PATCH 26/41] Update pom.xml Co-authored-by: Vincent Latombe --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index cb48a0a041..dd4f069a73 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,6 @@ - 2.415 2.401.x 2357.v1043f8578392 From 7b875edafe3add3d9603faebad32ae35601e5bf6 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 16 Oct 2023 19:43:30 +0200 Subject: [PATCH 27/41] [BEE-30772] remove obsolete code Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 4 - .../KubernetesCloud/templates.jelly | 120 ++++++++---------- 2 files changed, 50 insertions(+), 74 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index d0a6bce3c1..211ffeac4d 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -764,10 +764,6 @@ public HttpResponse doCreate(StaplerRequest req, StaplerResponse rsp) throws IOE return FormApply.success("templates"); } - public PodTemplate getNewTemplate(){ - return new PodTemplate(); - } - @Extension public static class DescriptorImpl extends Descriptor { @Override diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 2aa29cb491..4b14608766 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -7,79 +7,59 @@ - - - - - - - - -

${%Pod template settings}

- - - - - - - - -
- - - - - - - ${%Add a pod template} - - - - - - - - - - -
${%Name} + + + + + + ${%Add a pod template} + + + + + + + + + + + + + + + + + - - - - - - - - - -
${%Name} +
+ ${template.name} + +
+ + + +
+
- ${template.name} - -
- - - -
-
-
- -
-
+ + +
+
+ +
+
+
+
No pod template added yet.
-
-
-
-
-
+
+
+
+
+
From a5699ee66d5e073ed5513f48b97201338e6c3ddc Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 17 Oct 2023 09:50:56 +0200 Subject: [PATCH 28/41] [BEE-30772] remove obsolete code Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly deleted file mode 100644 index cc633a4c64..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplatesAction/index.jelly +++ /dev/null @@ -1,4 +0,0 @@ - - -templates - \ No newline at end of file From bcafb811aa22722a365d7414d9c9b5e206776a5d Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Wed, 18 Oct 2023 14:05:37 +0200 Subject: [PATCH 29/41] [BEE-30772] add more tests a Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/PodTemplate.java | 3 +-- .../plugins/kubernetes/KubernetesCloudTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 183ad4d9bc..13e76528c5 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -44,7 +44,6 @@ import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; -import org.kohsuke.stapler.interceptor.RequirePOST; import org.kohsuke.stapler.verb.POST; import hudson.Extension; import hudson.Util; @@ -642,7 +641,7 @@ public void addEnvVars(List envVars) { /** * Deletes the template. */ - @RequirePOST + @POST public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException { Jenkins j = Jenkins.get(); j.checkPermission(Jenkins.ADMINISTER); diff --git a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java index 904b895eee..f840033990 100644 --- a/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java +++ b/src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloudTest.java @@ -270,6 +270,17 @@ public void defaultWorkspaceVolume() throws Exception { PodTemplate podTemplate = cloud.getTemplates().get(0); assertEquals("default-workspace-volume", podTemplate.getName()); assertEquals(WorkspaceVolume.getDefault(), podTemplate.getWorkspaceVolume()); + // test whether we can edit a template + p = wc.goTo("cloud/kubernetes/template/" + podTemplate.getId() + "/"); + f= p.getFormByName("config"); + templateName = getInputByName(f, "_.name"); + templateName.setValue("default-workspace"); + j.submit(f); + podTemplate = cloud.getTemplates().get(0); + assertEquals("default-workspace", podTemplate.getName()); + p = wc.goTo("cloud/kubernetes/templates"); + DomElement row = p.getElementById("template_"+podTemplate.getId()); + assertTrue(row != null); } @Test From b1edb7f591aaa9798fbd51fe2e9ec78c7a0d5349 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Thu, 19 Oct 2023 10:45:31 +0200 Subject: [PATCH 30/41] Apply suggestions from code review Co-authored-by: Vincent Latombe --- .../jenkins/plugins/kubernetes/KubernetesCloud.java | 9 +++++++-- .../jenkins/plugins/kubernetes/KubernetesCloud/new.jelly | 4 +--- .../plugins/kubernetes/KubernetesCloud/templates.jelly | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 211ffeac4d..880e317b4b 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -620,7 +620,7 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE j.checkPermission(Jenkins.ADMINISTER); Cloud cloud = j.getCloud(this.name); if (cloud == null) { - throw new ServletException("No such cloud " + this.name); + return HttpResponses.notFound(); } KubernetesCloud result = (KubernetesCloud) cloud.reconfigure(req, req.getSubmittedForm()); String proposedName = result.name; @@ -750,6 +750,11 @@ public void setWaitForPodSec(Integer waitForPodSec) { this.waitForPodSec = waitForPodSec; } + @Restricted(NoExternalUse.class) + public PodTemplate.DescriptorImpl getTemplateDescriptor() { + return (PodTemplate.DescriptorImpl) Jenkins.get().getDescriptorOrDie(PodTemplate.class); + } + /** * Creating a new template. */ @@ -757,7 +762,7 @@ public void setWaitForPodSec(Integer waitForPodSec) { public HttpResponse doCreate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { Jenkins j = Jenkins.get(); j.checkPermission(Jenkins.ADMINISTER); - PodTemplate newTemplate=new PodTemplate().getDescriptor().newInstance(req, req.getSubmittedForm()); + PodTemplate newTemplate = getTemplateDescriptor().newInstance(req, req.getSubmittedForm()); addTemplate(newTemplate); j.save(); // take the user back. diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index 11640e0467..623966585d 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -2,8 +2,6 @@ - - @@ -11,7 +9,7 @@ - + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly index 4b14608766..d6332b5cde 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/templates.jelly @@ -18,7 +18,7 @@ - + From 3be2fde0c3e3ea8e675205b42f9ef2a73bef149b Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Thu, 19 Oct 2023 11:23:09 +0200 Subject: [PATCH 31/41] [BEE-30772] fix merge and apply suggestions Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 3 ++ .../plugins/kubernetes/PodTemplate.java | 7 ++-- .../kubernetes/KubernetesCloud/config.jelly | 19 ++++++++++ .../KubernetesCloud/configure.jelly | 28 -------------- .../kubernetes/KubernetesCloud/new.jelly | 21 +++++++++- .../KubernetesCloud/sidepanel.jelly | 6 +-- .../KubernetesCloud/templates.jelly | 38 ++++++++++++++----- .../kubernetes/PodTemplate/config.jelly | 18 ++++++++- .../kubernetes/PodTemplate/index.jelly | 19 ++++++++++ .../kubernetes/PodTemplate/sidepanel.jelly | 7 +--- 10 files changed, 111 insertions(+), 55 deletions(-) delete mode 100644 src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 880e317b4b..257c169a79 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -33,6 +33,8 @@ import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuth; import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthException; import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; @@ -62,6 +64,7 @@ import hudson.slaves.NodeProvisioner; import hudson.util.FormApply; import hudson.util.FormValidation; +import hudson.util.HttpResponses; import hudson.util.ListBoxModel; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 13e76528c5..86534821d2 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -38,6 +38,7 @@ import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.DoNotUse; import org.kohsuke.accmod.restrictions.NoExternalUse; +import org.kohsuke.stapler.AncestorInPath; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.HttpRedirect; @@ -642,10 +643,9 @@ public void addEnvVars(List envVars) { * Deletes the template. */ @POST - public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws IOException { + public HttpResponse doDoDelete(@AncestorInPath KubernetesCloud kubernetesCloud) throws IOException { Jenkins j = Jenkins.get(); j.checkPermission(Jenkins.ADMINISTER); - KubernetesCloud kubernetesCloud = req.findAncestorObject(KubernetesCloud.class); if (kubernetesCloud == null) { throw new IllegalStateException("Cloud could not be found"); } @@ -656,10 +656,9 @@ public HttpResponse doDoDelete(StaplerRequest req, StaplerResponse rsp) throws I } @POST - public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + public HttpResponse doConfigSubmit(StaplerRequest req, @AncestorInPath KubernetesCloud kubernetesCloud) throws IOException, ServletException, Descriptor.FormException { Jenkins j = Jenkins.get(); j.checkPermission(Jenkins.ADMINISTER); - KubernetesCloud kubernetesCloud = req.findAncestorObject(KubernetesCloud.class); if (kubernetesCloud == null) { throw new IllegalStateException("Cloud could not be found"); } diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly index d089ffd59f..69aaabf1d1 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/config.jelly @@ -1,3 +1,22 @@ + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly deleted file mode 100644 index eee41a214d..0000000000 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/configure.jelly +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - -

${%Cloud settings}

- - - - - - - - - - - - - - - - -
-
-
\ No newline at end of file diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index 623966585d..611bf5f3d7 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -1,3 +1,22 @@ + @@ -9,7 +28,7 @@ - + diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly index 7f1f8db779..868b56e678 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly @@ -1,18 +1,14 @@ @@ -7,18 +26,16 @@ - - - - - - ${%Add a pod template} - - - - + + + + + ${%Add a pod template} + + +
@@ -45,6 +62,7 @@
+
diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly index 4c6a259424..86d1018374 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/config.jelly @@ -1,5 +1,21 @@ diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly index 0e17aa3fa1..81fd388544 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.jelly @@ -1,18 +1,14 @@ - From 31be21827c2ffaec463419a4871354a62c4bd761 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Thu, 19 Oct 2023 11:24:02 +0200 Subject: [PATCH 32/41] [BEE-30772] revert test Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/KubernetesCloud/new.jelly | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index 611bf5f3d7..dd10916bcd 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -28,7 +28,7 @@ THE SOFTWARE. - + From 0e3cbb0037739d67d80bdbda9a9975f74427ef2e Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 20 Oct 2023 11:12:29 +0200 Subject: [PATCH 33/41] Update src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly Co-authored-by: Vincent Latombe --- .../jenkins/plugins/kubernetes/KubernetesCloud/new.jelly | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly index dd10916bcd..c6a4a7f022 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/new.jelly @@ -28,7 +28,8 @@ THE SOFTWARE. - + + From 0986f8ea2ca9895158e3a287b02a2be4fbebd2b4 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 20 Oct 2023 11:30:10 +0200 Subject: [PATCH 34/41] [BEE-30772] fix jenkins bug in renaming cloud and redirect Signed-off-by: Thorsten Scherler --- .../csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 257c169a79..f5699516cb 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -617,7 +617,7 @@ public PodTemplate getTemplate(@NonNull String id) { } @POST - public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { + public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { Jenkins j = Jenkins.get(); j.checkPermission(Jenkins.ADMINISTER); @@ -635,7 +635,7 @@ public HttpResponse doUpdate(StaplerRequest req, StaplerResponse rsp) throws IOE j.clouds.replace(this, result); j.save(); // take the user back to the cloud top page. - return FormApply.success(".."); + return FormApply.success("../.."); } @CheckForNull From dd6595950ee602e67d0dba3845ffd02ee08c218f Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Fri, 20 Oct 2023 12:41:18 +0200 Subject: [PATCH 35/41] [BEE-30772] add fixme note Signed-off-by: Thorsten Scherler --- .../org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index f5699516cb..ebc3e068cb 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -616,6 +616,7 @@ public PodTemplate getTemplate(@NonNull String id) { return getTemplateById(id); } + // TODO: Remove when JENKINS-71737 is fixed @POST public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { From ea4047aee9970a6d2bb2356ec9dae50ad8191860 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 23 Oct 2023 15:58:36 +0200 Subject: [PATCH 36/41] Apply suggestions from code review Co-authored-by: Vincent Latombe --- .../jenkins/plugins/kubernetes/KubernetesCloud.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index ebc3e068cb..63a1e27ab2 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -106,10 +106,6 @@ public class KubernetesCloud extends Cloud { @NonNull private List templates = new ArrayList<>(); - - public boolean hasTemplates() { - return !templates.isEmpty(); - } private String serverUrl; private boolean useJenkinsProxy; @CheckForNull @@ -611,6 +607,7 @@ public PodTemplate getTemplate(@CheckForNull Label label) { return PodTemplateUtils.getTemplateByLabel(label, getAllTemplates()); } + @SuppressWarnings("unused ") // stapler @CheckForNull public PodTemplate getTemplate(@NonNull String id) { return getTemplateById(id); @@ -754,7 +751,7 @@ public void setWaitForPodSec(Integer waitForPodSec) { this.waitForPodSec = waitForPodSec; } - @Restricted(NoExternalUse.class) + @Restricted(NoExternalUse.class) // jelly public PodTemplate.DescriptorImpl getTemplateDescriptor() { return (PodTemplate.DescriptorImpl) Jenkins.get().getDescriptorOrDie(PodTemplate.class); } @@ -1042,5 +1039,4 @@ public static void hpiRunInit() { } } } - } From c7180ab675d78b5c1255e129ca723ca766731f06 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Mon, 23 Oct 2023 16:03:46 +0200 Subject: [PATCH 37/41] [BEE-30772] remove fix for core Signed-off-by: Thorsten Scherler --- .../plugins/kubernetes/KubernetesCloud.java | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 63a1e27ab2..0afb5eb51f 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -613,29 +613,6 @@ public PodTemplate getTemplate(@NonNull String id) { return getTemplateById(id); } - // TODO: Remove when JENKINS-71737 is fixed - @POST - public HttpResponse doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException { - - Jenkins j = Jenkins.get(); - j.checkPermission(Jenkins.ADMINISTER); - Cloud cloud = j.getCloud(this.name); - if (cloud == null) { - return HttpResponses.notFound(); - } - KubernetesCloud result = (KubernetesCloud) cloud.reconfigure(req, req.getSubmittedForm()); - String proposedName = result.name; - if (!proposedName.equals(this.name) - && j.getCloud(proposedName) != null) { - throw new Descriptor.FormException(Messages.cloudAlreadyExists(proposedName), "name"); - } - result.templates = this.templates; - j.clouds.replace(this, result); - j.save(); - // take the user back to the cloud top page. - return FormApply.success("../.."); - } - @CheckForNull public PodTemplate getTemplateById(@NonNull String id) { return getAllTemplates().stream().filter(t -> id.equals(t.getId())).findFirst().orElse(null); From 2775886a5acca5d3b4635ced69926e283c75edc9 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 24 Oct 2023 09:02:21 +0200 Subject: [PATCH 38/41] Apply suggestions from code review Co-authored-by: Vincent Latombe --- .../org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java | 1 - .../org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java index 0afb5eb51f..23c1a33105 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud.java @@ -64,7 +64,6 @@ import hudson.slaves.NodeProvisioner; import hudson.util.FormApply; import hudson.util.FormValidation; -import hudson.util.HttpResponses; import hudson.util.ListBoxModel; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 86534821d2..9bad762ff7 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -44,7 +44,6 @@ import org.kohsuke.stapler.HttpRedirect; import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.StaplerRequest; -import org.kohsuke.stapler.StaplerResponse; import org.kohsuke.stapler.verb.POST; import hudson.Extension; import hudson.Util; From 08866ecd1bb6d99c70cb8d370fb95d94f41a56aa Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 24 Oct 2023 10:00:01 +0200 Subject: [PATCH 39/41] [BEE-30772] removed unused Signed-off-by: Thorsten Scherler --- .../csanchez/jenkins/plugins/kubernetes/Messages.properties | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties index 9e553abac2..ce43dbc89a 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/Messages.properties @@ -8,6 +8,4 @@ KubernetesSlave.HomeWarning=[WARNING] HOME is set to / in the jnlp container. Yo troubles when using tools or ssh client. This usually happens if the uid doesn't have any \ entry in /etc/passwd. Please add a user to your Dockerfile or set the HOME environment \ variable to a valid directory in the pod template definition. -KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} -templateAlreadyExists=Template called ‘{0}’ already exists -cloudAlreadyExists=Cloud called ‘{0}’ already exists \ No newline at end of file +KubernetesCloudNotAllowed.Description=Kubernetes cloud {0} is not allowed for folder containing job {1} \ No newline at end of file From 697f605da6290a35de5c3f04d984f5ac2751f539 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 24 Oct 2023 10:32:30 +0200 Subject: [PATCH 40/41] Apply suggestions from code review Co-authored-by: Antoine Neveux Co-authored-by: Vincent Latombe --- .../org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java | 4 +++- .../plugins/kubernetes/KubernetesCloud/sidepanel.jelly | 1 - .../plugins/kubernetes/KubernetesCloud/sidepanel.properties | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java index 9bad762ff7..120b0ffeb6 100644 --- a/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java +++ b/src/main/java/org/csanchez/jenkins/plugins/kubernetes/PodTemplate.java @@ -670,7 +670,9 @@ public HttpResponse doConfigSubmit(StaplerRequest req, @AncestorInPath Kubernete } private PodTemplate reconfigure(@NonNull final StaplerRequest req, JSONObject form) throws Descriptor.FormException { - if (form == null) return null; + if (form == null) { + return null; + } return getDescriptor().newInstance(req, form); } diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly index 868b56e678..f99590aec5 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.jelly @@ -17,7 +17,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties index 91bc5ed84a..2e7d5f3873 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/KubernetesCloud/sidepanel.properties @@ -1 +1 @@ -delete.cloud=Delete the cloud? +delete.cloud=Delete the cloud ''{0}'' ? From 18c219cede82f1a6232f00b26404397e60a53fd1 Mon Sep 17 00:00:00 2001 From: Thorsten Scherler Date: Tue, 24 Oct 2023 13:08:01 +0200 Subject: [PATCH 41/41] [BEE-30772] add name of the pod to confirmation Signed-off-by: Thorsten Scherler --- .../jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties index 8dee41200a..71e2ae244c 100644 --- a/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties +++ b/src/main/resources/org/csanchez/jenkins/plugins/kubernetes/PodTemplate/sidepanel.properties @@ -1 +1 @@ -delete.template=Delete the pod template? +delete.template=Delete the pod template ''{0}''?