Invalid type for io.k8s.api.core.v1.ConfigMapEnvSource got "array" expected "map"

3/8/2020

I've a kubernetes cronjob manifest file.In that file I've defined enviornment variables.I'm generating yaml using a shell script but while using the yaml using kubectl create -f. I'm getting the following validation error

 error validating "cron.yaml": error validating data: [ValidationError(CronJob.spec.jobTemplate.spec.template.spec.containers[0].envFrom[0].configMapRef): invalid type for io.k8s.api.core.v1.ConfigMapEnvSource: got "array", expected "map".

Can anyone suggest me how to resolve this?

-- pikubhai
json
kubernetes
kubernetes-cronjob
yaml

1 Answer

3/8/2020

You have a mistake in the syntax.

There are two approaches, using valueFrom for individual values or envFrom for multiple values.

valueFrom is used inside the env attribute.valueFrom will inject the value of a a key from the referenced configMap.

spec:
  template:
    spec:
      containers:
      - name: ad-sync
        image: foo.azurecr.io/foobar/ad-sync
        command: ["dotnet", "AdSyncService.dll"]
        args: []
        env:
          - name: AdSyncService
            valueFrom:
              configMapKeyRef:
                name: ad-sync-service-configmap
                key: log_level

envFrom is used direct inside the container attribute.envFrom will inject All configMap keys as environment variables

spec:
  template:
    spec:
      containers:
      - name: ad-sync
        image: foo.azurecr.io/foobar/ad-sync
        command: ["dotnet", "AdSyncService.dll"]
        envFrom:
        - configMapRef:
            name: ad-sync-service-configmap
-- Arghya Sadhu
Source: StackOverflow