Merge pull request #7832 from wojtek-t/separate_generated_conversion

Support manually-created and generated conversion functions
This commit is contained in:
Clayton Coleman 2015-05-06 12:53:46 -04:00
commit 800de8cb7e
5 changed files with 607 additions and 385 deletions

View File

@ -68,6 +68,38 @@ func convert_api_Binding_To_v1beta3_Binding(in *newer.Binding, out *Binding, s c
return nil
}
func convert_api_Capabilities_To_v1beta3_Capabilities(in *newer.Capabilities, out *Capabilities, s conversion.Scope) error {
if in.Add != nil {
out.Add = make([]CapabilityType, len(in.Add))
for i := range in.Add {
out.Add[i] = CapabilityType(in.Add[i])
}
}
if in.Drop != nil {
out.Drop = make([]CapabilityType, len(in.Drop))
for i := range in.Drop {
out.Drop[i] = CapabilityType(in.Drop[i])
}
}
return nil
}
func convert_v1beta3_Capabilities_To_api_Capabilities(in *Capabilities, out *newer.Capabilities, s conversion.Scope) error {
if in.Add != nil {
out.Add = make([]newer.CapabilityType, len(in.Add))
for i := range in.Add {
out.Add[i] = newer.CapabilityType(in.Add[i])
}
}
if in.Drop != nil {
out.Drop = make([]newer.CapabilityType, len(in.Drop))
for i := range in.Drop {
out.Drop[i] = newer.CapabilityType(in.Drop[i])
}
}
return nil
}
func convert_v1beta3_ComponentCondition_To_api_ComponentCondition(in *ComponentCondition, out *newer.ComponentCondition, s conversion.Scope) error {
out.Type = newer.ComponentConditionType(in.Type)
out.Status = newer.ConditionStatus(in.Status)
@ -900,6 +932,32 @@ func convert_api_LimitRangeSpec_To_v1beta3_LimitRangeSpec(in *newer.LimitRangeSp
return nil
}
func convert_v1beta3_List_To_api_List(in *List, out *newer.List, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Items, &out.Items, 0); err != nil {
return err
}
return nil
}
func convert_api_List_To_v1beta3_List(in *newer.List, out *List, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Items, &out.Items, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ListMeta_To_api_ListMeta(in *ListMeta, out *newer.ListMeta, s conversion.Scope) error {
out.SelfLink = in.SelfLink
out.ResourceVersion = in.ResourceVersion
@ -1644,6 +1702,38 @@ func convert_api_PersistentVolumeStatus_To_v1beta3_PersistentVolumeStatus(in *ne
return nil
}
func convert_v1beta3_Pod_To_api_Pod(in *Pod, out *newer.Pod, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_api_Pod_To_v1beta3_Pod(in *newer.Pod, out *Pod, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_PodCondition_To_api_PodCondition(in *PodCondition, out *newer.PodCondition, s conversion.Scope) error {
out.Type = newer.PodConditionType(in.Type)
out.Status = newer.ConditionStatus(in.Status)
@ -1692,6 +1782,42 @@ func convert_api_PodExecOptions_To_v1beta3_PodExecOptions(in *newer.PodExecOptio
return nil
}
func convert_v1beta3_PodList_To_api_PodList(in *PodList, out *newer.PodList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.Pod, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_PodList_To_v1beta3_PodList(in *newer.PodList, out *PodList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]Pod, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_PodLogOptions_To_api_PodLogOptions(in *PodLogOptions, out *newer.PodLogOptions, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
@ -1726,6 +1852,74 @@ func convert_api_PodProxyOptions_To_v1beta3_PodProxyOptions(in *newer.PodProxyOp
return nil
}
func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s conversion.Scope) error {
if in.Volumes != nil {
out.Volumes = make([]newer.Volume, len(in.Volumes))
for i := range in.Volumes {
if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil {
return err
}
}
}
if in.Containers != nil {
out.Containers = make([]newer.Container, len(in.Containers))
for i := range in.Containers {
if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil {
return err
}
}
}
out.RestartPolicy = newer.RestartPolicy(in.RestartPolicy)
if in.TerminationGracePeriodSeconds != nil {
out.TerminationGracePeriodSeconds = new(int64)
*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
}
out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy)
if in.NodeSelector != nil {
out.NodeSelector = make(map[string]string)
for key, val := range in.NodeSelector {
out.NodeSelector[key] = val
}
}
out.Host = in.Host
out.HostNetwork = in.HostNetwork
return nil
}
func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s conversion.Scope) error {
if in.Volumes != nil {
out.Volumes = make([]Volume, len(in.Volumes))
for i := range in.Volumes {
if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil {
return err
}
}
}
if in.Containers != nil {
out.Containers = make([]Container, len(in.Containers))
for i := range in.Containers {
if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil {
return err
}
}
}
out.RestartPolicy = RestartPolicy(in.RestartPolicy)
if in.TerminationGracePeriodSeconds != nil {
out.TerminationGracePeriodSeconds = new(int64)
*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
}
out.DNSPolicy = DNSPolicy(in.DNSPolicy)
if in.NodeSelector != nil {
out.NodeSelector = make(map[string]string)
for key, val := range in.NodeSelector {
out.NodeSelector[key] = val
}
}
out.Host = in.Host
out.HostNetwork = in.HostNetwork
return nil
}
func convert_v1beta3_PodStatus_To_api_PodStatus(in *PodStatus, out *newer.PodStatus, s conversion.Scope) error {
out.Phase = newer.PodPhase(in.Phase)
if in.Conditions != nil {
@ -1800,6 +1994,88 @@ func convert_api_PodStatusResult_To_v1beta3_PodStatusResult(in *newer.PodStatusR
return nil
}
func convert_v1beta3_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *newer.PodTemplate, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_api_PodTemplate_To_v1beta3_PodTemplate(in *newer.PodTemplate, out *PodTemplate, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *newer.PodTemplateList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.PodTemplate, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_PodTemplateList_To_v1beta3_PodTemplateList(in *newer.PodTemplateList, out *PodTemplateList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]PodTemplate, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *newer.PodTemplateSpec, s conversion.Scope) error {
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
return nil
}
func convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec(in *newer.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error {
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_Probe_To_api_Probe(in *Probe, out *newer.Probe, s conversion.Scope) error {
if err := s.Convert(&in.Handler, &out.Handler, 0); err != nil {
return err
@ -1818,6 +2094,118 @@ func convert_api_Probe_To_v1beta3_Probe(in *newer.Probe, out *Probe, s conversio
return nil
}
func convert_v1beta3_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_api_ReplicationController_To_v1beta3_ReplicationController(in *newer.ReplicationController, out *ReplicationController, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *newer.ReplicationControllerList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.ReplicationController, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList(in *newer.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]ReplicationController, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *newer.ReplicationControllerSpec, s conversion.Scope) error {
out.Replicas = in.Replicas
if in.Selector != nil {
out.Selector = make(map[string]string)
for key, val := range in.Selector {
out.Selector[key] = val
}
}
if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec(in *newer.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error {
out.Replicas = in.Replicas
if in.Selector != nil {
out.Selector = make(map[string]string)
for key, val := range in.Selector {
out.Selector[key] = val
}
}
if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *newer.ReplicationControllerStatus, s conversion.Scope) error {
out.Replicas = in.Replicas
return nil
}
func convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus(in *newer.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error {
out.Replicas = in.Replicas
return nil
}
func convert_v1beta3_ResourceQuota_To_api_ResourceQuota(in *ResourceQuota, out *newer.ResourceQuota, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
@ -2010,6 +2398,22 @@ func convert_api_ResourceRequirements_To_v1beta3_ResourceRequirements(in *newer.
return nil
}
func convert_api_SELinuxOptions_To_v1beta3_SELinuxOptions(in *newer.SELinuxOptions, out *SELinuxOptions, s conversion.Scope) error {
out.User = in.User
out.Role = in.Role
out.Type = in.Type
out.Level = in.Level
return nil
}
func convert_v1beta3_SELinuxOptions_To_api_SELinuxOptions(in *SELinuxOptions, out *newer.SELinuxOptions, s conversion.Scope) error {
out.User = in.User
out.Role = in.Role
out.Type = in.Type
out.Level = in.Level
return nil
}
func convert_v1beta3_Secret_To_api_Secret(in *Secret, out *newer.Secret, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
@ -2098,6 +2502,42 @@ func convert_api_SecretVolumeSource_To_v1beta3_SecretVolumeSource(in *newer.Secr
return nil
}
func convert_api_SecurityContext_To_v1beta3_SecurityContext(in *newer.SecurityContext, out *SecurityContext, s conversion.Scope) error {
if err := s.Convert(&in.Capabilities, &out.Capabilities, 0); err != nil {
return err
}
if in.Privileged != nil {
out.Privileged = new(bool)
*out.Privileged = *in.Privileged
}
if err := s.Convert(&in.SELinuxOptions, &out.SELinuxOptions, 0); err != nil {
return err
}
if in.RunAsUser != nil {
out.RunAsUser = new(int64)
*out.RunAsUser = *in.RunAsUser
}
return nil
}
func convert_v1beta3_SecurityContext_To_api_SecurityContext(in *SecurityContext, out *newer.SecurityContext, s conversion.Scope) error {
if err := s.Convert(&in.Capabilities, &out.Capabilities, 0); err != nil {
return err
}
if in.Privileged != nil {
out.Privileged = new(bool)
*out.Privileged = *in.Privileged
}
if err := s.Convert(&in.SELinuxOptions, &out.SELinuxOptions, 0); err != nil {
return err
}
if in.RunAsUser != nil {
out.RunAsUser = new(int64)
*out.RunAsUser = *in.RunAsUser
}
return nil
}
func convert_v1beta3_SerializedReference_To_api_SerializedReference(in *SerializedReference, out *newer.SerializedReference, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
@ -2476,6 +2916,7 @@ func init() {
err := newer.Scheme.AddGeneratedConversionFuncs(
convert_api_AWSElasticBlockStoreVolumeSource_To_v1beta3_AWSElasticBlockStoreVolumeSource,
convert_api_Binding_To_v1beta3_Binding,
convert_api_Capabilities_To_v1beta3_Capabilities,
convert_api_ComponentCondition_To_v1beta3_ComponentCondition,
convert_api_ComponentStatusList_To_v1beta3_ComponentStatusList,
convert_api_ComponentStatus_To_v1beta3_ComponentStatus,
@ -2511,6 +2952,7 @@ func init() {
convert_api_LimitRangeSpec_To_v1beta3_LimitRangeSpec,
convert_api_LimitRange_To_v1beta3_LimitRange,
convert_api_ListMeta_To_v1beta3_ListMeta,
convert_api_List_To_v1beta3_List,
convert_api_NFSVolumeSource_To_v1beta3_NFSVolumeSource,
convert_api_NamespaceList_To_v1beta3_NamespaceList,
convert_api_NamespaceSpec_To_v1beta3_NamespaceSpec,
@ -2538,19 +2980,31 @@ func init() {
convert_api_PersistentVolume_To_v1beta3_PersistentVolume,
convert_api_PodCondition_To_v1beta3_PodCondition,
convert_api_PodExecOptions_To_v1beta3_PodExecOptions,
convert_api_PodList_To_v1beta3_PodList,
convert_api_PodLogOptions_To_v1beta3_PodLogOptions,
convert_api_PodProxyOptions_To_v1beta3_PodProxyOptions,
convert_api_PodSpec_To_v1beta3_PodSpec,
convert_api_PodStatusResult_To_v1beta3_PodStatusResult,
convert_api_PodStatus_To_v1beta3_PodStatus,
convert_api_PodTemplateList_To_v1beta3_PodTemplateList,
convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec,
convert_api_PodTemplate_To_v1beta3_PodTemplate,
convert_api_Pod_To_v1beta3_Pod,
convert_api_Probe_To_v1beta3_Probe,
convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList,
convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec,
convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus,
convert_api_ReplicationController_To_v1beta3_ReplicationController,
convert_api_ResourceQuotaList_To_v1beta3_ResourceQuotaList,
convert_api_ResourceQuotaSpec_To_v1beta3_ResourceQuotaSpec,
convert_api_ResourceQuotaStatus_To_v1beta3_ResourceQuotaStatus,
convert_api_ResourceQuota_To_v1beta3_ResourceQuota,
convert_api_ResourceRequirements_To_v1beta3_ResourceRequirements,
convert_api_SELinuxOptions_To_v1beta3_SELinuxOptions,
convert_api_SecretList_To_v1beta3_SecretList,
convert_api_SecretVolumeSource_To_v1beta3_SecretVolumeSource,
convert_api_Secret_To_v1beta3_Secret,
convert_api_SecurityContext_To_v1beta3_SecurityContext,
convert_api_SerializedReference_To_v1beta3_SerializedReference,
convert_api_ServiceList_To_v1beta3_ServiceList,
convert_api_ServicePort_To_v1beta3_ServicePort,
@ -2567,6 +3021,7 @@ func init() {
convert_api_Volume_To_v1beta3_Volume,
convert_v1beta3_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource,
convert_v1beta3_Binding_To_api_Binding,
convert_v1beta3_Capabilities_To_api_Capabilities,
convert_v1beta3_ComponentCondition_To_api_ComponentCondition,
convert_v1beta3_ComponentStatusList_To_api_ComponentStatusList,
convert_v1beta3_ComponentStatus_To_api_ComponentStatus,
@ -2602,6 +3057,7 @@ func init() {
convert_v1beta3_LimitRangeSpec_To_api_LimitRangeSpec,
convert_v1beta3_LimitRange_To_api_LimitRange,
convert_v1beta3_ListMeta_To_api_ListMeta,
convert_v1beta3_List_To_api_List,
convert_v1beta3_NFSVolumeSource_To_api_NFSVolumeSource,
convert_v1beta3_NamespaceList_To_api_NamespaceList,
convert_v1beta3_NamespaceSpec_To_api_NamespaceSpec,
@ -2629,19 +3085,31 @@ func init() {
convert_v1beta3_PersistentVolume_To_api_PersistentVolume,
convert_v1beta3_PodCondition_To_api_PodCondition,
convert_v1beta3_PodExecOptions_To_api_PodExecOptions,
convert_v1beta3_PodList_To_api_PodList,
convert_v1beta3_PodLogOptions_To_api_PodLogOptions,
convert_v1beta3_PodProxyOptions_To_api_PodProxyOptions,
convert_v1beta3_PodSpec_To_api_PodSpec,
convert_v1beta3_PodStatusResult_To_api_PodStatusResult,
convert_v1beta3_PodStatus_To_api_PodStatus,
convert_v1beta3_PodTemplateList_To_api_PodTemplateList,
convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec,
convert_v1beta3_PodTemplate_To_api_PodTemplate,
convert_v1beta3_Pod_To_api_Pod,
convert_v1beta3_Probe_To_api_Probe,
convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList,
convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec,
convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus,
convert_v1beta3_ReplicationController_To_api_ReplicationController,
convert_v1beta3_ResourceQuotaList_To_api_ResourceQuotaList,
convert_v1beta3_ResourceQuotaSpec_To_api_ResourceQuotaSpec,
convert_v1beta3_ResourceQuotaStatus_To_api_ResourceQuotaStatus,
convert_v1beta3_ResourceQuota_To_api_ResourceQuota,
convert_v1beta3_ResourceRequirements_To_api_ResourceRequirements,
convert_v1beta3_SELinuxOptions_To_api_SELinuxOptions,
convert_v1beta3_SecretList_To_api_SecretList,
convert_v1beta3_SecretVolumeSource_To_api_SecretVolumeSource,
convert_v1beta3_Secret_To_api_Secret,
convert_v1beta3_SecurityContext_To_api_SecurityContext,
convert_v1beta3_SerializedReference_To_api_SerializedReference,
convert_v1beta3_ServiceList_To_api_ServiceList,
convert_v1beta3_ServicePort_To_api_ServicePort,
@ -2660,26 +3128,6 @@ func init() {
// Add non-generated conversion functions
newer.Scheme.AddConversionFuncs(
convert_v1beta3_Pod_To_api_Pod,
convert_api_Pod_To_v1beta3_Pod,
convert_v1beta3_ReplicationController_To_api_ReplicationController,
convert_api_ReplicationController_To_v1beta3_ReplicationController,
convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList,
convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList,
convert_v1beta3_PodList_To_api_PodList,
convert_api_PodList_To_v1beta3_PodList,
convert_v1beta3_PodTemplate_To_api_PodTemplate,
convert_api_PodTemplate_To_v1beta3_PodTemplate,
convert_v1beta3_PodTemplateList_To_api_PodTemplateList,
convert_api_PodTemplateList_To_v1beta3_PodTemplateList,
convert_v1beta3_PodSpec_To_api_PodSpec,
convert_api_PodSpec_To_v1beta3_PodSpec,
convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec,
convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec,
convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec,
convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec,
convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus,
convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus,
convert_v1beta3_Container_To_api_Container,
convert_api_Container_To_v1beta3_Container,
)
@ -2779,336 +3227,6 @@ func init() {
}
}
func convert_v1beta3_Pod_To_api_Pod(in *Pod, out *newer.Pod, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_api_Pod_To_v1beta3_Pod(in *newer.Pod, out *Pod, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_api_ReplicationController_To_v1beta3_ReplicationController(in *newer.ReplicationController, out *ReplicationController, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
if err := s.Convert(&in.Status, &out.Status, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *newer.ReplicationControllerList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.ReplicationController, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList(in *newer.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]ReplicationController, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_PodList_To_api_PodList(in *PodList, out *newer.PodList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.Pod, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_PodList_To_v1beta3_PodList(in *newer.PodList, out *PodList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]Pod, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *newer.PodTemplate, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_api_PodTemplate_To_v1beta3_PodTemplate(in *newer.PodTemplate, out *PodTemplate, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *newer.PodTemplateList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]newer.PodTemplate, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_api_PodTemplateList_To_v1beta3_PodTemplateList(in *newer.PodTemplateList, out *PodTemplateList, s conversion.Scope) error {
if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil {
return err
}
if in.Items != nil {
out.Items = make([]PodTemplate, len(in.Items))
for i := range in.Items {
if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil {
return err
}
}
}
return nil
}
func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s conversion.Scope) error {
if in.Volumes != nil {
out.Volumes = make([]newer.Volume, len(in.Volumes))
for i := range in.Volumes {
if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil {
return err
}
}
}
if in.Containers != nil {
out.Containers = make([]newer.Container, len(in.Containers))
for i := range in.Containers {
if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil {
return err
}
}
}
out.RestartPolicy = newer.RestartPolicy(in.RestartPolicy)
if in.TerminationGracePeriodSeconds != nil {
out.TerminationGracePeriodSeconds = new(int64)
*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
}
out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy)
if in.NodeSelector != nil {
out.NodeSelector = make(map[string]string)
for key, val := range in.NodeSelector {
out.NodeSelector[key] = val
}
}
out.Host = in.Host
out.HostNetwork = in.HostNetwork
return nil
}
func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s conversion.Scope) error {
if in.Volumes != nil {
out.Volumes = make([]Volume, len(in.Volumes))
for i := range in.Volumes {
if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil {
return err
}
}
}
if in.Containers != nil {
out.Containers = make([]Container, len(in.Containers))
for i := range in.Containers {
if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil {
return err
}
}
}
out.RestartPolicy = RestartPolicy(in.RestartPolicy)
if in.TerminationGracePeriodSeconds != nil {
out.TerminationGracePeriodSeconds = new(int64)
*out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds
}
out.DNSPolicy = DNSPolicy(in.DNSPolicy)
if in.NodeSelector != nil {
out.NodeSelector = make(map[string]string)
for key, val := range in.NodeSelector {
out.NodeSelector[key] = val
}
}
out.Host = in.Host
out.HostNetwork = in.HostNetwork
return nil
}
func convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *newer.PodTemplateSpec, s conversion.Scope) error {
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
return nil
}
func convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec(in *newer.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error {
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
return err
}
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *newer.ReplicationControllerSpec, s conversion.Scope) error {
out.Replicas = in.Replicas
if in.Selector != nil {
out.Selector = make(map[string]string)
for key, val := range in.Selector {
out.Selector[key] = val
}
}
if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec(in *newer.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error {
out.Replicas = in.Replicas
if in.Selector != nil {
out.Selector = make(map[string]string)
for key, val := range in.Selector {
out.Selector[key] = val
}
}
if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil {
return err
}
if err := s.Convert(&in.Template, &out.Template, 0); err != nil {
return err
}
return nil
}
func convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *newer.ReplicationControllerStatus, s conversion.Scope) error {
out.Replicas = in.Replicas
return nil
}
func convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus(in *newer.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error {
out.Replicas = in.Replicas
return nil
}
func convert_v1beta3_Container_To_api_Container(in *Container, out *newer.Container, s conversion.Scope) error {
out.Name = in.Name
out.Image = in.Image

View File

@ -40,7 +40,8 @@ type DebugLogger interface {
type Converter struct {
// Map from the conversion pair to a function which can
// do the conversion.
conversionFuncs map[typePair]reflect.Value
conversionFuncs map[typePair]reflect.Value
generatedConversionFuncs map[typePair]reflect.Value
// This is a map from a source field type and name, to a list of destination
// field type and name.
@ -72,11 +73,12 @@ type Converter struct {
// NewConverter creates a new Converter object.
func NewConverter() *Converter {
c := &Converter{
conversionFuncs: map[typePair]reflect.Value{},
defaultingFuncs: map[reflect.Type]reflect.Value{},
nameFunc: func(t reflect.Type) string { return t.Name() },
structFieldDests: map[typeNamePair][]typeNamePair{},
structFieldSources: map[typeNamePair][]typeNamePair{},
conversionFuncs: map[typePair]reflect.Value{},
generatedConversionFuncs: map[typePair]reflect.Value{},
defaultingFuncs: map[reflect.Type]reflect.Value{},
nameFunc: func(t reflect.Type) string { return t.Name() },
structFieldDests: map[typeNamePair][]typeNamePair{},
structFieldSources: map[typeNamePair][]typeNamePair{},
inputFieldMappingFuncs: map[reflect.Type]FieldMappingFunc{},
inputDefaultFlags: map[reflect.Type]FieldMatchingFlags{},
@ -238,20 +240,8 @@ func (s *scope) error(message string, args ...interface{}) error {
return fmt.Errorf(where+message, args...)
}
// RegisterConversionFunc registers a conversion func with the
// Converter. conversionFunc must take three parameters: a pointer to the input
// type, a pointer to the output type, and a conversion.Scope (which should be
// used if recursive conversion calls are desired). It must return an error.
//
// Example:
// c.RegisteConversionFunc(
// func(in *Pod, out *v1beta1.Pod, s Scope) error {
// // conversion logic...
// return nil
// })
func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error {
fv := reflect.ValueOf(conversionFunc)
ft := fv.Type()
// Verifies whether a conversion function has a correct signature.
func verifyConversionFunctionSignature(ft reflect.Type) error {
if ft.Kind() != reflect.Func {
return fmt.Errorf("expected func, got: %v", ft)
}
@ -278,10 +268,47 @@ func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error {
if ft.Out(0) != errorType {
return fmt.Errorf("expected error return, got: %v", ft)
}
return nil
}
// RegisterConversionFunc registers a conversion func with the
// Converter. conversionFunc must take three parameters: a pointer to the input
// type, a pointer to the output type, and a conversion.Scope (which should be
// used if recursive conversion calls are desired). It must return an error.
//
// Example:
// c.RegisteConversionFunc(
// func(in *Pod, out *v1beta1.Pod, s Scope) error {
// // conversion logic...
// return nil
// })
func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error {
fv := reflect.ValueOf(conversionFunc)
ft := fv.Type()
if err := verifyConversionFunctionSignature(ft); err != nil {
return err
}
c.conversionFuncs[typePair{ft.In(0).Elem(), ft.In(1).Elem()}] = fv
return nil
}
// Similar to RegisterConversionFunc, but registers conversion function that were
// automatically generated.
func (c *Converter) RegisterGeneratedConversionFunc(conversionFunc interface{}) error {
fv := reflect.ValueOf(conversionFunc)
ft := fv.Type()
if err := verifyConversionFunctionSignature(ft); err != nil {
return err
}
c.generatedConversionFuncs[typePair{ft.In(0).Elem(), ft.In(1).Elem()}] = fv
return nil
}
func (c *Converter) HasConversionFunc(inType, outType reflect.Type) bool {
_, found := c.conversionFuncs[typePair{inType, outType}]
return found
}
// SetStructFieldCopy registers a correspondence. Whenever a struct field is encountered
// which has a type and name matching srcFieldType and srcFieldName, it wil be copied
// into the field in the destination struct matching destFieldType & Name, if such a
@ -469,6 +496,12 @@ func (c *Converter) convert(sv, dv reflect.Value, scope *scope) error {
}
return c.callCustom(sv, dv, fv, scope)
}
if fv, ok := c.generatedConversionFuncs[typePair{st, dt}]; ok {
if c.Debug != nil {
c.Debug.Logf("Calling custom conversion of '%v' to '%v'", st, dt)
}
return c.callCustom(sv, dv, fv, scope)
}
return c.defaultConvert(sv, dv, scope)
}

View File

@ -187,6 +187,28 @@ func TestConverter_CallsRegisteredFunctions(t *testing.T) {
}
}
func TestConverter_GeneratedConversionOverriden(t *testing.T) {
type A struct{}
type B struct{}
c := NewConverter()
if err := c.RegisterConversionFunc(func(in *A, out *B, s Scope) error {
return nil
}); err != nil {
t.Fatalf("unexpected error %v", err)
}
if err := c.RegisterGeneratedConversionFunc(func(in *A, out *B, s Scope) error {
return fmt.Errorf("generated function should be overriden")
}); err != nil {
t.Fatalf("unexpected error %v", err)
}
a := A{}
b := B{}
if err := c.Convert(&a, &b, 0, nil); err != nil {
t.Errorf("%v", err)
}
}
func TestConverter_MapsStringArrays(t *testing.T) {
type A struct {
Foo string

View File

@ -64,6 +64,8 @@ func (g *generator) GenerateConversionsForType(version string, reflection reflec
}
func (g *generator) generateConversionsBetween(inType, outType reflect.Type) error {
existingConversion := g.scheme.Converter().HasConversionFunc(inType, outType) && g.scheme.Converter().HasConversionFunc(outType, inType)
// Avoid processing the same type multiple times.
if value, found := g.convertibles[inType]; found {
if value != outType {
@ -79,19 +81,50 @@ func (g *generator) generateConversionsBetween(inType, outType reflect.Type) err
if inType.Kind() != outType.Kind() {
return fmt.Errorf("cannot convert types of different kinds: %v %v", inType, outType)
}
// We should be able to generate conversions both sides.
switch inType.Kind() {
case reflect.Map:
return g.generateConversionsForMap(inType, outType)
case reflect.Ptr:
return g.generateConversionsBetween(inType.Elem(), outType.Elem())
case reflect.Slice:
return g.generateConversionsForSlice(inType, outType)
case reflect.Interface:
// TODO(wojtek-t): Currently we rely on default conversion functions for interfaces.
// Add support for reflect.Interface.
inErr := g.generateConversionsForMap(inType, outType)
outErr := g.generateConversionsForMap(outType, inType)
if !existingConversion && (inErr != nil || outErr != nil) {
return inErr
}
// We don't add it to g.convertibles - maps should be handled correctly
// inside appropriate conversion functions.
return nil
case reflect.Ptr:
inErr := g.generateConversionsBetween(inType.Elem(), outType.Elem())
outErr := g.generateConversionsBetween(outType.Elem(), inType.Elem())
if !existingConversion && (inErr != nil || outErr != nil) {
return inErr
}
// We don't add it to g.convertibles - maps should be handled correctly
// inside appropriate conversion functions.
return nil
case reflect.Slice:
inErr := g.generateConversionsForSlice(inType, outType)
outErr := g.generateConversionsForSlice(outType, inType)
if !existingConversion && (inErr != nil || outErr != nil) {
return inErr
}
// We don't add it to g.convertibles - slices should be handled correctly
// inside appropriate conversion functions.
return nil
case reflect.Interface:
// TODO(wojtek-t): Currently we don't support converting interfaces.
return fmt.Errorf("interfaces are not supported")
case reflect.Struct:
return g.generateConversionsForStruct(inType, outType)
inErr := g.generateConversionsForStruct(inType, outType)
outErr := g.generateConversionsForStruct(outType, inType)
if !existingConversion && (inErr != nil || outErr != nil) {
return inErr
}
if !existingConversion {
if _, found := g.convertibles[outType]; !found {
g.convertibles[inType] = outType
}
}
return nil
default:
// All simple types should be handled correctly with default conversion.
return nil
@ -119,8 +152,6 @@ func (g *generator) generateConversionsForMap(inType, outType reflect.Type) erro
if err := g.generateConversionsBetween(inValue, outValue); err != nil {
return err
}
// We don't add it to g.convertibles - maps should be handled correctly
// inside appropriate conversion functions.
return nil
}
@ -130,8 +161,6 @@ func (g *generator) generateConversionsForSlice(inType, outType reflect.Type) er
if err := g.generateConversionsBetween(inElem, outElem); err != nil {
return err
}
// We don't add it to g.convertibles - slices should be handled correctly
// inside appropriate conversion functions.
return nil
}
@ -151,7 +180,6 @@ func (g *generator) generateConversionsForStruct(inType, outType reflect.Type) e
}
}
}
g.convertibles[inType] = outType
return nil
}
@ -477,6 +505,22 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec
inField := inType.Field(i)
outField, _ := outType.FieldByName(inField.Name)
if g.scheme.Converter().HasConversionFunc(inField.Type, outField.Type) {
// Use the conversion method that is already defined.
assignFormat := "if err := s.Convert(&in.%s, &out.%s, 0); err != nil {\n"
assignStmt := fmt.Sprintf(assignFormat, inField.Name, outField.Name)
if err := writeLine(w, indent, assignStmt); err != nil {
return err
}
if err := writeLine(w, indent+1, "return err\n"); err != nil {
return err
}
if err := writeLine(w, indent, "}\n"); err != nil {
return err
}
continue
}
switch inField.Type.Kind() {
case reflect.Map, reflect.Ptr, reflect.Slice, reflect.Interface, reflect.Struct:
// Don't copy these via assignment/conversion!

View File

@ -259,7 +259,12 @@ func (s *Scheme) AddConversionFuncs(conversionFuncs ...interface{}) error {
// Similar to AddConversionFuncs, but registers conversion functions that were
// automatically generated.
func (s *Scheme) AddGeneratedConversionFuncs(conversionFuncs ...interface{}) error {
return s.AddConversionFuncs(conversionFuncs...)
for _, f := range conversionFuncs {
if err := s.converter.RegisterGeneratedConversionFunc(f); err != nil {
return err
}
}
return nil
}
// AddStructFieldConversion allows you to specify a mechanical copy for a moved