Skip to content

Commit ded945a

Browse files
committed
DefaultDomains: use v3 api
Related to gh-1325
1 parent bcbc40d commit ded945a

File tree

5 files changed

+312
-286
lines changed

5 files changed

+312
-286
lines changed

cloudfoundry-client/src/main/java/org/cloudfoundry/client/v3/domains/_CreateDomainRequest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,11 @@ abstract class _CreateDomainRequest {
5656
@Nullable
5757
abstract DomainRelationships getRelationships();
5858

59+
/**
60+
* The router group
61+
*/
62+
@JsonProperty("router_group")
63+
@Nullable
64+
abstract RouterGroup getRouterGroup();
65+
5966
}

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/domains/DefaultDomains.java

Lines changed: 125 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,26 @@
1818

1919
import static org.cloudfoundry.util.tuple.TupleUtils.function;
2020

21+
import java.util.List;
22+
import java.util.Map;
2123
import java.util.NoSuchElementException;
24+
import java.util.Optional;
25+
import java.util.stream.Collectors;
2226
import org.cloudfoundry.client.CloudFoundryClient;
23-
import org.cloudfoundry.client.v2.organizations.AssociateOrganizationPrivateDomainRequest;
24-
import org.cloudfoundry.client.v2.organizations.AssociateOrganizationPrivateDomainResponse;
25-
import org.cloudfoundry.client.v2.organizations.ListOrganizationsRequest;
26-
import org.cloudfoundry.client.v2.organizations.OrganizationResource;
27-
import org.cloudfoundry.client.v2.organizations.RemoveOrganizationPrivateDomainRequest;
28-
import org.cloudfoundry.client.v2.privatedomains.CreatePrivateDomainRequest;
29-
import org.cloudfoundry.client.v2.privatedomains.CreatePrivateDomainResponse;
3027
import org.cloudfoundry.client.v2.privatedomains.ListPrivateDomainsRequest;
31-
import org.cloudfoundry.client.v2.privatedomains.PrivateDomainEntity;
3228
import org.cloudfoundry.client.v2.privatedomains.PrivateDomainResource;
3329
import org.cloudfoundry.client.v2.shareddomains.CreateSharedDomainResponse;
3430
import org.cloudfoundry.client.v2.shareddomains.ListSharedDomainsRequest;
35-
import org.cloudfoundry.client.v2.shareddomains.SharedDomainEntity;
3631
import org.cloudfoundry.client.v2.shareddomains.SharedDomainResource;
32+
import org.cloudfoundry.client.v3.Relationship;
33+
import org.cloudfoundry.client.v3.ToOneRelationship;
34+
import org.cloudfoundry.client.v3.domains.CreateDomainResponse;
35+
import org.cloudfoundry.client.v3.domains.DomainRelationships;
36+
import org.cloudfoundry.client.v3.domains.DomainResource;
37+
import org.cloudfoundry.client.v3.domains.ListDomainsRequest;
38+
import org.cloudfoundry.client.v3.domains.ShareDomainResponse;
39+
import org.cloudfoundry.client.v3.organizations.ListOrganizationsRequest;
40+
import org.cloudfoundry.client.v3.organizations.OrganizationResource;
3741
import org.cloudfoundry.operations.util.OperationsLogging;
3842
import org.cloudfoundry.routing.RoutingClient;
3943
import org.cloudfoundry.routing.v1.routergroups.ListRouterGroupsResponse;
@@ -66,43 +70,59 @@ public DefaultDomains(
6670

6771
@Override
6872
public Mono<Void> create(CreateDomainRequest request) {
69-
return getOrganizationId(request.getOrganization())
70-
.flatMap(organizationId -> requestCreateDomain(request.getDomain(), organizationId))
73+
Mono<Optional<String>> organizationId =
74+
Mono.justOrEmpty(request.getOrganization())
75+
.flatMap(this::getOrganization)
76+
.map(OrganizationResource::getId)
77+
.singleOptional();
78+
79+
Mono<Optional<String>> groupId =
80+
Mono.justOrEmpty(request.getRouterGroup())
81+
.flatMap(this::getRouterGroupId)
82+
.singleOptional();
83+
84+
return Mono.zip(organizationId, groupId)
85+
.flatMap(
86+
function(
87+
(oId, gId) ->
88+
requestCreateDomain(
89+
request.getDomain(),
90+
oId.orElse(null),
91+
gId.orElse(null))))
7192
.then()
7293
.transform(OperationsLogging.log("Create Domain"))
7394
.checkpoint();
7495
}
7596

7697
@Override
98+
@Deprecated
7799
public Mono<Void> createShared(CreateSharedDomainRequest request) {
78-
if (request.getRouterGroup() == null) {
79-
return requestCreateSharedDomain(request.getDomain(), null)
80-
.then()
81-
.transform(OperationsLogging.log("Create Shared Domain"))
82-
.checkpoint();
83-
} else {
84-
return getRouterGroupId(routingClient, request.getRouterGroup())
85-
.flatMap(
86-
routerGroupId ->
87-
requestCreateSharedDomain(request.getDomain(), routerGroupId))
88-
.then()
89-
.transform(OperationsLogging.log("Create Shared Domain"))
90-
.checkpoint();
91-
}
100+
return create(
101+
CreateDomainRequest.builder()
102+
.domain(request.getDomain())
103+
.routerGroup(request.getRouterGroup())
104+
.build());
92105
}
93106

94107
@Override
95108
public Flux<Domain> list() {
96-
return requestListPrivateDomains()
97-
.map(DefaultDomains::toDomain)
98-
.mergeWith(requestListSharedDomains().map(DefaultDomains::toDomain))
109+
return requestListRouterGroups()
110+
.map(ListRouterGroupsResponse::getRouterGroups)
111+
.map(DefaultDomains::indexRouterGroupsById)
112+
.flatMapMany(
113+
routerGroupsIndexedById ->
114+
requestListDomains()
115+
.map(
116+
domain ->
117+
DefaultDomains.toDomain(
118+
domain, routerGroupsIndexedById)))
99119
.transform(OperationsLogging.log("List Domains"))
100120
.checkpoint();
101121
}
102122

103123
@Override
104124
public Flux<RouterGroup> listRouterGroups() {
105-
return requestListRouterGroups(routingClient)
125+
return requestListRouterGroups()
106126
.flatMapIterable(ListRouterGroupsResponse::getRouterGroups)
107127
.map(DefaultDomains::toRouterGroup)
108128
.transform(OperationsLogging.log("List Router Groups"))
@@ -112,9 +132,9 @@ public Flux<RouterGroup> listRouterGroups() {
112132
@Override
113133
public Mono<Void> share(ShareDomainRequest request) {
114134
return Mono.zip(
115-
getPrivateDomainId(request.getDomain()),
135+
getDomainId(request.getDomain()),
116136
getOrganizationId(request.getOrganization()))
117-
.flatMap(function(this::requestAssociateOrganizationPrivateDomainRequest))
137+
.flatMap(function(this::requestShareDomain))
118138
.then()
119139
.transform(OperationsLogging.log("Share Domain"))
120140
.checkpoint();
@@ -123,9 +143,9 @@ public Mono<Void> share(ShareDomainRequest request) {
123143
@Override
124144
public Mono<Void> unshare(UnshareDomainRequest request) {
125145
return Mono.zip(
126-
getPrivateDomainId(request.getDomain()),
146+
getDomainId(request.getDomain()),
127147
getOrganizationId(request.getOrganization()))
128-
.flatMap(function(this::requestRemoveOrganizationPrivateDomainRequest))
148+
.flatMap(function(this::requestUnshareDomain))
129149
.transform(OperationsLogging.log("Unshare Domain"))
130150
.checkpoint();
131151
}
@@ -141,7 +161,19 @@ private Mono<OrganizationResource> getOrganization(String organization) {
141161
}
142162

143163
private Mono<String> getOrganizationId(String organization) {
144-
return getOrganization(organization).map(ResourceUtils::getId);
164+
return getOrganization(organization).map(OrganizationResource::getId);
165+
}
166+
167+
private Mono<String> getDomainId(String domain) {
168+
return this.requestListDomains()
169+
.filter(d -> d.getName().equals(domain))
170+
.map(DomainResource::getId)
171+
.single()
172+
.onErrorResume(
173+
NoSuchElementException.class,
174+
t ->
175+
ExceptionUtils.illegalArgument(
176+
"Private domain %s does not exist", domain));
145177
}
146178

147179
private Mono<PrivateDomainResource> getPrivateDomain(String domain) {
@@ -158,35 +190,44 @@ private Mono<String> getPrivateDomainId(String domain) {
158190
return getPrivateDomain(domain).map(ResourceUtils::getId);
159191
}
160192

161-
private static Mono<String> getRouterGroupId(RoutingClient routingClient, String routerGroup) {
162-
return requestListRouterGroups(routingClient)
193+
private Mono<String> getRouterGroupId(String routerGroup) {
194+
return requestListRouterGroups()
163195
.flatMapIterable(ListRouterGroupsResponse::getRouterGroups)
164196
.filter(group -> routerGroup.equals(group.getName()))
165197
.single()
166198
.map(org.cloudfoundry.routing.v1.routergroups.RouterGroup::getRouterGroupId);
167199
}
168200

169-
private Mono<AssociateOrganizationPrivateDomainResponse>
170-
requestAssociateOrganizationPrivateDomainRequest(
171-
String domainId, String organizationId) {
201+
private Mono<ShareDomainResponse> requestShareDomain(String domainId, String organizationId) {
172202
return this.cloudFoundryClient
173-
.organizations()
174-
.associatePrivateDomain(
175-
AssociateOrganizationPrivateDomainRequest.builder()
176-
.organizationId(organizationId)
177-
.privateDomainId(domainId)
203+
.domainsV3()
204+
.share(
205+
org.cloudfoundry.client.v3.domains.ShareDomainRequest.builder()
206+
.domainId(domainId)
207+
.data(Relationship.builder().id(organizationId).build())
178208
.build());
179209
}
180210

181-
private Mono<CreatePrivateDomainResponse> requestCreateDomain(
182-
String domain, String organizationId) {
183-
return this.cloudFoundryClient
184-
.privateDomains()
185-
.create(
186-
CreatePrivateDomainRequest.builder()
187-
.name(domain)
188-
.owningOrganizationId(organizationId)
189-
.build());
211+
private Mono<CreateDomainResponse> requestCreateDomain(
212+
String domain, String organizationId, String routerGroupId) {
213+
org.cloudfoundry.client.v3.domains.CreateDomainRequest.Builder createDomainRequest =
214+
org.cloudfoundry.client.v3.domains.CreateDomainRequest.builder().name(domain);
215+
if (organizationId != null) {
216+
createDomainRequest.relationships(
217+
DomainRelationships.builder()
218+
.organization(
219+
ToOneRelationship.builder()
220+
.data(Relationship.builder().id(organizationId).build())
221+
.build())
222+
.build());
223+
}
224+
if (routerGroupId != null) {
225+
createDomainRequest.routerGroup(
226+
org.cloudfoundry.client.v3.domains.RouterGroup.builder()
227+
.id(routerGroupId)
228+
.build());
229+
}
230+
return this.cloudFoundryClient.domainsV3().create(createDomainRequest.build());
190231
}
191232

192233
private Mono<CreateSharedDomainResponse> requestCreateSharedDomain(
@@ -212,17 +253,16 @@ private Flux<PrivateDomainResource> requestListPrivateDomains(String domain) {
212253
.build()));
213254
}
214255

215-
private Flux<PrivateDomainResource> requestListPrivateDomains() {
216-
return PaginationUtils.requestClientV2Resources(
256+
private Flux<DomainResource> requestListDomains() {
257+
return PaginationUtils.requestClientV3Resources(
217258
page ->
218259
this.cloudFoundryClient
219-
.privateDomains()
220-
.list(ListPrivateDomainsRequest.builder().page(page).build()));
260+
.domainsV3()
261+
.list(ListDomainsRequest.builder().page(page).build()));
221262
}
222263

223-
private static Mono<ListRouterGroupsResponse> requestListRouterGroups(
224-
RoutingClient routingClient) {
225-
return routingClient
264+
private Mono<ListRouterGroupsResponse> requestListRouterGroups() {
265+
return this.routingClient
226266
.routerGroups()
227267
.list(
228268
org.cloudfoundry.routing.v1.routergroups.ListRouterGroupsRequest.builder()
@@ -238,47 +278,50 @@ private Flux<SharedDomainResource> requestListSharedDomains() {
238278
}
239279

240280
private Flux<OrganizationResource> requestOrganizations(String organization) {
241-
return PaginationUtils.requestClientV2Resources(
281+
return PaginationUtils.requestClientV3Resources(
242282
page ->
243283
this.cloudFoundryClient
244-
.organizations()
284+
.organizationsV3()
245285
.list(
246286
ListOrganizationsRequest.builder()
247287
.name(organization)
248288
.page(page)
249289
.build()));
250290
}
251291

252-
private Mono<Void> requestRemoveOrganizationPrivateDomainRequest(
253-
String domainId, String organizationId) {
292+
private Mono<Void> requestUnshareDomain(String domainId, String organizationId) {
254293
return this.cloudFoundryClient
255-
.organizations()
256-
.removePrivateDomain(
257-
RemoveOrganizationPrivateDomainRequest.builder()
294+
.domainsV3()
295+
.unshare(
296+
org.cloudfoundry.client.v3.domains.UnshareDomainRequest.builder()
258297
.organizationId(organizationId)
259-
.privateDomainId(domainId)
298+
.domainId(domainId)
260299
.build());
261300
}
262301

263-
private static Domain toDomain(PrivateDomainResource resource) {
264-
PrivateDomainEntity entity = ResourceUtils.getEntity(resource);
265-
302+
private static Domain toDomain(DomainResource entity, Map<String, String> type) {
266303
return Domain.builder()
267-
.id(ResourceUtils.getId(resource))
304+
.id(entity.getId())
268305
.name(entity.getName())
269-
.status(Status.OWNED)
306+
.status(
307+
entity.getRelationships().getOrganization().getData() != null
308+
? Status.OWNED
309+
: Status.SHARED)
310+
.type(
311+
entity.getRouterGroup() != null
312+
? type.get(entity.getRouterGroup().getId())
313+
: null)
270314
.build();
271315
}
272316

273-
private static Domain toDomain(SharedDomainResource resource) {
274-
SharedDomainEntity entity = ResourceUtils.getEntity(resource);
275-
276-
return Domain.builder()
277-
.id(ResourceUtils.getId(resource))
278-
.name(entity.getName())
279-
.status(Status.SHARED)
280-
.type(entity.getRouterGroupType())
281-
.build();
317+
private static Map<String, String> indexRouterGroupsById(
318+
List<org.cloudfoundry.routing.v1.routergroups.RouterGroup> routeGroups) {
319+
return routeGroups.stream()
320+
.collect(
321+
Collectors.toMap(
322+
org.cloudfoundry.routing.v1.routergroups.RouterGroup
323+
::getRouterGroupId,
324+
org.cloudfoundry.routing.v1.routergroups.RouterGroup::getType));
282325
}
283326

284327
private static RouterGroup toRouterGroup(

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/domains/Domains.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ public interface Domains {
3737
*
3838
* @param request the Create Shared Domain request
3939
* @return a completion indicator
40+
* @deprecated use {@link #create} instead
4041
*/
42+
@Deprecated
4143
Mono<Void> createShared(CreateSharedDomainRequest request);
4244

4345
/**

cloudfoundry-operations/src/main/java/org/cloudfoundry/operations/domains/_CreateDomainRequest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.cloudfoundry.operations.domains;
1818

19+
import org.cloudfoundry.Nullable;
1920
import org.immutables.value.Value;
2021

2122
/**
@@ -32,6 +33,13 @@ abstract class _CreateDomainRequest {
3233
/**
3334
* The organization name of the domain
3435
*/
36+
@Nullable
3537
abstract String getOrganization();
3638

39+
/**
40+
* The router group of the domain
41+
*/
42+
@Nullable
43+
abstract String getRouterGroup();
44+
3745
}

0 commit comments

Comments
 (0)