Skip to content

Commit

Permalink
Fix fabric8io#1600: Replicas fragment not set
Browse files Browse the repository at this point in the history
Give preference to resource fragments rather than XML config
  • Loading branch information
rohanKanojia committed Mar 27, 2019
1 parent 40e5070 commit 5f51674
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 42 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<HasMetadata> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<ImageConfiguration> images = getImages().orElse(Collections.emptyList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<ImageConfiguration> images = getImages().orElse(Collections.emptyList());
Expand Down Expand Up @@ -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<DeploymentBuilder>() {
@Override
public void visit(DeploymentBuilder deploymentBuilder) {
deploymentBuilder.editSpec().withReplicas(Integer.parseInt(getConfig(Config.replicaCount))).endSpec();
}
});
} else {
builder.accept(new TypedVisitor<DeploymentConfigBuilder>() {
@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<String> containerNames) {
Map<String, String> processingInstructionsMap = new HashMap<>();
if(enricherContext.getProcessingInstructions() != null) {
Expand Down Expand Up @@ -218,20 +192,6 @@ private List<String> 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
Expand Down

0 comments on commit 5f51674

Please sign in to comment.