package com.sequenceiq.cloudbreak.service.proxy;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.ecwid.consul.v1.ConsulClient;
@Service
public class ProxyRegistrator {
private static final Logger LOGGER = LoggerFactory.getLogger(ProxyRegistrator.class);
private static final String BACKEND_URL = "traefik/backends/%s/servers/gw/url";
private static final String FRONTED_BASE = "traefik/frontends/%s/";
private static final String FRONTED_WIRE_TO_BACKEND = FRONTED_BASE + "backend";
private static final String FRONTED_PASS_HOST_HEADER = FRONTED_BASE + "passHostHeader";
private static final String FRONTED_RULE = FRONTED_BASE + "routes/gw/rule";
@Inject
private ConsulClient consulClient;
public void register(String clusterName, String contextPath, String gatewayHost) {
registerKeys(clusterName, String.format("https://%s:8443", gatewayHost), String.format("/%s/", contextPath));
}
public void remove(String clusterName) {
removeKeys(clusterName);
}
private void registerKeys(String clusterName, String baseUrl, String context) {
LOGGER.info("Register cluster to Consul: clusterName: {}, baseUrl: {}, context: {}",
clusterName, baseUrl, context);
consulClient.setKVValue(String.format(BACKEND_URL, clusterName), baseUrl + context);
consulClient.setKVValue(String.format(FRONTED_WIRE_TO_BACKEND, clusterName), clusterName);
consulClient.setKVValue(String.format(FRONTED_PASS_HOST_HEADER, clusterName), "true");
consulClient.setKVValue(String.format(FRONTED_RULE, clusterName), String.format("PathPrefix:%s", context));
}
private void removeKeys(String clusterName) {
LOGGER.info("Remove cluster from Consul: clusterName: {}", clusterName);
consulClient.deleteKVValues(String.format("traefik/backends/%s", clusterName));
consulClient.deleteKVValues(String.format("traefik/frontends/%s", clusterName));
}
private void removeAll() {
consulClient.deleteKVValues("traefik/backends");
consulClient.deleteKVValues("traefik/frontends");
}
}