package com.netflix.discovery.util; import com.netflix.appinfo.AmazonInfo; import com.netflix.appinfo.InstanceInfo; /** * A collection of utility functions that is useful to simplify operations on * {@link com.netflix.appinfo.ApplicationInfoManager}, {@link com.netflix.appinfo.InstanceInfo} * and {@link com.netflix.discovery.EurekaClient} * * @author David Liu */ public final class EurekaUtils { /** * return the privateIp address of the given InstanceInfo record. The record could be for the local server * or a remote server. * * @param instanceInfo * @return the private Ip (also known as localIpv4 in ec2) */ public static String getPrivateIp(InstanceInfo instanceInfo) { String defaultPrivateIp = null; if (instanceInfo.getDataCenterInfo() instanceof AmazonInfo) { defaultPrivateIp = ((AmazonInfo) instanceInfo.getDataCenterInfo()).get(AmazonInfo.MetaDataKey.localIpv4); } if (isNullOrEmpty(defaultPrivateIp)) { // no other information, best effort defaultPrivateIp = instanceInfo.getIPAddr(); } return defaultPrivateIp; } /** * check to see if the instanceInfo record is of a server that is deployed within EC2 (best effort check based * on assumptions of underlying id). This check could be for the local server or a remote server. * * @param instanceInfo * @return true if the record contains an EC2 style "i-*" id */ public static boolean isInEc2(InstanceInfo instanceInfo) { if (instanceInfo.getDataCenterInfo() instanceof AmazonInfo) { String instanceId = ((AmazonInfo) instanceInfo.getDataCenterInfo()).getId(); if (instanceId != null && instanceId.startsWith("i-")) { return true; } } return false; } /** * check to see if the instanceInfo record is of a server that is deployed within EC2 VPC (best effort check * based on assumption of existing vpcId). This check could be for the local server or a remote server. * * @param instanceInfo * @return true if the record contains a non null, non empty AWS vpcId */ public static boolean isInVpc(InstanceInfo instanceInfo) { if (instanceInfo.getDataCenterInfo() instanceof AmazonInfo) { AmazonInfo info = (AmazonInfo) instanceInfo.getDataCenterInfo(); String vpcId = info.get(AmazonInfo.MetaDataKey.vpcId); return !isNullOrEmpty(vpcId); } return false; } private static boolean isNullOrEmpty(String str) { return str == null || str.isEmpty(); } }