Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-48585

must specify image in containerTemplate when inheriting

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Minor Minor
    • kubernetes-plugin
    • None

      When overriding an existing container in an inherited pod template, it's necessary to specify the name and image of that container, otherwise a long and unclear backtrace results.  It'd be nicer if it weren't necessary to re-specify the image - just the container name.

      podTemplate(label: "mypod", cloud: "openshift", inheritFrom: "maven", containers: [
      {{ containerTemplate(name: "jnlp", image: "openshift/jenkins-slave-maven-centos7:v3.9", resourceLimitMemory: "512Mi")}}
      ]) {
      ...

      }

      Example backtrace if image is not specified:
      java.lang.IllegalArgumentException: Could not instantiate {label=mypod, inheritFrom=maven, containers=[@containerTemplate(name=jnlp,resourceLimitMemory=512Mi)]} for PodTemplateStep(label: String, name: String, annotations?: PodAnnotation(key: String, value: String)[], cloud?: String, containers?: ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String)[], envVars?: TemplateEnvVar{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], idleMinutes?: int, imagePullSecrets?: String[], inheritFrom?: String, instanceCap?: int, namespace?: String, nodeSelector?: String, nodeUsageMode?: Mode[NORMAL, EXCLUSIVE], serviceAccount?: String, slaveConnectTimeout?: int, volumes?: PodVolume{ConfigMapVolume(mountPath: String, configMapName: String) | EmptyDirVolume(mountPath: String, memory: boolean) | HostPathVolume(hostPath: String, mountPath: String) | NfsVolume(serverAddress: String, serverPath: String, readOnly: boolean, mountPath: String) | PersistentVolumeClaim(mountPath: String, claimName: String, readOnly: boolean) | SecretVolume(mountPath: String, secretName: String)}[], workingDir?: String, workspaceVolume?: WorkspaceVolume{EmptyDirWorkspaceVolume(memory: boolean) | HostPathWorkspaceVolume(hostPath: String) | NfsWorkspaceVolume(serverAddress: String, serverPath: String, readOnly: boolean) | PersistentVolumeClaimWorkspaceVolume(claimName: String, readOnly: boolean)}): java.lang.IllegalArgumentException: Could not instantiate {name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
      at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
      at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
      at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
      at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
      at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
      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:93)
      at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
      at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
      at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
      at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
      at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
      at WorkflowScript.run(WorkflowScript:1)
      at __cps.transform__(Native Method)
      at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
      at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
      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 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
      at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
      at com.cloudbees.groovy.cps.Next.step(Next.java:83)
      at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
      at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
      at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
      at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
      at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
      at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
      at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
      at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
      at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
      at java.util.concurrent.FutureTask.run(FutureTask.java:266)
      at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
      at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      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: java.lang.IllegalArgumentException: Could not instantiate {name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
      at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
      at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:175)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)
      at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
      at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
      at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
      at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
      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:93)
      at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
      at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
      at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
      at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
      at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
      at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
      at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
      at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
      at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
      at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
      at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
      ... 34 more
      Caused by: java.lang.reflect.InvocationTargetException
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
      at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:260)
      ... 62 more
      Caused by: java.lang.IllegalArgumentException
      at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)
      at org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate.<init>(ContainerTemplate.java:62)
      ... 67 more

          [JENKINS-48585] must specify image in containerTemplate when inheriting

          Jim Minter created issue -
          Jim Minter made changes -
          Description Original: When overriding an existing container in an inherited pod template, it's necessary to specify the name *and image* of that container, otherwise a long and unclear backtrace results.  It'd be nicer if it weren't necessary to re-specify the image - just the container name.

          {{podTemplate(label: "mypod", cloud: "openshift", inheritFrom: "maven", containers: [}}
          {{ containerTemplate(name: "jnlp", *image: "openshift/jenkins-slave-maven-centos7:v3.9"*, resourceLimitMemory: "512Mi")}}
          {{]) \{}}
          {{...}}

          {{}}}

           Example backtrace if image is not specified:
          java.lang.IllegalArgumentException: Could not instantiate \{label=mypod, inheritFrom=maven, containers=[@containerTemplate(name=jnlp,resourceLimitMemory=512Mi)]} for PodTemplateStep(label: String, name: String, annotations?: PodAnnotation(key: String, value: String)[], cloud?: String, containers?: ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String)[], envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], idleMinutes?: int, imagePullSecrets?: String[], inheritFrom?: String, instanceCap?: int, namespace?: String, nodeSelector?: String, nodeUsageMode?: Mode[NORMAL, EXCLUSIVE], serviceAccount?: String, slaveConnectTimeout?: int, volumes?: PodVolume\{ConfigMapVolume(mountPath: String, configMapName: String) | EmptyDirVolume(mountPath: String, memory: boolean) | HostPathVolume(hostPath: String, mountPath: String) | NfsVolume(serverAddress: String, serverPath: String, readOnly: boolean, mountPath: String) | PersistentVolumeClaim(mountPath: String, claimName: String, readOnly: boolean) | SecretVolume(mountPath: String, secretName: String)}[], workingDir?: String, workspaceVolume?: WorkspaceVolume\{EmptyDirWorkspaceVolume(memory: boolean) | HostPathWorkspaceVolume(hostPath: String) | NfsWorkspaceVolume(serverAddress: String, serverPath: String, readOnly: boolean) | PersistentVolumeClaimWorkspaceVolume(claimName: String, readOnly: boolean)}): java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
          at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
          at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
          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:93)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
          at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
          at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
          at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
          at WorkflowScript.run(WorkflowScript:1)
          at ___cps.transform___(Native Method)
          at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
          at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
          at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
          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 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
          at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
          at com.cloudbees.groovy.cps.Next.step(Next.java:83)
          at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
          at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
          at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
          at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
          at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
          at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
          at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
          at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          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: java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
          at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:175)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)
          at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
          at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
          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:93)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
          at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
          at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
          at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
          ... 34 more
          Caused by: java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:260)
          ... 62 more
          Caused by: java.lang.IllegalArgumentException
          at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)
          at org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate.<init>(ContainerTemplate.java:62)
          ... 67 more
          New: When overriding an existing container in an inherited pod template, it's necessary to specify the name *and image* of that container, otherwise a long and unclear backtrace results.  It'd be nicer if it weren't necessary to re-specify the image - just the container name.

          {{podTemplate(label: "mypod", cloud: "openshift", inheritFrom: "maven", containers: [}}
           \{\{ containerTemplate(name: "jnlp", *image: "openshift/jenkins-slave-maven-centos7:v3.9"*, resourceLimitMemory: "512Mi")}}
           {{]) \{}}
           {{...}}

          {{}}}

          {{ Example backtrace if image is not specified:}}
          {{ java.lang.IllegalArgumentException: Could not instantiate \{label=mypod, inheritFrom=maven, containers=[@containerTemplate(name=jnlp,resourceLimitMemory=512Mi)]} for PodTemplateStep(label: String, name: String, annotations?: PodAnnotation(key: String, value: String)[], cloud?: String, containers?: ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String)[], envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], idleMinutes?: int, imagePullSecrets?: String[], inheritFrom?: String, instanceCap?: int, namespace?: String, nodeSelector?: String, nodeUsageMode?: Mode[NORMAL, EXCLUSIVE], serviceAccount?: String, slaveConnectTimeout?: int, volumes?: PodVolume\{ConfigMapVolume(mountPath: String, configMapName: String) | EmptyDirVolume(mountPath: String, memory: boolean) | HostPathVolume(hostPath: String, mountPath: String) | NfsVolume(serverAddress: String, serverPath: String, readOnly: boolean, mountPath: String) | PersistentVolumeClaim(mountPath: String, claimName: String, readOnly: boolean) | SecretVolume(mountPath: String, secretName: String)}[], workingDir?: String, workspaceVolume?: WorkspaceVolume\{EmptyDirWorkspaceVolume(memory: boolean) | HostPathWorkspaceVolume(hostPath: String) | NfsWorkspaceVolume(serverAddress: String, serverPath: String, readOnly: boolean) | PersistentVolumeClaimWorkspaceVolume(claimName: String, readOnly: boolean)}): java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)}}
          {{ at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)}}
          {{ 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:93)}}
          {{ at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)}}
          {{ at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)}}
          {{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)}}
          {{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)}}
          {{ at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)}}
          {{ at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)}}
          {{ at WorkflowScript.run(WorkflowScript:1)}}
          {{ at ___cps.transform___(Native Method)}}
          {{ at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)}}
          {{ at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)}}
          {{ at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)}}
          {{ 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 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)}}
          {{ at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)}}
          {{ at com.cloudbees.groovy.cps.Next.step(Next.java:83)}}
          {{ at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)}}
          {{ at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)}}
          {{ at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)}}
          {{ at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)}}
          {{ at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)}}
          {{ at java.util.concurrent.FutureTask.run(FutureTask.java:266)}}
          {{ at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)}}
          {{ at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)}}
          {{ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)}}
          {{ 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: java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)}}
          {{ at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:175)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)}}
          {{ at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)}}
          {{ 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:93)}}
          {{ at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)}}
          {{ at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)}}
          {{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)}}
          {{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)}}
          {{ at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)}}
          {{ at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)}}
          {{ ... 34 more}}
          {{ Caused by: java.lang.reflect.InvocationTargetException}}
          {{ at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)}}
          {{ at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)}}
          {{ at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)}}
          {{ at java.lang.reflect.Constructor.newInstance(Constructor.java:423)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:260)}}
          {{ ... 62 more}}
          {{ Caused by: java.lang.IllegalArgumentException}}
          {{ at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)}}
          {{ at org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate.<init>(ContainerTemplate.java:62)}}
          {{ ... 67 more}}
          Jim Minter made changes -
          Description Original: When overriding an existing container in an inherited pod template, it's necessary to specify the name *and image* of that container, otherwise a long and unclear backtrace results.  It'd be nicer if it weren't necessary to re-specify the image - just the container name.

          {{podTemplate(label: "mypod", cloud: "openshift", inheritFrom: "maven", containers: [}}
           \{\{ containerTemplate(name: "jnlp", *image: "openshift/jenkins-slave-maven-centos7:v3.9"*, resourceLimitMemory: "512Mi")}}
           {{]) \{}}
           {{...}}

          {{}}}

          {{ Example backtrace if image is not specified:}}
          {{ java.lang.IllegalArgumentException: Could not instantiate \{label=mypod, inheritFrom=maven, containers=[@containerTemplate(name=jnlp,resourceLimitMemory=512Mi)]} for PodTemplateStep(label: String, name: String, annotations?: PodAnnotation(key: String, value: String)[], cloud?: String, containers?: ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String)[], envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], idleMinutes?: int, imagePullSecrets?: String[], inheritFrom?: String, instanceCap?: int, namespace?: String, nodeSelector?: String, nodeUsageMode?: Mode[NORMAL, EXCLUSIVE], serviceAccount?: String, slaveConnectTimeout?: int, volumes?: PodVolume\{ConfigMapVolume(mountPath: String, configMapName: String) | EmptyDirVolume(mountPath: String, memory: boolean) | HostPathVolume(hostPath: String, mountPath: String) | NfsVolume(serverAddress: String, serverPath: String, readOnly: boolean, mountPath: String) | PersistentVolumeClaim(mountPath: String, claimName: String, readOnly: boolean) | SecretVolume(mountPath: String, secretName: String)}[], workingDir?: String, workspaceVolume?: WorkspaceVolume\{EmptyDirWorkspaceVolume(memory: boolean) | HostPathWorkspaceVolume(hostPath: String) | NfsWorkspaceVolume(serverAddress: String, serverPath: String, readOnly: boolean) | PersistentVolumeClaimWorkspaceVolume(claimName: String, readOnly: boolean)}): java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)}}
          {{ at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)}}
          {{ 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:93)}}
          {{ at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)}}
          {{ at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)}}
          {{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)}}
          {{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)}}
          {{ at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)}}
          {{ at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)}}
          {{ at WorkflowScript.run(WorkflowScript:1)}}
          {{ at ___cps.transform___(Native Method)}}
          {{ at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)}}
          {{ at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)}}
          {{ at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)}}
          {{ 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 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)}}
          {{ at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)}}
          {{ at com.cloudbees.groovy.cps.Next.step(Next.java:83)}}
          {{ at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)}}
          {{ at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)}}
          {{ at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)}}
          {{ at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)}}
          {{ at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)}}
          {{ at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)}}
          {{ at java.util.concurrent.FutureTask.run(FutureTask.java:266)}}
          {{ at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)}}
          {{ at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)}}
          {{ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)}}
          {{ 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: java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)}}
          {{ at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:175)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)}}
          {{ at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)}}
          {{ at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)}}
          {{ at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)}}
          {{ 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:93)}}
          {{ at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)}}
          {{ at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)}}
          {{ at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)}}
          {{ at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)}}
          {{ at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)}}
          {{ at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)}}
          {{ at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)}}
          {{ at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)}}
          {{ at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)}}
          {{ ... 34 more}}
          {{ Caused by: java.lang.reflect.InvocationTargetException}}
          {{ at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)}}
          {{ at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)}}
          {{ at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)}}
          {{ at java.lang.reflect.Constructor.newInstance(Constructor.java:423)}}
          {{ at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:260)}}
          {{ ... 62 more}}
          {{ Caused by: java.lang.IllegalArgumentException}}
          {{ at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)}}
          {{ at org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate.<init>(ContainerTemplate.java:62)}}
          {{ ... 67 more}}
          New: When overriding an existing container in an inherited pod template, it's necessary to specify the name *and image* of that container, otherwise a long and unclear backtrace results.  It'd be nicer if it weren't necessary to re-specify the image - just the container name.

          {{podTemplate(label: "mypod", cloud: "openshift", inheritFrom: "maven", containers: [}}
           \{\{ containerTemplate(name: "jnlp", *image: "openshift/jenkins-slave-maven-centos7:v3.9"*, resourceLimitMemory: "512Mi")}}
           {{]) \{}}
           {{...}}

          {{}}}

          Example backtrace if image is not specified:
          java.lang.IllegalArgumentException: Could not instantiate \{label=mypod, inheritFrom=maven, containers=[@containerTemplate(name=jnlp,resourceLimitMemory=512Mi)]} for PodTemplateStep(label: String, name: String, annotations?: PodAnnotation(key: String, value: String)[], cloud?: String, containers?: ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String)[], envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], idleMinutes?: int, imagePullSecrets?: String[], inheritFrom?: String, instanceCap?: int, namespace?: String, nodeSelector?: String, nodeUsageMode?: Mode[NORMAL, EXCLUSIVE], serviceAccount?: String, slaveConnectTimeout?: int, volumes?: PodVolume\{ConfigMapVolume(mountPath: String, configMapName: String) | EmptyDirVolume(mountPath: String, memory: boolean) | HostPathVolume(hostPath: String, mountPath: String) | NfsVolume(serverAddress: String, serverPath: String, readOnly: boolean, mountPath: String) | PersistentVolumeClaim(mountPath: String, claimName: String, readOnly: boolean) | SecretVolume(mountPath: String, secretName: String)}[], workingDir?: String, workspaceVolume?: WorkspaceVolume\{EmptyDirWorkspaceVolume(memory: boolean) | HostPathWorkspaceVolume(hostPath: String) | NfsWorkspaceVolume(serverAddress: String, serverPath: String, readOnly: boolean) | PersistentVolumeClaimWorkspaceVolume(claimName: String, readOnly: boolean)}): java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
          at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
          at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
          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:93)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
          at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
          at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
          at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
          at WorkflowScript.run(WorkflowScript:1)
          at ___cps.transform___(Native Method)
          at com.cloudbees.groovy.cps.impl.ContinuationGroup.methodCall(ContinuationGroup.java:57)
          at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.dispatchOrArg(FunctionCallBlock.java:109)
          at com.cloudbees.groovy.cps.impl.FunctionCallBlock$ContinuationImpl.fixArg(FunctionCallBlock.java:82)
          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 com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.java:72)
          at com.cloudbees.groovy.cps.impl.ClosureBlock.eval(ClosureBlock.java:46)
          at com.cloudbees.groovy.cps.Next.step(Next.java:83)
          at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:173)
          at com.cloudbees.groovy.cps.Continuable$1.call(Continuable.java:162)
          at org.codehaus.groovy.runtime.GroovyCategorySupport$ThreadCategoryInfo.use(GroovyCategorySupport.java:122)
          at org.codehaus.groovy.runtime.GroovyCategorySupport.use(GroovyCategorySupport.java:261)
          at com.cloudbees.groovy.cps.Continuable.run0(Continuable.java:162)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.java:19)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:35)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.java:32)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.java:108)
          at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.java:32)
          at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.java:174)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.java:330)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$100(CpsThreadGroup.java:82)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:242)
          at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.java:230)
          at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.java:64)
          at java.util.concurrent.FutureTask.run(FutureTask.java:266)
          at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.java:112)
          at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
          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: java.lang.IllegalArgumentException: Could not instantiate \{name=jnlp, resourceLimitMemory=512Mi} for ContainerTemplate(name?: String, image?: String, alwaysPullImage?: boolean, args?: String, command?: String, envVars?: TemplateEnvVar\{ContainerEnvVar(key: String, value: String) | KeyValueEnvVar(key: String, value: String) | PodEnvVar(key: String, value: String) | SecretEnvVar(key: String, secretName: String, secretKey: String)}[], livenessProbe?: ContainerLivenessProbe(execArgs: String, timeoutSeconds: int, initialDelaySeconds: int, failureThreshold: int, periodSeconds: int, successThreshold: int), ports?: PortMapping(name?: String, containerPort?: int, hostPort?: int)[], privileged?: boolean, resourceLimitCpu?: String, resourceLimitMemory?: String, resourceRequestCpu?: String, resourceRequestMemory?: String, ttyEnabled?: boolean, workingDir?: String): java.lang.reflect.InvocationTargetException
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:264)
          at org.jenkinsci.plugins.structs.describable.UninstantiatedDescribable.instantiate(UninstantiatedDescribable.java:175)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:372)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerceList(DescribableModel.java:463)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:365)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters(DescribableModel.java:338)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:261)
          at org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:205)
          at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:150)
          at org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:108)
          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:93)
          at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
          at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
          at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:42)
          at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
          at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:155)
          at org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall(GroovyInterceptor.java:23)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:123)
          at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall(SandboxInterceptor.java:110)
          at org.kohsuke.groovy.sandbox.impl.Checker$1.call(Checker.java:153)
          at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:157)
          at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
          ... 34 more
          Caused by: java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
          at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
          at org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate(DescribableModel.java:260)
          ... 62 more
          Caused by: java.lang.IllegalArgumentException
          at com.google.common.base.Preconditions.checkArgument(Preconditions.java:72)
          at org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate.<init>(ContainerTemplate.java:62)
          ... 67 more
          Jesse Glick made changes -
          Assignee Original: Carlos Sanchez [ csanchez ]

          Peter Loron added a comment -

          Hello. This issue from 2017(!!!) is still present. Needing to specify the image is dangerous when overriding the global template as discrepancies between the template and jobs will arise. 

          Peter Loron added a comment - Hello. This issue from 2017(!!!) is still present. Needing to specify the image is dangerous when overriding the global template as discrepancies between the template and jobs will arise. 

            Unassigned Unassigned
            jim_minter Jim Minter
            Votes:
            3 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: