I've a NextJS app which needs a .env file mounted. I usually do this with providing a configMap:
kind: ConfigMap
apiVersion: v1
metadata:
  name: frontend-configmap
  namespace: default
data:
  .env: |-
    NEXT_PUBLIC_API_URL=http://my.domain.com
    API_URL=http://my.domain.com
But how to do this with Kustomize?
I try it with envs, but how do I get the values inside?
configMapGenerator:
  - name: frontend-configmap
    envs:
      - .envThank you in advance
You need to have .env file created first. And ideally even creating configmaps should be based on the existing file (below are examples for kustomize and kubectl --from-file).
Then there are two options how to create a configmap:
.env file with environment variables within (which is your example configmap).env file (each variable is a separate key)Test structure:
$ tree -a
.
├── .env
└── kustomization.yaml
$ cat .env # same as your test data
NEXT_PUBLIC_API_URL=http://my.domain.com
API_URL=http://my.domain.comconfigmap with .env file with envvars inside:
kustomization.yaml with an additional option :
$ cat kustomization.yaml 
configMapGenerator:
  - name: frontend-configmap
    files: # using files here as we want to create a whole file
      - .env
generatorOptions:
  disableNameSuffixHash: true # use a static namedisableNameSuffixHash - disable appending a content hash suffix to the names of generated resources, see generator options.
And all left is to run it:
$ kustomize build .
apiVersion: v1
data:
  .env: | # you can see it's a file with context within
    NEXT_PUBLIC_API_URL=http://my.domain.com
    API_URL=http://my.domain.com
kind: ConfigMap
metadata:
  name: frontend-configmapThe same result can be achieved by running using --from-file option:
$ kubectl create cm test-configmap --from-file=.env --dry-run=client -o yaml
apiVersion: v1
data:
  .env: |
    NEXT_PUBLIC_API_URL=http://my.domain.com
    API_URL=http://my.domain.com
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: test-configmapconfigmap with envvars as keys within:
$ cat kustomization.yaml 
configMapGenerator:
  - name: frontend-configmap
    envs: # now using envs to create a configmap with envvars as keys inside
      - .env
generatorOptions:
  disableNameSuffixHash: true # use a static nameRun it to see the output:
$ kustomize build .
apiVersion: v1
data: # you can see there's no file and keys are created directly
  API_URL: http://my.domain.com
  NEXT_PUBLIC_API_URL: http://my.domain.com
kind: ConfigMap
metadata:
  name: frontend-configmapSame with kubectl and --from-env-file option:
$ kubectl create cm test-configmap --from-env-file=.env --dry-run=client -o yaml
apiVersion: v1
data:
  API_URL: http://my.domain.com
  NEXT_PUBLIC_API_URL: http://my.domain.com
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: test-configmapMore details:
Edit - use already existing configmap.yaml
If configmap already exists, then it's possible to reference to it from kustomization.yaml (as mentioned in comment, kustomize is a template engine and using it with this direct reference only without any transformations doesn't really make sense. Here is one of the examples of why you need to use kustomize).
$ tree
.
├── cm.yaml
└── kustomization.yamlcm.yaml has exactly the same config from the question.
$ cat kustomization.yaml
 
resources:
- cm.yaml
namePrefix: test- # used namePrefix for demo purpose (you can omit it as well)Building this and getting the same configmap with .env file inside:
$ kustomize build .
apiVersion: v1
data:
  .env: |-
    NEXT_PUBLIC_API_URL=http://my.domain.com
    API_URL=http://my.domain.com
kind: ConfigMap
metadata:
  name: test-frontend-configmap # name with prefix as it was setup for demo
  namespace: default