12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- Copyright 2017 The Kubernetes Authors.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- package pods
- import (
- "fmt"
- "k8s.io/kubernetes/pkg/fieldpath"
- )
- // ConvertDownwardAPIFieldLabel converts the specified downward API field label
- // and its value in the pod of the specified version to the internal version,
- // and returns the converted label and value. This function returns an error if
- // the conversion fails.
- func ConvertDownwardAPIFieldLabel(version, label, value string) (string, string, error) {
- if version != "v1" {
- return "", "", fmt.Errorf("unsupported pod version: %s", version)
- }
- if path, _, ok := fieldpath.SplitMaybeSubscriptedPath(label); ok {
- switch path {
- case "metadata.annotations", "metadata.labels":
- return label, value, nil
- default:
- return "", "", fmt.Errorf("field label does not support subscript: %s", label)
- }
- }
- switch label {
- case "metadata.annotations",
- "metadata.labels",
- "metadata.name",
- "metadata.namespace",
- "metadata.uid",
- "spec.nodeName",
- "spec.restartPolicy",
- "spec.serviceAccountName",
- "spec.schedulerName",
- "status.phase",
- "status.hostIP",
- "status.podIP":
- return label, value, nil
- // This is for backwards compatibility with old v1 clients which send spec.host
- case "spec.host":
- return "spec.nodeName", value, nil
- default:
- return "", "", fmt.Errorf("field label not supported: %s", label)
- }
- }
|