From 77f1242ddd2dd4307b788e86422ace8acd1c8445 Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Sat, 16 Nov 2019 10:37:27 +0100 Subject: [PATCH] Move cloud configuration out of Configure System (#4339) * Move cloud configuration out of Configure System * Update display name * Add section header back --- .../model/GlobalCloudConfiguration.java | 54 ++++++++++++++----- .../hudson/model/ComputerSet/sidepanel.jelly | 3 +- .../jenkins/management/Messages.properties | 2 +- .../GlobalCloudConfiguration/config.groovy | 16 ------ .../GlobalCloudConfiguration/index.groovy | 51 ++++++++++++++++++ ...nfig_da.properties => index_da.properties} | 0 ...nfig_de.properties => index_de.properties} | 0 ...nfig_es.properties => index_es.properties} | 0 ...nfig_fr.properties => index_fr.properties} | 0 ...nfig_it.properties => index_it.properties} | 0 ...nfig_ja.properties => index_ja.properties} | 0 ...t_BR.properties => index_pt_BR.properties} | 0 ...nfig_sr.properties => index_sr.properties} | 0 ...h_TW.properties => index_zh_TW.properties} | 0 .../jenkins/model/Jenkins/_cloud-note.groovy | 19 +++++++ .../model/Jenkins/_cloud-note.properties | 1 + .../jenkins/model/Jenkins/configure.jelly | 2 + .../jenkins/model/Messages.properties | 2 + 18 files changed, 118 insertions(+), 32 deletions(-) delete mode 100644 core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config.groovy create mode 100644 core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index.groovy rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_da.properties => index_da.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_de.properties => index_de.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_es.properties => index_es.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_fr.properties => index_fr.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_it.properties => index_it.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_ja.properties => index_ja.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_pt_BR.properties => index_pt_BR.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_sr.properties => index_sr.properties} (100%) rename core/src/main/resources/jenkins/model/GlobalCloudConfiguration/{config_zh_TW.properties => index_zh_TW.properties} (100%) create mode 100644 core/src/main/resources/jenkins/model/Jenkins/_cloud-note.groovy create mode 100644 core/src/main/resources/jenkins/model/Jenkins/_cloud-note.properties diff --git a/core/src/main/java/jenkins/model/GlobalCloudConfiguration.java b/core/src/main/java/jenkins/model/GlobalCloudConfiguration.java index 9c6635ab05..9ac2222ad5 100644 --- a/core/src/main/java/jenkins/model/GlobalCloudConfiguration.java +++ b/core/src/main/java/jenkins/model/GlobalCloudConfiguration.java @@ -1,30 +1,56 @@ package jenkins.model; import hudson.Extension; +import hudson.RestrictedSince; +import hudson.model.Descriptor; +import hudson.model.RootAction; import hudson.slaves.Cloud; +import hudson.util.FormApply; import net.sf.json.JSONObject; import org.jenkinsci.Symbol; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; +import org.kohsuke.stapler.verb.POST; +import javax.annotation.CheckForNull; +import javax.servlet.ServletException; import java.io.IOException; /** - * Adds the {@link Cloud} configuration to the system config page. + * Provides a configuration form for {@link Jenkins#clouds}. * - *

- * This object just acts as a proxy to configure {@link Jenkins#clouds} - * - * @author Kohsuke Kawaguchi + * Has been overhauled in Jenkins 2.XXX to no longer contribute to Configure System, but be a standalone form. */ -@Extension(ordinal=-100) @Symbol("cloud") // historically this was placed at the very end of the configuration page -public class GlobalCloudConfiguration extends GlobalConfiguration { +@Extension +@Symbol("cloud") +@Restricted(NoExternalUse.class) +@RestrictedSince("TODO") +public class GlobalCloudConfiguration implements RootAction { + + @CheckForNull + @Override + public String getIconFileName() { + return null; + } + + @CheckForNull @Override - public boolean configure(StaplerRequest req, JSONObject json) throws FormException { - try { - Jenkins.get().clouds.rebuildHetero(req,json, Cloud.all(), "cloud"); - return true; - } catch (IOException e) { - throw new FormException(e,"clouds"); - } + public String getDisplayName() { + return Messages.GlobalCloudConfiguration_DisplayName(); + } + + @Override + public String getUrlName() { + return "configureClouds"; + } + + @POST + public void doConfigure(StaplerRequest req, StaplerResponse rsp) throws Descriptor.FormException, IOException, ServletException { + Jenkins.get().checkPermission(Jenkins.ADMINISTER); + JSONObject json = req.getSubmittedForm(); + Jenkins.get().clouds.rebuildHetero(req,json, Cloud.all(), "cloud"); + FormApply.success(req.getContextPath() + "/manage").generateResponse(req, rsp, null); } } diff --git a/core/src/main/resources/hudson/model/ComputerSet/sidepanel.jelly b/core/src/main/resources/hudson/model/ComputerSet/sidepanel.jelly index 59973506f5..1a9a257225 100644 --- a/core/src/main/resources/hudson/model/ComputerSet/sidepanel.jelly +++ b/core/src/main/resources/hudson/model/ComputerSet/sidepanel.jelly @@ -34,7 +34,8 @@ THE SOFTWARE. - + + diff --git a/core/src/main/resources/jenkins/management/Messages.properties b/core/src/main/resources/jenkins/management/Messages.properties index ce99fecf14..8e5e595a83 100644 --- a/core/src/main/resources/jenkins/management/Messages.properties +++ b/core/src/main/resources/jenkins/management/Messages.properties @@ -50,7 +50,7 @@ CliLink.Description=Access/manage Jenkins from your shell, or from your script. ConsoleLink.DisplayName=Script Console ConsoleLink.Description=Executes arbitrary script for administration/trouble-shooting/diagnostics. -NodesLink.DisplayName=Manage Nodes +NodesLink.DisplayName=Manage Nodes and Clouds NodesLink.Description=Add, remove, control and monitor the various nodes that Jenkins runs jobs on. ShutdownLink.DisplayName_prepare=Prepare for Shutdown diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config.groovy b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config.groovy deleted file mode 100644 index ac31668d48..0000000000 --- a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config.groovy +++ /dev/null @@ -1,16 +0,0 @@ -package jenkins.model.GlobalCloudConfiguration - -import hudson.slaves.Cloud - -def f=namespace(lib.FormTagLib) - -def clouds = Cloud.all() - -if (!clouds.isEmpty()) { - f.section(title:_("Cloud")) { - f.block { - f.hetero_list(name:"cloud", hasHeader:true, descriptors:Cloud.all(), items:app.clouds, - addCaption:_("Add a new cloud"), deleteCaption:_("Delete cloud")) - } - } -} diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index.groovy b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index.groovy new file mode 100644 index 0000000000..0d0657763e --- /dev/null +++ b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index.groovy @@ -0,0 +1,51 @@ +package jenkins.model.GlobalCloudConfiguration + +import hudson.slaves.Cloud + + +def f = namespace(lib.FormTagLib) +def l = namespace(lib.LayoutTagLib) +def st = namespace("jelly:stapler") + +l.layout(norefresh:true, permission:app.ADMINISTER, title:my.displayName) { + l.side_panel { + l.tasks { + l.task(icon:"icon-up icon-md", href:rootURL+'/', title:_("Back to Dashboard")) + l.task(icon:"icon-gear2 icon-md", href:"${rootURL}/computer/", title:_("Manage Nodes")) + } + } + l.main_panel { + h1 { + l.icon(class: 'icon-health-40to59 icon-xlg') + // TODO more appropriate icon + text(my.displayName) + } + + def clouds = Cloud.all() + + if (!clouds.isEmpty()) { + p() + div(class:"behavior-loading", _("LOADING")) + + f.form(method:"post",name:"config",action:"configure") { + f.block { + f.hetero_list(name:"cloud", hasHeader:true, descriptors:Cloud.all(), items:app.clouds, + addCaption:_("Add a new cloud"), deleteCaption:_("Delete cloud")) + } + + f.bottomButtonBar { + f.submit(value:_("Save")) + f.apply(value:_("Apply")) + } + } + st.adjunct(includes: "lib.form.confirm") + } else { + p { + _("There are no cloud implementations for dynamically allocated agents installed.") + a(href: rootURL + "/pluginManager/available") { + _("Go to plugin manager.") + } + } + } + } +} diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_da.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_da.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_da.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_da.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_de.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_de.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_de.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_de.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_es.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_es.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_es.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_es.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_fr.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_fr.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_fr.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_fr.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_it.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_it.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_it.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_it.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_ja.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_ja.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_ja.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_ja.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_pt_BR.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_pt_BR.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_pt_BR.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_pt_BR.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_sr.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_sr.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_sr.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_sr.properties diff --git a/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_zh_TW.properties b/core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_zh_TW.properties similarity index 100% rename from core/src/main/resources/jenkins/model/GlobalCloudConfiguration/config_zh_TW.properties rename to core/src/main/resources/jenkins/model/GlobalCloudConfiguration/index_zh_TW.properties diff --git a/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.groovy b/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.groovy new file mode 100644 index 0000000000..9b4a929d97 --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.groovy @@ -0,0 +1,19 @@ +package jenkins.model.Jenkins + +import hudson.slaves.Cloud + +// TODO remove this once it's been long enough that users got used to this. + +def f = namespace(lib.FormTagLib) + +def clouds = Cloud.all() + +if (!clouds.isEmpty()) { + f.section(title: _("Cloud")) { + f.block { + div(class: 'alert alert-info') { + raw(_("note", rootURL)) + } + } + } +} diff --git a/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.properties b/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.properties new file mode 100644 index 0000000000..d9cada5eb8 --- /dev/null +++ b/core/src/main/resources/jenkins/model/Jenkins/_cloud-note.properties @@ -0,0 +1 @@ +note=The cloud configuration has moved to a separate configuration page. diff --git a/core/src/main/resources/jenkins/model/Jenkins/configure.jelly b/core/src/main/resources/jenkins/model/Jenkins/configure.jelly index a6154bbc4e..a85ab58ade 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/configure.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/configure.jelly @@ -52,6 +52,8 @@ THE SOFTWARE. + + diff --git a/core/src/main/resources/jenkins/model/Messages.properties b/core/src/main/resources/jenkins/model/Messages.properties index c07ec98272..eb5effcbfd 100644 --- a/core/src/main/resources/jenkins/model/Messages.properties +++ b/core/src/main/resources/jenkins/model/Messages.properties @@ -74,3 +74,5 @@ BuildDiscarderProperty.displayName=Discard old builds EnforceSlaveAgentPortAdministrativeMonitor.displayName=Enforce TCP Agent Port CLI.disable-job.shortDescription=Disables a job. CLI.enable-job.shortDescription=Enables a job. + +GlobalCloudConfiguration.DisplayName=Configure Clouds -- GitLab