Skip to content
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

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

Open
wants to merge 22 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 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
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,141 @@
/*
* 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.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";
// Determines what happens to your snapshots if the source disk is deleted.
String onSourceDiskDelete = "KEEP_AUTO_SNAPSHOTS";

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

// Creates a snapshot schedule policy.
public static Status createSnapshotSchedule(String projectId, String region,
String snapshotScheduleName, String scheduleDescription, int maxRetentionDays,
String storageLocation, String onSourceDiskDelete)
throws IOException, ExecutionException, InterruptedException, TimeoutException {
String startTime = "08:00";
ResourcePolicySnapshotSchedulePolicySnapshotProperties snapshotProperties =
ResourcePolicySnapshotSchedulePolicySnapshotProperties.newBuilder()
.addStorageLocations(storageLocation)
.build();

// Define the hourly schedule:
int snapshotInterval = 10; // Create a snapshot every 10 hours
ResourcePolicyHourlyCycle hourlyCycle = ResourcePolicyHourlyCycle.newBuilder()
.setHoursInCycle(snapshotInterval)
.setStartTime(startTime)
.build();

// Define the daily schedule.
// ResourcePolicyDailyCycle dailySchedule =
// ResourcePolicyDailyCycle.newBuilder()
// .setDaysInCycle(1) // Every day
// .setStartTime(startTime)
// .build();

// Define the weekly schedule.
// List<ResourcePolicyWeeklyCycleDayOfWeek> dayOfWeeks = new ArrayList<>();
// ResourcePolicyWeeklyCycleDayOfWeek tuesdaySchedule =
// ResourcePolicyWeeklyCycleDayOfWeek.newBuilder()
// .setDay(ResourcePolicyWeeklyCycleDayOfWeek.Day.TUESDAY.toString())
// .setStartTime(startTime)
// .build();
// dayOfWeeks.add(tuesdaySchedule);
//
// ResourcePolicyWeeklyCycle weeklyCycle = ResourcePolicyWeeklyCycle.newBuilder()
// .addAllDayOfWeeks(dayOfWeeks)
// .build();

ResourcePolicySnapshotSchedulePolicyRetentionPolicy retentionPolicy =
ResourcePolicySnapshotSchedulePolicyRetentionPolicy.newBuilder()
.setMaxRetentionDays(maxRetentionDays)
.setOnSourceDiskDelete(onSourceDiskDelete)
.build();

ResourcePolicySnapshotSchedulePolicy snapshotSchedulePolicy =
ResourcePolicySnapshotSchedulePolicy.newBuilder()
.setRetentionPolicy(retentionPolicy)
.setSchedule(ResourcePolicySnapshotSchedulePolicySchedule.newBuilder()
// You can set only one of the following options:
.setHourlySchedule(hourlyCycle) //Set Hourly Schedule
// .setDailySchedule(dailySchedule) //Set Daily Schedule
// .setWeeklySchedule(weeklyCycle) // Set Weekly Schedule
.build())
.setSnapshotProperties(snapshotProperties)
.build();

ResourcePolicy resourcePolicy = ResourcePolicy.newBuilder()
.setName(snapshotScheduleName)
.setDescription(scheduleDescription)
.setSnapshotSchedulePolicy(snapshotSchedulePolicy)
.build();

// 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()) {
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,114 @@
/*
* 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.ResourcePolicySnapshotSchedulePolicyRetentionPolicy;
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);
}

public static Status editSnapshotSchedule(
String projectId, String region, String snapshotScheduleName)
throws IOException, InterruptedException, ExecutionException, TimeoutException {
String description = "Updated description11";
Map<String, String> snapshotLabels = new HashMap<>();
snapshotLabels.put("key", "value");
ResourcePolicyWeeklyCycleDayOfWeek dayOfWeek = ResourcePolicyWeeklyCycleDayOfWeek.newBuilder()
.setDay("Tuesday")
.setStartTime("09:00")
.build();
ResourcePolicyWeeklyCycle weeklySchedule = ResourcePolicyWeeklyCycle.newBuilder()
.addDayOfWeeks(dayOfWeek)
.build();
String onSourceDiskDelete = "apply-retention-policy";
int maxRetentionDays = 3;

// 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()) {
ResourcePolicy existingSchedule = resourcePoliciesClient
.get(projectId, region, snapshotScheduleName);

ResourcePolicySnapshotSchedulePolicySnapshotProperties.Builder snapshotProperties =
existingSchedule.getSnapshotSchedulePolicy().getSnapshotProperties().toBuilder();
snapshotProperties.putAllLabels(snapshotLabels);

ResourcePolicySnapshotSchedulePolicySchedule.Builder scheduler =
existingSchedule.getSnapshotSchedulePolicy().getSchedule().toBuilder();
scheduler.clearDailySchedule().clearHourlySchedule();
scheduler.setWeeklySchedule(weeklySchedule);

ResourcePolicySnapshotSchedulePolicyRetentionPolicy.Builder retentionPolicy =
existingSchedule.getSnapshotSchedulePolicy().getRetentionPolicy().toBuilder();
retentionPolicy.setOnSourceDiskDelete(onSourceDiskDelete);
retentionPolicy.setMaxRetentionDays(maxRetentionDays);

ResourcePolicy updatedSchedule = ResourcePolicy.newBuilder()
.setName(existingSchedule.getName())
.setDescription(description)
.setSnapshotSchedulePolicy(
existingSchedule.getSnapshotSchedulePolicy().toBuilder()
.setSchedule(scheduler)
.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,55 @@
/*
* 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();

return resourcePoliciesClient.get(request);
}
}
}
// [END compute_snapshot_schedule_get]
Loading
Loading