in compute/cloud-client/src/main/java/compute/disks/CreateSnapshot.java [69:132]
public static void createSnapshot(String projectId, String diskName, String snapshotName,
String zone, String region, String location, String diskProjectId)
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. After completing all of your requests, call
// the `snapshotsClient.close()` method on the client to safely
// clean up any remaining background resources.
try (SnapshotsClient snapshotsClient = SnapshotsClient.create()) {
if (zone.isEmpty() && region.isEmpty()) {
throw new Error("You need to specify 'zone' or 'region' for this function to work");
}
if (!zone.isEmpty() && !region.isEmpty()) {
throw new Error("You can't set both 'zone' and 'region' parameters");
}
// If Disk's project id is not specified, then the projectId parameter will be used.
if (diskProjectId.isEmpty()) {
diskProjectId = projectId;
}
// If zone is not empty, use the DisksClient to create a disk.
// Else, use the RegionDisksClient.
Disk disk;
if (!zone.isEmpty()) {
DisksClient disksClient = DisksClient.create();
disk = disksClient.get(projectId, zone, diskName);
} else {
RegionDisksClient regionDisksClient = RegionDisksClient.create();
disk = regionDisksClient.get(diskProjectId, region, diskName);
}
// Set the snapshot properties.
Snapshot snapshotResource;
if (!location.isEmpty()) {
snapshotResource = Snapshot.newBuilder()
.setName(snapshotName)
.setSourceDisk(disk.getSelfLink())
.addStorageLocations(location)
.build();
} else {
snapshotResource = Snapshot.newBuilder()
.setName(snapshotName)
.setSourceDisk(disk.getSelfLink())
.build();
}
// Wait for the operation to complete.
Operation operation = snapshotsClient.insertAsync(projectId, snapshotResource)
.get(3, TimeUnit.MINUTES);
if (operation.hasError()) {
System.out.println("Snapshot creation failed!" + operation);
return;
}
// Retrieve the created snapshot.
Snapshot snapshot = snapshotsClient.get(projectId, snapshotName);
System.out.printf("Snapshot created: %s", snapshot.getName());
}
}