Skip to content

Commit

Permalink
Refactored operation contexts.
Browse files Browse the repository at this point in the history
Added timestamps support for deployment logs and other resources.
  • Loading branch information
DobromirM authored and manusa committed Oct 19, 2022
1 parent e04de76 commit 00cf3fd
Show file tree
Hide file tree
Showing 19 changed files with 577 additions and 184 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
* Fix #4396: Provide more error context when @Group/@Version annotations are missing
* Fix #4384: The Java generator now supports the generation of specific annotations (min, max, pattern, etc.), as defined by #4348
* Fix #3864: Change ManagedOpenShiftClient OSGi ConfigurationPolicy to REQUIRE
* Fix #4470: Added timestamps support for deployment logs and other resources.

#### Dependency Upgrade
* Fix #4243: Update Tekton pipeline model to v0.39.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

public interface ScalableResource<T> extends Resource<T>,
Loggable,
Containerable<String, Loggable> {
Containerable<String, Loggable>,
TimestampBytesLimitTerminateTimeTailPrettyLoggable {

/**
* Scale the resource to given count
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,29 @@

import java.util.concurrent.TimeUnit;

public class RollingOperationContext extends PodControllerOperationContext {
public class RollingOperationContext {

private final PodOperationContext podOperationContext;
private boolean rolling;
private long rollingTimeout;
private TimeUnit rollingTimeUnit;

public RollingOperationContext() {
this.podOperationContext = new PodOperationContext();
}

public RollingOperationContext(String containerId, boolean rolling, long rollingTimeout, TimeUnit rollingTimeUnit, Integer logWaitTimeout) {
super(containerId, logWaitTimeout);
public RollingOperationContext(PodOperationContext podOperationContext, boolean rolling, long rollingTimeout,
TimeUnit rollingTimeUnit) {
this.podOperationContext = podOperationContext;
this.rolling = rolling;
this.rollingTimeout = rollingTimeout;
this.rollingTimeUnit = rollingTimeUnit != null ? rollingTimeUnit : TimeUnit.MILLISECONDS;
}

public PodOperationContext getPodOperationContext() {
return podOperationContext;
}

public Boolean getRolling() {
return rolling;
}
Expand All @@ -44,27 +51,62 @@ public long getRollingTimeout() {
public TimeUnit getRollingTimeUnit() {
return rollingTimeUnit;
}

public RollingOperationContext withRolling(boolean rolling) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

public RollingOperationContext withRollingTimeout(long rollingTimeout) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

public RollingOperationContext withRollingTimeUnit(TimeUnit rollingTimeUnit) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext, rolling, rollingTimeout, rollingTimeUnit);
}

@Override
public RollingOperationContext withContainerId(String containerId) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);
return new RollingOperationContext(podOperationContext.withContainerId(containerId), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withLogWaitTimeout(Integer logWaitTimeout) {
return new RollingOperationContext(podOperationContext.withLogWaitTimeout(logWaitTimeout), rolling, rollingTimeout,
rollingTimeUnit);
}

@Override
public RollingOperationContext withLogWaitTimout(Integer logWaitTimeout) {
return new RollingOperationContext(containerId, rolling, rollingTimeout, rollingTimeUnit, logWaitTimeout);

public RollingOperationContext withLimitBytes(Integer limitBytes) {
return new RollingOperationContext(podOperationContext.withLimitBytes(limitBytes), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withTerminatedStatus(boolean terminatedStatus) {
return new RollingOperationContext(podOperationContext.withTerminatedStatus(terminatedStatus), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withPrettyOutput(boolean prettyOutput) {
return new RollingOperationContext(podOperationContext.withPrettyOutput(prettyOutput), rolling, rollingTimeout,
rollingTimeUnit);
}


public RollingOperationContext withTailingLines(Integer tailingLines) {
return new RollingOperationContext(podOperationContext.withTailingLines(tailingLines), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withSinceTimestamp(String sinceTimestamp) {
return new RollingOperationContext(podOperationContext.withSinceTimestamp(sinceTimestamp), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withSinceSeconds(Integer sinceSeconds) {
return new RollingOperationContext(podOperationContext.withSinceSeconds(sinceSeconds), rolling, rollingTimeout,
rollingTimeUnit);
}

public RollingOperationContext withTimestamps(boolean timestamps) {
return new RollingOperationContext(podOperationContext.withTimestamps(timestamps), rolling, rollingTimeout,
rollingTimeUnit);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,13 @@
import io.fabric8.kubernetes.api.model.extensions.DeploymentRollback;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.KubernetesClientTimeoutException;
import io.fabric8.kubernetes.client.dsl.BytesLimitTerminateTimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.fabric8.kubernetes.client.dsl.Loggable;
import io.fabric8.kubernetes.client.dsl.PrettyLoggable;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import io.fabric8.kubernetes.client.dsl.TailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeoutImageEditReplacePatchable;
import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.OperationContext;
Expand Down Expand Up @@ -214,8 +218,7 @@ private List<RollableScalableResource<ReplicaSet>> doGetLog() {
String rcUid = deployment.getMetadata().getUid();

ReplicaSetOperationsImpl rsOperations = new ReplicaSetOperationsImpl(
new RollingOperationContext(rollingOperationContext.getContainerId(), false, 0, null,
rollingOperationContext.getLogWaitTimeout()),
new RollingOperationContext(rollingOperationContext.getPodOperationContext(), false, 0, null),
context.withName(null));
ReplicaSetList rcList = rsOperations.withLabels(getDeploymentSelectorLabels(deployment)).list();

Expand Down Expand Up @@ -284,4 +287,38 @@ protected List<Container> getContainers(Deployment value) {
return value.getSpec().getTemplate().getSpec().getContainers();
}

@Override
public TimeTailPrettyLoggable limitBytes(int limitBytes) {
return new DeploymentOperationsImpl(rollingOperationContext.withLimitBytes(limitBytes), context);
}

@Override
public TimeTailPrettyLoggable terminated() {
return new DeploymentOperationsImpl(rollingOperationContext.withTerminatedStatus(true), context);
}

@Override
public Loggable withPrettyOutput() {
return new DeploymentOperationsImpl(rollingOperationContext.withPrettyOutput(true), context);
}

@Override
public PrettyLoggable tailingLines(int lines) {
return new DeploymentOperationsImpl(rollingOperationContext.withTailingLines(lines), context);
}

@Override
public TailPrettyLoggable sinceTime(String timestamp) {
return new DeploymentOperationsImpl(rollingOperationContext.withSinceTimestamp(timestamp), context);
}

@Override
public TailPrettyLoggable sinceSeconds(int seconds) {
return new DeploymentOperationsImpl(rollingOperationContext.withSinceSeconds(seconds), context);
}

@Override
public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() {
return new DeploymentOperationsImpl(rollingOperationContext.withTimestamps(true), context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@
import io.fabric8.kubernetes.api.model.extensions.DeploymentRollback;
import io.fabric8.kubernetes.client.Client;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.dsl.BytesLimitTerminateTimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.fabric8.kubernetes.client.dsl.Loggable;
import io.fabric8.kubernetes.client.dsl.PodResource;
import io.fabric8.kubernetes.client.dsl.PrettyLoggable;
import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
import io.fabric8.kubernetes.client.dsl.TailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeTailPrettyLoggable;
import io.fabric8.kubernetes.client.dsl.TimeoutImageEditReplacePatchable;
import io.fabric8.kubernetes.client.dsl.internal.HasMetadataOperationsImpl;
import io.fabric8.kubernetes.client.dsl.internal.OperationContext;
Expand Down Expand Up @@ -117,14 +122,15 @@ public Status rollback(DeploymentRollback deploymentRollback) {

@Override
public String getLog(boolean isPretty) {
return PodOperationUtil.getLog(doGetLog(isPretty), isPretty);
return PodOperationUtil
.getLog(new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(isPretty), context).doGetLog(), isPretty);
}

private List<PodResource> doGetLog(boolean isPretty) {
private List<PodResource> doGetLog() {
ReplicaSet replicaSet = requireFromServer();
return PodOperationUtil.getPodOperationsForController(context, replicaSet.getMetadata().getUid(),
getReplicaSetSelectorLabels(replicaSet), isPretty, rollingOperationContext.getLogWaitTimeout(),
rollingOperationContext.getContainerId());
return PodOperationUtil.getPodOperationsForController(context,
rollingOperationContext.getPodOperationContext(), replicaSet.getMetadata().getUid(),
getReplicaSetSelectorLabels(replicaSet));
}

/**
Expand All @@ -134,7 +140,7 @@ private List<PodResource> doGetLog(boolean isPretty) {
*/
@Override
public Reader getLogReader() {
return PodOperationUtil.getLogReader(doGetLog(false));
return PodOperationUtil.getLogReader(doGetLog());
}

/**
Expand All @@ -144,12 +150,12 @@ public Reader getLogReader() {
*/
@Override
public InputStream getLogInputStream() {
return PodOperationUtil.getLogInputStream(doGetLog(false));
return PodOperationUtil.getLogInputStream(doGetLog());
}

@Override
public LogWatch watchLog(OutputStream out) {
return PodOperationUtil.watchLog(doGetLog(false), out);
return PodOperationUtil.watchLog(doGetLog(), out);
}

static Map<String, String> getReplicaSetSelectorLabels(ReplicaSet replicaSet) {
Expand All @@ -165,4 +171,39 @@ static Map<String, String> getReplicaSetSelectorLabels(ReplicaSet replicaSet) {
protected List<Container> getContainers(ReplicaSet value) {
return value.getSpec().getTemplate().getSpec().getContainers();
}

@Override
public TimeTailPrettyLoggable limitBytes(int limitBytes) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withLimitBytes(limitBytes), context);
}

@Override
public TimeTailPrettyLoggable terminated() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTerminatedStatus(true), context);
}

@Override
public Loggable withPrettyOutput() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withPrettyOutput(true), context);
}

@Override
public PrettyLoggable tailingLines(int lines) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTailingLines(lines), context);
}

@Override
public TailPrettyLoggable sinceTime(String timestamp) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceTimestamp(timestamp), context);
}

@Override
public TailPrettyLoggable sinceSeconds(int seconds) {
return new ReplicaSetOperationsImpl(rollingOperationContext.withSinceSeconds(seconds), context);
}

@Override
public BytesLimitTerminateTimeTailPrettyLoggable usingTimestamps() {
return new ReplicaSetOperationsImpl(rollingOperationContext.withTimestamps(true), context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public T patch(PatchContext patchContext, T item) {

@Override
public Loggable withLogWaitTimeout(Integer logWaitTimeout) {
return newInstance(rollingOperationContext.withLogWaitTimout(logWaitTimeout));
return newInstance(rollingOperationContext.withLogWaitTimeout(logWaitTimeout));
}

@Override
Expand All @@ -200,7 +200,7 @@ public ImageEditReplacePatchable<T> withTimeout(long timeout, TimeUnit unit) {

@Override
public String getLog() {
return getLog(false);
return getLog(rollingOperationContext.getPodOperationContext().isPrettyOutput());
}

@Override
Expand Down

0 comments on commit 00cf3fd

Please sign in to comment.