@@ -96,13 +96,15 @@ private void loadServiceEndpoints() {
9696 && (config .containsMember ("hostname" ) || config .containsMember ("variants" ))) {
9797 String region = entry .getKey ();
9898 String hostname = config .getStringMemberOrDefault ("hostname" , partition .hostnameTemplate );
99- String resolvedHostname = getResolvedHostnameWithDnsSuffix (
100- getResolvedHostname (hostname , endpointPrefix , region ),
101- dnsSuffix
102- );
99+ String resolvedHostname = getResolvedHostname (hostname , endpointPrefix , region );
103100
104- ArrayNode variants = config .getArrayMember ("variants" ).orElse (ArrayNode .fromNodes ());
105- ArrayNode defaultVariant = ArrayNode .fromNodes (getDefaultVariant (resolvedHostname ));
101+ ArrayNode variants = getServiceVariants (
102+ config .getArrayMember ("variants" ).orElse (ArrayNode .fromNodes ()),
103+ resolvedHostname ,
104+ dnsSuffix );
105+
106+ String defaultHostname = getResolvedHostnameWithDnsSuffix (resolvedHostname , dnsSuffix );
107+ ArrayNode defaultVariant = ArrayNode .fromNodes (getDefaultVariant (defaultHostname ));
106108
107109 endpoints .put (region ,
108110 config
@@ -113,6 +115,27 @@ private void loadServiceEndpoints() {
113115 }
114116 }
115117
118+ private ArrayNode getServiceVariants (ArrayNode variants , String defaultHostname , String defaultDnsSuffix ) {
119+ List <Node > serviceVariants = new ArrayList <Node >();
120+
121+ variants .forEach (variant -> {
122+ ObjectNode variantNode = variant .expectObjectNode ();
123+ if (!variantNode .containsMember ("hostname" ) && !variantNode .containsMember ("dnsSuffix" )) {
124+ // Skip the empty variant which just contains tags.
125+ return ;
126+ }
127+ String hostname = variantNode .getStringMemberOrDefault ("hostname" , defaultHostname );
128+ String dnsSuffix = variantNode .getStringMemberOrDefault ("dnsSuffix" , defaultDnsSuffix );
129+ String resolvedHostname = getResolvedHostnameWithDnsSuffix (
130+ getResolvedHostname (hostname , endpointPrefix ),
131+ dnsSuffix
132+ );
133+ serviceVariants .add (variantNode .withMember ("hostname" , resolvedHostname ).withoutMember ("dnsSuffix" ));
134+ });
135+
136+ return ArrayNode .fromNodes (serviceVariants );
137+ }
138+
116139 @ Override
117140 public void run () {
118141 writeRegionHash ();
0 commit comments