Skip to content

Commit

Permalink
fix(kubernetes): Fix a few other bugs from client library upgrade (#3811
Browse files Browse the repository at this point in the history
)

V1HTTPGetAction.getPort() now returns an IntOrString. This supports
.toString() to always convert to a string, but does not support
.toInt() so we need to handle parsing as an int if desired.

The logic to serialize an IntOrString needs to know that it should only
dump either getString() or getInt() depending if it's a string or
integer, which our ObjectMapper doesn't know about. The Yaml object that
comes with the kubernetes API is configured to handle this, so just use
that instead to handle serializing.
  • Loading branch information
ezimanyi authored and maggieneterval committed Jun 24, 2019
1 parent b29b07c commit e9c6a58
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
*/
package com.netflix.spinnaker.clouddriver.kubernetes.v1.api

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory

import com.netflix.frigga.Names
import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.KubernetesUtil
import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.autoscaler.KubernetesAutoscalerDescription
Expand Down Expand Up @@ -48,7 +47,9 @@ import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.server
import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesVolumeSource
import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesVolumeSourceType
import com.netflix.spinnaker.clouddriver.kubernetes.v1.model.KubernetesControllerConverter
import groovy.transform.CompileStatic
import groovy.util.logging.Slf4j
import io.kubernetes.client.custom.IntOrString
import io.kubernetes.client.models.V1Capabilities
import io.kubernetes.client.models.V1ConfigMapVolumeSource
import io.kubernetes.client.models.V1Container
Expand Down Expand Up @@ -92,6 +93,7 @@ import io.kubernetes.client.models.V1beta1RollingUpdateStatefulSetStrategy
import io.kubernetes.client.models.V1beta1StatefulSet
import io.kubernetes.client.models.V1beta1StatefulSetSpec
import io.kubernetes.client.models.V1beta1StatefulSetUpdateStrategy
import io.kubernetes.client.util.Yaml
import org.slf4j.Logger
import org.slf4j.LoggerFactory

Expand Down Expand Up @@ -328,6 +330,7 @@ class KubernetesClientApiConverter {
return kubernetesHandler
}

@CompileStatic
static KubernetesHttpGetAction fromHttpGetAction(V1HTTPGetAction httpGet) {
if (!httpGet) {
return null
Expand All @@ -337,7 +340,12 @@ class KubernetesClientApiConverter {
kubernetesHttpGetAction.host = httpGet.host
kubernetesHttpGetAction.path = httpGet.path
try {
kubernetesHttpGetAction.port = httpGet.port?.toInteger() ?: 0
IntOrString port = httpGet.port
if (port?.isInteger()) {
kubernetesHttpGetAction.port = port?.getIntValue()
} else {
kubernetesHttpGetAction.port = port?.getStrValue()?.toInteger()
}
} catch (NumberFormatException ex) {
log.warn "Port number is not Integer", ex
}
Expand Down Expand Up @@ -398,9 +406,9 @@ class KubernetesClientApiConverter {
* @param obj
* @return
*/
@CompileStatic
static String getYaml(Object obj) {
ObjectMapper m = new ObjectMapper(new YAMLFactory());
return m.writeValueAsString(obj).replaceAll("\\\\", "");
return Yaml.dump(obj)
}

static V1beta1StatefulSet toStatefulSet(DeployKubernetesAtomicOperationDescription description,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ private static Set<Rule> outboundRules(V1NetworkPolicy policy) {
}

private static Rule fromPolicyPort(V1NetworkPolicyPort policyPort) {
String port = policyPort.getPort().getStrValue();
String port = policyPort.getPort().toString();
return new PortRule()
.setProtocol(policyPort.getProtocol())
.setPortRanges(new TreeSet<>(Collections.singletonList(new StringPortRange(port))));
Expand Down

0 comments on commit e9c6a58

Please sign in to comment.