spinnaker: Patch deployment fails: Cannot deserialize instance of com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest
Issue Summary:
A patch deployment stage in a pipeline fails with this error shown in the Spinnaker UI:
Exception ( Monitor Patch )
Cannot deserialize instance of com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest out of START_ARRAY token at [Source: UNKNOWN; line: -1, column: -1]
And here’s the clouddriver log output:
2019-01-04 10:45:55.889 ERROR 1 --- [ool-6-thread-35] c.n.s.c.o.DefaultOrchestrationProcessor : java.lang.IllegalArgumentException: Cannot deserialize instance of `com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest` out of START_ARRAY token
at [Source: UNKNOWN; line: -1, column: -1]
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3750)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3668)
at com.netflix.spinnaker.clouddriver.kubernetes.v2.op.manifest.KubernetesPatchManifestOperation.replaceArtifacts(KubernetesPatchManifestOperation.java:109)
at com.netflix.spinnaker.clouddriver.kubernetes.v2.op.manifest.KubernetesPatchManifestOperation.operate(KubernetesPatchManifestOperation.java:88)
at com.netflix.spinnaker.clouddriver.kubernetes.v2.op.manifest.KubernetesPatchManifestOperation.operate(KubernetesPatchManifestOperation.java:45)
at com.netflix.spinnaker.clouddriver.orchestration.AtomicOperation$operate.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at com.netflix.spinnaker.clouddriver.orchestration.AtomicOperation$operate.call(Unknown Source)
at com.netflix.spinnaker.clouddriver.orchestration.DefaultOrchestrationProcessor$_process_closure1$_closure2.doCall(DefaultOrchestrationProcessor.groovy:89)
at com.netflix.spinnaker.clouddriver.orchestration.DefaultOrchestrationProcessor$_process_closure1$_closure2.doCall(DefaultOrchestrationProcessor.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
at groovy.lang.Closure.call(Closure.java:418)
at groovy.lang.Closure.call(Closure.java:412)
at com.netflix.spinnaker.clouddriver.metrics.TimedCallable$ClosureWrapper.call(TimedCallable.groovy:55)
at com.netflix.spinnaker.clouddriver.metrics.TimedCallable.call(TimedCallable.groovy:82)
at java_util_concurrent_Callable$call.call(Unknown Source)
at com.netflix.spinnaker.clouddriver.orchestration.DefaultOrchestrationProcessor$_process_closure1.doCall(DefaultOrchestrationProcessor.groovy:88)
at com.netflix.spinnaker.clouddriver.orchestration.DefaultOrchestrationProcessor$_process_closure1.doCall(DefaultOrchestrationProcessor.groovy)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
at groovy.lang.Closure.call(Closure.java:418)
at groovy.lang.Closure.call(Closure.java:412)
at com.netflix.spinnaker.security.AuthenticatedRequest.lambda$propagate$0(AuthenticatedRequest.java:97)
at com.netflix.spinnaker.clouddriver.metrics.TimedCallable.call(TimedCallable.groovy:82)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesManifest` out of START_ARRAY token
at [Source: UNKNOWN; line: -1, column: -1]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1139)
at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1093)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmpty(StdDeserializer.java:600)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:360)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:29)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3745)
... 40 more
Cloud Provider(s):
Kubernetes.
Environment:
Spinnaker installed by Helm Chart version 1.9.1.
Here’s the container image tags:
spin-clouddriver: gcr.io/spinnaker-marketplace/clouddriver:4.1.0-20181211134536, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-deck: gcr.io/spinnaker-marketplace/deck:2.6.0-20181213100452,
spin-echo: gcr.io/spinnaker-marketplace/echo:2.2.1-20181217192627, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-front50: gcr.io/spinnaker-marketplace/front50:0.14.0-20181207134351, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-gate: gcr.io/spinnaker-marketplace/gate:1.4.0-20181217192627, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-igor: gcr.io/spinnaker-marketplace/igor:1.0.0-20181207134351, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-orca: gcr.io/spinnaker-marketplace/orca:2.0.0-20181212160734, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
spin-rosco: gcr.io/spinnaker-marketplace/rosco:0.8.1-20181207134351, gcr.io/spinnaker-marketplace/monitoring-daemon:0.10.0-20181207032510,
Feature Area:
Kuberntes, deployments, etc
Steps to Reproduce:
Trigger our deployment pipeline and wait for that stage to fail. This pipeline simply patches a deployment with a new docker image tag.
About this issue
- Original URL
- State: closed
- Created 5 years ago
- Comments: 21 (7 by maintainers)
OK did a little more digging. Editing just the image line is enough to inject
[]s around the patchBody block in the pipeline JSON. There is no way to undo this in the GUI, when you come back to the stage in the GUIspecis now prefixed with-and there is no way to remove it, you can’t save the changes. You have to edit as JSON to fix.