blob: 06656bb3b69fe5e5e84a91f819a26d2b93a8c3f7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.jclouds.googlecomputeengine.domain;
import java.net.URI;
import java.util.List;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class AttachDisk {
@AutoValue
public abstract static class InitializeParams {
/** Override the default naming convention. */
@Nullable public abstract String diskName();
/** Set to use a size larger than the {@link #sourceImage()}. You need to repartition when set. */
@Nullable public abstract Long diskSizeGb();
/** The {@link org.jclouds.googlecomputeengine.domain.Image#selfLink() source image}. */
@Nullable public abstract URI sourceImage();
@Nullable public abstract URI diskType();
static InitializeParams create(URI sourceImage) {
return create(null, null, sourceImage, null);
}
static InitializeParams create(URI sourceImage, URI diskType) {
return create(null, null, sourceImage, diskType);
}
@SerializedNames({ "diskName", "diskSizeGb", "sourceImage", "diskType" })
public static InitializeParams create(String diskName, Long diskSizeGb, URI sourceImage, URI diskType) {
return new AutoValue_AttachDisk_InitializeParams(diskName, diskSizeGb, sourceImage, diskType);
}
InitializeParams() {
}
}
public enum Type {
PERSISTENT,
SCRATCH;
}
public enum Mode {
READ_WRITE,
READ_ONLY;
}
public enum DiskInterface {
NVME,
SCSI;
}
public abstract Type type();
@Nullable public abstract Mode mode();
/** Use an existingBootDisk {@link org.jclouds.googlecomputeengine.domain.Disk#selfLink() boot disk}. */
@Nullable public abstract URI source();
/**
* Must be unique within the instance when specified. This represents a unique
* device name that is reflected into the /dev/ tree of a Linux operating system running within the
* instance. If not specified, a default will be chosen by the system.
*/
@Nullable public abstract String deviceName();
/** True if this is a boot disk. VM will use the first partition of the disk for its root filesystem. */
public abstract boolean boot();
/** Set to automatically create a boot disk */
@Nullable public abstract InitializeParams initializeParams();
/** True if this disk will be deleted when the instance is delete. */
public abstract boolean autoDelete();
@Nullable public abstract List<String> licenses();
// Note: this is disks[].interface in the api docs but interface is a Java keyword.
@Nullable public abstract DiskInterface diskInterface();
public static AttachDisk existingBootDisk(URI existingBootDisk) {
return create(Type.PERSISTENT, existingBootDisk, null, true, false);
}
public static AttachDisk newBootDisk(URI sourceImage) {
return create(Type.PERSISTENT, null, InitializeParams.create(sourceImage), true, true);
}
public static AttachDisk newBootDisk(URI sourceImage, URI diskType) {
return create(Type.PERSISTENT, null, InitializeParams.create(sourceImage, diskType), true, true);
}
public static AttachDisk existingDisk(URI existingDisk) {
return create(Type.PERSISTENT, existingDisk, null, false, false);
}
static AttachDisk create(Type type, URI source, InitializeParams initializeParams, boolean boot,
boolean autoDelete) {
return create(type, null, source, null, boot, initializeParams, autoDelete, null, null);
}
@SerializedNames({"type", "mode", "source", "deviceName", "boot", "initializeParams", "autoDelete", "licenses", "interface" })
public static AttachDisk create(Type type, Mode mode, URI source, String deviceName, boolean boot, InitializeParams initializeParams,
boolean autoDelete, List<String> licenses, DiskInterface diskInterface) {
return new AutoValue_AttachDisk(type, mode, source, deviceName, boot, initializeParams, autoDelete, licenses, diskInterface);
}
AttachDisk() {
}
}