package io.fathom.auto.haproxy.template; import io.fathom.auto.haproxy.model.Backend; import io.fathom.auto.template.TemplateBase; import io.fathom.cloud.openstack.client.loadbalance.model.LbaasMapping; import java.io.IOException; import java.io.Writer; import java.net.URI; import com.google.common.base.Strings; public class BackendTemplate extends TemplateBase<Backend> { static String resource = loadTemplate(BackendTemplate.class, "header"); @Override public void write(Writer writer, Backend backend) throws IOException { init(writer); indent = 0; println("backend backend__%s", backend.key); indent = 1; println("balance roundrobin"); boolean includeForwardedProtocol = true; String forwardUrl = null; if (backend.mappings.size() != 0) { LbaasMapping target0 = backend.mappings.get(0); forwardUrl = target0.forwardUrl; } if (!Strings.isNullOrEmpty(forwardUrl)) { URI uri = URI.create(forwardUrl); println("reqrep ^Host:.* Host:\\ %s", uri.getHost()); println("reqrep ^([^\\ :]*)\\ /(.*) \\1\\ %s/\\2", uri.getPath()); if (uri.getScheme().equals("https")) { println("server s1 %s:443 ssl", uri.getHost()); } else { println("server s1 %s:80", uri.getHost()); } includeForwardedProtocol = false; } else { for (LbaasMapping mapping : backend.mappings) { String line = "server " + mapping.key + " " + mapping.ip; if (mapping.port != null) { line += ":" + mapping.port; } else { line += ":" + "+8000"; } println(line); } } if (!includeForwardedProtocol) { println("reqdel X-Forwarded-Protocol:\\.*"); } } }