From 5f51674d34f24bc3b5f8af89b96d5530be052ade Mon Sep 17 00:00:00 2001 From: Rohan Kumar Date: Wed, 27 Mar 2019 12:23:09 +0530 Subject: [PATCH] Fix #1600: Replicas fragment not set Give preference to resource fragments rather than XML config --- CHANGELOG.md | 1 + .../maven/enricher/api/BaseEnricher.java | 34 +++++++++++++++ ...trollerViaPluginConfigurationEnricher.java | 3 +- .../standard/DefaultControllerEnricher.java | 42 +------------------ 4 files changed, 38 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50099145ff..47d2b2759e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ After this we will switch probably to real [Semantic Versioning 2.0.0](http://se * Fix 1038: Do not add ImageChange change triggers for Docker images * Fix NullPointerException in ClusterConfiguration when reading from properties * Fix 1586: Redundant 'abstract' qualifier in BaseEnricher class removed +* Fix 1600: Replicas fragment not set ### 4.0.0 (14-03-2019) * Refactor 678: Enricher Workflow to allow direct generation of OpenShift objects. diff --git a/enricher/api/src/main/java/io/fabric8/maven/enricher/api/BaseEnricher.java b/enricher/api/src/main/java/io/fabric8/maven/enricher/api/BaseEnricher.java index 1c16f57176..59e7e50a72 100644 --- a/enricher/api/src/main/java/io/fabric8/maven/enricher/api/BaseEnricher.java +++ b/enricher/api/src/main/java/io/fabric8/maven/enricher/api/BaseEnricher.java @@ -15,14 +15,18 @@ */ package io.fabric8.maven.enricher.api; +import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; +import io.fabric8.kubernetes.api.model.apps.Deployment; import io.fabric8.maven.core.config.PlatformMode; +import io.fabric8.maven.core.config.ResourceConfig; import io.fabric8.maven.core.config.RuntimeMode; import io.fabric8.maven.core.model.Configuration; import io.fabric8.maven.core.util.Configs; import io.fabric8.maven.core.util.PrefixedLogger; import io.fabric8.maven.docker.config.ImageConfiguration; import io.fabric8.maven.docker.util.Logger; +import io.fabric8.openshift.api.model.DeploymentConfig; import java.util.ArrayList; import java.util.Arrays; @@ -143,4 +147,34 @@ protected Boolean getImageChangeTriggerFlag(Boolean defaultValue) { return defaultValue; } } + + /** + * This method just makes sure that the replica count provided in XML config + * overrides the default option; and resource fragments are always given + * topmost priority. + * + * @param builder + * @param xmlResourceConfig + * @param defaultValue + * @return resolved replica count + */ + protected int getReplicaCount(KubernetesListBuilder builder, ResourceConfig xmlResourceConfig, int defaultValue) { + if (xmlResourceConfig != null) { + List items = builder.buildItems(); + for (HasMetadata item : items) { + if (item instanceof Deployment) { + if(((Deployment)item).getSpec().getReplicas() != null) { + return ((Deployment)item).getSpec().getReplicas(); + } + } + if (item instanceof DeploymentConfig) { + if(((DeploymentConfig)item).getSpec().getReplicas() != null) { + return ((DeploymentConfig)item).getSpec().getReplicas(); + } + } + } + return xmlResourceConfig.getReplicas() > 0 ? xmlResourceConfig.getReplicas() : defaultValue; + } + return defaultValue; + } } diff --git a/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/ControllerViaPluginConfigurationEnricher.java b/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/ControllerViaPluginConfigurationEnricher.java index 543b3eb95e..19cdac2cd2 100644 --- a/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/ControllerViaPluginConfigurationEnricher.java +++ b/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/ControllerViaPluginConfigurationEnricher.java @@ -68,10 +68,11 @@ public ControllerViaPluginConfigurationEnricher(MavenEnricherContext context) { @Override public void create(PlatformMode platformMode, KubernetesListBuilder builder) { final String name = getConfig(Config.name, MavenUtil.createDefaultResourceName(getContext().getGav().getSanitizedArtifactId())); + ResourceConfig xmlResourceConfig = getConfiguration().getResource().orElse(null); final ResourceConfig config = new ResourceConfig.Builder() .controllerName(name) .imagePullPolicy(getConfig(Config.pullPolicy)) - .withReplicas(Configs.asInt(getConfig(Config.replicaCount))) + .withReplicas(getReplicaCount(builder, xmlResourceConfig, Configs.asInt(getConfig(Config.replicaCount)))) .build(); final List images = getImages().orElse(Collections.emptyList()); diff --git a/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/DefaultControllerEnricher.java b/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/DefaultControllerEnricher.java index f8e05fc1d0..54b4ab530b 100644 --- a/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/DefaultControllerEnricher.java +++ b/enricher/standard/src/main/java/io/fabric8/maven/enricher/standard/DefaultControllerEnricher.java @@ -15,9 +15,7 @@ */ package io.fabric8.maven.enricher.standard; -import io.fabric8.kubernetes.api.builder.TypedVisitor; import io.fabric8.kubernetes.api.model.KubernetesListBuilder; -import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder; import io.fabric8.maven.core.config.PlatformMode; import io.fabric8.kubernetes.api.model.PodTemplateSpec; import io.fabric8.kubernetes.api.model.ReplicationController; @@ -42,7 +40,6 @@ import io.fabric8.maven.enricher.api.BaseEnricher; import io.fabric8.maven.enricher.api.MavenEnricherContext; import io.fabric8.openshift.api.model.DeploymentConfig; -import io.fabric8.openshift.api.model.DeploymentConfigBuilder; import java.util.ArrayList; import java.util.Collections; @@ -110,7 +107,7 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { ResourceConfig config = new ResourceConfig.Builder(xmlResourceConfig) .controllerName(name) .imagePullPolicy(getImagePullPolicy(xmlResourceConfig, getConfig(Config.pullPolicy))) - .withReplicas(getReplicaCount(xmlResourceConfig, Configs.asInt(getConfig(Config.replicaCount)))) + .withReplicas(getReplicaCount(builder, xmlResourceConfig, Configs.asInt(getConfig(Config.replicaCount)))) .build(); final List images = getImages().orElse(Collections.emptyList()); @@ -162,29 +159,6 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) { } } - @Override - public void enrich(PlatformMode platformMode, KubernetesListBuilder builder) { - if (platformMode == PlatformMode.kubernetes) { - builder.accept(new TypedVisitor() { - @Override - public void visit(DeploymentBuilder deploymentBuilder) { - deploymentBuilder.editSpec().withReplicas(Integer.parseInt(getConfig(Config.replicaCount))).endSpec(); - } - }); - } else { - builder.accept(new TypedVisitor() { - @Override - public void visit(DeploymentConfigBuilder deploymentConfigBuilder) { - deploymentConfigBuilder.editSpec().withReplicas(Integer.parseInt(getConfig(Config.replicaCount))).endSpec(); - - if (isAutomaticTriggerEnabled((MavenEnricherContext)enricherContext, true)) { - deploymentConfigBuilder.editSpec().addNewTrigger().withType("ConfigChange").endTrigger().endSpec(); - } - } - }); - } - } - private void setProcessingInstruction(List containerNames) { Map processingInstructionsMap = new HashMap<>(); if(enricherContext.getProcessingInstructions() != null) { @@ -218,20 +192,6 @@ private List getContainersFromPodSpec(PodTemplateSpec spec) { KubernetesResourceUtil.SIMPLE_FIELD_TYPES.add(byte.class); } - /** - * This method just makes sure that the replica count provided in XML config - * overrides the default option. - * - * @param xmlResourceConfig - * @param defaultValue - * @return - */ - private int getReplicaCount(ResourceConfig xmlResourceConfig, int defaultValue) { - if(xmlResourceConfig != null) { - return xmlResourceConfig.getReplicas() > 0 ? xmlResourceConfig.getReplicas() : defaultValue; - } - return defaultValue; - } /** * This method overrides the ImagePullPolicy value by the value provided in