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;
}