mirror of https://github.com/k3s-io/k3s
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
// Copyright 2020 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package generators
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/go-errors/errors"
|
|
"sigs.k8s.io/kustomize/api/ifc"
|
|
"sigs.k8s.io/kustomize/api/types"
|
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
|
)
|
|
|
|
func makeBaseNode(kind, name, namespace string) (*yaml.RNode, error) {
|
|
rn, err := yaml.Parse(fmt.Sprintf(`
|
|
apiVersion: v1
|
|
kind: %s
|
|
`, kind))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if name == "" {
|
|
return nil, errors.Errorf("a configmap must have a name")
|
|
}
|
|
if _, err := rn.Pipe(yaml.SetK8sName(name)); err != nil {
|
|
return nil, err
|
|
}
|
|
if namespace != "" {
|
|
if _, err := rn.Pipe(yaml.SetK8sNamespace(namespace)); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return rn, nil
|
|
}
|
|
|
|
func makeValidatedDataMap(
|
|
ldr ifc.KvLoader, name string, sources types.KvPairSources) (map[string]string, error) {
|
|
pairs, err := ldr.Load(sources)
|
|
if err != nil {
|
|
return nil, errors.WrapPrefix(err, "loading KV pairs", 0)
|
|
}
|
|
knownKeys := make(map[string]string)
|
|
for _, p := range pairs {
|
|
// legal key: alphanumeric characters, '-', '_' or '.'
|
|
if err := ldr.Validator().ErrIfInvalidKey(p.Key); err != nil {
|
|
return nil, err
|
|
}
|
|
if _, ok := knownKeys[p.Key]; ok {
|
|
return nil, errors.Errorf(
|
|
"configmap %s illegally repeats the key `%s`", name, p.Key)
|
|
}
|
|
knownKeys[p.Key] = p.Value
|
|
}
|
|
return knownKeys, nil
|
|
}
|
|
|
|
// copyLabelsAndAnnotations copies labels and annotations from
|
|
// GeneratorOptions into the given object.
|
|
func copyLabelsAndAnnotations(
|
|
rn *yaml.RNode, opts *types.GeneratorOptions) error {
|
|
if opts == nil {
|
|
return nil
|
|
}
|
|
for _, k := range yaml.SortedMapKeys(opts.Labels) {
|
|
v := opts.Labels[k]
|
|
if _, err := rn.Pipe(yaml.SetLabel(k, v)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
for _, k := range yaml.SortedMapKeys(opts.Annotations) {
|
|
v := opts.Annotations[k]
|
|
if _, err := rn.Pipe(yaml.SetAnnotation(k, v)); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|