From ab01334d37438a6c83deec63db4adb1926f3ddc1 Mon Sep 17 00:00:00 2001 From: Faith Buehler <085451@sentry.com> Date: Thu, 19 Jan 2023 13:59:22 -0600 Subject: [PATCH] Added multiple labels for ECSTaskTemplate --- .../jenkins/plugins/amazonecs/ECSCloud.java | 9 +++- .../plugins/amazonecs/ECSTaskTemplate.java | 7 +++- .../amazonecs/ECSTaskTemplate/config.jelly | 2 +- .../plugins/amazonecs/ECSCloudTest.java | 41 ++++++++++++++++++- 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java index 2ce3182a..2668c86d 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java @@ -237,7 +237,14 @@ private ECSTaskTemplate getTemplate(Label label) { } for (ECSTaskTemplate t : getAllTemplates()) { if (label.matches(t.getLabelSet())) { - return t; + return new ECSTaskTemplate(t.getTemplateName(), label.getName(), t.getAgentContainerName(), t.getTaskDefinitionOverride(), + t.getTaskDefinitionOverride(), t.getImage(), t.getRepositoryCredentials(), t.getLaunchType(), t.getOperatingSystemFamily(), + t.getCpuArchitecture(), t.getDefaultCapacityProvider(), t.getCapacityProviderStrategies(), t.getNetworkMode(), t.getRemoteFSRoot(), + t.getUniqueRemoteFSRoot(), t.getPlatformVersion(), t.getMemory(), t.getMemoryReservation(), t.getCpu(), + t.getEphemeralStorageSizeInGiB(), t.getSubnets(), t.getSecurityGroups(), t.getAssignPublicIp(), t.getPrivileged(), + t.getContainerUser(), t.getKernelCapabilities(), t.getLogDriverOptions(), t.getTags(), t.getEnvironments(), + t.getExtraHosts(), t.getMountPoints(), t.getEfsMountPoints(), t.getPortMappings(), t.getExecutionRole(), + t.getPlacementStrategies(), t.getTaskrole(), t.getInheritFrom(), t.getSharedMemorySize(), t.isEnableExecuteCommand()); } } return null; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java index e7648a29..9d0b0f26 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java @@ -1394,7 +1394,12 @@ public FormValidation doCheckField(@QueryParameter("base") int base, @QueryParam } public Set getLabelSet() { - return Label.parse(label); + Set labelSet = new HashSet<>(); + for(String i : Arrays.asList(label.split(","))) + { + labelSet.addAll(Label.parse(i)); + } + return labelSet; } public String getDisplayName() { diff --git a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate/config.jelly b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate/config.jelly index 5a853faa..7cc10035 100644 --- a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate/config.jelly +++ b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate/config.jelly @@ -25,7 +25,7 @@ --> - + diff --git a/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloudTest.java b/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloudTest.java index 9cc6983d..caa6995b 100644 --- a/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloudTest.java +++ b/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloudTest.java @@ -2,6 +2,7 @@ import com.amazonaws.services.ecs.model.TaskDefinition; +import hudson.model.Label; import hudson.model.labels.LabelAtom; import hudson.slaves.NodeProvisioner.PlannedNode; import static junit.framework.TestCase.assertEquals; @@ -101,8 +102,8 @@ public void addDynamicTemplateRegistersTemplate() throws Exception { @Test public void provisionByLabelInheritFromUsingListOfLabels() throws Exception { - ECSCloud cloud = new ECSCloud("mycloud", "", "", "mycluster"); - ECSTaskTemplate expected = getTaskTemplate("somename","label1 label2 label3"); + ECSCloud cloud = new ECSCloud("myCloud", "", "", "myCluster"); + ECSTaskTemplate expected = getTaskTemplate("someNme","label1,label2,label3"); List currentTemplates = cloud.getTemplates(); List newTemplates = new LinkedList<>(currentTemplates); @@ -111,6 +112,42 @@ public void provisionByLabelInheritFromUsingListOfLabels() throws Exception { assertTrue(cloud.canProvision("label2")); } + @Test + public void cannotProvisionByLabelInheritFromUsingListOfLabels() throws Exception { + ECSCloud cloud = new ECSCloud("myCloud", "", "", "myCluster"); + ECSTaskTemplate expected = getTaskTemplate("someNme","label1,label2"); + + List currentTemplates = cloud.getTemplates(); + List newTemplates = new LinkedList<>(currentTemplates); + newTemplates.add(expected); + cloud.setTemplates(newTemplates); + assertTrue(!cloud.canProvision("label3")); + } + + @Test + public void provisionAgentByTemplateWithListOfLabels() throws Exception { + ECSCloud cloud = new ECSCloud("myCloud", "", "", "mycluster"); + ECSTaskTemplate expected = getTaskTemplate("someName","label1,label2,label3"); + + List currentTemplates = cloud.getTemplates(); + List newTemplates = new LinkedList<>(currentTemplates); + newTemplates.add(expected); + cloud.setTemplates(newTemplates); + assertTrue(cloud.canProvision(new LabelAtom("label1"))); + } + + @Test + public void cannotProvisionAgentByTemplateWithListOfLabels() throws Exception { + ECSCloud cloud = new ECSCloud("myCloud", "", "", "mycluster"); + ECSTaskTemplate expected = getTaskTemplate("someName","label1,label2"); + + List currentTemplates = cloud.getTemplates(); + List newTemplates = new LinkedList<>(currentTemplates); + newTemplates.add(expected); + cloud.setTemplates(newTemplates); + assertTrue(!cloud.canProvision(new LabelAtom("label3"))); + } + @Test public void removeJunkTemplateProducesNoError() throws Exception { ECSService ecsService = mock(ECSService.class);