public ShenyuMemoryConfig parse()

in shenyu-kubernetes-controller/src/main/java/org/apache/shenyu/k8s/parser/DubboIngressParser.java [98:154]


    public ShenyuMemoryConfig parse(final V1Ingress ingress, final CoreV1Api coreV1Api) {
        ShenyuMemoryConfig res = new ShenyuMemoryConfig();

        if (Objects.nonNull(ingress.getSpec())) {
            // Parse the dubbo backend
            V1IngressBackend dubboBackend = ingress.getSpec().getDefaultBackend();
            List<V1IngressRule> rules = ingress.getSpec().getRules();
            List<V1IngressTLS> tlsList = ingress.getSpec().getTls();

            String namespace = Objects.requireNonNull(ingress.getMetadata()).getNamespace();
            List<DubboUpstream> dubboUpstreamList = getDefaultDubboRouteConfig(dubboBackend, namespace);

            if (Objects.isNull(rules) || CollectionUtils.isEmpty(rules)) {
                // if rules is null, dubboBackend become global default
                if (Objects.nonNull(dubboBackend) && Objects.nonNull(dubboBackend.getService())) {
                    IngressConfiguration defaultRouteConfig = getDubboRouteConfig(dubboUpstreamList, ingress.getMetadata().getAnnotations());
                    res.setGlobalDefaultBackend(Pair.of(Pair.of(namespace + "/" + ingress.getMetadata().getName(), dubboBackend.getService().getName()),
                            defaultRouteConfig));
                }
            } else {
                // if rules is not null, dubboBackend is default in this ingress
                List<IngressConfiguration> routeList = new ArrayList<>(rules.size());
                for (V1IngressRule ingressRule : rules) {
                    List<IngressConfiguration> routes = parseIngressRule(ingressRule, dubboUpstreamList,
                            Objects.requireNonNull(ingress.getMetadata()).getNamespace(), ingress.getMetadata().getAnnotations(), ingress.getMetadata().getLabels());
                    routeList.addAll(routes);
                }
                res.setRouteConfigList(routeList);
            }

            // Parse tls
            if (Objects.nonNull(tlsList) && CollectionUtils.isNotEmpty(tlsList)) {
                List<SslCrtAndKeyStream> sslList = new ArrayList<>();
                for (V1IngressTLS tls : tlsList) {
                    List<String> hosts = tls.getHosts();
                    String secretName = tls.getSecretName();
                    if (Objects.nonNull(secretName) && CollectionUtils.isNotEmpty(hosts)) {
                        try {
                            V1Secret secret = coreV1Api.readNamespacedSecret(secretName, namespace, "ture");
                            Map<String, byte[]> secretData = secret.getData();
                            if (Objects.nonNull(secretData)) {
                                InputStream keyCertChainInputStream = new ByteArrayInputStream(secretData.get("tls.crt"));
                                InputStream keyInputStream = new ByteArrayInputStream(secretData.get("tls.key"));
                                hosts.forEach(host ->
                                        sslList.add(new SslCrtAndKeyStream(host, keyCertChainInputStream, keyInputStream))
                                );
                            }
                        } catch (ApiException e) {
                            LOG.error("parse tls failed ", e);
                        }
                    }
                }
                res.setTlsConfigList(sslList);
            }
        }
        return res;
    }