package io.cattle.platform.core.util;
import io.cattle.platform.archaius.util.ArchaiusUtil;
import io.cattle.platform.core.constants.NetworkConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.Network;
import io.cattle.platform.object.util.DataAccessor;
import com.netflix.config.DynamicStringProperty;
public class HostnameGenerator {
private static final DynamicStringProperty DEFAULT_DOMAIN = ArchaiusUtil.getString("default.network.domain");
private static final DynamicStringProperty DEFAULT_PREFIX = ArchaiusUtil.getString("default.hostname.prefix");
private static final DynamicStringProperty DEFAULT_LOCAL_DOMAIN = ArchaiusUtil.getString("default.local.network.domain");
private static final DynamicStringProperty DEFAULT_LOCAL_PREFIX = ArchaiusUtil.getString("default.local.hostname.prefix");
private static final DynamicStringProperty DEFAULT_SERVICES_DOMAIN = ArchaiusUtil.getString("default.services.domain");
public static String getDefaultDomain(boolean local) {
return local ? DEFAULT_LOCAL_DOMAIN.get() : DEFAULT_DOMAIN.get();
}
public static String getDefaultPrefix(boolean local) {
return local ? DEFAULT_LOCAL_PREFIX.get() : DEFAULT_PREFIX.get();
}
public static String getDefaultServicesDomain() {
return DEFAULT_SERVICES_DOMAIN.get();
}
public static String getServicesDomain(Network network) {
String servicesDomain = DataAccessor.fieldString(network, NetworkConstants.FIELD_SERVICES_DOMAIN);
return servicesDomain == null ? getDefaultServicesDomain() : servicesDomain;
}
public static String lookup(boolean local, Instance instance, String address, Network network) {
return lookup(local, instance.getHostname(), instance.getDomain(), address, network.getDomain());
}
public static String lookupHostname(boolean local, String instanceHostname, String address) {
String hostname = local ? instanceHostname : null;
String prefix = getDefaultPrefix(local);
if ( hostname == null ) {
if ( address == null ) {
return null;
}
return String.format("%s%s", prefix, address.replaceAll("[.:]", "-"));
} else {
return hostname;
}
}
public static String lookup(boolean local, String instanceHostname, String instanceDomain, String address, String networkDomain) {
String hostname = lookupHostname(local, instanceHostname, address);
if ( hostname == null ) {
return null;
}
String domain = local ? instanceDomain : null;
if ( domain == null && local ) {
domain = networkDomain;
}
if ( domain == null ) {
domain = getDefaultDomain(local);
}
return String.format("%s.%s", hostname, domain);
}
}