public static V1Ingress Clone()

in src/routingmanager/Extensions.cs [172:267]


        public static V1Ingress Clone(this V1Ingress ingress)
        {
            var clonedIngress = new V1Ingress
            {
                Metadata = new V1ObjectMeta
                {
                    Annotations = new Dictionary<string, string>(),
                    DeletionGracePeriodSeconds = ingress.Metadata.DeletionGracePeriodSeconds,
                    Finalizers = ingress.Metadata.Finalizers,
                    Labels = new Dictionary<string, string>(),
                    Name = ingress.Metadata.Name,
                    NamespaceProperty = ingress.Metadata.NamespaceProperty,
                },
                Spec = new V1IngressSpec()
                {
                    IngressClassName = ingress.Spec?.IngressClassName,
                    Rules = new List<V1IngressRule>(),
                    Tls = new List<V1IngressTLS>()
                }
            };

            if (ingress.Spec.DefaultBackend != null)
            {
                clonedIngress.Spec.DefaultBackend = new V1IngressBackend
                {
                    Service = ingress.Spec?.DefaultBackend?.Service
                };
            }

            if (ingress.Metadata.Annotations != null)
            {
                ingress.Metadata.Annotations.ExecuteForEach(kv => clonedIngress.Metadata.Annotations.Add(kv.Key, kv.Value));
            }
            // Add the clonedFrom annotation
            clonedIngress.Metadata.Annotations.Add(Constants.ClonedFromAnnotation, ingress.Metadata.Name);

            if (ingress.Metadata.Labels != null)
            {
                ingress.Metadata.Labels.ExecuteForEach(kv => clonedIngress.Metadata.Labels.Add(kv.Key, kv.Value));
            }

            if (ingress.Spec.Rules != null)
            {
                foreach (var rule in ingress.Spec.Rules)
                {
                    var clonedRule = new V1IngressRule
                    {
                        Host = rule.Host,
                        Http = new V1HTTPIngressRuleValue
                        {
                            Paths = new List<V1HTTPIngressPath>()
                        }
                    };

                    foreach (var path in rule.Http.Paths)
                    {
                        var clonedPath = new V1HTTPIngressPath();
                        if (path.Backend != null)
                        {
                            clonedPath.Backend = new V1IngressBackend();
                            if (path.Backend.Resource != null)
                            {
                                clonedPath.Backend.Resource = new V1TypedLocalObjectReference
                                {
                                    ApiGroup = path.Backend.Resource.ApiGroup,
                                    Kind = path.Backend.Resource.Kind,
                                    Name = path.Backend.Resource.Name
                                };
                            }
                            clonedPath.Backend.Service = path.Backend.Service;
                        }

                        clonedPath.Path = path.Path;
                        clonedPath.PathType = path.PathType;
                        clonedRule.Http.Paths.Add(clonedPath);
                    }

                    clonedIngress.Spec.Rules.Add(clonedRule);
                }
            }

            if (ingress.Spec.Tls != null)
            {
                foreach (var tls in ingress.Spec.Tls)
                {
                    clonedIngress.Spec.Tls.Add(
                        new V1IngressTLS
                        {
                            Hosts = new List<string>(tls.Hosts),
                            SecretName = tls.SecretName
                        });
                }
            }

            return clonedIngress;
        }