All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.googlenative.compute.beta.kotlin.Disk.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

The newest version!
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.googlenative.compute.beta.kotlin

import com.pulumi.core.Output
import com.pulumi.googlenative.compute.beta.kotlin.outputs.CustomerEncryptionKeyResponse
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskAsyncReplicationResponse
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskParamsResponse
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskResourceStatusResponse
import com.pulumi.googlenative.compute.beta.kotlin.outputs.GuestOsFeatureResponse
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import com.pulumi.googlenative.compute.beta.kotlin.outputs.CustomerEncryptionKeyResponse.Companion.toKotlin as customerEncryptionKeyResponseToKotlin
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskAsyncReplicationResponse.Companion.toKotlin as diskAsyncReplicationResponseToKotlin
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskParamsResponse.Companion.toKotlin as diskParamsResponseToKotlin
import com.pulumi.googlenative.compute.beta.kotlin.outputs.DiskResourceStatusResponse.Companion.toKotlin as diskResourceStatusResponseToKotlin
import com.pulumi.googlenative.compute.beta.kotlin.outputs.GuestOsFeatureResponse.Companion.toKotlin as guestOsFeatureResponseToKotlin

/**
 * Builder for [Disk].
 */
@PulumiTagMarker
public class DiskResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: DiskArgs = DiskArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend DiskArgsBuilder.() -> Unit) {
        val builder = DiskArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): Disk {
        val builtJavaResource = com.pulumi.googlenative.compute.beta.Disk(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Disk(builtJavaResource)
    }
}

/**
 * Creates a persistent disk in the specified project using the data in the request. You can create a disk from a source (sourceImage, sourceSnapshot, or sourceDisk) or create an empty 500 GB data disk by omitting all properties. You can also create a disk that is larger than the default size by specifying the sizeGb property.
 */
public class Disk internal constructor(
    override val javaResource: com.pulumi.googlenative.compute.beta.Disk,
) : KotlinCustomResource(javaResource, DiskMapper) {
    /**
     * The architecture of the disk. Valid values are ARM64 or X86_64.
     */
    public val architecture: Output
        get() = javaResource.architecture().applyValue({ args0 -> args0 })

    /**
     * Disk asynchronously replicated into this disk.
     */
    public val asyncPrimaryDisk: Output
        get() = javaResource.asyncPrimaryDisk().applyValue({ args0 ->
            args0.let({ args0 ->
                diskAsyncReplicationResponseToKotlin(args0)
            })
        })

    /**
     * A list of disks this disk is asynchronously replicated to.
     */
    public val asyncSecondaryDisks: Output>
        get() = javaResource.asyncSecondaryDisks().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Creation timestamp in RFC3339 text format.
     */
    public val creationTimestamp: Output
        get() = javaResource.creationTimestamp().applyValue({ args0 -> args0 })

    /**
     * An optional description of this resource. Provide this property when you create the resource.
     */
    public val description: Output
        get() = javaResource.description().applyValue({ args0 -> args0 })

    /**
     * Encrypts the disk using a customer-supplied encryption key or a customer-managed encryption key. Encryption keys do not protect access to metadata of the disk. After you encrypt a disk with a customer-supplied key, you must provide the same key if you use the disk later. For example, to create a disk snapshot, to create a disk image, to create a machine image, or to attach the disk to a virtual machine. After you encrypt a disk with a customer-managed key, the diskEncryptionKey.kmsKeyName is set to a key *version* name once the disk is created. The disk is encrypted with this version of the key. In the response, diskEncryptionKey.kmsKeyName appears in the following format: "diskEncryptionKey.kmsKeyName": "projects/kms_project_id/locations/region/keyRings/ key_region/cryptoKeys/key /cryptoKeysVersions/version If you do not provide an encryption key when creating the disk, then the disk is encrypted using an automatically generated key and you don't need to provide a key to use the disk later.
     */
    public val diskEncryptionKey: Output
        get() = javaResource.diskEncryptionKey().applyValue({ args0 ->
            args0.let({ args0 ->
                customerEncryptionKeyResponseToKotlin(args0)
            })
        })

    /**
     * Specifies whether the disk restored from a source snapshot should erase Windows specific VSS signature.
     */
    public val eraseWindowsVssSignature: Output
        get() = javaResource.eraseWindowsVssSignature().applyValue({ args0 -> args0 })

    /**
     * A list of features to enable on the guest operating system. Applicable only for bootable images. Read Enabling guest operating system features to see a list of available options.
     */
    public val guestOsFeatures: Output>
        get() = javaResource.guestOsFeatures().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> guestOsFeatureResponseToKotlin(args0) })
            })
        })

    /**
     * [Deprecated] Specifies the disk interface to use for attaching this disk, which is either SCSI or NVME. The default is SCSI.
     */
    @Deprecated(
        message = """
  [Deprecated] Specifies the disk interface to use for attaching this disk, which is either SCSI or
      NVME. The default is SCSI.
  """,
    )
    public val `interface`: Output
        get() = javaResource.interface_().applyValue({ args0 -> args0 })

    /**
     * Type of the resource. Always compute#disk for disks.
     */
    public val kind: Output
        get() = javaResource.kind().applyValue({ args0 -> args0 })

    /**
     * A fingerprint for the labels being applied to this disk, which is essentially a hash of the labels set used for optimistic locking. The fingerprint is initially generated by Compute Engine and changes after every request to modify or update labels. You must always provide an up-to-date fingerprint hash in order to update or change labels, otherwise the request will fail with error 412 conditionNotMet. To see the latest fingerprint, make a get() request to retrieve a disk.
     */
    public val labelFingerprint: Output
        get() = javaResource.labelFingerprint().applyValue({ args0 -> args0 })

    /**
     * Labels to apply to this disk. These can be later modified by the setLabels method.
     */
    public val labels: Output>
        get() = javaResource.labels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Last attach timestamp in RFC3339 text format.
     */
    public val lastAttachTimestamp: Output
        get() = javaResource.lastAttachTimestamp().applyValue({ args0 -> args0 })

    /**
     * Last detach timestamp in RFC3339 text format.
     */
    public val lastDetachTimestamp: Output
        get() = javaResource.lastDetachTimestamp().applyValue({ args0 -> args0 })

    /**
     * Integer license codes indicating which licenses are attached to this disk.
     */
    public val licenseCodes: Output>
        get() = javaResource.licenseCodes().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * A list of publicly visible licenses. Reserved for Google's use.
     */
    public val licenses: Output>
        get() = javaResource.licenses().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * An opaque location hint used to place the disk close to other resources. This field is for use by internal tools that use the public API.
     */
    public val locationHint: Output
        get() = javaResource.locationHint().applyValue({ args0 -> args0 })

    /**
     * The field indicates if the disk is created from a locked source image. Attachment of a disk created from a locked source image will cause the following operations to become irreversibly prohibited: - R/W or R/O disk attachment to any other instance - Disk detachment. And the disk can only be deleted when the instance is deleted - Creation of images or snapshots - Disk cloning Furthermore, the instance with at least one disk with locked flag set to true will be prohibited from performing the operations below: - Further attachment of secondary disks. - Detachment of any disks - Create machine images - Create instance template - Delete the instance with --keep-disk parameter set to true for locked disks - Attach a locked disk with --auto-delete parameter set to false
     */
    public val locked: Output
        get() = javaResource.locked().applyValue({ args0 -> args0 })

    /**
     * Indicates whether or not the disk can be read/write attached to more than one instance.
     */
    public val multiWriter: Output
        get() = javaResource.multiWriter().applyValue({ args0 -> args0 })

    /**
     * Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `[a-z]([-a-z0-9]*[a-z0-9])?` which means the first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * Internal use only.
     */
    public val options: Output
        get() = javaResource.options().applyValue({ args0 -> args0 })

    /**
     * Input only. [Input Only] Additional params passed with the request, but not persisted as part of resource payload.
     */
    public val params: Output
        get() = javaResource.params().applyValue({ args0 ->
            args0.let({ args0 ->
                diskParamsResponseToKotlin(args0)
            })
        })

    /**
     * Physical block size of the persistent disk, in bytes. If not present in a request, a default value is used. The currently supported size is 4096, other sizes may be added in the future. If an unsupported value is requested, the error message will list the supported values for the caller's project.
     */
    public val physicalBlockSizeBytes: Output
        get() = javaResource.physicalBlockSizeBytes().applyValue({ args0 -> args0 })

    public val project: Output
        get() = javaResource.project().applyValue({ args0 -> args0 })

    /**
     * Indicates how many IOPS to provision for the disk. This sets the number of I/O operations per second that the disk can handle. Values must be between 10,000 and 120,000. For more details, see the Extreme persistent disk documentation.
     */
    public val provisionedIops: Output
        get() = javaResource.provisionedIops().applyValue({ args0 -> args0 })

    /**
     * Indicates how much throughput to provision for the disk. This sets the number of throughput mb per second that the disk can handle. Values must be between 1 and 7,124.
     */
    public val provisionedThroughput: Output
        get() = javaResource.provisionedThroughput().applyValue({ args0 -> args0 })

    /**
     * URL of the region where the disk resides. Only applicable for regional resources. You must specify this field as part of the HTTP request URL. It is not settable as a field in the request body.
     */
    public val region: Output
        get() = javaResource.region().applyValue({ args0 -> args0 })

    /**
     * URLs of the zones where the disk should be replicated to. Only applicable for regional resources.
     */
    public val replicaZones: Output>
        get() = javaResource.replicaZones().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * An optional request ID to identify requests. Specify a unique request ID so that if you must retry your request, the server will know to ignore the request if it has already been completed. For example, consider a situation where you make an initial request and the request times out. If you make the request again with the same request ID, the server can check if original operation with the same request ID was received, and if so, will ignore the second request. This prevents clients from accidentally creating duplicate commitments. The request ID must be a valid UUID with the exception that zero UUID is not supported ( 00000000-0000-0000-0000-000000000000).
     */
    public val requestId: Output?
        get() = javaResource.requestId().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Resource policies applied to this disk for automatic snapshot creations.
     */
    public val resourcePolicies: Output>
        get() = javaResource.resourcePolicies().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * Status information for the disk resource.
     */
    public val resourceStatus: Output
        get() = javaResource.resourceStatus().applyValue({ args0 ->
            args0.let({ args0 ->
                diskResourceStatusResponseToKotlin(args0)
            })
        })

    /**
     * Reserved for future use.
     */
    public val satisfiesPzs: Output
        get() = javaResource.satisfiesPzs().applyValue({ args0 -> args0 })

    /**
     * Server-defined fully-qualified URL for this resource.
     */
    public val selfLink: Output
        get() = javaResource.selfLink().applyValue({ args0 -> args0 })

    /**
     * Size, in GB, of the persistent disk. You can specify this field when creating a persistent disk using the sourceImage, sourceSnapshot, or sourceDisk parameter, or specify it alone to create an empty persistent disk. If you specify this field along with a source, the value of sizeGb must not be less than the size of the source. Acceptable values are 1 to 65536, inclusive.
     */
    public val sizeGb: Output
        get() = javaResource.sizeGb().applyValue({ args0 -> args0 })

    /**
     * URL of the DiskConsistencyGroupPolicy for a secondary disk that was created using a consistency group.
     */
    public val sourceConsistencyGroupPolicy: Output
        get() = javaResource.sourceConsistencyGroupPolicy().applyValue({ args0 -> args0 })

    /**
     * ID of the DiskConsistencyGroupPolicy for a secondary disk that was created using a consistency group.
     */
    public val sourceConsistencyGroupPolicyId: Output
        get() = javaResource.sourceConsistencyGroupPolicyId().applyValue({ args0 -> args0 })

    /**
     * The source disk used to create this disk. You can provide this as a partial or full URL to the resource. For example, the following are valid values: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /disks/disk - https://www.googleapis.com/compute/v1/projects/project/regions/region /disks/disk - projects/project/zones/zone/disks/disk - projects/project/regions/region/disks/disk - zones/zone/disks/disk - regions/region/disks/disk
     */
    public val sourceDisk: Output
        get() = javaResource.sourceDisk().applyValue({ args0 -> args0 })

    /**
     * The unique ID of the disk used to create this disk. This value identifies the exact disk that was used to create this persistent disk. For example, if you created the persistent disk from a disk that was later deleted and recreated under the same name, the source disk ID would identify the exact version of the disk that was used.
     */
    public val sourceDiskId: Output
        get() = javaResource.sourceDiskId().applyValue({ args0 -> args0 })

    /**
     * Source image to restore onto a disk. This field is optional.
     */
    public val sourceImage: Output
        get() = javaResource.sourceImage().applyValue({ args0 -> args0 })

    /**
     * The customer-supplied encryption key of the source image. Required if the source image is protected by a customer-supplied encryption key.
     */
    public val sourceImageEncryptionKey: Output
        get() = javaResource.sourceImageEncryptionKey().applyValue({ args0 ->
            args0.let({ args0 ->
                customerEncryptionKeyResponseToKotlin(args0)
            })
        })

    /**
     * The ID value of the image used to create this disk. This value identifies the exact image that was used to create this persistent disk. For example, if you created the persistent disk from an image that was later deleted and recreated under the same name, the source image ID would identify the exact version of the image that was used.
     */
    public val sourceImageId: Output
        get() = javaResource.sourceImageId().applyValue({ args0 -> args0 })

    /**
     * The source instant snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For example, the following are valid values: - https://www.googleapis.com/compute/v1/projects/project/zones/zone /instantSnapshots/instantSnapshot - projects/project/zones/zone/instantSnapshots/instantSnapshot - zones/zone/instantSnapshots/instantSnapshot
     */
    public val sourceInstantSnapshot: Output
        get() = javaResource.sourceInstantSnapshot().applyValue({ args0 -> args0 })

    /**
     * The unique ID of the instant snapshot used to create this disk. This value identifies the exact instant snapshot that was used to create this persistent disk. For example, if you created the persistent disk from an instant snapshot that was later deleted and recreated under the same name, the source instant snapshot ID would identify the exact version of the instant snapshot that was used.
     */
    public val sourceInstantSnapshotId: Output
        get() = javaResource.sourceInstantSnapshotId().applyValue({ args0 -> args0 })

    /**
     * The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. For example, the following are valid values: - https://www.googleapis.com/compute/v1/projects/project /global/snapshots/snapshot - projects/project/global/snapshots/snapshot - global/snapshots/snapshot
     */
    public val sourceSnapshot: Output
        get() = javaResource.sourceSnapshot().applyValue({ args0 -> args0 })

    /**
     * The customer-supplied encryption key of the source snapshot. Required if the source snapshot is protected by a customer-supplied encryption key.
     */
    public val sourceSnapshotEncryptionKey: Output
        get() = javaResource.sourceSnapshotEncryptionKey().applyValue({ args0 ->
            args0.let({ args0 ->
                customerEncryptionKeyResponseToKotlin(args0)
            })
        })

    /**
     * The unique ID of the snapshot used to create this disk. This value identifies the exact snapshot that was used to create this persistent disk. For example, if you created the persistent disk from a snapshot that was later deleted and recreated under the same name, the source snapshot ID would identify the exact version of the snapshot that was used.
     */
    public val sourceSnapshotId: Output
        get() = javaResource.sourceSnapshotId().applyValue({ args0 -> args0 })

    /**
     * The full Google Cloud Storage URI where the disk image is stored. This file must be a gzip-compressed tarball whose name ends in .tar.gz or virtual machine disk whose name ends in vmdk. Valid URIs may start with gs:// or https://storage.googleapis.com/. This flag is not optimized for creating multiple disks from a source storage object. To create many disks from a source storage object, use gcloud compute images import instead.
     */
    public val sourceStorageObject: Output
        get() = javaResource.sourceStorageObject().applyValue({ args0 -> args0 })

    /**
     * The status of disk creation. - CREATING: Disk is provisioning. - RESTORING: Source data is being copied into the disk. - FAILED: Disk creation failed. - READY: Disk is ready for use. - DELETING: Disk is deleting.
     */
    public val status: Output
        get() = javaResource.status().applyValue({ args0 -> args0 })

    /**
     * [Deprecated] Storage type of the persistent disk.
     */
    @Deprecated(
        message = """
  [Deprecated] Storage type of the persistent disk.
  """,
    )
    public val storageType: Output
        get() = javaResource.storageType().applyValue({ args0 -> args0 })

    /**
     * URL of the disk type resource describing which disk type to use to create the disk. Provide this when creating the disk. For example: projects/project /zones/zone/diskTypes/pd-ssd . See Persistent disk types.
     */
    public val type: Output
        get() = javaResource.type().applyValue({ args0 -> args0 })

    /**
     * A list of publicly visible user-licenses. Unlike regular licenses, user provided licenses can be modified after the disk is created. This includes a list of URLs to the license resource. For example, to provide a debian license: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch
     */
    public val userLicenses: Output>
        get() = javaResource.userLicenses().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * Links to the users of the disk (attached instances) in form: projects/project/zones/zone/instances/instance
     */
    public val users: Output>
        get() = javaResource.users().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    public val zone: Output
        get() = javaResource.zone().applyValue({ args0 -> args0 })
}

public object DiskMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.googlenative.compute.beta.Disk::class == javaResource::class

    override fun map(javaResource: Resource): Disk = Disk(
        javaResource as
            com.pulumi.googlenative.compute.beta.Disk,
    )
}

/**
 * @see [Disk].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [Disk].
 */
public suspend fun disk(name: String, block: suspend DiskResourceBuilder.() -> Unit): Disk {
    val builder = DiskResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [Disk].
 * @param name The _unique_ name of the resulting resource.
 */
public fun disk(name: String): Disk {
    val builder = DiskResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy