k3s/vendor/sigs.k8s.io/kustomize/kyaml/yaml/order.go
Brad Davidson e8381db778 Update Kubernetes to v1.21.0
* Update Kubernetes to v1.21.0
* Update to golang v1.16.2
* Update dependent modules to track with upstream
* Switch to upstream flannel
* Track changes to upstream cloud-controller-manager and FeatureGates

Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
2021-04-14 14:51:42 -07:00

108 lines
3.5 KiB
Go

// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package yaml
// fieldSortOrder contains the relative ordering of fields when formatting an
// object.
var fieldSortOrder = []string{
// top-level metadata
"name", "generateName", "namespace", "clusterName",
"apiVersion", "kind", "metadata", "type",
"labels", "annotations",
"spec", "status",
// secret and configmap
"stringData", "data", "binaryData",
// cronjobspec, daemonsetspec, deploymentspec, statefulsetspec,
// jobspec fields
"parallelism", "completions", "activeDeadlineSeconds", "backoffLimit",
"replicas", "selector", "manualSelector", "template",
"ttlSecondsAfterFinished", "volumeClaimTemplates", "service", "serviceName",
"podManagementPolicy", "updateStrategy", "strategy", "minReadySeconds",
"revision", "revisionHistoryLimit", "paused", "progressDeadlineSeconds",
// podspec
// podspec scalars
"restartPolicy", "terminationGracePeriodSeconds",
"activeDeadlineSeconds", "dnsPolicy", "serviceAccountName",
"serviceAccount", "automountServiceAccountToken", "nodeName",
"hostNetwork", "hostPID", "hostIPC", "shareProcessNamespace", "hostname",
"subdomain", "schedulerName", "priorityClassName", "priority",
"runtimeClassName", "enableServiceLinks",
// podspec lists and maps
"nodeSelector", "hostAliases",
// podspec objects
"initContainers", "containers", "volumes", "securityContext",
"imagePullSecrets", "affinity", "tolerations", "dnsConfig",
"readinessGates",
// containers
"image", "command", "args", "workingDir", "ports", "envFrom", "env",
"resources", "volumeMounts", "volumeDevices", "livenessProbe",
"readinessProbe", "lifecycle", "terminationMessagePath",
"terminationMessagePolicy", "imagePullPolicy", "securityContext",
"stdin", "stdinOnce", "tty",
// service
"clusterIP", "externalIPs", "loadBalancerIP", "loadBalancerSourceRanges",
"externalName", "externalTrafficPolicy", "sessionAffinity",
// ports
"protocol", "port", "targetPort", "hostPort", "containerPort", "hostIP",
// volumemount
"readOnly", "mountPath", "subPath", "subPathExpr", "mountPropagation",
// envvar + envvarsource
"value", "valueFrom", "fieldRef", "resourceFieldRef", "configMapKeyRef",
"secretKeyRef", "prefix", "configMapRef", "secretRef",
}
type set map[string]interface{}
func newSet(values ...string) set {
m := map[string]interface{}{}
for _, value := range values {
m[value] = nil
}
return m
}
func (s set) Has(key string) bool {
_, found := s[key]
return found
}
// WhitelistedListSortKinds contains the set of kinds that are whitelisted
// for sorting list field elements
var WhitelistedListSortKinds = newSet(
"CronJob", "DaemonSet", "Deployment", "Job", "ReplicaSet", "StatefulSet",
"ValidatingWebhookConfiguration")
// WhitelistedListSortApis contains the set of apis that are whitelisted for
// sorting list field elements
var WhitelistedListSortApis = newSet(
"apps/v1", "apps/v1beta1", "apps/v1beta2", "batch/v1", "batch/v1beta1",
"extensions/v1beta1", "v1", "admissionregistration.k8s.io/v1")
// WhitelistedListSortFields contains json paths to list fields that should
// be sorted, and the field they should be sorted by
var WhitelistedListSortFields = map[string]string{
".spec.template.spec.containers": "name",
".webhooks.rules.operations": "",
}
// FieldOrder indexes fields and maps them to relative precedence
var FieldOrder = func() map[string]int {
// create an index of field orderings
fo := map[string]int{}
for i, f := range fieldSortOrder {
fo[f] = i + 1
}
return fo
}()