Skip to content

Commit b6ba754

Browse files
feat(compute): add compute consistency group disks list (#9687)
* Implemented compute_consistency_group_create and compute_consistency_group_delete samples, created test * Implemented compute_consistency_group_add_disk sample * Implemented compute_consistency_group_add_disk sample, created test * Fixed naming * Implemented compute_consistency_group_list_disks sample, created test * Fixed code * Fixed code * Fixed code * Cleaned up reservations * Fixed import * Fixed code * Fixed zone * Fixed zone * Fixed test * Fixed code and test * Added check for zonal location and code * Deleted redundant code * Added compute_consistency_group_list_disks_zonal sample, created test * Fixed tests
1 parent 16b0dff commit b6ba754

File tree

4 files changed

+200
-6
lines changed

4 files changed

+200
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
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+
17+
package compute.disks.consistencygroup;
18+
19+
// [START compute_consistency_group_list_disks_regional]
20+
import com.google.cloud.compute.v1.Disk;
21+
import com.google.cloud.compute.v1.ListRegionDisksRequest;
22+
import com.google.cloud.compute.v1.RegionDisksClient;
23+
import java.io.IOException;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.concurrent.ExecutionException;
27+
28+
public class ListRegionalDisksInConsistencyGroup {
29+
public static void main(String[] args)
30+
throws IOException, InterruptedException, ExecutionException {
31+
// TODO(developer): Replace these variables before running the sample.
32+
// Project ID or project number of the Cloud project you want to use.
33+
String project = "YOUR_PROJECT_ID";
34+
// Name of the consistency group.
35+
String consistencyGroupName = "CONSISTENCY_GROUP_ID";
36+
// Region of the disk.
37+
String disksLocation = "us-central1";
38+
// Region of the consistency group.
39+
String consistencyGroupLocation = "us-central1";
40+
41+
listRegionalDisksInConsistencyGroup(
42+
project, consistencyGroupName, consistencyGroupLocation, disksLocation);
43+
}
44+
45+
// Lists disks in a consistency group.
46+
public static List<Disk> listRegionalDisksInConsistencyGroup(String project,
47+
String consistencyGroupName, String consistencyGroupLocation, String disksLocation)
48+
throws IOException {
49+
String filter = String
50+
.format("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/resourcePolicies/%s",
51+
project, consistencyGroupLocation, consistencyGroupName);
52+
List<Disk> disksList = new ArrayList<>();
53+
54+
// Initialize client that will be used to send requests. This client only needs to be created
55+
// once, and can be reused for multiple requests.
56+
try (RegionDisksClient disksClient = RegionDisksClient.create()) {
57+
ListRegionDisksRequest request =
58+
ListRegionDisksRequest.newBuilder()
59+
.setProject(project)
60+
.setRegion(disksLocation)
61+
.build();
62+
63+
RegionDisksClient.ListPagedResponse response = disksClient.list(request);
64+
for (Disk disk : response.iterateAll()) {
65+
if (disk.getResourcePoliciesList().contains(filter)) {
66+
disksList.add(disk);
67+
}
68+
}
69+
}
70+
System.out.println(disksList.size());
71+
return disksList;
72+
}
73+
}
74+
// [END compute_consistency_group_list_disks_regional]
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
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+
17+
package compute.disks.consistencygroup;
18+
19+
// [START compute_consistency_group_list_disks_zonal]
20+
import com.google.cloud.compute.v1.Disk;
21+
import com.google.cloud.compute.v1.DisksClient;
22+
import com.google.cloud.compute.v1.ListDisksRequest;
23+
import java.io.IOException;
24+
import java.util.ArrayList;
25+
import java.util.List;
26+
import java.util.concurrent.ExecutionException;
27+
28+
public class ListZonalDisksInConsistencyGroup {
29+
public static void main(String[] args)
30+
throws IOException, InterruptedException, ExecutionException {
31+
// TODO(developer): Replace these variables before running the sample.
32+
// Project ID or project number of the Cloud project you want to use.
33+
String project = "YOUR_PROJECT_ID";
34+
// Name of the consistency group.
35+
String consistencyGroupName = "CONSISTENCY_GROUP_ID";
36+
// Zone of the disk.
37+
String disksLocation = "us-central1-a";
38+
// Region of the consistency group.
39+
String consistencyGroupLocation = "us-central1";
40+
41+
listZonalDisksInConsistencyGroup(
42+
project, consistencyGroupName, consistencyGroupLocation, disksLocation);
43+
}
44+
45+
// Lists disks in a consistency group.
46+
public static List<Disk> listZonalDisksInConsistencyGroup(String project,
47+
String consistencyGroupName, String consistencyGroupLocation, String disksLocation)
48+
throws IOException {
49+
String filter = String
50+
.format("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/resourcePolicies/%s",
51+
project, consistencyGroupLocation, consistencyGroupName);
52+
List<Disk> disksList = new ArrayList<>();
53+
// Initialize client that will be used to send requests. This client only needs to be created
54+
// once, and can be reused for multiple requests.
55+
try (DisksClient disksClient = DisksClient.create()) {
56+
ListDisksRequest request =
57+
ListDisksRequest.newBuilder()
58+
.setProject(project)
59+
.setZone(disksLocation)
60+
.build();
61+
DisksClient.ListPagedResponse response = disksClient.list(request);
62+
63+
for (Disk disk : response.iterateAll()) {
64+
if (disk.getResourcePoliciesList().contains(filter)) {
65+
disksList.add(disk);
66+
}
67+
}
68+
}
69+
System.out.println(disksList.size());
70+
return disksList;
71+
}
72+
}
73+
// [END compute_consistency_group_list_disks_zonal]

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

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,19 @@
2727

2828
import com.google.api.gax.longrunning.OperationFuture;
2929
import com.google.cloud.compute.v1.AddResourcePoliciesRegionDiskRequest;
30+
import com.google.cloud.compute.v1.DisksClient;
3031
import com.google.cloud.compute.v1.InsertResourcePolicyRequest;
32+
import com.google.cloud.compute.v1.ListDisksRequest;
33+
import com.google.cloud.compute.v1.ListRegionDisksRequest;
3134
import com.google.cloud.compute.v1.Operation;
3235
import com.google.cloud.compute.v1.RegionDisksClient;
3336
import com.google.cloud.compute.v1.RemoveResourcePoliciesRegionDiskRequest;
3437
import com.google.cloud.compute.v1.ResourcePoliciesClient;
3538
import compute.disks.consistencygroup.AddDiskToConsistencyGroup;
3639
import compute.disks.consistencygroup.CreateConsistencyGroup;
3740
import compute.disks.consistencygroup.DeleteConsistencyGroup;
41+
import compute.disks.consistencygroup.ListRegionalDisksInConsistencyGroup;
42+
import compute.disks.consistencygroup.ListZonalDisksInConsistencyGroup;
3843
import compute.disks.consistencygroup.RemoveDiskFromConsistencyGroup;
3944
import java.util.concurrent.TimeUnit;
4045
import org.junit.jupiter.api.Test;
@@ -145,4 +150,46 @@ public void testDeleteConsistencyGroup() throws Exception {
145150
assertEquals(Operation.Status.DONE, status);
146151
}
147152
}
148-
}
153+
154+
@Test
155+
public void testListRegionalDisksInConsistencyGroup() throws Exception {
156+
try (MockedStatic<RegionDisksClient> mockedRegionDisksClient =
157+
mockStatic(RegionDisksClient.class)) {
158+
RegionDisksClient mockClient = mock(RegionDisksClient.class);
159+
RegionDisksClient.ListPagedResponse mockResponse =
160+
mock(RegionDisksClient.ListPagedResponse.class);
161+
162+
mockedRegionDisksClient.when(RegionDisksClient::create).thenReturn(mockClient);
163+
when(mockClient.list(any(ListRegionDisksRequest.class)))
164+
.thenReturn(mockResponse);
165+
166+
ListRegionalDisksInConsistencyGroup.listRegionalDisksInConsistencyGroup(
167+
PROJECT_ID, CONSISTENCY_GROUP_NAME, REGION, REGION);
168+
169+
verify(mockClient, times(1))
170+
.list(any(ListRegionDisksRequest.class));
171+
verify(mockResponse, times(1)).iterateAll();
172+
}
173+
}
174+
175+
@Test
176+
public void testListZonalDisksInConsistencyGroup() throws Exception {
177+
try (MockedStatic<DisksClient> mockedRegionDisksClient =
178+
mockStatic(DisksClient.class)) {
179+
DisksClient mockClient = mock(DisksClient.class);
180+
DisksClient.ListPagedResponse mockResponse =
181+
mock(DisksClient.ListPagedResponse.class);
182+
183+
mockedRegionDisksClient.when(DisksClient::create).thenReturn(mockClient);
184+
when(mockClient.list(any(ListDisksRequest.class)))
185+
.thenReturn(mockResponse);
186+
187+
ListZonalDisksInConsistencyGroup.listZonalDisksInConsistencyGroup(
188+
PROJECT_ID, CONSISTENCY_GROUP_NAME, REGION, REGION);
189+
190+
verify(mockClient, times(1))
191+
.list(any(ListDisksRequest.class));
192+
verify(mockResponse, times(1)).iterateAll();
193+
}
194+
}
195+
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static org.junit.Assert.assertEquals;
2020
import static org.mockito.ArgumentMatchers.any;
2121
import static org.mockito.ArgumentMatchers.anyLong;
22+
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
2223
import static org.mockito.Mockito.mock;
2324
import static org.mockito.Mockito.mockStatic;
2425
import static org.mockito.Mockito.times;
@@ -41,7 +42,6 @@
4142
import org.junit.runner.RunWith;
4243
import org.junit.runners.JUnit4;
4344
import org.mockito.MockedStatic;
44-
import org.mockito.Mockito;
4545

4646
@RunWith(JUnit4.class)
4747
@Timeout(value = 5, unit = TimeUnit.MINUTES)
@@ -71,8 +71,8 @@ public void testCreateHyperdiskStoragePool() throws Exception {
7171
mockStatic(StoragePoolsClient.class)) {
7272
StoragePoolsClient mockClient = mock(StoragePoolsClient.class);
7373
OperationFuture<Operation, Operation> mockFuture =
74-
mock(OperationFuture.class, Mockito.RETURNS_DEEP_STUBS);
75-
Operation operation = mock(Operation.class, Mockito.RETURNS_DEEP_STUBS);
74+
mock(OperationFuture.class, RETURNS_DEEP_STUBS);
75+
Operation operation = mock(Operation.class, RETURNS_DEEP_STUBS);
7676

7777
mockedStoragePoolsClient.when(StoragePoolsClient::create).thenReturn(mockClient);
7878
when(mockClient.insertAsync(any(InsertStoragePoolRequest.class)))
@@ -110,8 +110,8 @@ public void testCreateDiskInStoragePool() throws Exception {
110110
try (MockedStatic<DisksClient> mockedDisksClient = mockStatic(DisksClient.class)) {
111111
DisksClient mockClient = mock(DisksClient.class);
112112
OperationFuture<Operation, Operation> mockFuture =
113-
mock(OperationFuture.class, Mockito.RETURNS_DEEP_STUBS);
114-
Operation operation = mock(Operation.class, Mockito.RETURNS_DEEP_STUBS);
113+
mock(OperationFuture.class, RETURNS_DEEP_STUBS);
114+
Operation operation = mock(Operation.class, RETURNS_DEEP_STUBS);
115115

116116
mockedDisksClient.when(DisksClient::create).thenReturn(mockClient);
117117
when(mockClient.insertAsync(any(InsertDiskRequest.class))).thenReturn(mockFuture);

0 commit comments

Comments
 (0)