Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
rohanKanojia committed Jun 13, 2019
1 parent 034a203 commit f978b9c
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,22 @@ protected Boolean getTrimImageInContainerSpecFlag(Boolean defaultValue) {
}
}

protected Boolean enrichAllWithImageChangeTrigger(MavenEnricherContext enricherContext, Boolean defaultValue) {
if(enricherContext.getProperty("fabric8.openshift.enrichAllWithImageChangeTrigger") != null) {
return Boolean.parseBoolean(enricherContext.getProperty("fabric8.openshift.enrichAllWithImageChangeTrigger").toString());
} else {
return defaultValue;
}
}

protected Boolean getSidecarFlag(Boolean defaultValue) {
if (getContext().getProperty("fabric8.sidecar") != null) {
return Boolean.parseBoolean(getContext().getProperty("fabric8.sidecar").toString());
} else {
return defaultValue;
}
}

/**
* This method overrides the ImagePullPolicy value by the value provided in
* XML config.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -668,8 +668,11 @@ public static void mergeSimpleFields(Object targetValues, Object defaultValues)
}
}
}

public static String mergePodSpec(PodSpecBuilder builder, PodSpec defaultPodSpec, String defaultName) {
return mergePodSpec(builder, defaultPodSpec, defaultName, false);
}

public static String mergePodSpec(PodSpecBuilder builder, PodSpec defaultPodSpec, String defaultName, boolean sidecarEnabled) {
String defaultApplicationContainerName = null;
List<Container> containers = builder.buildContainers();
List<Container> defaultContainers = defaultPodSpec.getContainers();
Expand All @@ -678,20 +681,30 @@ public static String mergePodSpec(PodSpecBuilder builder, PodSpec defaultPodSpec
if (containers == null || containers.isEmpty()) {
builder.addToContainers(defaultContainers.toArray(new Container[size]));
} else {
int idx = 0;
for (Container defaultContainer : defaultContainers) {
Container container = null;
for (Container fragmentContainer : containers) {
if (fragmentContainer.getName() == null || fragmentContainer.getName().equals(defaultContainer.getName())) {
container = fragmentContainer;
defaultApplicationContainerName = defaultContainer.getName();
break;
if(sidecarEnabled) { // Consider container as sidecar
for (Container fragmentContainer : containers) {
if (fragmentContainer.getName() == null || fragmentContainer.getName().equals(defaultContainer.getName())) {
container = fragmentContainer;
defaultApplicationContainerName = defaultContainer.getName();
break;
}
}
if (container == null) {
container = new Container();
containers.add(container);
}
} else { // Old behavior
if (idx < containers.size()) {
container = containers.get(idx);
} else {
container = new Container();
containers.add(container);
}
}

if (container == null) {
container = new Container();
containers.add(container);
}
mergeSimpleFields(container, defaultContainer);
List<EnvVar> defaultEnv = defaultContainer.getEnv();
if (defaultEnv != null) {
Expand All @@ -714,6 +727,7 @@ public static String mergePodSpec(PodSpecBuilder builder, PodSpec defaultPodSpec
if (container.getSecurityContext() == null) {
container.setSecurityContext(defaultContainer.getSecurityContext());
}
idx++;
}
builder.withContainers(containers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public void visit(StatefulSetBuilder statefulSetBuilder) {
builder.accept(new TypedVisitor<PodSpecBuilder>() {
@Override
public void visit(PodSpecBuilder builder) {
String defaultApplicationContainerName = KubernetesResourceUtil.mergePodSpec(builder, podSpec, name);
String defaultApplicationContainerName = KubernetesResourceUtil.mergePodSpec(builder, podSpec, name, getSidecarFlag(false));
if(defaultApplicationContainerName != null) {
setProcessingInstruction(NEED_IMAGECHANGE_TRIGGERS, Collections.singletonList(defaultApplicationContainerName));
}
Expand All @@ -120,7 +120,7 @@ public void visit(DeploymentBuilder deploymentBuilder) {
builder.accept(new TypedVisitor<PodSpecBuilder>() {
@Override
public void visit(PodSpecBuilder builder) {
String defaultApplicationContainerName = KubernetesResourceUtil.mergePodSpec(builder, podSpec, name);
String defaultApplicationContainerName = KubernetesResourceUtil.mergePodSpec(builder, podSpec, name, getSidecarFlag(false));
if(defaultApplicationContainerName != null) {
setProcessingInstruction(NEED_IMAGECHANGE_TRIGGERS, Collections.singletonList(defaultApplicationContainerName));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,14 @@
import java.util.stream.Collectors;

public class ImageChangeTriggerEnricher extends BaseEnricher {
static final String ENRICHER_NAME = "jshift-openshift-imageChangeTrigger";
static final String ENRICHER_NAME = "fmp-openshift-imageChangeTrigger";
private Boolean enableAutomaticTrigger;
private Boolean enableImageChangeTrigger;
private Boolean trimImageInContainerSpecFlag;


private enum Config implements Configs.Key {
containers {{ d = ""; }},
enrichAll {{ d = "false"; }};
containers {{ d = ""; }};

public String def() { return d; } protected String d;
}
Expand All @@ -61,53 +60,57 @@ public void create(PlatformMode platformMode, KubernetesListBuilder builder) {
return;

builder.accept(new TypedVisitor<DeploymentConfigSpecBuilder>() {
@Override
public void visit(DeploymentConfigSpecBuilder builder) {
Map<String, String> containerToImageMap = new HashMap<>();
PodTemplateSpec template = builder.buildTemplate();
if (template != null) {
PodSpec podSpec = template.getSpec();
Objects.requireNonNull(podSpec, "No PodSpec for PodTemplate:" + template);
List<Container> containers = podSpec.getContainers();
containerToImageMap = containers.stream().collect(Collectors.toMap(Container::getName, Container::getImage));
@Override
public void visit(DeploymentConfigSpecBuilder builder) {
Map<String, String> containerToImageMap = new HashMap<>();
PodTemplateSpec template = builder.buildTemplate();
if (template != null) {
PodSpec podSpec = template.getSpec();
Objects.requireNonNull(podSpec, "No PodSpec for PodTemplate:" + template);
List<Container> containers = podSpec.getContainers();
for(Container container : containers) {
if(container.getName() != null && container.getImage() != null) {
containerToImageMap.put(container.getName(), container.getImage());
}
}
// add a new image change trigger for the build stream
if (containerToImageMap.size() != 0) {
if(enableImageChangeTrigger && isOpenShiftMode()) {
for (Map.Entry<String, String> entry : containerToImageMap.entrySet()) {
String containerName = entry.getKey();

if(!isImageChangeTriggerNeeded(containerName))
continue;

ImageName image = new ImageName(entry.getValue());
String tag = image.getTag() != null ? image.getTag() : "latest";
builder.addNewTrigger()
.withType("ImageChange")
.withNewImageChangeParams()
.withAutomatic(enableAutomaticTrigger)
.withNewFrom()
.withKind("ImageStreamTag")
.withName(image.getSimpleName() + ":" + tag)
.withNamespace(image.getUser())
.endFrom()
.withContainerNames(containerName)
.endImageChangeParams()
.endTrigger();
}
}
// add a new image change trigger for the build stream
if (containerToImageMap.size() != 0) {
if(enableImageChangeTrigger && isOpenShiftMode()) {
for (Map.Entry<String, String> entry : containerToImageMap.entrySet()) {
String containerName = entry.getKey();

if(!isImageChangeTriggerNeeded(containerName))
continue;

ImageName image = new ImageName(entry.getValue());
String tag = image.getTag() != null ? image.getTag() : "latest";
builder.addNewTrigger()
.withType("ImageChange")
.withNewImageChangeParams()
.withAutomatic(enableAutomaticTrigger)
.withNewFrom()
.withKind("ImageStreamTag")
.withName(image.getSimpleName() + ":" + tag)
.withNamespace(image.getUser())
.endFrom()
.withContainerNames(containerName)
.endImageChangeParams()
.endTrigger();
}

if(trimImageInContainerSpecFlag) {
builder.editTemplate().editSpec().withContainers(trimImagesInContainers(template)).endSpec().endTemplate();
}
}

}
});
}
});
}

private Boolean isImageChangeTriggerNeeded(String containerName) {
String containersFromConfig = Configs.asString(getConfig(Config.containers));
Boolean enrichAll = Configs.asBoolean(getConfig(Config.enrichAll));
Boolean enrichAll = enrichAllWithImageChangeTrigger((MavenEnricherContext)enricherContext, false);

if(enrichAll) {
return true;
Expand All @@ -118,7 +121,7 @@ private Boolean isImageChangeTriggerNeeded(String containerName) {
Arrays.asList(containersFromConfig.split(",")).contains(containerName))) {
return false;
}

return true;
}

Expand Down

0 comments on commit f978b9c

Please sign in to comment.