1 // Copyright 2020 The Kubernetes Authors. 2 // SPDX-License-Identifier: Apache-2.0 3 4 package generators 5 6 import ( 7 "sigs.k8s.io/kustomize/api/ifc" 8 "sigs.k8s.io/kustomize/api/types" 9 "sigs.k8s.io/kustomize/kyaml/yaml" 10 ) 11 12 // MakeConfigMap makes a configmap. 13 // 14 // ConfigMap: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/#configmap-v1-core 15 // 16 // ConfigMaps and Secrets are similar. 17 // 18 // Both objects have a `data` field, which contains a map from keys to 19 // values that must be UTF-8 valid strings. Such data might be simple text, 20 // or whoever made the data may have done so by performing a base64 encoding 21 // on binary data. Regardless, k8s has no means to know this, so it treats 22 // the data field as a string. 23 // 24 // The ConfigMap has an additional field `binaryData`, also a map, but its 25 // values are _intended_ to be interpreted as a base64 encoding of []byte, 26 // by whatever makes use of the ConfigMap. 27 // 28 // In a ConfigMap, any key used in `data` cannot also be used in `binaryData` 29 // and vice-versa. A key must be unique across both maps. 30 func MakeConfigMap( 31 ldr ifc.KvLoader, args *types.ConfigMapArgs) (rn *yaml.RNode, err error) { 32 rn, err = makeBaseNode("ConfigMap", args.Name, args.Namespace) 33 if err != nil { 34 return nil, err 35 } 36 m, err := makeValidatedDataMap(ldr, args.Name, args.KvPairSources) 37 if err != nil { 38 return nil, err 39 } 40 if err = rn.LoadMapIntoConfigMapData(m); err != nil { 41 return nil, err 42 } 43 err = copyLabelsAndAnnotations(rn, args.Options) 44 if err != nil { 45 return nil, err 46 } 47 err = setImmutable(rn, args.Options) 48 if err != nil { 49 return nil, err 50 } 51 return rn, nil 52 } 53