private static void ManualConfigurations(IMapperConfigurationExpression cfg) { cfg.AllowNullCollections = true; cfg.DisableConstructorMapping(); cfg.ForAllMaps((typeMap, opt) => { if (!typeof(IKubernetesObject).IsAssignableFrom(typeMap.Types.DestinationType)) { return; } var metadata = typeMap.Types.DestinationType.GetKubernetesTypeMetadata(); opt.ForMember(nameof(IKubernetesObject.ApiVersion), x => x.Ignore()); opt.ForMember(nameof(IKubernetesObject.Kind), x => x.Ignore()); opt.AfterMap((from, to) => { var obj = (IKubernetesObject)to; obj.ApiVersion = !string.IsNullOrEmpty(metadata.Group) ? $"{metadata.Group}/{metadata.ApiVersion}" : metadata.ApiVersion; obj.Kind = metadata.Kind; }); }); cfg.CreateMap <V1Subject, V1beta1Subject>() .ForMember(dest => dest.Group, opt => opt.Ignore()) .ForMember(dest => dest.ServiceAccount, opt => opt.Ignore()) .ForMember(dest => dest.User, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1Subject, V1beta2Subject>() .ForMember(dest => dest.Group, opt => opt.Ignore()) .ForMember(dest => dest.ServiceAccount, opt => opt.Ignore()) .ForMember(dest => dest.User, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1alpha1RuntimeClass, V1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Spec.RuntimeHandler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Spec.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Spec.Scheduling)) .ReverseMap(); cfg.CreateMap <V1beta1RuntimeClass, V1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Handler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Scheduling)) .ReverseMap(); cfg.CreateMap <V1alpha1RuntimeClass, V1beta1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Spec.RuntimeHandler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Spec.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Spec.Scheduling)) .ReverseMap(); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.CurrentAverageUtilization)) .ForMember(dest => dest.Value, opt => opt.Ignore()); cfg.CreateMap <V2beta1ResourceMetricStatus, V2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.CurrentAverageUtilization)) .ForMember(dest => dest.Value, opt => opt.Ignore()); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2ResourceMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricStatus, V2beta1ResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricStatus, V2ResourceMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2ResourceMetricStatus, V2beta1ResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetAverageValue != null ? "AverageValue" : "Utilization")) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.TargetAverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetAverageValue != null ? "AverageValue" : "Utilization")) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.TargetAverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2ResourceMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricSource, V2beta1ResourceMetricSource>() .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.Value)); cfg.CreateMap <V2beta1ResourceMetricSource, V2ResourceMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2ResourceMetricSource, V2beta1ResourceMetricSource>() .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.Value)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricStatus, V2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)); cfg.CreateMap <V2beta1PodsMetricStatus, V2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2PodsMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricStatus, V2beta1PodsMetricStatus>() .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)); cfg.CreateMap <V2beta1PodsMetricStatus, V2PodsMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2PodsMetricStatus, V2beta1PodsMetricStatus>() .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1PodsMetricSource, V2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => "AverageValue")) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricSource, V2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => "AverageValue")) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2PodsMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricSource, V2beta1PodsMetricSource>() .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)); cfg.CreateMap <V2beta1PodsMetricSource, V2PodsMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2PodsMetricSource, V2beta1PodsMetricSource>() .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2MetricValueStatus>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2ObjectMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2beta2ObjectMetricStatus, V2beta1ObjectMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ObjectMetricStatus, V2ObjectMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2ObjectMetricStatus, V2beta1ObjectMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2MetricTarget>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ForMember(x => x.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ExternalMetricSource, V2MetricTarget>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ForMember(x => x.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2ExternalMetricSource>() .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ExternalMetricSource, V2beta1ExternalMetricSource>() .ForMember(x => x.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricSource, V2ExternalMetricSource>() .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2ExternalMetricSource, V2beta1ExternalMetricSource>() .ForMember(x => x.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2ExternalMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ExternalMetricStatus, V2beta1ExternalMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricStatus, V2ExternalMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2ExternalMetricStatus, V2beta1ExternalMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2MetricIdentifier>() .ForMember(x => x.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.MetricSelector)) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricStatus, V2MetricIdentifier>() .ForMember(x => x.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.MetricSelector)) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2MetricValueStatus>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricStatus, V2MetricValueStatus>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ObjectMetricSource, V2MetricTarget>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2ObjectMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2beta2ObjectMetricSource, V2beta1ObjectMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ObjectMetricSource, V2ObjectMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2ObjectMetricSource, V2beta1ObjectMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricSource, V2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.MetricSelector)); cfg.CreateMap <V2beta1ExternalMetricSource, V2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.MetricSelector)); cfg.CreateMap <V2beta2MetricTarget, V2beta1ExternalMetricSource>() // todo: not needed .ForMember(dest => dest.MetricName, opt => opt.Ignore()) .ForMember(dest => dest.MetricSelector, opt => opt.Ignore()) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Value)) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Value)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.AverageValue)); cfg.CreateMap <V1HorizontalPodAutoscalerSpec, V2beta2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Metrics, opt => opt.Ignore()) .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerSpec, V2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Metrics, opt => opt.Ignore()) .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerSpec, V2beta1HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Metrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1HorizontalPodAutoscalerSpec, V2beta2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1HorizontalPodAutoscalerSpec, V2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerStatus, V2beta1HorizontalPodAutoscalerStatus>() .ForMember(dest => dest.Conditions, opt => opt.Ignore()) .ForMember(dest => dest.CurrentMetrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerStatus, V2beta2HorizontalPodAutoscalerStatus>() .ForMember(dest => dest.Conditions, opt => opt.Ignore()) .ForMember(dest => dest.CurrentMetrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerStatus, V2HorizontalPodAutoscalerStatus>() .ForMember(dest => dest.Conditions, opt => opt.Ignore()) .ForMember(dest => dest.CurrentMetrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <Corev1EventSeries, V1beta1EventSeries>() .ForMember(dest => dest.LastObservedTime, opt => opt.MapFrom(src => src.LastObservedTime)) .ReverseMap(); cfg.CreateMap <Corev1Event, V1beta1Event>() .ForMember(dest => dest.DeprecatedCount, opt => opt.Ignore()) .ForMember(dest => dest.DeprecatedFirstTimestamp, opt => opt.MapFrom(src => src.FirstTimestamp)) .ForMember(dest => dest.DeprecatedLastTimestamp, opt => opt.MapFrom(src => src.LastTimestamp)) .ForMember(dest => dest.DeprecatedSource, opt => opt.MapFrom(src => src.Source)) .ForMember(dest => dest.Note, opt => opt.MapFrom(src => src.Message)) .ForMember(dest => dest.Regarding, opt => opt.MapFrom(src => src.InvolvedObject)) .ForMember(dest => dest.ReportingController, opt => opt.MapFrom(src => src.ReportingComponent)) .ReverseMap(); cfg.CreateMap <V2beta2ContainerResourceMetricSource, V2beta1ContainerResourceMetricSource>() .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V2ContainerResourceMetricSource, V2beta1ContainerResourceMetricSource>() .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V2beta2ContainerResourceMetricStatus, V2beta1ContainerResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V2ContainerResourceMetricStatus, V2beta1ContainerResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V1beta1Endpoint, V1Endpoint>() .ForMember(dest => dest.DeprecatedTopology, opt => opt.Ignore()) .ForMember(dest => dest.Zone, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1beta1EndpointPort, Discoveryv1EndpointPort>() .ReverseMap(); }
private static void ManualConfigurations(IMapperConfigurationExpression cfg) { cfg.AllowNullCollections = true; cfg.DisableConstructorMapping(); cfg.ForAllMaps((typeMap, opt) => { if (!typeof(IKubernetesObject).IsAssignableFrom(typeMap.Types.DestinationType)) { return; } var metadata = typeMap.Types.DestinationType.GetKubernetesTypeMetadata(); opt.ForMember(nameof(IKubernetesObject.ApiVersion), x => x.Ignore()); opt.ForMember(nameof(IKubernetesObject.Kind), x => x.Ignore()); opt.AfterMap((from, to) => { var obj = (IKubernetesObject)to; obj.ApiVersion = !string.IsNullOrEmpty(metadata.Group) ? $"{metadata.Group}/{metadata.ApiVersion}" : metadata.ApiVersion; obj.Kind = metadata.Kind; }); }); cfg.CreateMap <V1Subject, V1alpha1Subject>() .ForMember(dest => dest.ApiVersion, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <Rbacv1beta1Subject, V1alpha1Subject>() .ForMember(dest => dest.ApiVersion, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1Subject, Rbacv1beta1Subject>() .ForMember(dest => dest.ApiGroup, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1alpha1RuntimeClass, V1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Spec.RuntimeHandler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Spec.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Spec.Scheduling)) .ReverseMap(); cfg.CreateMap <V1beta1RuntimeClass, V1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Handler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Scheduling)) .ReverseMap(); cfg.CreateMap <V1alpha1RuntimeClass, V1beta1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Spec.RuntimeHandler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Spec.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Spec.Scheduling)) .ReverseMap(); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.CurrentAverageUtilization)) .ForMember(dest => dest.Value, opt => opt.Ignore()); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2ResourceMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricStatus, V2beta1ResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetAverageValue != null ? "AverageValue" : "Utilization")) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.TargetAverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2ResourceMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricSource, V2beta1ResourceMetricSource>() .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.Value)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2PodsMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricStatus, V2beta1PodsMetricStatus>() .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => "AverageValue")) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2PodsMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricSource, V2beta1PodsMetricSource>() .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2ObjectMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2beta2ObjectMetricStatus, V2beta1ObjectMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2MetricTarget>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ForMember(x => x.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2ExternalMetricSource>() .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ExternalMetricSource, V2beta1ExternalMetricSource>() .ForMember(x => x.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2ExternalMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ExternalMetricStatus, V2beta1ExternalMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.MetricSelector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2MetricIdentifier>() .ForMember(x => x.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.MetricSelector)) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricStatus, V2beta2MetricValueStatus>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetValue != null ? "Value" : "AverageValue")); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2ObjectMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2beta2ObjectMetricSource, V2beta1ObjectMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Target.Value)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ObjectMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.MetricSelector)); cfg.CreateMap <V2beta2MetricTarget, V2beta1ExternalMetricSource>() // todo: not needed .ForMember(dest => dest.MetricName, opt => opt.Ignore()) .ForMember(dest => dest.MetricSelector, opt => opt.Ignore()) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Value)) .ForMember(dest => dest.TargetValue, opt => opt.MapFrom(src => src.Value)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.AverageValue)); cfg.CreateMap <V1beta1CustomResourceConversion, V1WebhookConversion>() .ForMember(dest => dest.ClientConfig, opt => opt.MapFrom(src => src.WebhookClientConfig)) .ReverseMap(); cfg.CreateMap <V1SubjectAccessReviewSpec, V1beta1SubjectAccessReviewSpec>() .ForMember(dest => dest.Group, opt => opt.MapFrom(src => src.Groups)) .ReverseMap(); cfg.CreateMap <V1CustomResourceDefinitionSpec, V1beta1CustomResourceDefinitionSpec>() .ForMember(dest => dest.AdditionalPrinterColumns, opt => opt.Ignore()) .ForMember(dest => dest.Subresources, opt => opt.Ignore()) .ForMember(dest => dest.Validation, opt => opt.Ignore()) .ForMember(dest => dest.Version, opt => opt.Ignore()) .AfterMap((from, to) => { // in v1beta1, if all versions share the same common attributes, they should be declared once at parent level if (to.Versions == null) { return; } if (to.Versions.Select(x => JsonConvert.SerializeObject(x.Schema)).Distinct().Count() == 1) { to.Validation = to.Versions.First().Schema; foreach (var version in to.Versions) { version.Schema = null; } } var allPrintColumnsInAllVersionsTheSame = to.Versions .GroupBy(x => x.Name) .Select(v => v .OrderBy(x => x.Name) .Select(x => x.AdditionalPrinterColumns) .Select(JsonConvert.SerializeObject) .Aggregate(new StringBuilder(), (sb, s) => sb.Append(s), sb => sb.ToString())) .Distinct() .Count() == 1; if (allPrintColumnsInAllVersionsTheSame) { to.AdditionalPrinterColumns = to.Versions[0].AdditionalPrinterColumns; foreach (var version in to.Versions) { version.AdditionalPrinterColumns = null; } } var allSubresourcesInAllVersionsTheSame = to.Versions .GroupBy(x => x.Name) .Select(v => v .OrderBy(x => x.Name) .Select(x => x.Subresources) .Select(JsonConvert.SerializeObject) .Aggregate(new StringBuilder(), (sb, s) => sb.Append(s), sb => sb.ToString())) .Distinct() .Count() == 1; if (allSubresourcesInAllVersionsTheSame) { to.Subresources = to.Versions[0].Subresources; foreach (var version in to.Versions) { version.Subresources = null; } } }) .ReverseMap() .AfterMap((from, to) => { if (from.Validation?.OpenAPIV3Schema != null) { foreach (var version in to.Versions) { version.Schema = (V1CustomResourceValidation)@from.Validation; } } if (from.Subresources != null) { foreach (var version in to.Versions) { version.Subresources = (V1CustomResourceSubresources)@from.Subresources; } } if (from.AdditionalPrinterColumns != null) { foreach (var version in to.Versions) { version.AdditionalPrinterColumns = @from.AdditionalPrinterColumns.Select(x => (V1CustomResourceColumnDefinition)x).ToList(); } } }); cfg.CreateMap <V1CustomResourceConversion, V1beta1CustomResourceConversion>() .ForMember(dest => dest.ConversionReviewVersions, opt => opt.MapFrom(src => src.Webhook.ConversionReviewVersions)) .ForMember(dest => dest.WebhookClientConfig, opt => opt.MapFrom(src => src.Webhook.ClientConfig)) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerSpec, V2beta2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Metrics, opt => opt.Ignore()) .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerSpec, V2beta1HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Metrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1HorizontalPodAutoscalerSpec, V2beta2HorizontalPodAutoscalerSpec>() .ForMember(dest => dest.Behavior, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerStatus, V2beta1HorizontalPodAutoscalerStatus>() .ForMember(dest => dest.Conditions, opt => opt.Ignore()) .ForMember(dest => dest.CurrentMetrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1HorizontalPodAutoscalerStatus, V2beta2HorizontalPodAutoscalerStatus>() .ForMember(dest => dest.Conditions, opt => opt.Ignore()) .ForMember(dest => dest.CurrentMetrics, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <Corev1EventSeries, V1beta1EventSeries>() .ForMember(dest => dest.LastObservedTime, opt => opt.MapFrom(src => src.LastObservedTime)) .ReverseMap(); cfg.CreateMap <Corev1Event, V1beta1Event>() .ForMember(dest => dest.DeprecatedCount, opt => opt.Ignore()) .ForMember(dest => dest.DeprecatedFirstTimestamp, opt => opt.MapFrom(src => src.FirstTimestamp)) .ForMember(dest => dest.DeprecatedLastTimestamp, opt => opt.MapFrom(src => src.LastTimestamp)) .ForMember(dest => dest.DeprecatedSource, opt => opt.MapFrom(src => src.Source)) .ForMember(dest => dest.Note, opt => opt.MapFrom(src => src.Message)) .ForMember(dest => dest.Regarding, opt => opt.MapFrom(src => src.InvolvedObject)) .ForMember(dest => dest.ReportingController, opt => opt.MapFrom(src => src.ReportingComponent)) .ReverseMap(); cfg.CreateMap <V2beta2ContainerResourceMetricSource, V2beta1ContainerResourceMetricSource>() .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)) .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V2beta2ContainerResourceMetricStatus, V2beta1ContainerResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)) .ReverseMap(); cfg.CreateMap <V1alpha1RoleBinding, V1beta1RoleBinding>().ReverseMap(); cfg.CreateMap <V1alpha1RoleBinding, V1RoleBinding>().ReverseMap(); cfg.CreateMap <V1beta1RoleBinding, V1RoleBinding>().ReverseMap(); cfg.CreateMap <V1beta1CSIDriverSpec, V1CSIDriverSpec>() .ForMember(dest => dest.TokenRequests, opt => opt.Ignore()); cfg.CreateMap <V1CSIDriverSpec, V1beta1CSIDriverSpec>() .ForMember(dest => dest.TokenRequests, opt => opt.Ignore()); cfg.CreateMap <V1alpha1ClusterRoleBinding, V1beta1ClusterRoleBinding>().ReverseMap(); cfg.CreateMap <V1alpha1ClusterRoleBinding, V1ClusterRoleBinding>().ReverseMap(); cfg.CreateMap <V1beta1ClusterRoleBinding, V1ClusterRoleBinding>().ReverseMap(); cfg.CreateMap <V1alpha1ClusterRoleBindingList, V1beta1ClusterRoleBindingList>().ReverseMap(); cfg.CreateMap <V1alpha1ClusterRoleBindingList, V1ClusterRoleBindingList>().ReverseMap(); cfg.CreateMap <V1beta1ClusterRoleBindingList, V1ClusterRoleBindingList>().ReverseMap(); cfg.CreateMap <V1beta1Endpoint, V1Endpoint>() .ForMember(dest => dest.DeprecatedTopology, opt => opt.Ignore()) .ForMember(dest => dest.Zone, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1beta1EndpointPort, Discoveryv1EndpointPort>() .ReverseMap(); }
private static void ManualConfigurations(IMapperConfigurationExpression cfg) { cfg.AllowNullCollections = true; cfg.DisableConstructorMapping(); cfg.ForAllMaps((typeMap, opt) => { if (!typeof(IKubernetesObject).IsAssignableFrom(typeMap.Types.DestinationType)) { return; } var metadata = typeMap.Types.DestinationType.GetKubernetesTypeMetadata(); opt.ForMember(nameof(IKubernetesObject.ApiVersion), x => x.Ignore()); opt.ForMember(nameof(IKubernetesObject.Kind), x => x.Ignore()); opt.AfterMap((from, to) => { var obj = (IKubernetesObject)to; obj.ApiVersion = !string.IsNullOrEmpty(metadata.Group) ? $"{metadata.Group}/{metadata.ApiVersion}" : metadata.ApiVersion; obj.Kind = metadata.Kind; }); }); cfg.CreateMap <V1Subject, Rbacv1alpha1Subject>() .ForMember(dest => dest.ApiVersion, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1beta1Subject, Rbacv1alpha1Subject>() .ForMember(dest => dest.ApiVersion, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V1alpha1RuntimeClass, V1beta1RuntimeClass>() .ForMember(dest => dest.Handler, opt => opt.MapFrom(src => src.Spec.RuntimeHandler)) .ForMember(dest => dest.Overhead, opt => opt.MapFrom(src => src.Spec.Overhead)) .ForMember(dest => dest.Scheduling, opt => opt.MapFrom(src => src.Spec.Scheduling)) .ReverseMap(); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.CurrentAverageUtilization)) .ForMember(dest => dest.Value, opt => opt.Ignore()); cfg.CreateMap <V2beta1ResourceMetricStatus, V2beta2ResourceMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricStatus, V2beta1ResourceMetricStatus>() .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.CurrentAverageUtilization, opt => opt.MapFrom(src => src.Current.AverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) #if NET452 .ForMember(dest => dest.Type, opt => opt.ResolveUsing(src => src.TargetAverageValue != null ? "AverageValue" : "Utilization")) #else .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => src.TargetAverageValue != null ? "AverageValue" : "Utilization")) #endif .ForMember(dest => dest.AverageUtilization, opt => opt.MapFrom(src => src.TargetAverageUtilization)); cfg.CreateMap <V2beta1ResourceMetricSource, V2beta2ResourceMetricSource>() .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2ResourceMetricSource, V2beta1ResourceMetricSource>() .ForMember(dest => dest.TargetAverageUtilization, opt => opt.MapFrom(src => src.Target.AverageUtilization)) .ForMember(dest => dest.TargetAverageValue, opt => opt.MapFrom(src => src.Target.Value)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.CurrentAverageValue)) .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)); cfg.CreateMap <V2beta1PodsMetricStatus, V2beta2PodsMetricStatus>() .ForMember(dest => dest.Current, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricStatus, V2beta1PodsMetricStatus>() .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(dest => dest.CurrentAverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(dest => dest.MetricName, opt => opt.MapFrom(src => src.Metric.Name)); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2MetricTarget>() .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) #if NET452 .ForMember(dest => dest.Type, opt => opt.UseValue("AverageValue")) #else .ForMember(dest => dest.Type, opt => opt.MapFrom((src, dest) => "AverageValue")) #endif .ForMember(dest => dest.Value, opt => opt.Ignore()) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()); cfg.CreateMap <V2beta1PodsMetricSource, V2beta2PodsMetricSource>() .ForMember(dest => dest.Metric, opt => opt.MapFrom(src => src)) .ForMember(dest => dest.Target, opt => opt.MapFrom(src => src)); cfg.CreateMap <V2beta2PodsMetricSource, V2beta1PodsMetricSource>() .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.TargetAverageValue, opt => opt.MapFrom(src => src.Target.AverageValue)); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricIdentifier>() .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.MetricName)) .ForMember(dest => dest.Selector, opt => opt.MapFrom(src => src.Selector)) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2MetricValueStatus>() .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.CurrentValue)) .ForMember(dest => dest.AverageValue, opt => opt.MapFrom(src => src.AverageValue)) .ForMember(dest => dest.AverageUtilization, opt => opt.Ignore()) .ReverseMap(); cfg.CreateMap <V2beta1ObjectMetricStatus, V2beta2ObjectMetricStatus>() .ForMember(x => x.Current, opt => opt.MapFrom(src => src)) .ForMember(x => x.Metric, opt => opt.MapFrom(src => src)) .ForMember(x => x.DescribedObject, opt => opt.MapFrom(src => src.Target)); cfg.CreateMap <V2beta2ObjectMetricStatus, V2beta1ObjectMetricStatus>() .ForMember(x => x.CurrentValue, opt => opt.MapFrom(src => src.Current.Value)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.Current.AverageValue)) .ForMember(x => x.MetricName, opt => opt.MapFrom(src => src.Metric.Name)) .ForMember(x => x.Target, opt => opt.MapFrom(src => src.DescribedObject)) .ForMember(x => x.Selector, opt => opt.MapFrom(src => src.Metric.Selector)); cfg.CreateMap <V2beta1ExternalMetricSource, V2beta2MetricTarget>() .ForMember(x => x.Value, opt => opt.MapFrom(src => src.TargetValue)) .ForMember(x => x.AverageValue, opt => opt.MapFrom(src => src.TargetAverageValue)) .ForMember(x => x.AverageUtilization, opt => opt.Ignore()) #if NET452 .ForMember(x => x.Type, opt => opt.ResolveUsing(src => src.TargetValue != null ? "Value" : "AverageValue"));