Beispiel #1
0
        public static IMapperConfigurationExpression Mapping(IMapperConfigurationExpression cfg)
        {
            #region UserManagementView
            cfg.CreateMap <dto_Privillige, PrivilligeCheckViewModel>()
            .ForMember(x => x.IsChecked, opt => opt.UseValue <bool>(false)).ReverseMap();
            cfg.CreateMap <dto_Group, GroupCheckViewModel>()
            .ForMember(x => x.IsChecked, opt => opt.UseValue <bool>(false)).ReverseMap();
            #endregion
            #region Menu
            cfg.CreateMap <dto_Menu, MenuItemViewModel>()
            .ForMember(x => x.title, opt => opt.MapFrom(src => Localize(src.NameEn, src.NameAr)))
            //.ForMember(x => x.title, opt => opt.MapFrom(src=>src.EnglishName))
            //.ForMember(x => x.icon, opt => opt.MapFrom(src => src.icon))
            //.ForMember(x => x.link, opt => opt.MapFrom(src=>src.link))
            ////.ForMember(x => x.children, opt => opt.Ignore())

            ////.ForMember(x => x.children, opt => opt.Ignore())
            .ReverseMap();


            #endregion
            #region BL
            CORE.BL.infrastructure.AutomapperConf.Mapping(cfg);
            #endregion
            #region Reports

            #endregion
            //cfg.ForAllMaps((typeMap, mapConfig) => mapConfig.MaxDepth(3));
            cfg.ForAllMaps((typeMap, mapConfig) => mapConfig.PreserveReferences());

            return(cfg);
        }
        private static void UseMapping(IMapperConfigurationExpression config)
        {
            config.AddExpressionMapping();

            config.UseWebApiProfiles();

            config.ForAllMaps((obj, cfg) => cfg.ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null)));
        }
        public static void Configure(IMapperConfigurationExpression cfg)
        {
            if (cfg is null)
            {
                throw new ArgumentNullException(nameof(cfg));
            }

            cfg.ForAllMaps(AutoIgnorePropertiesInternal);
        }
        public static IMapperConfigurationExpression Mapping(IMapperConfigurationExpression cfg)
        {
            cfg.ForAllMaps((typeMap, mapConfig) => mapConfig.MaxDepth(1));

            #region BL
            BL.infrastructure.AutomapperConf.Mapping(cfg);
            #endregion


            return(cfg);
        }
Beispiel #5
0
 public static void EnableInlineMapping(this IMapperConfigurationExpression cfg)
 {
     cfg.ForAllMaps((t, i) =>
     {
         i.AfterMap((s, d, ctx) =>
         {
             ctx.ApplyInlineMap(s, d);
         }
                    );
     });
 }
Beispiel #6
0
 public static void AddIgnoreMapAttribute(this IMapperConfigurationExpression configuration)
 {
     configuration.ForAllMaps((typeMap, mapExpression) => mapExpression.ForAllMembers(memberOptions =>
     {
         if (memberOptions.DestinationMember.Has <IgnoreMapAttribute>())
         {
             memberOptions.Ignore();
         }
     }));
     configuration.ForAllPropertyMaps(propertyMap => propertyMap.SourceMember?.Has <IgnoreMapAttribute>() == true,
                                      (_, memberOptions) => memberOptions.Ignore());
 }
Beispiel #7
0
        public virtual void Configure(IMapperConfigurationExpression mapperConfigExpression)
        {
            if (mapperConfigExpression == null)
            {
                throw new ArgumentNullException(nameof(mapperConfigExpression));
            }

            mapperConfigExpression.ForAllMaps((typeMap, mapExp) =>
            {
                mapExp.PreserveReferences();
            });
        }
Beispiel #8
0
        /// <summary>
        /// 创建 Dto 对象映射
        /// </summary>
        public static void CreateDtoMappings(IMapperConfigurationExpression configuration)
        {
            //configuration.EnableNullPropagationForQueryMapping = false;
            //configuration.AllowNullDestinationValues = false;
            configuration.ForAllMaps((map, c) =>
            {
                foreach (var property in map.DestinationType.GetProperties())
                {
                    var attr = property.GetAttribute <MapFromAttribute>();
                    if (attr?.PropertyPath?.Length > 0)
                    {
                        c.ForMember(property.Name, m =>
                        {
                            var path = string.Join(".", attr.PropertyPath);
                            var exp  = DynamicExpressionParser.ParseLambda(map.SourceType, null, path);

                            var m0 = m.GetType()
                                     .GetProperty("PropertyMapActions", BindingFlags.Instance | BindingFlags.NonPublic)?
                                     .GetValue(m) as List <Action <PropertyMap> >;
                            var m1 = typeof(PropertyMap).GetMethod(nameof(PropertyMap.MapFrom), new Type[] { typeof(LambdaExpression) });
                            m0?.Add(t => m1.Invoke(t, new object[] { exp }));
                        });
                    }
                }
            });

            configuration.CreateMap <Enum, DisplayItem>()
            .ConvertUsing(p => new DisplayItem
            {
                Id          = p,
                Name        = p.DisplayName(),
                Value       = p.ToString("G"),
                ShortName   = p.DisplayShortName(),
                Description = p.DisplayDescription(),
                GroupName   = p.DisplayGroupName(),
                Order       = p.DisplayOrder(),
                Type        = p.DisplayPrompt(),
            });
            configuration.CreateMap <Type, IEnumerable <DisplayItem> >()
            .ConvertUsing(p => Enum.GetValues(p).Cast <Enum>().Select(t => t.MapTo <DisplayItem>()));

            configuration.CreateMap <string, JToken>()
            .ConvertUsing(p => JsonConvert.DeserializeObject <JToken>(p ?? string.Empty));
            configuration.CreateMap <string, JObject>()
            .ConvertUsing(p => JsonConvert.DeserializeObject <JObject>(p ?? string.Empty));
            configuration.CreateMap <string, JArray>()
            .ConvertUsing(p => JsonConvert.DeserializeObject <JArray>(p ?? string.Empty));


            configuration.CreateMap <Result.Result, PageInfo>()
            .ForMember(p => p.PageIndex, m => m.MapFrom(p => p.Code));
        }
        public virtual void Configure(IMapperConfigurationExpression mapperConfigExpression)
        {
            if (mapperConfigExpression == null)
            {
                throw new ArgumentNullException(nameof(mapperConfigExpression));
            }

            mapperConfigExpression.ValidateInlineMaps    = false;
            mapperConfigExpression.CreateMissingTypeMaps = true;

            mapperConfigExpression.ForAllMaps((typeMap, mapExp) =>
            {
                mapExp.PreserveReferences();
            });
        }
Beispiel #10
0
        /// <summary>
        /// Compiles the options.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="assemblies">The assemblies.</param>
        /// <param name="cfg">The CFG.</param>
        private static void CompileOptions <T>(List <Assembly> assemblies, IMapperConfigurationExpression cfg) where T : Profile
        {
            var profiles = assemblies.Select(p => p.GetTypes().Where(x => typeof(T).IsAssignableFrom(x) && !x.IsAbstract));

            cfg.ConstructServicesUsing((s) => DIResolver.Get(s));

            foreach (var assemblyProfiles in profiles)
            {
                foreach (var assemblyProfile in assemblyProfiles)
                {
                    cfg.AddProfile(Activator.CreateInstance(assemblyProfile) as T);
                }
            }
            cfg.ForAllMaps((t, m) =>
            {
                m.ConstructUsing((x) => resolver(t, x));
            });
        }
Beispiel #11
0
        public static void Configure(IMapperConfigurationExpression expression)
        {
            expression.AddProfile <ProfileUser>();
            expression.AddProfile <ProfileDiscipline>();
            expression.AddProfile <ProfileMaterial>();
            expression.AddProfile <ProfileGroup>();
            expression.AddProfile <ProfileTest>();
            expression.AddProfile <ProfileTheme>();
            expression.AddProfile <ProfileQuestion>();
            expression.AddProfile <ProfileAnswer>();
            expression.AddProfile <ProfileProgram>();
            expression.AddProfile <ProfileProgramData>();
            expression.AddProfile <ProfileRole>();
            expression.AddProfile <ProfileFile>();
            expression.AddProfile <ProfileCode>();
            expression.AddProfile <ProfileMaterialAnchor>();

            expression.AllowNullCollections = true;
            expression.ForAllMaps(Configure);
        }
Beispiel #12
0
        private void ConfigAllMap(IMapperConfigurationExpression configuration)
        {
            configuration.ForAllMaps((map, c) =>
            {
                foreach (var property in map.DestinationType.GetProperties())
                {
                    var attr = property.GetAttribute <MapFromAttribute>();
                    if (attr?.PropertyPath?.Length > 0)
                    {
                        c.ForMember(property.Name, m =>
                        {
                            var path = string.Join(".", attr.PropertyPath);
                            var exp  = System.Linq.Dynamic.DynamicExpression.ParseLambda(map.SourceType, null, path);

                            var m0 = m.GetType()
                                     .GetProperty("PropertyMapActions", BindingFlags.Instance | BindingFlags.NonPublic)?
                                     .GetValue(m) as List <Action <PropertyMap> >;
                            var m1 = typeof(PropertyMap).GetMethod(nameof(PropertyMap.MapFrom));
                            m0?.Add(t => m1.Invoke(t, new object[] { exp }));
                        });
                    }
                }
            });
        }
Beispiel #13
0
        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();
        }
Beispiel #14
0
        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();
        }
Beispiel #15
0
        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"));