private Observable<AwsDataCenterInfo> readMetaInfo() { final AsyncSubject<AwsDataCenterInfo> subject = AsyncSubject.create(); final AwsDataCenterInfo.Builder builder = new AwsDataCenterInfo.Builder(); Observable.from(MetaDataKey.values()) .flatMap(new Func1<MetaDataKey, Observable<MetaDataKey>>() {
@Override public InstanceInfo next() { int cidx = idx.incrementAndGet(); String name = baseName + '_' + cidx; NetworkAddress publicAddress = publicAddresses.next(); NetworkAddress privateAddress = privateAddresses.next(); DataCenterInfo dataCenter = new AwsDataCenterInfo.Builder() .withAwsDataCenter(templateDataCenter) .withInstanceId(String.format("i-%s-%08d", baseName, cidx)) .withPublicHostName(publicAddress.getHostName()) .withPublicIPv4(publicAddress.getIpAddress()) .withPrivateHostName(privateAddress.getHostName()) .withPrivateIPv4(privateAddress.getIpAddress()) .build(); return new InstanceInfo.Builder() .withId("id#" + name) .withApp(template.getApp()) .withAppGroup(template.getAppGroup()) .withAsg(template.getAsg()) .withHealthCheckUrls(template.getHealthCheckUrls()) .withHomePageUrl(template.getHomePageUrl()) .withPorts(template.getPorts()) .withSecureVipAddress(template.getSecureVipAddress()) .withStatus(template.getStatus()) .withStatusPageUrl(template.getStatusPageUrl()) .withVipAddress(template.getVipAddress()) .withMetaData(template.getMetaData()) .withDataCenterInfo(dataCenter) .build(); }
@Override public AwsDataCenterInfo next() { NetworkAddress publicAddress = publicAddresses.next(); NetworkAddress privateAddress = privateAddresses.next(); return new AwsDataCenterInfo.Builder() .withAwsDataCenter(template) .withInstanceId(String.format("id-%08d", ++instanceId)) .withPublicHostName(publicAddress.getHostName()) .withPublicIPv4(publicAddress.getIpAddress()) .withPrivateHostName(privateAddress.getHostName()) .withPrivateIPv4(privateAddress.getIpAddress()) .build(); }
@Override public InstanceInfo next() { int cidx = idx.incrementAndGet(); String name = baseName + '_' + cidx; NetworkAddress publicAddress = publicAddresses.next(); NetworkAddress privateAddress = privateAddresses.next(); DataCenterInfo dataCenter = new AwsDataCenterInfo.Builder() .withAwsDataCenter(templateDataCenter) .withPublicHostName(publicAddress.getHostName()) .withPublicIPv4(publicAddress.getIpAddress()) .withPrivateHostName(privateAddress.getHostName()) .withPrivateIPv4(privateAddress.getIpAddress()) .build(); return new InstanceInfo.Builder() .withId("id#" + name) .withApp("app#" + baseName) .withAppGroup("group#" + baseName) .withAsg("asg#" + baseName) .withHealthCheckUrls(template.getHealthCheckUrls()) .withHomePageUrl(template.getHomePageUrl()) .withPorts(template.getPorts()) .withSecureVipAddress("vipSecure#" + name) .withStatus(template.getStatus()) .withStatusPageUrl(template.getStatusPageUrl()) .withVipAddress("vip#" + baseName) .withMetaData(template.getMetaData()) .withDataCenterInfo(dataCenter) .build(); }
@Override public DataCenterInfo dataCenterFromV1(com.netflix.appinfo.InstanceInfo v1Info) { DataCenterInfo.DataCenterInfoBuilder builder; com.netflix.appinfo.DataCenterInfo v1DataCenterInfo = v1Info.getDataCenterInfo(); if (v1DataCenterInfo instanceof AmazonInfo) { AmazonInfo v1AmazonInfo = (AmazonInfo) v1DataCenterInfo; builder = new AwsDataCenterInfo.Builder() .withZone(v1AmazonInfo.get(AmazonInfo.MetaDataKey.availabilityZone)) .withAmiId(v1AmazonInfo.get(AmazonInfo.MetaDataKey.amiId)) .withInstanceId(v1AmazonInfo.get(AmazonInfo.MetaDataKey.instanceId)) .withInstanceType(v1AmazonInfo.get(AmazonInfo.MetaDataKey.instanceType)) .withPrivateIPv4(v1AmazonInfo.get(AmazonInfo.MetaDataKey.localIpv4)) .withPublicIPv4(v1AmazonInfo.get(AmazonInfo.MetaDataKey.publicIpv4)) .withPublicHostName(v1AmazonInfo.get(AmazonInfo.MetaDataKey.publicHostname)); } else { NetworkAddress address = aNetworkAddress() .withIpAddress(v1Info.getIPAddr()) .withHostName(v1Info.getHostName()) .withLabel(NetworkAddress.PUBLIC_ADDRESS) // best guess .withProtocolType(NetworkAddress.ProtocolType.IPv4) // best guess .build(); builder = new BasicDataCenterInfo.Builder<>() .withName(v1DataCenterInfo.getName().name()) .withAddresses(address); } return builder.build(); }
@Override public DataCenterInfo fromV1(com.netflix.appinfo.DataCenterInfo v1DataCenterInfo) { DataCenterInfo.DataCenterInfoBuilder builder; if (v1DataCenterInfo instanceof AmazonInfo) { AmazonInfo v1Info = (AmazonInfo) v1DataCenterInfo; builder = new AwsDataCenterInfo.Builder() .withZone(v1Info.get(AmazonInfo.MetaDataKey.availabilityZone)) .withAmiId(v1Info.get(AmazonInfo.MetaDataKey.amiId)) .withInstanceId(v1Info.get(AmazonInfo.MetaDataKey.instanceId)) .withInstanceType(v1Info.get(AmazonInfo.MetaDataKey.instanceType)) .withPrivateIPv4(v1Info.get(AmazonInfo.MetaDataKey.localIpv4)) .withPublicIPv4(v1Info.get(AmazonInfo.MetaDataKey.publicIpv4)) .withPublicHostName(v1Info.get(AmazonInfo.MetaDataKey.publicHostname)); } else { builder = new BasicDataCenterInfo.BasicDataCenterInfoBuilder() .withName(v1DataCenterInfo.getName().name()); } return builder.build(); }
public AwsDataCenterInfo build() { return builder().build(); }
@Override public AwsDataCenterInfo.Builder builder() { return new AwsDataCenterInfo.Builder() .withRegion("US-East-1") .withZone("US-East-1a") .withPlacementGroup("pg-1") .withAmiId("ami-12345678") .withInstanceId("id-12345678") .withInstanceType("m1.large") .withPrivateHostName("us-east-1a-vm.internal") .withPrivateIPv4("192.168.0.1") .withPublicHostName("us-east-1a-vm.public") .withPublicIPv4("11.11.0.1") .withEth0mac("mac:address") .withAccountId("myAccount") .withVpcId("someVpcId"); } },
@Override public AwsDataCenterInfo.Builder builder() { return new AwsDataCenterInfo.Builder() .withRegion("US-East-1") .withZone("US-East-1c") .withPlacementGroup("pg-1") .withAmiId("ami-12345678") .withInstanceId("id-12345678") .withInstanceType("m1.large") .withPrivateHostName("us-east-1c-vm.test") .withPrivateIPv4("192.168.1.1") .withEth0mac("mac:address") .withAccountId("myAccount"); } };
@Override public AwsDataCenterInfo.Builder builder() { return new AwsDataCenterInfo.Builder() .withRegion("US-East-1") .withZone("US-East-1a") .withPlacementGroup("pg-1") .withAmiId("ami-12345678") .withInstanceId("id-12345678") .withInstanceType("m1.large") .withPrivateHostName("us-east-1a-vm.internal") .withPrivateIPv4("192.168.0.1") .withPublicHostName("us-east-1a-vm.public") .withPublicIPv4("11.11.0.1") .withEth0mac("mac:address") .withAccountId("myAccount"); } },
@Override public AwsDataCenterInfo.Builder builder() { return new AwsDataCenterInfo.Builder() .withRegion("US-East-1") .withZone("US-East-1a") .withPlacementGroup("pg-1") .withAmiId("ami-12345678") .withInstanceId("id-12345678") .withInstanceType("m1.large") .withPrivateHostName("us-east-1a-vm.internal") .withPrivateIPv4("192.168.0.1") .withPublicHostName("us-east-1a-vm.public") .withPublicIPv4("11.11.0.1"); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withInstanceType(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withPublicIPv4(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withZone(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withPublicHostName(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withInstanceId(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withAmiId(metaInfoValue); } },
@Override protected AwsDataCenterInfo.Builder doApply(AwsDataCenterInfo.Builder builder, String metaInfoValue) { return builder.withPrivateIPv4(metaInfoValue); } },
public AwsDataCenterInfo build() { return builder().build(); } }
@Override public AwsDataCenterInfo.Builder builder() { return new AwsDataCenterInfo.Builder() .withRegion("US-East-1") .withZone("US-East-1c") .withPlacementGroup("pg-1") .withAmiId("ami-12345678") .withInstanceId("id-12345678") .withInstanceType("m1.large") .withPrivateHostName("us-east-1c-vm.test") .withPrivateIPv4("192.168.1.1"); } };