diff --git a/src/main/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesScheduler.java b/src/main/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesScheduler.java index 242c4a5f..5ccf1d40 100644 --- a/src/main/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesScheduler.java +++ b/src/main/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesScheduler.java @@ -32,7 +32,6 @@ import io.fabric8.kubernetes.api.model.batch.CronJobList; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; -import javax.validation.ConstraintViolationException; import org.springframework.cloud.deployer.spi.scheduler.CreateScheduleException; import org.springframework.cloud.deployer.spi.scheduler.ScheduleInfo; @@ -55,8 +54,6 @@ public class KubernetesScheduler implements Scheduler { private static final String SCHEDULE_EXPRESSION_FIELD_NAME = "spec.schedule"; - private static final String SCHEDULE_METADATA_FIELD_NAME = "metadata.name"; - private final KubernetesClient kubernetesClient; private final KubernetesSchedulerProperties kubernetesSchedulerProperties; @@ -85,11 +82,6 @@ public void schedule(ScheduleRequest scheduleRequest) { throw new CreateScheduleException(invalidCronExceptionMessage, e); } - invalidCronExceptionMessage = getExceptionMessageForField(e, SCHEDULE_METADATA_FIELD_NAME); - if (validationScheduleNameLength(invalidCronExceptionMessage)) { - throw new CreateScheduleException(invalidCronExceptionMessage, e); - } - throw new CreateScheduleException("Failed to create schedule " + scheduleRequest.getScheduleName(), e); } } @@ -98,6 +90,9 @@ public void validateScheduleName(ScheduleRequest request) { if(request.getScheduleName() == null) { throw new CreateScheduleException("The name for the schedule request is null", null); } + if(request.getScheduleName().length() > 52) { + throw new CreateScheduleException(String.format("because Schedule Name: '%s' has too many characters. Schedule name length must be 52 characters or less", request.getScheduleName()), null); + } if(!Pattern.matches("^[a-z0-9]([-a-z0-9]*[a-z0-9])?$", request.getScheduleName())) { throw new CreateScheduleException("Invalid Format for Schedule Name. Schedule name can only contain lowercase letters, numbers 0-9 and hyphens.", null); } @@ -153,19 +148,7 @@ protected CronJob createCronJob(ScheduleRequest scheduleRequest) { String schedule = scheduleRequest.getSchedulerProperties().get(SchedulerPropertyKeys.CRON_EXPRESSION); Assert.hasText(schedule, "The property: " + SchedulerPropertyKeys.CRON_EXPRESSION + " must be defined"); - Container container; - try { - container = new ContainerCreator(this.kubernetesSchedulerProperties, scheduleRequest).build(); - } - catch (ConstraintViolationException constraintViolationException) { - if (constraintViolationException.getMessage().contains("size must be between")) { - throw new CreateScheduleException(String.format("'%s' because the number of characters for the " + - "schedule name exceeds the Kubernetes maximum number of characters allowed for this field.", - scheduleRequest.getScheduleName()), constraintViolationException); - } - else - throw constraintViolationException; - } + Container container = new ContainerCreator(this.kubernetesSchedulerProperties, scheduleRequest).build(); String taskServiceAccountName = KubernetesSchedulerPropertyResolver.getTaskServiceAccountName(scheduleRequest, this.kubernetesSchedulerProperties); @@ -210,8 +193,4 @@ private void setImagePullSecret(ScheduleRequest scheduleRequest, CronJob cronJob .add(localObjectReference); } } - - private boolean validationScheduleNameLength(String message ) { - return (StringUtils.hasText(message) && message.contains("must be no more than") && message.endsWith("characters")); - } } diff --git a/src/test/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesSchedulerTests.java b/src/test/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesSchedulerTests.java index 6fa8efa5..cf4011aa 100644 --- a/src/test/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesSchedulerTests.java +++ b/src/test/java/org/springframework/cloud/deployer/spi/scheduler/kubernetes/KubernetesSchedulerTests.java @@ -44,6 +44,7 @@ import io.fabric8.kubernetes.client.DefaultKubernetesClient; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.KubernetesClientException; +import javax.validation.ConstraintViolationException; import org.junit.AfterClass; import org.junit.ClassRule; import org.junit.Test; @@ -230,20 +231,25 @@ public void testInvalidCronSyntax() { @Test public void testNameTooLong() { + final String baseScheduleName = "tencharlng-scdf-itcouldbesaidthatthisislongtoowaytoo"; Map schedulerProperties = Collections.singletonMap(CRON_EXPRESSION, "0/10 * * * *"); AppDefinition appDefinition = new AppDefinition(randomName(), null); ScheduleRequest scheduleRequest = new ScheduleRequest(appDefinition, schedulerProperties, null, null, - "tencharlng-scdf-itcouldbesaidthatthisislongtoowaytoo-oops", testApplication()); + baseScheduleName, testApplication()); + //verify no validation fired. + scheduler.schedule(scheduleRequest); + + scheduleRequest = new ScheduleRequest(appDefinition, schedulerProperties, null, null, + baseScheduleName + "1", testApplication()); try { scheduler.schedule(scheduleRequest); } catch (CreateScheduleException createScheduleException) { - assertThat(createScheduleException.getMessage()).contains("must be no more than"); + assertThat(createScheduleException.getMessage()).isEqualTo(String.format("Failed to create schedule because Schedule Name: '%s' has too many characters. Schedule name length must be 52 characters or less", baseScheduleName + "1")); return; } - fail(); }