ingress-nginx-helm/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go

557 lines
17 KiB
Go
Raw Normal View History

2016-02-22 00:13:08 +00:00
/*
2016-07-12 03:42:47 +00:00
Copyright 2015 The Kubernetes Authors.
2016-02-22 00:13:08 +00:00
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 v1
import (
"fmt"
2016-08-10 18:53:55 +00:00
"reflect"
2016-02-22 00:13:08 +00:00
2017-07-16 19:30:35 +00:00
"k8s.io/api/core/v1"
2017-04-01 14:42:02 +00:00
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/conversion"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/validation/field"
2016-02-22 00:13:08 +00:00
"k8s.io/kubernetes/pkg/api"
2016-08-10 18:53:55 +00:00
"k8s.io/kubernetes/pkg/apis/extensions"
2016-02-22 00:13:08 +00:00
)
2016-08-10 18:53:55 +00:00
// This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are
// converted the most in the cluster.
// TODO: generate one of these for every external API group - this is to prove the impact
func addFastPathConversionFuncs(scheme *runtime.Scheme) error {
scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) {
switch a := objA.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Pod:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Pod:
return true, Convert_v1_Pod_To_api_Pod(a, b, s)
}
case *api.Pod:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Pod:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Pod_To_v1_Pod(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.Event:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Event:
return true, Convert_v1_Event_To_api_Event(a, b, s)
}
case *api.Event:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Event:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Event_To_v1_Event(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.ReplicationController:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.ReplicationController:
return true, Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s)
}
case *api.ReplicationController:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.ReplicationController:
2016-08-10 18:53:55 +00:00
return true, Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.Node:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Node:
return true, Convert_v1_Node_To_api_Node(a, b, s)
}
case *api.Node:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Node:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Node_To_v1_Node(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.Namespace:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Namespace:
return true, Convert_v1_Namespace_To_api_Namespace(a, b, s)
}
case *api.Namespace:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Namespace:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Namespace_To_v1_Namespace(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.Service:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Service:
return true, Convert_v1_Service_To_api_Service(a, b, s)
}
case *api.Service:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Service:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Service_To_v1_Service(a, b, s)
}
2017-07-16 19:30:35 +00:00
case *v1.Endpoints:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
case *api.Endpoints:
return true, Convert_v1_Endpoints_To_api_Endpoints(a, b, s)
}
case *api.Endpoints:
switch b := objB.(type) {
2017-07-16 19:30:35 +00:00
case *v1.Endpoints:
2016-08-10 18:53:55 +00:00
return true, Convert_api_Endpoints_To_v1_Endpoints(a, b, s)
}
2017-04-01 14:42:02 +00:00
case *metav1.WatchEvent:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
2017-04-01 14:42:02 +00:00
case *metav1.InternalEvent:
return true, metav1.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s)
2016-08-10 18:53:55 +00:00
}
2017-04-01 14:42:02 +00:00
case *metav1.InternalEvent:
2016-08-10 18:53:55 +00:00
switch b := objB.(type) {
2017-04-01 14:42:02 +00:00
case *metav1.WatchEvent:
return true, metav1.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s)
2016-08-10 18:53:55 +00:00
}
}
return false, nil
})
return nil
}
func addConversionFuncs(scheme *runtime.Scheme) error {
2016-02-22 00:13:08 +00:00
// Add non-generated conversion functions
err := scheme.AddConversionFuncs(
Convert_api_Pod_To_v1_Pod,
Convert_api_PodSpec_To_v1_PodSpec,
Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec,
Convert_api_ServiceSpec_To_v1_ServiceSpec,
Convert_v1_Pod_To_api_Pod,
Convert_v1_PodSpec_To_api_PodSpec,
Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec,
2016-07-12 03:42:47 +00:00
Convert_v1_Secret_To_api_Secret,
2016-02-22 00:13:08 +00:00
Convert_v1_ServiceSpec_To_api_ServiceSpec,
Convert_v1_ResourceList_To_api_ResourceList,
2016-08-10 18:53:55 +00:00
Convert_v1_ReplicationController_to_extensions_ReplicaSet,
Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec,
Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus,
Convert_extensions_ReplicaSet_to_v1_ReplicationController,
Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec,
Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus,
2016-02-22 00:13:08 +00:00
)
if err != nil {
2016-08-10 18:53:55 +00:00
return err
2016-02-22 00:13:08 +00:00
}
// Add field conversion funcs.
2016-08-10 18:53:55 +00:00
err = scheme.AddFieldLabelConversionFunc("v1", "Pod",
2016-02-22 00:13:08 +00:00
func(label, value string) (string, string, error) {
switch label {
2016-08-10 18:53:55 +00:00
case "metadata.annotations",
2016-02-22 00:13:08 +00:00
"metadata.labels",
2016-08-10 18:53:55 +00:00
"metadata.name",
"metadata.namespace",
2017-07-16 19:30:35 +00:00
"metadata.uid",
2016-02-22 00:13:08 +00:00
"spec.nodeName",
2016-08-10 18:53:55 +00:00
"spec.restartPolicy",
"spec.serviceAccountName",
2017-09-29 17:12:14 +00:00
"spec.schedulerName",
2016-08-10 18:53:55 +00:00
"status.phase",
2017-05-21 00:11:38 +00:00
"status.hostIP",
2016-08-10 18:53:55 +00:00
"status.podIP":
2016-02-22 00:13:08 +00:00
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)
}
2016-08-10 18:53:55 +00:00
},
)
2016-02-22 00:13:08 +00:00
if err != nil {
2016-08-10 18:53:55 +00:00
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
err = scheme.AddFieldLabelConversionFunc("v1", "Node",
2016-02-22 00:13:08 +00:00
func(label, value string) (string, string, error) {
switch label {
case "metadata.name":
return label, value, nil
case "spec.unschedulable":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
}
2016-08-10 18:53:55 +00:00
},
)
2016-02-22 00:13:08 +00:00
if err != nil {
2016-08-10 18:53:55 +00:00
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
err = scheme.AddFieldLabelConversionFunc("v1", "ReplicationController",
2016-02-22 00:13:08 +00:00
func(label, value string) (string, string, error) {
switch label {
case "metadata.name",
"metadata.namespace",
"status.replicas":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
}
})
if err != nil {
2016-08-10 18:53:55 +00:00
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
if err := AddFieldLabelConversionsForEvent(scheme); err != nil {
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
if err := AddFieldLabelConversionsForNamespace(scheme); err != nil {
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
if err := AddFieldLabelConversionsForSecret(scheme); err != nil {
return err
2016-02-22 00:13:08 +00:00
}
2016-08-10 18:53:55 +00:00
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_ReplicationController_to_extensions_ReplicaSet(in *v1.ReplicationController, out *extensions.ReplicaSet, s conversion.Scope) error {
2017-04-01 14:42:02 +00:00
out.ObjectMeta = in.ObjectMeta
2016-08-10 18:53:55 +00:00
if err := Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(&in.Spec, &out.Spec, s); err != nil {
return err
}
if err := Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(&in.Status, &out.Status, s); err != nil {
return err
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(in *v1.ReplicationControllerSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error {
2016-08-10 18:53:55 +00:00
out.Replicas = *in.Replicas
if in.Selector != nil {
2017-04-01 14:42:02 +00:00
metav1.Convert_map_to_unversioned_LabelSelector(&in.Selector, out.Selector, s)
2016-08-10 18:53:55 +00:00
}
if in.Template != nil {
if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, &out.Template, s); err != nil {
return err
}
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(in *v1.ReplicationControllerStatus, out *extensions.ReplicaSetStatus, s conversion.Scope) error {
2016-08-10 18:53:55 +00:00
out.Replicas = in.Replicas
out.FullyLabeledReplicas = in.FullyLabeledReplicas
2016-11-10 22:57:28 +00:00
out.ReadyReplicas = in.ReadyReplicas
out.AvailableReplicas = in.AvailableReplicas
2016-08-10 18:53:55 +00:00
out.ObservedGeneration = in.ObservedGeneration
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_extensions_ReplicaSet_to_v1_ReplicationController(in *extensions.ReplicaSet, out *v1.ReplicationController, s conversion.Scope) error {
2017-04-01 14:42:02 +00:00
out.ObjectMeta = in.ObjectMeta
2016-08-10 18:53:55 +00:00
if err := Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, s); err != nil {
fieldErr, ok := err.(*field.Error)
if !ok {
return err
}
if out.Annotations == nil {
out.Annotations = make(map[string]string)
}
2017-07-16 19:30:35 +00:00
out.Annotations[v1.NonConvertibleAnnotationPrefix+"/"+fieldErr.Field] = reflect.ValueOf(fieldErr.BadValue).String()
2016-08-10 18:53:55 +00:00
}
if err := Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil {
return err
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(in *extensions.ReplicaSetSpec, out *v1.ReplicationControllerSpec, s conversion.Scope) error {
2016-08-10 18:53:55 +00:00
out.Replicas = new(int32)
*out.Replicas = in.Replicas
2016-11-10 22:57:28 +00:00
out.MinReadySeconds = in.MinReadySeconds
2016-08-10 18:53:55 +00:00
var invalidErr error
if in.Selector != nil {
2017-04-01 14:42:02 +00:00
invalidErr = metav1.Convert_unversioned_LabelSelector_to_map(in.Selector, &out.Selector, s)
2016-08-10 18:53:55 +00:00
}
2017-07-16 19:30:35 +00:00
out.Template = new(v1.PodTemplateSpec)
2016-08-10 18:53:55 +00:00
if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, out.Template, s); err != nil {
return err
}
return invalidErr
}
2017-07-16 19:30:35 +00:00
func Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(in *extensions.ReplicaSetStatus, out *v1.ReplicationControllerStatus, s conversion.Scope) error {
2016-08-10 18:53:55 +00:00
out.Replicas = in.Replicas
out.FullyLabeledReplicas = in.FullyLabeledReplicas
2016-11-10 22:57:28 +00:00
out.ReadyReplicas = in.ReadyReplicas
out.AvailableReplicas = in.AvailableReplicas
2016-08-10 18:53:55 +00:00
out.ObservedGeneration = in.ObservedGeneration
return nil
2016-02-22 00:13:08 +00:00
}
2017-07-16 19:30:35 +00:00
func Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *v1.ReplicationControllerSpec, s conversion.Scope) error {
2016-06-21 18:58:43 +00:00
out.Replicas = &in.Replicas
2016-11-10 22:57:28 +00:00
out.MinReadySeconds = in.MinReadySeconds
2016-06-21 18:58:43 +00:00
out.Selector = in.Selector
2016-02-22 00:13:08 +00:00
if in.Template != nil {
2017-07-16 19:30:35 +00:00
out.Template = new(v1.PodTemplateSpec)
2016-02-22 00:13:08 +00:00
if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil {
return err
}
} else {
out.Template = nil
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *v1.ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error {
2016-11-10 22:57:28 +00:00
if in.Replicas != nil {
out.Replicas = *in.Replicas
}
out.MinReadySeconds = in.MinReadySeconds
2016-06-21 18:58:43 +00:00
out.Selector = in.Selector
2016-02-22 00:13:08 +00:00
if in.Template != nil {
out.Template = new(api.PodTemplateSpec)
if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil {
return err
}
} else {
out.Template = nil
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSpec, out *v1.PodTemplateSpec, s conversion.Scope) error {
2016-06-21 18:58:43 +00:00
if err := autoConvert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in, out, s); err != nil {
return err
}
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *v1.PodTemplateSpec, out *api.PodTemplateSpec, s conversion.Scope) error {
2016-06-21 18:58:43 +00:00
if err := autoConvert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in, out, s); err != nil {
return err
}
2017-09-29 17:12:14 +00:00
2016-06-21 18:58:43 +00:00
return nil
}
2017-07-16 19:30:35 +00:00
// The following two v1.PodSpec conversions are done here to support v1.ServiceAccount
2016-02-22 00:13:08 +00:00
// as an alias for ServiceAccountName.
2017-07-16 19:30:35 +00:00
func Convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *v1.PodSpec, s conversion.Scope) error {
2016-07-12 03:42:47 +00:00
if err := autoConvert_api_PodSpec_To_v1_PodSpec(in, out, s); err != nil {
return err
2016-02-22 00:13:08 +00:00
}
2016-06-21 18:58:43 +00:00
2016-02-22 00:13:08 +00:00
// DeprecatedServiceAccount is an alias for ServiceAccountName.
out.DeprecatedServiceAccount = in.ServiceAccountName
2016-07-12 03:42:47 +00:00
if in.SecurityContext != nil {
2016-02-22 00:13:08 +00:00
// the host namespace fields have to be handled here for backward compatibility
// with v1.0.0
out.HostPID = in.SecurityContext.HostPID
out.HostNetwork = in.SecurityContext.HostNetwork
out.HostIPC = in.SecurityContext.HostIPC
}
2016-07-12 03:42:47 +00:00
2016-02-22 00:13:08 +00:00
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_PodSpec_To_api_PodSpec(in *v1.PodSpec, out *api.PodSpec, s conversion.Scope) error {
2016-07-12 03:42:47 +00:00
if err := autoConvert_v1_PodSpec_To_api_PodSpec(in, out, s); err != nil {
return err
2016-02-22 00:13:08 +00:00
}
2016-07-12 03:42:47 +00:00
2016-02-22 00:13:08 +00:00
// We support DeprecatedServiceAccount as an alias for ServiceAccountName.
// If both are specified, ServiceAccountName (the new field) wins.
if in.ServiceAccountName == "" {
out.ServiceAccountName = in.DeprecatedServiceAccount
}
// the host namespace fields have to be handled specially for backward compatibility
// with v1.0.0
if out.SecurityContext == nil {
out.SecurityContext = new(api.PodSecurityContext)
}
out.SecurityContext.HostNetwork = in.HostNetwork
out.SecurityContext.HostPID = in.HostPID
out.SecurityContext.HostIPC = in.HostIPC
2016-07-12 03:42:47 +00:00
2016-02-22 00:13:08 +00:00
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *v1.Pod, s conversion.Scope) error {
2016-02-22 00:13:08 +00:00
if err := autoConvert_api_Pod_To_v1_Pod(in, out, s); err != nil {
return err
}
2016-06-21 18:58:43 +00:00
2017-09-29 17:12:14 +00:00
// drop init container annotations so they don't take effect on legacy kubelets.
// remove this once the oldest supported kubelet no longer honors the annotations over the field.
2016-06-21 18:58:43 +00:00
if len(out.Annotations) > 0 {
old := out.Annotations
out.Annotations = make(map[string]string, len(old))
for k, v := range old {
out.Annotations[k] = v
}
2017-09-29 17:12:14 +00:00
delete(out.Annotations, "pod.beta.kubernetes.io/init-containers")
delete(out.Annotations, "pod.alpha.kubernetes.io/init-containers")
delete(out.Annotations, "pod.beta.kubernetes.io/init-container-statuses")
delete(out.Annotations, "pod.alpha.kubernetes.io/init-container-statuses")
2016-06-21 18:58:43 +00:00
}
2017-09-29 17:12:14 +00:00
2016-06-21 18:58:43 +00:00
return nil
2016-02-22 00:13:08 +00:00
}
2017-07-16 19:30:35 +00:00
func Convert_v1_Secret_To_api_Secret(in *v1.Secret, out *api.Secret, s conversion.Scope) error {
2016-07-12 03:42:47 +00:00
if err := autoConvert_v1_Secret_To_api_Secret(in, out, s); err != nil {
return err
}
// StringData overwrites Data
if len(in.StringData) > 0 {
if out.Data == nil {
out.Data = map[string][]byte{}
}
for k, v := range in.StringData {
out.Data[k] = []byte(v)
}
}
return nil
2016-02-22 00:13:08 +00:00
}
2017-09-29 17:12:14 +00:00
func Convert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityContext, out *v1.SecurityContext, s conversion.Scope) error {
if in.Capabilities != nil {
out.Capabilities = new(v1.Capabilities)
if err := Convert_api_Capabilities_To_v1_Capabilities(in.Capabilities, out.Capabilities, s); err != nil {
return err
}
} else {
out.Capabilities = nil
}
out.Privileged = in.Privileged
if in.SELinuxOptions != nil {
out.SELinuxOptions = new(v1.SELinuxOptions)
if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(in.SELinuxOptions, out.SELinuxOptions, s); err != nil {
return err
}
} else {
out.SELinuxOptions = nil
}
out.RunAsUser = in.RunAsUser
out.RunAsNonRoot = in.RunAsNonRoot
out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem
out.AllowPrivilegeEscalation = in.AllowPrivilegeEscalation
return nil
}
2016-02-22 00:13:08 +00:00
2017-07-16 19:30:35 +00:00
func Convert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecurityContext, out *v1.PodSecurityContext, s conversion.Scope) error {
2016-02-22 00:13:08 +00:00
out.SupplementalGroups = in.SupplementalGroups
if in.SELinuxOptions != nil {
2017-07-16 19:30:35 +00:00
out.SELinuxOptions = new(v1.SELinuxOptions)
2016-02-22 00:13:08 +00:00
if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(in.SELinuxOptions, out.SELinuxOptions, s); err != nil {
return err
}
} else {
out.SELinuxOptions = nil
}
2016-06-21 18:58:43 +00:00
out.RunAsUser = in.RunAsUser
out.RunAsNonRoot = in.RunAsNonRoot
out.FSGroup = in.FSGroup
2016-02-22 00:13:08 +00:00
return nil
}
2017-07-16 19:30:35 +00:00
func Convert_v1_PodSecurityContext_To_api_PodSecurityContext(in *v1.PodSecurityContext, out *api.PodSecurityContext, s conversion.Scope) error {
2016-02-22 00:13:08 +00:00
out.SupplementalGroups = in.SupplementalGroups
if in.SELinuxOptions != nil {
out.SELinuxOptions = new(api.SELinuxOptions)
if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(in.SELinuxOptions, out.SELinuxOptions, s); err != nil {
return err
}
} else {
out.SELinuxOptions = nil
}
2016-06-21 18:58:43 +00:00
out.RunAsUser = in.RunAsUser
out.RunAsNonRoot = in.RunAsNonRoot
out.FSGroup = in.FSGroup
2016-02-22 00:13:08 +00:00
return nil
}
2016-11-10 22:57:28 +00:00
// +k8s:conversion-fn=copy-only
2017-07-16 19:30:35 +00:00
func Convert_v1_ResourceList_To_api_ResourceList(in *v1.ResourceList, out *api.ResourceList, s conversion.Scope) error {
2016-02-22 00:13:08 +00:00
if *in == nil {
return nil
}
2016-06-21 18:58:43 +00:00
if *out == nil {
*out = make(api.ResourceList, len(*in))
}
2016-02-22 00:13:08 +00:00
for key, val := range *in {
2016-11-10 22:57:28 +00:00
// Moved to defaults
2016-02-22 00:13:08 +00:00
// TODO(#18538): We round up resource values to milli scale to maintain API compatibility.
// In the future, we should instead reject values that need rounding.
2016-11-10 22:57:28 +00:00
// const milliScale = -3
// val.RoundUp(milliScale)
2016-02-22 00:13:08 +00:00
2016-06-21 18:58:43 +00:00
(*out)[api.ResourceName(key)] = val
2016-02-22 00:13:08 +00:00
}
return nil
}
2016-08-10 18:53:55 +00:00
func AddFieldLabelConversionsForEvent(scheme *runtime.Scheme) error {
return scheme.AddFieldLabelConversionFunc("v1", "Event",
func(label, value string) (string, string, error) {
switch label {
case "involvedObject.kind",
"involvedObject.namespace",
"involvedObject.name",
"involvedObject.uid",
"involvedObject.apiVersion",
"involvedObject.resourceVersion",
"involvedObject.fieldPath",
"reason",
"source",
"type",
"metadata.namespace",
"metadata.name":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
}
})
}
func AddFieldLabelConversionsForNamespace(scheme *runtime.Scheme) error {
return scheme.AddFieldLabelConversionFunc("v1", "Namespace",
func(label, value string) (string, string, error) {
switch label {
case "status.phase",
"metadata.name":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
}
})
}
func AddFieldLabelConversionsForSecret(scheme *runtime.Scheme) error {
return scheme.AddFieldLabelConversionFunc("v1", "Secret",
func(label, value string) (string, string, error) {
switch label {
case "type",
"metadata.namespace",
"metadata.name":
return label, value, nil
default:
return "", "", fmt.Errorf("field label not supported: %s", label)
}
})
}