Skip to content

feat(compute): add compute snapshot schedule create/get/edit/list/delete samples #9742

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
77d892e
Implemented compute_snapshot_schedule_delete and compute_snapshot_sch…
TetyanaYahodska Nov 27, 2024
8a5b2f0
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 1, 2024
9520be3
Fixed test
TetyanaYahodska Dec 1, 2024
dbf5596
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 2, 2024
361f09f
Added compute_snapshot_schedule_get sample, created test
TetyanaYahodska Dec 2, 2024
7df8f9d
Fixed naming
TetyanaYahodska Dec 2, 2024
8973264
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 4, 2024
4f97e7e
Implemented compute_snapshot_schedule_edit, created test
TetyanaYahodska Dec 4, 2024
569c77a
Fixed naming
TetyanaYahodska Dec 4, 2024
cddbab4
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 6, 2024
8f5fd16
Implemented compute_snapshot_schedule_list sample, created test
TetyanaYahodska Dec 6, 2024
91669ab
Cleaned resources
TetyanaYahodska Dec 6, 2024
84fc307
Cleaned resources
TetyanaYahodska Dec 6, 2024
aee7e52
Cleaned resources
TetyanaYahodska Dec 6, 2024
3fa52d8
Cleaned resources
TetyanaYahodska Dec 6, 2024
a0558f5
Fixed test
TetyanaYahodska Dec 6, 2024
195d67f
Added comment
TetyanaYahodska Dec 9, 2024
26ce8b8
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 9, 2024
6e2f4f3
Fixed tests
TetyanaYahodska Dec 9, 2024
7df09a5
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 18, 2024
d9657a0
Fixed code
TetyanaYahodska Dec 18, 2024
4e633e8
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 19, 2024
a34e97f
Merge branch 'main' into compute_snapshot_schedule_create
TetyanaYahodska Dec 27, 2024
1f80e08
Fixed code as requested in the comments
TetyanaYahodska Dec 27, 2024
9e093f4
Fixed code as requested in the comments
TetyanaYahodska Dec 30, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package compute.snapshotschedule;

// [START compute_snapshot_schedule_create]
import com.google.cloud.compute.v1.InsertResourcePolicyRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Operation.Status;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePolicy;
import com.google.cloud.compute.v1.ResourcePolicyHourlyCycle;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy.OnSourceDiskDelete;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySchedule;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySnapshotProperties;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateSnapshotSchedule {
public static void main(String[] args)
throws IOException, ExecutionException, InterruptedException, TimeoutException {
// TODO(developer): Replace these variables before running the sample.
// Project ID or project number of the Cloud project you want to use.
String projectId = "YOUR_PROJECT_ID";
// Name of the region in which you want to create the snapshot schedule.
String region = "us-central1";
// Name of the snapshot schedule you want to create.
String snapshotScheduleName = "YOUR_SCHEDULE_NAME";
// Description of the snapshot schedule.
String scheduleDescription = "YOUR_SCHEDULE_DESCRIPTION";
// Maximum number of days to retain snapshots.
int maxRetentionDays = 10;
// Storage location for the snapshots.
// More about storage locations:
// https://cloud.google.com/compute/docs/disks/snapshots?authuser=0#selecting_a_storage_location
String storageLocation = "US";

createSnapshotSchedule(projectId, region, snapshotScheduleName, scheduleDescription,
maxRetentionDays, storageLocation);
}

// Creates a snapshot schedule policy.
public static Status createSnapshotSchedule(String projectId, String region,
String snapshotScheduleName, String scheduleDescription, int maxRetentionDays,
String storageLocation)
throws IOException, ExecutionException, InterruptedException, TimeoutException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
int snapshotInterval = 10; // Create a snapshot every 10 hours
String startTime = "08:00"; // Define the hourly schedule

ResourcePolicyHourlyCycle hourlyCycle = ResourcePolicyHourlyCycle.newBuilder()
.setHoursInCycle(snapshotInterval)
.setStartTime(startTime)
.build();

ResourcePolicySnapshotSchedulePolicyRetentionPolicy retentionPolicy =
ResourcePolicySnapshotSchedulePolicyRetentionPolicy.newBuilder()
.setMaxRetentionDays(maxRetentionDays)
.setOnSourceDiskDelete(OnSourceDiskDelete.KEEP_AUTO_SNAPSHOTS.toString())
.build();

ResourcePolicySnapshotSchedulePolicySnapshotProperties snapshotProperties =
ResourcePolicySnapshotSchedulePolicySnapshotProperties.newBuilder()
.addStorageLocations(storageLocation)
.build();

ResourcePolicySnapshotSchedulePolicy snapshotSchedulePolicy =
ResourcePolicySnapshotSchedulePolicy.newBuilder()
.setRetentionPolicy(retentionPolicy)
.setSchedule(ResourcePolicySnapshotSchedulePolicySchedule.newBuilder()
.setHourlySchedule(hourlyCycle)
.build())
.setSnapshotProperties(snapshotProperties)
.build();

ResourcePolicy resourcePolicy = ResourcePolicy.newBuilder()
.setName(snapshotScheduleName)
.setDescription(scheduleDescription)
.setSnapshotSchedulePolicy(snapshotSchedulePolicy)
.build();
InsertResourcePolicyRequest request = InsertResourcePolicyRequest.newBuilder()
.setProject(projectId)
.setRegion(region)
.setResourcePolicyResource(resourcePolicy)
.build();

Operation response = resourcePoliciesClient.insertAsync(request)
.get(3, TimeUnit.MINUTES);

if (response.hasError()) {
throw new Error("Snapshot schedule creation failed! " + response.getError());
}
return response.getStatus();
}
}
}
// [END compute_snapshot_schedule_create]
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package compute.snapshotschedule;

// [START compute_snapshot_schedule_delete]
import com.google.cloud.compute.v1.DeleteResourcePolicyRequest;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Operation.Status;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteSnapshotSchedule {
public static void main(String[] args)
throws IOException, ExecutionException, InterruptedException, TimeoutException {
// TODO(developer): Replace these variables before running the sample.
// Project ID or project number of the Cloud project you want to use.
String projectId = "YOUR_PROJECT_ID";
// Name of the region where your snapshot schedule is located.
String region = "us-central1";
// Name of the snapshot schedule you want to delete.
String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

deleteSnapshotSchedule(projectId, region, snapshotScheduleName);
}

// Deletes a snapshot schedule policy.
public static Status deleteSnapshotSchedule(
String projectId, String region, String snapshotScheduleName)
throws IOException, ExecutionException, InterruptedException, TimeoutException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
DeleteResourcePolicyRequest request = DeleteResourcePolicyRequest.newBuilder()
.setProject(projectId)
.setRegion(region)
.setResourcePolicy(snapshotScheduleName)
.build();
Operation response = resourcePoliciesClient.deleteAsync(request).get(3, TimeUnit.MINUTES);

if (response.hasError()) {
throw new Error("Snapshot schedule deletion failed! " + response.getError());
}
return response.getStatus();
}
}
}
// [END compute_snapshot_schedule_delete]
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package compute.snapshotschedule;

// [START compute_snapshot_schedule_edit]
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.Operation.Status;
import com.google.cloud.compute.v1.PatchResourcePolicyRequest;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicyRetentionPolicy.OnSourceDiskDelete;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySchedule;
import com.google.cloud.compute.v1.ResourcePolicySnapshotSchedulePolicySnapshotProperties;
import com.google.cloud.compute.v1.ResourcePolicyWeeklyCycle;
import com.google.cloud.compute.v1.ResourcePolicyWeeklyCycleDayOfWeek;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class EditSnapshotSchedule {

public static void main(String[] args) throws Exception {
// TODO(developer): Replace these variables before running the sample.
// Project ID or project number of the Cloud project you want to use.
String projectId = "YOUR_PROJECT_ID";
// Name of the region where your snapshot schedule is located.
String region = "us-central1";
// Name of the snapshot schedule you want to update.
String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

editSnapshotSchedule(projectId, region, snapshotScheduleName);
}

// Edits a snapshot schedule.
public static Status editSnapshotSchedule(
String projectId, String region, String snapshotScheduleName)
throws IOException, InterruptedException, ExecutionException, TimeoutException {

// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
Map<String, String> snapshotLabels = new HashMap<>();
snapshotLabels.put("key", "value");

ResourcePolicySnapshotSchedulePolicySnapshotProperties.Builder snapshotProperties =
ResourcePolicySnapshotSchedulePolicySnapshotProperties.newBuilder();
snapshotProperties.putAllLabels(snapshotLabels);

ResourcePolicyWeeklyCycleDayOfWeek dayOfWeek = ResourcePolicyWeeklyCycleDayOfWeek.newBuilder()
.setDay("Tuesday")
.setStartTime("09:00")
.build();
ResourcePolicyWeeklyCycle weeklySchedule = ResourcePolicyWeeklyCycle.newBuilder()
.addDayOfWeeks(dayOfWeek)
.build();

int maxRetentionDays = 3;

ResourcePolicySnapshotSchedulePolicyRetentionPolicy.Builder retentionPolicy =
ResourcePolicySnapshotSchedulePolicyRetentionPolicy.newBuilder();
retentionPolicy.setOnSourceDiskDelete(OnSourceDiskDelete.APPLY_RETENTION_POLICY.toString());
retentionPolicy.setMaxRetentionDays(maxRetentionDays);

String description = "Updated description";

ResourcePolicy updatedSchedule = ResourcePolicy.newBuilder()
.setName(snapshotScheduleName)
.setDescription(description)
.setSnapshotSchedulePolicy(
ResourcePolicySnapshotSchedulePolicy.newBuilder()
.setSchedule(ResourcePolicySnapshotSchedulePolicySchedule.newBuilder()
.setWeeklySchedule(weeklySchedule))
.setSnapshotProperties(snapshotProperties)
.setRetentionPolicy(retentionPolicy.build())
.build())
.build();

PatchResourcePolicyRequest request = PatchResourcePolicyRequest.newBuilder()
.setProject(projectId)
.setRegion(region)
.setResourcePolicy(snapshotScheduleName)
.setResourcePolicyResource(updatedSchedule)
.build();

Operation response = resourcePoliciesClient.patchAsync(request).get(3, TimeUnit.MINUTES);

if (response.hasError()) {
throw new Error("Failed to update snapshot schedule! " + response.getError());
}
return response.getStatus();
}
}
}
// [END compute_snapshot_schedule_edit]
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package compute.snapshotschedule;

// [START compute_snapshot_schedule_get]
import com.google.cloud.compute.v1.GetResourcePolicyRequest;
import com.google.cloud.compute.v1.ResourcePoliciesClient;
import com.google.cloud.compute.v1.ResourcePolicy;
import java.io.IOException;

public class GetSnapshotSchedule {

public static void main(String[] args) throws IOException {
// TODO(developer): Replace these variables before running the sample.
// Project ID or project number of the Cloud project you want to use.
String projectId = "YOUR_PROJECT_ID";
// Name of the region in which your snapshot schedule is located.
String region = "us-central1";
// Name of your snapshot schedule.
String snapshotScheduleName = "YOUR_SCHEDULE_NAME";

getSnapshotSchedule(projectId, region, snapshotScheduleName);
}

// Retrieves the details of a snapshot schedule.
public static ResourcePolicy getSnapshotSchedule(
String projectId, String region, String snapshotScheduleName) throws IOException {
// Initialize client that will be used to send requests. This client only needs to be created
// once, and can be reused for multiple requests.
try (ResourcePoliciesClient resourcePoliciesClient = ResourcePoliciesClient.create()) {
GetResourcePolicyRequest request = GetResourcePolicyRequest.newBuilder()
.setProject(projectId)
.setRegion(region)
.setResourcePolicy(snapshotScheduleName)
.build();
ResourcePolicy resourcePolicy = resourcePoliciesClient.get(request);
System.out.println(resourcePolicy);

return resourcePolicy;
}
}
}
// [END compute_snapshot_schedule_get]
Loading
Loading