Skip to content

Commit

Permalink
fix(kubernetes): add support 'apps/v1' for deployments/replicaset (#4055
Browse files Browse the repository at this point in the history
)

* add support kubernetes 'apps/v1' for deployments/replicaset

* fix: avoid using '*' in imports

* fix: avoid using '*' in imports
  • Loading branch information
Yevhen Lebid authored and ethanfrogers committed Sep 26, 2019
1 parent dc39fb9 commit 4c907ee
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class KubernetesApiVersion {
new KubernetesApiVersion("network.k8s.io/v1");
public static final KubernetesApiVersion NETWORKING_K8S_IO_V1BETA1 =
new KubernetesApiVersion("network.k8s.io/v1beta1");
public static final KubernetesApiVersion APPS_V1 = new KubernetesApiVersion("apps/v1");
public static final KubernetesApiVersion APPS_V1BETA1 = new KubernetesApiVersion("apps/v1beta1");
public static final KubernetesApiVersion APPS_V1BETA2 = new KubernetesApiVersion("apps/v1beta2");
public static final KubernetesApiVersion BATCH_V1 = new KubernetesApiVersion("batch/v1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package com.netflix.spinnaker.clouddriver.kubernetes.v2.op.handler;

import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.APPS_V1;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.APPS_V1BETA1;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.APPS_V1BETA2;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.EXTENSIONS_V1BETA1;
Expand All @@ -31,9 +32,9 @@
import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesKind;
import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest;
import com.netflix.spinnaker.clouddriver.model.Manifest.Status;
import io.kubernetes.client.models.V1beta2Deployment;
import io.kubernetes.client.models.V1beta2DeploymentCondition;
import io.kubernetes.client.models.V1beta2DeploymentStatus;
import io.kubernetes.client.models.V1Deployment;
import io.kubernetes.client.models.V1DeploymentCondition;
import io.kubernetes.client.models.V1DeploymentStatus;
import javax.annotation.Nonnull;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -85,13 +86,14 @@ public SpinnakerKind spinnakerKind() {
public Status status(KubernetesManifest manifest) {
if (manifest.getApiVersion().equals(EXTENSIONS_V1BETA1)
|| manifest.getApiVersion().equals(APPS_V1BETA1)
|| manifest.getApiVersion().equals(APPS_V1BETA2)) {
|| manifest.getApiVersion().equals(APPS_V1BETA2)
|| manifest.getApiVersion().equals(APPS_V1)) {
if (manifest.isNewerThanObservedGeneration()) {
return (new Status()).unknown();
}
V1beta2Deployment appsV1beta2Deployment =
KubernetesCacheDataConverter.getResource(manifest, V1beta2Deployment.class);
return status(appsV1beta2Deployment);
V1Deployment appsV1Deployment =
KubernetesCacheDataConverter.getResource(manifest, V1Deployment.class);
return status(appsV1Deployment);
} else {
throw new UnsupportedVersionException(manifest);
}
Expand All @@ -102,21 +104,21 @@ protected KubernetesV2CachingAgentFactory cachingAgentFactory() {
return KubernetesCoreCachingAgent::new;
}

private Status status(V1beta2Deployment deployment) {
private Status status(V1Deployment deployment) {
Status result = new Status();
V1beta2DeploymentStatus status = deployment.getStatus();
V1DeploymentStatus status = deployment.getStatus();
if (status == null) {
result.unstable("No status reported yet").unavailable("No availability reported");
return result;
}

V1beta2DeploymentCondition paused =
V1DeploymentCondition paused =
status.getConditions().stream()
.filter(c -> c.getReason().equalsIgnoreCase("deploymentpaused"))
.findAny()
.orElse(null);

V1beta2DeploymentCondition available =
V1DeploymentCondition available =
status.getConditions().stream()
.filter(c -> c.getType().equalsIgnoreCase("available"))
.findAny()
Expand All @@ -130,7 +132,7 @@ private Status status(V1beta2Deployment deployment) {
result.unstable(available.getMessage()).unavailable(available.getMessage());
}

V1beta2DeploymentCondition condition =
V1DeploymentCondition condition =
status.getConditions().stream()
.filter(c -> c.getType().equalsIgnoreCase("progressing"))
.findAny()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package com.netflix.spinnaker.clouddriver.kubernetes.v2.op.handler;

import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.APPS_V1;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.APPS_V1BETA2;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesApiVersion.EXTENSIONS_V1BETA1;
import static com.netflix.spinnaker.clouddriver.kubernetes.v2.op.handler.KubernetesHandler.DeployPriority.WORKLOAD_CONTROLLER_PRIORITY;
Expand All @@ -34,9 +35,10 @@
import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifestSelector;
import com.netflix.spinnaker.clouddriver.kubernetes.v2.security.KubernetesV2Credentials;
import com.netflix.spinnaker.clouddriver.model.Manifest.Status;
import io.kubernetes.client.models.V1ReplicaSet;
import io.kubernetes.client.models.V1ReplicaSetStatus;
import io.kubernetes.client.models.V1beta1ReplicaSet;
import io.kubernetes.client.models.V1beta2ReplicaSet;
import io.kubernetes.client.models.V1beta2ReplicaSetStatus;
import java.util.List;
import java.util.Map;
import java.util.Optional;
Expand Down Expand Up @@ -90,18 +92,19 @@ protected KubernetesV2CachingAgentFactory cachingAgentFactory() {
@Override
public Status status(KubernetesManifest manifest) {
if (manifest.getApiVersion().equals(EXTENSIONS_V1BETA1)
|| manifest.getApiVersion().equals(APPS_V1BETA2)) {
V1beta2ReplicaSet v1beta2ReplicaSet =
KubernetesCacheDataConverter.getResource(manifest, V1beta2ReplicaSet.class);
return status(v1beta2ReplicaSet);
|| manifest.getApiVersion().equals(APPS_V1BETA2)
|| manifest.getApiVersion().equals(APPS_V1)) {
V1ReplicaSet v1ReplicaSet =
KubernetesCacheDataConverter.getResource(manifest, V1ReplicaSet.class);
return status(v1ReplicaSet);
} else {
throw new UnsupportedVersionException(manifest);
}
}

private Status status(V1beta2ReplicaSet replicaSet) {
private Status status(V1ReplicaSet replicaSet) {
Status result = new Status();
V1beta2ReplicaSetStatus status = replicaSet.getStatus();
V1ReplicaSetStatus status = replicaSet.getStatus();
if (status == null) {
result.unstable("No status reported yet").unavailable("No availability reported");
return result;
Expand Down Expand Up @@ -150,6 +153,10 @@ public static Map<String, String> getPodTemplateLabels(KubernetesManifest manife
V1beta2ReplicaSet v1beta2ReplicaSet =
KubernetesCacheDataConverter.getResource(manifest, V1beta2ReplicaSet.class);
return getPodTemplateLabels(v1beta2ReplicaSet);
} else if (manifest.getApiVersion().equals(APPS_V1)) {
V1ReplicaSet v1ReplicaSet =
KubernetesCacheDataConverter.getResource(manifest, V1ReplicaSet.class);
return getPodTemplateLabels(v1ReplicaSet);
} else {
throw new UnsupportedVersionException(manifest);
}
Expand All @@ -163,6 +170,10 @@ private static Map<String, String> getPodTemplateLabels(V1beta2ReplicaSet replic
return replicaSet.getSpec().getTemplate().getMetadata().getLabels();
}

private static Map<String, String> getPodTemplateLabels(V1ReplicaSet replicaSet) {
return replicaSet.getSpec().getTemplate().getMetadata().getLabels();
}

@Override
public Map<String, Object> hydrateSearchResult(
Keys.InfrastructureCacheKey key, KubernetesCacheUtils cacheUtils) {
Expand Down

0 comments on commit 4c907ee

Please sign in to comment.