Skip to content

Commit f12cf62

Browse files
Implemented compute_consistency_group_add_disk sample, created test
1 parent f6520d8 commit f12cf62

File tree

2 files changed

+100
-44
lines changed

2 files changed

+100
-44
lines changed
Lines changed: 65 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,28 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
117
package compute.disks.consistencygroup;
218

319
// [START compute_consistency_group_add_disk]
20+
import com.google.cloud.compute.v1.AddResourcePoliciesRegionDiskRequest;
421
import com.google.cloud.compute.v1.Disk;
5-
import com.google.cloud.compute.v1.DisksAddResourcePoliciesRequest;
6-
import com.google.cloud.compute.v1.DisksClient;
22+
// If your disk has zonal location uncomment these lines
23+
//import com.google.cloud.compute.v1.AddResourcePoliciesDiskRequest;
24+
//import com.google.cloud.compute.v1.DisksAddResourcePoliciesRequest;
25+
//import com.google.cloud.compute.v1.DisksClient;
726
import com.google.cloud.compute.v1.Operation;
827
import com.google.cloud.compute.v1.RegionDisksAddResourcePoliciesRequest;
928
import com.google.cloud.compute.v1.RegionDisksClient;
@@ -16,54 +35,59 @@ public class AddDiskToConsistencyGroup {
1635
public static void main(String[] args)
1736
throws IOException, ExecutionException, InterruptedException {
1837
// TODO(developer): Replace these variables before running the sample.
19-
String project = "tyaho-softserve-project";//"YOUR_PROJECT_ID";
20-
String locationFlag = "zone";
21-
String location = "us-central1-a";
22-
String diskName = "disk-name";//"DISK_NAME";
23-
String consistencyGroup = "my-group";//"CONSISTENCY_GROUP";
24-
25-
addResourcePoliciesToDisk(project, locationFlag, location, diskName, consistencyGroup);
38+
// The project that contains the disk.
39+
String project = "YOUR_PROJECT_ID";
40+
// The zone or region of the disk.
41+
String location = "us-central1";
42+
// The name of the disk.
43+
String diskName = "DISK_NAME";
44+
// The name of the consistency group.
45+
String consistencyGroupName = "CONSISTENCY_GROUP";
46+
// The region of the consistency group.
47+
String consistencyGroupLocation = "us-central1";
48+
addDiskToConsistencyGroup(
49+
project, location, diskName, consistencyGroupName, consistencyGroupLocation);
2650
}
2751

28-
// Adds a resource policy to a disk.
29-
public static Disk addResourcePoliciesToDisk(
30-
String project, String locationFlag, String location, String diskName,
31-
String consistencyGroup)
52+
// Adds a disk to a Consistent Group.
53+
public static Disk addDiskToConsistencyGroup(
54+
String project, String location, String diskName,
55+
String consistencyGroupName, String consistencyGroupLocation)
3256
throws IOException, ExecutionException, InterruptedException {
3357
String consistencyGroupUrl = String.format(
3458
"https://www.googleapis.com/compute/v1/projects/%s/regions/%s/resourcePolicies/%s",
35-
project, location, consistencyGroup);
36-
if (locationFlag.equals("zone")) {
37-
try (DisksClient disksClient = DisksClient.create()) {
38-
DisksAddResourcePoliciesRequest disksRequest =
39-
DisksAddResourcePoliciesRequest.newBuilder()
40-
.addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
41-
.build();
59+
project, consistencyGroupLocation, consistencyGroupName);
60+
// If your disk has zonal location uncomment these lines
61+
// try (DisksClient disksClient = DisksClient.create()) {
62+
// AddResourcePoliciesDiskRequest request =
63+
// AddResourcePoliciesDiskRequest.newBuilder()
64+
// .setDisk(diskName)
65+
// .setDisksAddResourcePoliciesRequestResource(
66+
// DisksAddResourcePoliciesRequest.newBuilder()
67+
// .addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
68+
// .build())
69+
// .setProject(project)
70+
// .setZone(location)
71+
// .build();
4272

43-
Operation response = disksClient.addResourcePoliciesAsync(
44-
project, location, diskName,disksRequest).get();
45-
if (response.hasError()) {
46-
return null;
47-
}
48-
return disksClient.get(project, location, diskName);
49-
}
50-
} else if (locationFlag.equals("region")) {
51-
try (RegionDisksClient regionDisksClient = RegionDisksClient.create()) {
52-
RegionDisksAddResourcePoliciesRequest disksRequest =
53-
RegionDisksAddResourcePoliciesRequest.newBuilder()
73+
try (RegionDisksClient disksClient = RegionDisksClient.create()) {
74+
AddResourcePoliciesRegionDiskRequest disksRequest =
75+
AddResourcePoliciesRegionDiskRequest.newBuilder()
76+
.setDisk(diskName)
77+
.setRegion(location)
78+
.setProject(project)
79+
.setRegionDisksAddResourcePoliciesRequestResource(
80+
RegionDisksAddResourcePoliciesRequest.newBuilder()
5481
.addAllResourcePolicies(Arrays.asList(consistencyGroupUrl))
55-
.build();
56-
Operation response = regionDisksClient.addResourcePoliciesAsync(
57-
project, location, diskName,disksRequest).get();
58-
if (response.hasError()) {
59-
return null;
60-
}
61-
return regionDisksClient.get(project, location, diskName);
82+
.build())
83+
.build();
84+
85+
Operation response = disksClient.addResourcePoliciesAsync(disksRequest).get();
86+
if (response.hasError()) {
87+
return null;
6288
}
63-
} else {
64-
System.out.println("Invalid location flag. Use 'zone' or 'region'.");
89+
return disksClient.get(project, location, diskName);
6590
}
66-
return null;
6791
}
6892
}
6993
// [END compute_consistency_group_add_disk]

compute/cloud-client/src/test/java/compute/disks/ConsistencyGroupIT.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,38 @@
2020
import static com.google.common.truth.Truth.assertWithMessage;
2121
import static org.junit.Assert.assertNotNull;
2222

23+
import com.google.cloud.compute.v1.Disk;
24+
import compute.disks.consistencygroup.AddDiskToConsistencyGroup;
2325
import compute.disks.consistencygroup.CreateDiskConsistencyGroup;
2426
import compute.disks.consistencygroup.DeleteDiskConsistencyGroup;
2527
import java.io.IOException;
28+
import java.util.Arrays;
29+
import java.util.List;
30+
import java.util.Optional;
2631
import java.util.UUID;
2732
import java.util.concurrent.ExecutionException;
2833
import java.util.concurrent.TimeUnit;
34+
import java.util.concurrent.TimeoutException;
2935
import org.junit.jupiter.api.AfterAll;
3036
import org.junit.jupiter.api.BeforeAll;
37+
import org.junit.jupiter.api.MethodOrderer;
38+
import org.junit.jupiter.api.Order;
3139
import org.junit.jupiter.api.Test;
40+
import org.junit.jupiter.api.TestMethodOrder;
3241
import org.junit.jupiter.api.Timeout;
3342
import org.junit.runner.RunWith;
3443
import org.junit.runners.JUnit4;
3544

3645
@RunWith(JUnit4.class)
3746
@Timeout(value = 3, unit = TimeUnit.MINUTES)
47+
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
3848
public class ConsistencyGroupIT {
3949
private static final String PROJECT_ID = System.getenv("GOOGLE_CLOUD_PROJECT");
4050
private static final String REGION = "us-central1";
41-
private static final String CONSISTENCY_GROUP_NAME =
42-
"test-consistency-group-" + UUID.randomUUID();
51+
static String randomUUID = UUID.randomUUID().toString().split("-")[0];
52+
private static final String CONSISTENCY_GROUP_NAME = "test-consistency-group-" + randomUUID;
53+
private static final String DISK_NAME = "test-disk-for-consistency-" + randomUUID;
54+
private static final String DISK_TYPE = String.format("regions/%s/diskTypes/pd-ssd", REGION);
4355

4456
// Check if the required environment variables are set.
4557
public static void requireEnvVar(String envVarName) {
@@ -50,17 +62,25 @@ public static void requireEnvVar(String envVarName) {
5062
@BeforeAll
5163
public static void setUp() throws Exception {
5264
requireEnvVar("GOOGLE_CLOUD_PROJECT");
65+
List<String> replicaZones = Arrays.asList(
66+
String.format("projects/%s/zones/%s-a", PROJECT_ID, REGION),
67+
String.format("projects/%s/zones/%s-b", PROJECT_ID, REGION));
68+
69+
RegionalCreateFromSource.createRegionalDisk(PROJECT_ID, REGION, replicaZones,
70+
DISK_NAME, DISK_TYPE, 10, Optional.empty(), Optional.empty());
5371
}
5472

5573
@AfterAll
5674
public static void cleanUp()
57-
throws IOException, ExecutionException, InterruptedException {
75+
throws IOException, ExecutionException, InterruptedException, TimeoutException {
5876
// Delete created consistency group
77+
RegionalDelete.deleteRegionalDisk(PROJECT_ID, REGION, DISK_NAME);
5978
DeleteDiskConsistencyGroup.deleteDiskConsistencyGroup(
6079
PROJECT_ID, REGION, CONSISTENCY_GROUP_NAME);
6180
}
6281

6382
@Test
83+
@Order(1)
6484
public void testCreateDiskConsistencyGroupResourcePolicy()
6585
throws IOException, ExecutionException, InterruptedException {
6686
String consistencyGroupLink = CreateDiskConsistencyGroup.createDiskConsistencyGroup(
@@ -70,4 +90,16 @@ public void testCreateDiskConsistencyGroupResourcePolicy()
7090
assertNotNull(consistencyGroupLink);
7191
assertThat(consistencyGroupLink.contains(CONSISTENCY_GROUP_NAME));
7292
}
93+
94+
@Test
95+
@Order(2)
96+
public void testAddRegionalDiskToConsistencyGroup()
97+
throws IOException, ExecutionException, InterruptedException {
98+
Disk disk = AddDiskToConsistencyGroup.addDiskToConsistencyGroup(
99+
PROJECT_ID, REGION, DISK_NAME, CONSISTENCY_GROUP_NAME, REGION);
100+
101+
// Verify that the disk was added to the consistency group
102+
assertNotNull(disk);
103+
assertThat(disk.getResourcePoliciesList().get(0).contains(CONSISTENCY_GROUP_NAME));
104+
}
73105
}

0 commit comments

Comments
 (0)