@Override public synchronized CloudInstanceConfig get() { if (config == null) { if (namespace == null) { config = new CloudInstanceConfig(); } else { config = new CloudInstanceConfig(namespace); } // TODO: Remove this when DiscoveryManager is finally no longer used DiscoveryManager.getInstance().setEurekaInstanceConfig(config); } return config; }
@Before public void setUp() { AmazonInfo initialAmazonInfo = AmazonInfo.Builder.newBuilder().build(); config = spy(new CloudInstanceConfig(initialAmazonInfo)); instanceInfo = InstanceInfoGenerator.takeOne(); this.applicationInfoManager = new ApplicationInfoManager(config, instanceInfo, null); when(config.getDefaultAddressResolutionOrder()).thenReturn(new String[]{ publicHostname.name(), localIpv4.name() }); when(config.getHostName(anyBoolean())).thenReturn(dummyDefault); }
/** * @deprecated use {@link #resolveDefaultAddress(boolean)} */ @Deprecated public String resolveDefaultAddress() { return this.resolveDefaultAddress(true); }
@Override public String resolveDefaultAddress(boolean refresh) { // In this method invocation data center info will be refreshed. String result = getHostName(refresh); for (String name : getDefaultAddressResolutionOrder()) { try { AmazonInfo.MetaDataKey key = AmazonInfo.MetaDataKey.valueOf(name); String address = amazonInfoHolder.get().get(key); if (address != null && !address.isEmpty()) { result = address; break; } } catch (Exception e) { logger.error("failed to resolve default address for key {}, skipping", name, e); } } return result; }
@Test public void testRefreshDataCenterInfoWithAmazonInfo() { String newPublicHostname = "newValue"; assertThat(instanceInfo.getHostName(), is(not(newPublicHostname))); ((AmazonInfo)config.getDataCenterInfo()).getMetadata().put(publicHostname.getName(), newPublicHostname); applicationInfoManager.refreshDataCenterInfoIfRequired(); assertThat(instanceInfo.getHostName(), is(newPublicHostname)); }
@Override public String resolveDefaultAddress(boolean refresh) { // In this method invocation data center info will be refreshed. String result = getHostName(refresh); for (String name : getDefaultAddressResolutionOrder()) { try { AmazonInfo.MetaDataKey key = AmazonInfo.MetaDataKey.valueOf(name); String address = amazonInfoHolder.get().get(key); if (address != null && !address.isEmpty()) { result = address; break; } } catch (Exception e) { logger.error("failed to resolve default address for key {}, skipping", name, e); } } return result; }
@Test public void testSpotInstanceTermination() { AmazonInfo initialAmazonInfo = AmazonInfo.Builder.newBuilder().build(); RefreshableAmazonInfoProvider refreshableAmazonInfoProvider = spy(new RefreshableAmazonInfoProvider(initialAmazonInfo, new Archaius1AmazonInfoConfig(CommonConstants.DEFAULT_CONFIG_NAMESPACE))); config = spy(new CloudInstanceConfig(CommonConstants.DEFAULT_CONFIG_NAMESPACE, refreshableAmazonInfoProvider)); this.applicationInfoManager = new ApplicationInfoManager(config, instanceInfo, null); String terminationTime = "2015-01-05T18:02:00Z"; String spotInstanceAction = "{\"action\": \"terminate\", \"time\": \"2017-09-18T08:22:00Z\"}"; AmazonInfo newAmazonInfo = AmazonInfo.Builder.newBuilder() .addMetadata(AmazonInfo.MetaDataKey.spotTerminationTime, terminationTime) // new property on refresh .addMetadata(AmazonInfo.MetaDataKey.spotInstanceAction, spotInstanceAction) // new property refresh .addMetadata(AmazonInfo.MetaDataKey.publicHostname, instanceInfo.getHostName()) // unchanged .addMetadata(AmazonInfo.MetaDataKey.instanceId, instanceInfo.getInstanceId()) // unchanged .addMetadata(AmazonInfo.MetaDataKey.localIpv4, instanceInfo.getIPAddr()) // unchanged .build(); when(refreshableAmazonInfoProvider.getNewAmazonInfo()).thenReturn(newAmazonInfo); applicationInfoManager.refreshDataCenterInfoIfRequired(); assertThat(((AmazonInfo)instanceInfo.getDataCenterInfo()).getMetadata().get(AmazonInfo.MetaDataKey.spotTerminationTime.getName()), is(terminationTime)); assertThat(((AmazonInfo)instanceInfo.getDataCenterInfo()).getMetadata().get(AmazonInfo.MetaDataKey.spotInstanceAction.getName()), is(spotInstanceAction)); }
@Test public void testResolveDefaultAddress() { AmazonInfo info = (AmazonInfo) instanceInfo.getDataCenterInfo(); config = createConfig(info); assertThat(config.resolveDefaultAddress(false), is(info.get(publicHostname))); info.getMetadata().remove(publicHostname.getName()); config = createConfig(info); assertThat(config.resolveDefaultAddress(false), is(info.get(localIpv4))); info.getMetadata().remove(localIpv4.getName()); config = createConfig(info); assertThat(config.resolveDefaultAddress(false), is(dummyDefault)); }
? new CloudInstanceConfig() : new MyDataCenterInstanceConfig();
/** * @deprecated use {@link #resolveDefaultAddress(boolean)} */ @Deprecated public String resolveDefaultAddress() { return this.resolveDefaultAddress(true); }
protected CloudInstanceConfig createCloudInstanceConfig(String namespace) { return new CloudInstanceConfig(namespace); } }
@Provides @Singleton private EurekaInstanceConfig provideInstanceConfig(OptionalInjections opts) { return new CloudInstanceConfig("netflix.appinfo."); }
@Override public synchronized CloudInstanceConfig get() { if (config == null) { if (namespace == null) { config = new CloudInstanceConfig(); } else { config = new CloudInstanceConfig(namespace); } // TODO: Remove this when DiscoveryManager is finally no longer used DiscoveryManager.getInstance().setEurekaInstanceConfig(config); } return config; }
@Bean @DependsOn("environmentBackedConfig") EurekaInstanceConfig eurekaInstanceConfig(EurekaConfigurationProperties eurekaConfigurationProperties) { return new CloudInstanceConfig(eurekaConfigurationProperties.getInstance().getNamespace()); }
? new CloudInstanceConfig() : new MyDataCenterInstanceConfig();