// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.notebooks.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.notebooks.inputs.RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs extends com.pulumi.resources.ResourceArgs {

    public static final RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs Empty = new RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs();

    /**
     * (Output)
     * Optional. Specifies whether the disk will be auto-deleted
     * when the instance is deleted (but not when the disk is
     * detached from the instance).
     * 
     */
    @Import(name="autoDelete")
    private @Nullable Output<Boolean> autoDelete;

    /**
     * @return (Output)
     * Optional. Specifies whether the disk will be auto-deleted
     * when the instance is deleted (but not when the disk is
     * detached from the instance).
     * 
     */
    public Optional<Output<Boolean>> autoDelete() {
        return Optional.ofNullable(this.autoDelete);
    }

    /**
     * (Output)
     * Optional. Indicates that this is a boot disk. The virtual
     * machine will use the first partition of the disk for its
     * root filesystem.
     * 
     */
    @Import(name="boot")
    private @Nullable Output<Boolean> boot;

    /**
     * @return (Output)
     * Optional. Indicates that this is a boot disk. The virtual
     * machine will use the first partition of the disk for its
     * root filesystem.
     * 
     */
    public Optional<Output<Boolean>> boot() {
        return Optional.ofNullable(this.boot);
    }

    /**
     * (Output)
     * Optional. Specifies a unique device name of your choice
     * that is reflected into the /dev/disk/by-id/google-* tree
     * of a Linux operating system running within the instance.
     * This name can be used to reference the device for mounting,
     * resizing, and so on, from within the instance.
     * If not specified, the server chooses a default device name
     * to apply to this disk, in the form persistent-disk-x, where
     * x is a number assigned by Google Compute Engine. This field
     * is only applicable for persistent disks.
     * 
     */
    @Import(name="deviceName")
    private @Nullable Output<String> deviceName;

    /**
     * @return (Output)
     * Optional. Specifies a unique device name of your choice
     * that is reflected into the /dev/disk/by-id/google-* tree
     * of a Linux operating system running within the instance.
     * This name can be used to reference the device for mounting,
     * resizing, and so on, from within the instance.
     * If not specified, the server chooses a default device name
     * to apply to this disk, in the form persistent-disk-x, where
     * x is a number assigned by Google Compute Engine. This field
     * is only applicable for persistent disks.
     * 
     */
    public Optional<Output<String>> deviceName() {
        return Optional.ofNullable(this.deviceName);
    }

    /**
     * (Output)
     * Indicates a list of features to enable on the guest operating
     * system. Applicable only for bootable images. To see a list of
     * available features, read `https://cloud.google.com/compute/docs/
     * images/create-delete-deprecate-private-images#guest-os-features`
     * options. ``
     * 
     */
    @Import(name="guestOsFeatures")
    private @Nullable Output<List<String>> guestOsFeatures;

    /**
     * @return (Output)
     * Indicates a list of features to enable on the guest operating
     * system. Applicable only for bootable images. To see a list of
     * available features, read `https://cloud.google.com/compute/docs/
     * images/create-delete-deprecate-private-images#guest-os-features`
     * options. ``
     * 
     */
    public Optional<Output<List<String>>> guestOsFeatures() {
        return Optional.ofNullable(this.guestOsFeatures);
    }

    /**
     * (Output)
     * Output only. A zero-based index to this disk, where 0 is
     * reserved for the boot disk. If you have many disks attached
     * to an instance, each disk would have a unique index number.
     * 
     */
    @Import(name="index")
    private @Nullable Output<Integer> index;

    /**
     * @return (Output)
     * Output only. A zero-based index to this disk, where 0 is
     * reserved for the boot disk. If you have many disks attached
     * to an instance, each disk would have a unique index number.
     * 
     */
    public Optional<Output<Integer>> index() {
        return Optional.ofNullable(this.index);
    }

    /**
     * Input only. Specifies the parameters for a new disk that will
     * be created alongside the new instance. Use initialization
     * parameters to create boot disks or local SSDs attached to the
     * new instance. This property is mutually exclusive with the
     * source property; you can only define one or the other, but not
     * both.
     * Structure is documented below.
     * 
     */
    @Import(name="initializeParams")
    private @Nullable Output<RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs> initializeParams;

    /**
     * @return Input only. Specifies the parameters for a new disk that will
     * be created alongside the new instance. Use initialization
     * parameters to create boot disks or local SSDs attached to the
     * new instance. This property is mutually exclusive with the
     * source property; you can only define one or the other, but not
     * both.
     * Structure is documented below.
     * 
     */
    public Optional<Output<RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs>> initializeParams() {
        return Optional.ofNullable(this.initializeParams);
    }

    /**
     * &#34;Specifies the disk interface to use for attaching this disk,
     * which is either SCSI or NVME. The default is SCSI. Persistent
     * disks must always use SCSI and the request will fail if you attempt
     * to attach a persistent disk in any other format than SCSI. Local SSDs
     * can use either NVME or SCSI. For performance characteristics of SCSI
     * over NVMe, see Local SSD performance. Valid values: * NVME * SCSI&#34;.
     * 
     */
    @Import(name="interface")
    private @Nullable Output<String> interface_;

    /**
     * @return &#34;Specifies the disk interface to use for attaching this disk,
     * which is either SCSI or NVME. The default is SCSI. Persistent
     * disks must always use SCSI and the request will fail if you attempt
     * to attach a persistent disk in any other format than SCSI. Local SSDs
     * can use either NVME or SCSI. For performance characteristics of SCSI
     * over NVMe, see Local SSD performance. Valid values: * NVME * SCSI&#34;.
     * 
     */
    public Optional<Output<String>> interface_() {
        return Optional.ofNullable(this.interface_);
    }

    /**
     * (Output)
     * Type of the resource. Always compute#attachedDisk for attached
     * disks.
     * 
     */
    @Import(name="kind")
    private @Nullable Output<String> kind;

    /**
     * @return (Output)
     * Type of the resource. Always compute#attachedDisk for attached
     * disks.
     * 
     */
    public Optional<Output<String>> kind() {
        return Optional.ofNullable(this.kind);
    }

    /**
     * (Output)
     * Output only. Any valid publicly visible licenses.
     * 
     */
    @Import(name="licenses")
    private @Nullable Output<List<String>> licenses;

    /**
     * @return (Output)
     * Output only. Any valid publicly visible licenses.
     * 
     */
    public Optional<Output<List<String>>> licenses() {
        return Optional.ofNullable(this.licenses);
    }

    /**
     * The mode in which to attach this disk, either READ_WRITE
     * or READ_ONLY. If not specified, the default is to attach
     * the disk in READ_WRITE mode.
     * 
     */
    @Import(name="mode")
    private @Nullable Output<String> mode;

    /**
     * @return The mode in which to attach this disk, either READ_WRITE
     * or READ_ONLY. If not specified, the default is to attach
     * the disk in READ_WRITE mode.
     * 
     */
    public Optional<Output<String>> mode() {
        return Optional.ofNullable(this.mode);
    }

    /**
     * Specifies a valid partial or full URL to an existing
     * Persistent Disk resource.
     * 
     */
    @Import(name="source")
    private @Nullable Output<String> source;

    /**
     * @return Specifies a valid partial or full URL to an existing
     * Persistent Disk resource.
     * 
     */
    public Optional<Output<String>> source() {
        return Optional.ofNullable(this.source);
    }

    /**
     * Specifies the type of the disk, either SCRATCH or PERSISTENT.
     * If not specified, the default is PERSISTENT.
     * 
     */
    @Import(name="type")
    private @Nullable Output<String> type;

    /**
     * @return Specifies the type of the disk, either SCRATCH or PERSISTENT.
     * If not specified, the default is PERSISTENT.
     * 
     */
    public Optional<Output<String>> type() {
        return Optional.ofNullable(this.type);
    }

    private RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs() {}

    private RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs $) {
        this.autoDelete = $.autoDelete;
        this.boot = $.boot;
        this.deviceName = $.deviceName;
        this.guestOsFeatures = $.guestOsFeatures;
        this.index = $.index;
        this.initializeParams = $.initializeParams;
        this.interface_ = $.interface_;
        this.kind = $.kind;
        this.licenses = $.licenses;
        this.mode = $.mode;
        this.source = $.source;
        this.type = $.type;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs $;

        public Builder() {
            $ = new RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs();
        }

        public Builder(RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs defaults) {
            $ = new RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param autoDelete (Output)
         * Optional. Specifies whether the disk will be auto-deleted
         * when the instance is deleted (but not when the disk is
         * detached from the instance).
         * 
         * @return builder
         * 
         */
        public Builder autoDelete(@Nullable Output<Boolean> autoDelete) {
            $.autoDelete = autoDelete;
            return this;
        }

        /**
         * @param autoDelete (Output)
         * Optional. Specifies whether the disk will be auto-deleted
         * when the instance is deleted (but not when the disk is
         * detached from the instance).
         * 
         * @return builder
         * 
         */
        public Builder autoDelete(Boolean autoDelete) {
            return autoDelete(Output.of(autoDelete));
        }

        /**
         * @param boot (Output)
         * Optional. Indicates that this is a boot disk. The virtual
         * machine will use the first partition of the disk for its
         * root filesystem.
         * 
         * @return builder
         * 
         */
        public Builder boot(@Nullable Output<Boolean> boot) {
            $.boot = boot;
            return this;
        }

        /**
         * @param boot (Output)
         * Optional. Indicates that this is a boot disk. The virtual
         * machine will use the first partition of the disk for its
         * root filesystem.
         * 
         * @return builder
         * 
         */
        public Builder boot(Boolean boot) {
            return boot(Output.of(boot));
        }

        /**
         * @param deviceName (Output)
         * Optional. Specifies a unique device name of your choice
         * that is reflected into the /dev/disk/by-id/google-* tree
         * of a Linux operating system running within the instance.
         * This name can be used to reference the device for mounting,
         * resizing, and so on, from within the instance.
         * If not specified, the server chooses a default device name
         * to apply to this disk, in the form persistent-disk-x, where
         * x is a number assigned by Google Compute Engine. This field
         * is only applicable for persistent disks.
         * 
         * @return builder
         * 
         */
        public Builder deviceName(@Nullable Output<String> deviceName) {
            $.deviceName = deviceName;
            return this;
        }

        /**
         * @param deviceName (Output)
         * Optional. Specifies a unique device name of your choice
         * that is reflected into the /dev/disk/by-id/google-* tree
         * of a Linux operating system running within the instance.
         * This name can be used to reference the device for mounting,
         * resizing, and so on, from within the instance.
         * If not specified, the server chooses a default device name
         * to apply to this disk, in the form persistent-disk-x, where
         * x is a number assigned by Google Compute Engine. This field
         * is only applicable for persistent disks.
         * 
         * @return builder
         * 
         */
        public Builder deviceName(String deviceName) {
            return deviceName(Output.of(deviceName));
        }

        /**
         * @param guestOsFeatures (Output)
         * Indicates a list of features to enable on the guest operating
         * system. Applicable only for bootable images. To see a list of
         * available features, read `https://cloud.google.com/compute/docs/
         * images/create-delete-deprecate-private-images#guest-os-features`
         * options. ``
         * 
         * @return builder
         * 
         */
        public Builder guestOsFeatures(@Nullable Output<List<String>> guestOsFeatures) {
            $.guestOsFeatures = guestOsFeatures;
            return this;
        }

        /**
         * @param guestOsFeatures (Output)
         * Indicates a list of features to enable on the guest operating
         * system. Applicable only for bootable images. To see a list of
         * available features, read `https://cloud.google.com/compute/docs/
         * images/create-delete-deprecate-private-images#guest-os-features`
         * options. ``
         * 
         * @return builder
         * 
         */
        public Builder guestOsFeatures(List<String> guestOsFeatures) {
            return guestOsFeatures(Output.of(guestOsFeatures));
        }

        /**
         * @param guestOsFeatures (Output)
         * Indicates a list of features to enable on the guest operating
         * system. Applicable only for bootable images. To see a list of
         * available features, read `https://cloud.google.com/compute/docs/
         * images/create-delete-deprecate-private-images#guest-os-features`
         * options. ``
         * 
         * @return builder
         * 
         */
        public Builder guestOsFeatures(String... guestOsFeatures) {
            return guestOsFeatures(List.of(guestOsFeatures));
        }

        /**
         * @param index (Output)
         * Output only. A zero-based index to this disk, where 0 is
         * reserved for the boot disk. If you have many disks attached
         * to an instance, each disk would have a unique index number.
         * 
         * @return builder
         * 
         */
        public Builder index(@Nullable Output<Integer> index) {
            $.index = index;
            return this;
        }

        /**
         * @param index (Output)
         * Output only. A zero-based index to this disk, where 0 is
         * reserved for the boot disk. If you have many disks attached
         * to an instance, each disk would have a unique index number.
         * 
         * @return builder
         * 
         */
        public Builder index(Integer index) {
            return index(Output.of(index));
        }

        /**
         * @param initializeParams Input only. Specifies the parameters for a new disk that will
         * be created alongside the new instance. Use initialization
         * parameters to create boot disks or local SSDs attached to the
         * new instance. This property is mutually exclusive with the
         * source property; you can only define one or the other, but not
         * both.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder initializeParams(@Nullable Output<RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs> initializeParams) {
            $.initializeParams = initializeParams;
            return this;
        }

        /**
         * @param initializeParams Input only. Specifies the parameters for a new disk that will
         * be created alongside the new instance. Use initialization
         * parameters to create boot disks or local SSDs attached to the
         * new instance. This property is mutually exclusive with the
         * source property; you can only define one or the other, but not
         * both.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder initializeParams(RuntimeVirtualMachineVirtualMachineConfigDataDiskInitializeParamsArgs initializeParams) {
            return initializeParams(Output.of(initializeParams));
        }

        /**
         * @param interface_ &#34;Specifies the disk interface to use for attaching this disk,
         * which is either SCSI or NVME. The default is SCSI. Persistent
         * disks must always use SCSI and the request will fail if you attempt
         * to attach a persistent disk in any other format than SCSI. Local SSDs
         * can use either NVME or SCSI. For performance characteristics of SCSI
         * over NVMe, see Local SSD performance. Valid values: * NVME * SCSI&#34;.
         * 
         * @return builder
         * 
         */
        public Builder interface_(@Nullable Output<String> interface_) {
            $.interface_ = interface_;
            return this;
        }

        /**
         * @param interface_ &#34;Specifies the disk interface to use for attaching this disk,
         * which is either SCSI or NVME. The default is SCSI. Persistent
         * disks must always use SCSI and the request will fail if you attempt
         * to attach a persistent disk in any other format than SCSI. Local SSDs
         * can use either NVME or SCSI. For performance characteristics of SCSI
         * over NVMe, see Local SSD performance. Valid values: * NVME * SCSI&#34;.
         * 
         * @return builder
         * 
         */
        public Builder interface_(String interface_) {
            return interface_(Output.of(interface_));
        }

        /**
         * @param kind (Output)
         * Type of the resource. Always compute#attachedDisk for attached
         * disks.
         * 
         * @return builder
         * 
         */
        public Builder kind(@Nullable Output<String> kind) {
            $.kind = kind;
            return this;
        }

        /**
         * @param kind (Output)
         * Type of the resource. Always compute#attachedDisk for attached
         * disks.
         * 
         * @return builder
         * 
         */
        public Builder kind(String kind) {
            return kind(Output.of(kind));
        }

        /**
         * @param licenses (Output)
         * Output only. Any valid publicly visible licenses.
         * 
         * @return builder
         * 
         */
        public Builder licenses(@Nullable Output<List<String>> licenses) {
            $.licenses = licenses;
            return this;
        }

        /**
         * @param licenses (Output)
         * Output only. Any valid publicly visible licenses.
         * 
         * @return builder
         * 
         */
        public Builder licenses(List<String> licenses) {
            return licenses(Output.of(licenses));
        }

        /**
         * @param licenses (Output)
         * Output only. Any valid publicly visible licenses.
         * 
         * @return builder
         * 
         */
        public Builder licenses(String... licenses) {
            return licenses(List.of(licenses));
        }

        /**
         * @param mode The mode in which to attach this disk, either READ_WRITE
         * or READ_ONLY. If not specified, the default is to attach
         * the disk in READ_WRITE mode.
         * 
         * @return builder
         * 
         */
        public Builder mode(@Nullable Output<String> mode) {
            $.mode = mode;
            return this;
        }

        /**
         * @param mode The mode in which to attach this disk, either READ_WRITE
         * or READ_ONLY. If not specified, the default is to attach
         * the disk in READ_WRITE mode.
         * 
         * @return builder
         * 
         */
        public Builder mode(String mode) {
            return mode(Output.of(mode));
        }

        /**
         * @param source Specifies a valid partial or full URL to an existing
         * Persistent Disk resource.
         * 
         * @return builder
         * 
         */
        public Builder source(@Nullable Output<String> source) {
            $.source = source;
            return this;
        }

        /**
         * @param source Specifies a valid partial or full URL to an existing
         * Persistent Disk resource.
         * 
         * @return builder
         * 
         */
        public Builder source(String source) {
            return source(Output.of(source));
        }

        /**
         * @param type Specifies the type of the disk, either SCRATCH or PERSISTENT.
         * If not specified, the default is PERSISTENT.
         * 
         * @return builder
         * 
         */
        public Builder type(@Nullable Output<String> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type Specifies the type of the disk, either SCRATCH or PERSISTENT.
         * If not specified, the default is PERSISTENT.
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Output.of(type));
        }

        public RuntimeVirtualMachineVirtualMachineConfigDataDiskArgs build() {
            return $;
        }
    }

}
