public AmazonInfo autoBuild()

in eureka-client/src/main/java/com/netflix/appinfo/AmazonInfo.java [221:283]


        public AmazonInfo autoBuild(String namespace) {
            if (config == null) {
                config = new Archaius1AmazonInfoConfig(namespace);
            }

            for (MetaDataKey key : MetaDataKey.values()) {
                int numOfRetries = config.getNumRetries();
                while (numOfRetries-- > 0) {
                    try {
                        if (key == MetaDataKey.publicIpv4s) {
                            // macs should be read before publicIpv4s due to declaration order
                            String[] macs = result.metadata.get(MetaDataKey.macs.getName()).split("\n");
                            for (String mac : macs) {
                                URL url = key.getURL(null, mac);
                                String publicIpv4s = AmazonInfoUtils.readEc2MetadataUrl(key, url, config.getConnectTimeout(), config.getReadTimeout());

                                if (publicIpv4s != null) {
                                    result.metadata.put(key.getName(), publicIpv4s);
                                    break;
                                }
                            }
                            break;
                        }

                        String mac = null;
                        if (key == MetaDataKey.vpcId) {
                            mac = result.metadata.get(MetaDataKey.mac.getName());  // mac should be read before vpcId due to declaration order
                        }

                        URL url = key.getURL(null, mac);
                        String value = AmazonInfoUtils.readEc2MetadataUrl(key, url, config.getConnectTimeout(), config.getReadTimeout());
                        if (value != null) {
                            result.metadata.put(key.getName(), value);
                        }

                        break;
                    } catch (Throwable e) {
                        if (config.shouldLogAmazonMetadataErrors()) {
                            logger.warn("Cannot get the value for the metadata key: {} Reason :", key, e);
                        }
                        if (numOfRetries >= 0) {
                            try {
                                Thread.sleep(SLEEP_TIME_MS);
                            } catch (InterruptedException e1) {

                            }
                            continue;
                        }
                    }
                }

                if (key == MetaDataKey.instanceId
                        && config.shouldFailFastOnFirstLoad()
                        && !result.metadata.containsKey(MetaDataKey.instanceId.getName())) {

                    logger.warn("Skipping the rest of AmazonInfo init as we were not able to load instanceId after " +
                                    "the configured number of retries: {}, per fail fast configuration: {}",
                            config.getNumRetries(), config.shouldFailFastOnFirstLoad());
                    break;  // break out of loop and return whatever we have thus far
                }
            }
            return result;
        }