in shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/reconciler/IngressReconciler.java [126:191]
public Result reconcile(final Request request) {
LOG.info("Starting to reconcile ingress {}", request);
// Do not modify current ingress object directly
final V1Ingress v1Ingress = this.ingressLister.namespace(request.getNamespace()).get(request.getName());
final V1Ingress oldIngress = IngressCache.getInstance().get(request.getNamespace(), request.getName());
Map<String, String> annotations = v1Ingress.getMetadata().getAnnotations();
enablePluginsBasedOnAnnotations(annotations, request);
if (Objects.isNull(v1Ingress)) {
if (Objects.nonNull(oldIngress)) {
// Delete ingress binding selectors
doDeleteConfigByIngress(request, oldIngress);
// Remove ssl config
Set<String> sslDomainSet = IngressSecretCache.getInstance().getDomainByIngress(request.getNamespace(), request.getName());
if (Objects.nonNull(sslDomainSet) && !sslDomainSet.isEmpty()) {
for (String sslDomain : sslDomainSet) {
Integer preDomainSslNums = IngressSecretCache.getInstance().getAndDecrementDomainNums(sslDomain);
if (preDomainSslNums == 1) {
shenyuSniAsyncMapping.removeSslCertificate(sslDomain);
LOG.info("Remove ssl config for domain {}", sslDomain);
}
}
}
IngressSecretCache.getInstance().removeDomainByIngress(request.getNamespace(), request.getName());
IngressCache.getInstance().remove(request.getNamespace(), request.getName());
LOG.info("Delete selector and rule for ingress {}", request);
} else {
LOG.info("Cannot find ingress {}", request);
}
return new Result(false);
}
if (!checkIngressClass(v1Ingress)) {
LOG.info("IngressClass is not match {}", request);
return new Result(false);
}
if (Objects.isNull(oldIngress)) {
try {
addNewIngressConfigToShenyu(v1Ingress, new CoreV1Api(apiClient));
} catch (IOException e) {
LOG.error("add new ingress config error", e);
}
} else if (needUpdate(oldIngress, v1Ingress)) {
// Update logic
// 1. clean old config
doDeleteConfigByIngress(request, oldIngress);
// 2. add new config
try {
addNewIngressConfigToShenyu(v1Ingress, new CoreV1Api(apiClient));
} catch (IOException e) {
LOG.error("add new ingress config error", e);
}
}
IngressCache.getInstance().put(request.getNamespace(), request.getName(), v1Ingress);
List<Pair<String, String>> serviceList = parseServiceFromIngress(v1Ingress);
Objects.requireNonNull(serviceList).forEach(pair -> {
ServiceIngressCache.getInstance().putIngressName(pair.getLeft(), pair.getRight(), request.getNamespace(), request.getName());
LOG.info("Add service cache {} for ingress {}", pair.getLeft() + "/" + pair.getRight(), request.getNamespace() + "/" + request.getName());
});
return new Result(false);
}