Skip to content

Commit 86ea07e

Browse files
committed
work
1 parent 01af780 commit 86ea07e

File tree

7 files changed

+133
-66
lines changed

7 files changed

+133
-66
lines changed

astra-sdk-devops/src/main/java/com/dtsx/astra/sdk/pcu/PcuGroupDbAssociationsClient.java renamed to astra-sdk-devops/src/main/java/com/dtsx/astra/sdk/pcu/PcuGroupDatacenterAssociationsClient.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,25 @@
1717
import java.util.stream.Stream;
1818

1919
@Slf4j
20-
public class PcuGroupDbAssociationsClient extends AbstractApiClient {
20+
public class PcuGroupDatacenterAssociationsClient extends AbstractApiClient {
2121
private static final TypeReference<List<PcuGroupDbAssociation>> PCU_GROUP_DB_ASSOCIATIONS =
2222
new TypeReference<>() {};
2323

2424
@Getter
2525
private final String pcuGroupId;
2626

27-
public PcuGroupDbAssociationsClient(String token, String pcuGroupId) {
27+
public PcuGroupDatacenterAssociationsClient(String token, String pcuGroupId) {
2828
this(token, AstraEnvironment.PROD, pcuGroupId);
2929
}
3030

31-
public PcuGroupDbAssociationsClient(String token, AstraEnvironment env, String pcuGroupId) {
31+
public PcuGroupDatacenterAssociationsClient(String token, AstraEnvironment env, String pcuGroupId) {
3232
super(token, env);
3333
this.pcuGroupId = pcuGroupId;
3434
}
3535

3636
@Override
3737
public String getServiceName() {
38-
return "pcu.group.associations.db";
38+
return "pcu.group.associations.datacenter";
3939
}
4040

4141
// ---------------------------------

astra-sdk-devops/src/main/java/com/dtsx/astra/sdk/pcu/PcuGroupOpsClient.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import com.dtsx.astra.sdk.AbstractApiClient;
44
import com.dtsx.astra.sdk.pcu.domain.PcuGroup;
55
import com.dtsx.astra.sdk.pcu.domain.PcuGroupStatusType;
6+
import com.dtsx.astra.sdk.pcu.domain.PcuGroupUpdateRequest;
67
import com.dtsx.astra.sdk.pcu.exception.PcuGroupNotFoundException;
78
import com.dtsx.astra.sdk.utils.ApiLocator;
89
import com.dtsx.astra.sdk.utils.AstraEnvironment;
10+
import com.dtsx.astra.sdk.utils.JsonUtils;
911
import lombok.Getter;
1012
import lombok.extern.slf4j.Slf4j;
1113
import lombok.val;
@@ -31,6 +33,10 @@ public String getServiceName() {
3133
return "pcu.group";
3234
}
3335

36+
// ---------------------------------
37+
// ---- READ ----
38+
// ---------------------------------
39+
3440
public Optional<PcuGroup> find() {
3541
try {
3642
return Optional.of(get());
@@ -55,6 +61,15 @@ public boolean isCreatedOrActive() {
5561
return PcuGroupStatusType.CREATED == get().getStatus() || isActive();
5662
}
5763

64+
// ---------------------------------
65+
// ---- UPDATE ----
66+
// ---------------------------------
67+
68+
public void update(PcuGroupUpdateRequest req) {
69+
val base = get();
70+
PATCH(getEndpointPcus() + "/" + pcuGroupId, JsonUtils.marshall(req.withDefaultsAndValidations(base)), getOperationName("update"));
71+
}
72+
5873
// ---------------------------------
5974
// ---- MAINTENANCE ----
6075
// ---------------------------------
@@ -80,8 +95,8 @@ public void delete() {
8095
// ---- Utilities ----
8196
// ---------------------------------
8297

83-
public PcuGroupDbAssociationsClient dbAssociations() {
84-
return new PcuGroupDbAssociationsClient(token, environment, pcuGroupId);
98+
public PcuGroupDatacenterAssociationsClient datacenterAssociations() {
99+
return new PcuGroupDatacenterAssociationsClient(token, environment, pcuGroupId);
85100
}
86101

87102
public String getEndpointPcus() {

astra-sdk-devops/src/main/java/com/dtsx/astra/sdk/pcu/PcuGroupsClient.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.dtsx.astra.sdk.AbstractApiClient;
44
import com.dtsx.astra.sdk.pcu.domain.PcuGroup;
5+
import com.dtsx.astra.sdk.pcu.domain.PcuGroupCreateUpdateRequest;
56
import com.dtsx.astra.sdk.pcu.domain.PcuGroupCreationRequest;
67
import com.dtsx.astra.sdk.pcu.exception.PcuGroupNotFoundException;
78
import com.dtsx.astra.sdk.pcu.exception.PcuGroupsNotFoundException;
@@ -37,7 +38,7 @@ public String getServiceName() {
3738
// ---------------------------------
3839

3940
public PcuGroup create(PcuGroupCreationRequest req) {
40-
val res = POST(getEndpointPcus(), JsonUtils.marshall(req), getOperationName("create"));
41+
val res = POST(getEndpointPcus(), JsonUtils.marshall(req.withDefaultsAndValidations()), getOperationName("create"));
4142

4243
if (HttpURLConnection.HTTP_CREATED != res.getCode()) {
4344
throw new IllegalStateException("Expected code 201 to create db but got " + res.getCode() + "body=" + res.getBody());
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.dtsx.astra.sdk.pcu.domain;
2+
3+
import com.dtsx.astra.sdk.db.domain.CloudProviderType;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
import lombok.ToString;
7+
import lombok.experimental.SuperBuilder;
8+
9+
@Getter
10+
@Setter
11+
@ToString
12+
@SuperBuilder
13+
public sealed abstract class PcuGroupCreateUpdateRequest permits PcuGroupCreationRequest, PcuGroupUpdateRequest {
14+
protected String title;
15+
protected String description;
16+
17+
protected CloudProviderType cloudProvider;
18+
protected String region;
19+
20+
protected Integer min; // Integers so they're nullable
21+
protected Integer max;
22+
protected Integer reserved;
23+
24+
protected void validate() {
25+
if (title == null || title.isBlank()) {
26+
throw new IllegalArgumentException("PCU group title is required");
27+
}
28+
29+
if (cloudProvider == null) {
30+
throw new IllegalArgumentException("PCU group cloud provider is required");
31+
}
32+
33+
if (region == null || region.isBlank()) {
34+
throw new IllegalArgumentException("PCU group region is required");
35+
}
36+
37+
if (min == null || min < 1) {
38+
throw new IllegalArgumentException("PCU group min must be >= 1");
39+
}
40+
41+
if (max == null || max < min) {
42+
throw new IllegalArgumentException("PCU group max must be >= min");
43+
}
44+
45+
if (reserved != null && (reserved < 0 || reserved > min)) {
46+
throw new IllegalArgumentException("PCU group reserved must be non-negative and <= min");
47+
}
48+
}
49+
}

astra-sdk-devops/src/main/java/com/dtsx/astra/sdk/pcu/domain/PcuGroupCreationBuilder.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,26 @@
11
package com.dtsx.astra.sdk.pcu.domain;
22

3-
import com.dtsx.astra.sdk.db.domain.CloudProviderType;
4-
import lombok.Value;
3+
import lombok.experimental.SuperBuilder;
54

6-
@Value
7-
public class PcuGroupCreationRequest {
8-
String title;
9-
String description;
5+
@SuperBuilder
6+
public final class PcuGroupCreationRequest extends PcuGroupCreateUpdateRequest {
7+
private String instanceType;
8+
private PcuProvisionType provisionType;
109

11-
CloudProviderType cloudProvider;
12-
String region;
10+
public PcuGroupCreationRequest withDefaultsAndValidations() {
11+
if (this.provisionType == null) {
12+
this.provisionType = PcuProvisionType.SHARED;
13+
}
1314

14-
String instanceType;
15-
PcuProvisionType provisionType;
15+
// TODO do we really want a default for this? (since pcu instance types are changing)
16+
if (this.instanceType == null || this.instanceType.isBlank()) {
17+
this.instanceType = "standard";
18+
}
1619

17-
int min;
18-
int max;
19-
int reserved;
20+
if (this.reserved == null) {
21+
this.reserved = 0;
22+
}
2023

21-
public PcuGroupCreationRequest(PcuGroupCreationBuilder builder) {
22-
this.title = builder.title;
23-
this.description = builder.description;
24-
this.cloudProvider = builder.cloudProvider;
25-
this.region = builder.cloudRegion;
26-
this.instanceType = builder.instanceType;
27-
this.provisionType = builder.provisionType;
28-
this.min = builder.minCapacity;
29-
this.max = builder.maxCapacity;
30-
this.reserved = builder.reservedCapacity;
31-
}
32-
33-
public static PcuGroupCreationBuilder builder() {
34-
return new PcuGroupCreationBuilder();
24+
return this;
3525
}
3626
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.dtsx.astra.sdk.pcu.domain;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Setter;
5+
import lombok.With;
6+
import lombok.experimental.Accessors;
7+
import lombok.experimental.SuperBuilder;
8+
import lombok.val;
9+
10+
@SuperBuilder
11+
public non-sealed class PcuGroupUpdateRequest extends PcuGroupCreateUpdateRequest {
12+
// TODO once the bug that causes fields to potentially be lost during partial updates is fixed, we can remove the base parameter here
13+
public PcuGroupCreateUpdateRequest withDefaultsAndValidations(PcuGroup base) {
14+
val internalRep = new InternalRep(
15+
builder()
16+
.title(this.title == null ? base.getTitle() : this.title)
17+
.description(this.description == null ? base.getDescription() : this.description)
18+
.cloudProvider(this.cloudProvider == null ? base.getCloudProvider() : this.cloudProvider)
19+
.region(this.region == null ? base.getRegion() : this.region)
20+
.min(this.min == null ? base.getMin() : this.min)
21+
.max(this.max == null ? base.getMax() : this.max)
22+
.reserved(this.reserved == null ? base.getReserved() : this.reserved)
23+
);
24+
25+
internalRep.validate();
26+
27+
return internalRep
28+
.setPcuGroupUUID(base.getUuid())
29+
.setInstanceType(base.getInstanceType())
30+
.setProvisionType(base.getProvisionType());
31+
}
32+
33+
@Setter
34+
@Accessors(chain = true)
35+
public static class InternalRep extends PcuGroupUpdateRequest {
36+
private String pcuGroupUUID;
37+
private String instanceType;
38+
private PcuProvisionType provisionType;
39+
40+
protected InternalRep(PcuGroupUpdateRequestBuilder<?, ?> b) {
41+
super(b);
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)