mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
e8381db778
* 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>
108 lines
3.5 KiB
Go
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
|
|
}()
|