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

com.pulumi.digitalocean.kotlin.Volume.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.

There is a newer version: 4.38.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.digitalocean.kotlin

import com.pulumi.core.Output
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.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List

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

    public var args: VolumeArgs = VolumeArgs()

    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 VolumeArgsBuilder.() -> Unit) {
        val builder = VolumeArgsBuilder()
        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(): Volume {
        val builtJavaResource = com.pulumi.digitalocean.Volume(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Volume(builtJavaResource)
    }
}

/**
 * Provides a DigitalOcean Block Storage volume which can be attached to a Droplet in order to provide expanded storage.
 * ## Example Usage
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as digitalocean from "@pulumi/digitalocean";
 * const foobar = new digitalocean.Volume("foobar", {
 *     region: digitalocean.Region.NYC1,
 *     name: "baz",
 *     size: 100,
 *     initialFilesystemType: digitalocean.FileSystemType.EXT4,
 *     description: "an example volume",
 * });
 * const foobarDroplet = new digitalocean.Droplet("foobar", {
 *     name: "baz",
 *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
 *     image: "ubuntu-18-04-x64",
 *     region: digitalocean.Region.NYC1,
 * });
 * const foobarVolumeAttachment = new digitalocean.VolumeAttachment("foobar", {
 *     dropletId: foobarDroplet.id,
 *     volumeId: foobar.id,
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_digitalocean as digitalocean
 * foobar = digitalocean.Volume("foobar",
 *     region=digitalocean.Region.NYC1,
 *     name="baz",
 *     size=100,
 *     initial_filesystem_type=digitalocean.FileSystemType.EXT4,
 *     description="an example volume")
 * foobar_droplet = digitalocean.Droplet("foobar",
 *     name="baz",
 *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
 *     image="ubuntu-18-04-x64",
 *     region=digitalocean.Region.NYC1)
 * foobar_volume_attachment = digitalocean.VolumeAttachment("foobar",
 *     droplet_id=foobar_droplet.id,
 *     volume_id=foobar.id)
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using DigitalOcean = Pulumi.DigitalOcean;
 * return await Deployment.RunAsync(() =>
 * {
 *     var foobar = new DigitalOcean.Volume("foobar", new()
 *     {
 *         Region = DigitalOcean.Region.NYC1,
 *         Name = "baz",
 *         Size = 100,
 *         InitialFilesystemType = DigitalOcean.FileSystemType.EXT4,
 *         Description = "an example volume",
 *     });
 *     var foobarDroplet = new DigitalOcean.Droplet("foobar", new()
 *     {
 *         Name = "baz",
 *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
 *         Image = "ubuntu-18-04-x64",
 *         Region = DigitalOcean.Region.NYC1,
 *     });
 *     var foobarVolumeAttachment = new DigitalOcean.VolumeAttachment("foobar", new()
 *     {
 *         DropletId = foobarDroplet.Id,
 *         VolumeId = foobar.Id,
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		foobar, err := digitalocean.NewVolume(ctx, "foobar", &digitalocean.VolumeArgs{
 * 			Region:                pulumi.String(digitalocean.RegionNYC1),
 * 			Name:                  pulumi.String("baz"),
 * 			Size:                  pulumi.Int(100),
 * 			InitialFilesystemType: pulumi.String(digitalocean.FileSystemTypeEXT4),
 * 			Description:           pulumi.String("an example volume"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		foobarDroplet, err := digitalocean.NewDroplet(ctx, "foobar", &digitalocean.DropletArgs{
 * 			Name:   pulumi.String("baz"),
 * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
 * 			Image:  pulumi.String("ubuntu-18-04-x64"),
 * 			Region: pulumi.String(digitalocean.RegionNYC1),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = digitalocean.NewVolumeAttachment(ctx, "foobar", &digitalocean.VolumeAttachmentArgs{
 * 			DropletId: foobarDroplet.ID(),
 * 			VolumeId:  foobar.ID(),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.digitalocean.Volume;
 * import com.pulumi.digitalocean.VolumeArgs;
 * import com.pulumi.digitalocean.Droplet;
 * import com.pulumi.digitalocean.DropletArgs;
 * import com.pulumi.digitalocean.VolumeAttachment;
 * import com.pulumi.digitalocean.VolumeAttachmentArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var foobar = new Volume("foobar", VolumeArgs.builder()
 *             .region("nyc1")
 *             .name("baz")
 *             .size(100)
 *             .initialFilesystemType("ext4")
 *             .description("an example volume")
 *             .build());
 *         var foobarDroplet = new Droplet("foobarDroplet", DropletArgs.builder()
 *             .name("baz")
 *             .size("s-1vcpu-1gb")
 *             .image("ubuntu-18-04-x64")
 *             .region("nyc1")
 *             .build());
 *         var foobarVolumeAttachment = new VolumeAttachment("foobarVolumeAttachment", VolumeAttachmentArgs.builder()
 *             .dropletId(foobarDroplet.id())
 *             .volumeId(foobar.id())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   foobar:
 *     type: digitalocean:Volume
 *     properties:
 *       region: nyc1
 *       name: baz
 *       size: 100
 *       initialFilesystemType: ext4
 *       description: an example volume
 *   foobarDroplet:
 *     type: digitalocean:Droplet
 *     name: foobar
 *     properties:
 *       name: baz
 *       size: s-1vcpu-1gb
 *       image: ubuntu-18-04-x64
 *       region: nyc1
 *   foobarVolumeAttachment:
 *     type: digitalocean:VolumeAttachment
 *     name: foobar
 *     properties:
 *       dropletId: ${foobarDroplet.id}
 *       volumeId: ${foobar.id}
 * ```
 * 
 * You can also create a volume from an existing snapshot.
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as digitalocean from "@pulumi/digitalocean";
 * const foobar = digitalocean.getVolumeSnapshot({
 *     name: "baz",
 * });
 * const foobarVolume = new digitalocean.Volume("foobar", {
 *     region: digitalocean.Region.LON1,
 *     name: "foo",
 *     size: foobar.then(foobar => foobar.minDiskSize),
 *     snapshotId: foobar.then(foobar => foobar.id),
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_digitalocean as digitalocean
 * foobar = digitalocean.get_volume_snapshot(name="baz")
 * foobar_volume = digitalocean.Volume("foobar",
 *     region=digitalocean.Region.LON1,
 *     name="foo",
 *     size=foobar.min_disk_size,
 *     snapshot_id=foobar.id)
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using DigitalOcean = Pulumi.DigitalOcean;
 * return await Deployment.RunAsync(() =>
 * {
 *     var foobar = DigitalOcean.GetVolumeSnapshot.Invoke(new()
 *     {
 *         Name = "baz",
 *     });
 *     var foobarVolume = new DigitalOcean.Volume("foobar", new()
 *     {
 *         Region = DigitalOcean.Region.LON1,
 *         Name = "foo",
 *         Size = foobar.Apply(getVolumeSnapshotResult => getVolumeSnapshotResult.MinDiskSize),
 *         SnapshotId = foobar.Apply(getVolumeSnapshotResult => getVolumeSnapshotResult.Id),
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		foobar, err := digitalocean.LookupVolumeSnapshot(ctx, &digitalocean.LookupVolumeSnapshotArgs{
 * 			Name: pulumi.StringRef("baz"),
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = digitalocean.NewVolume(ctx, "foobar", &digitalocean.VolumeArgs{
 * 			Region:     pulumi.String(digitalocean.RegionLON1),
 * 			Name:       pulumi.String("foo"),
 * 			Size:       pulumi.Int(foobar.MinDiskSize),
 * 			SnapshotId: pulumi.String(foobar.Id),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.digitalocean.DigitaloceanFunctions;
 * import com.pulumi.digitalocean.inputs.GetVolumeSnapshotArgs;
 * import com.pulumi.digitalocean.Volume;
 * import com.pulumi.digitalocean.VolumeArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         final var foobar = DigitaloceanFunctions.getVolumeSnapshot(GetVolumeSnapshotArgs.builder()
 *             .name("baz")
 *             .build());
 *         var foobarVolume = new Volume("foobarVolume", VolumeArgs.builder()
 *             .region("lon1")
 *             .name("foo")
 *             .size(foobar.applyValue(getVolumeSnapshotResult -> getVolumeSnapshotResult.minDiskSize()))
 *             .snapshotId(foobar.applyValue(getVolumeSnapshotResult -> getVolumeSnapshotResult.id()))
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   foobarVolume:
 *     type: digitalocean:Volume
 *     name: foobar
 *     properties:
 *       region: lon1
 *       name: foo
 *       size: ${foobar.minDiskSize}
 *       snapshotId: ${foobar.id}
 * variables:
 *   foobar:
 *     fn::invoke:
 *       Function: digitalocean:getVolumeSnapshot
 *       Arguments:
 *         name: baz
 * ```
 * 
 * ## Import
 * Volumes can be imported using the `volume id`, e.g.
 * ```sh
 * $ pulumi import digitalocean:index/volume:Volume volume 506f78a4-e098-11e5-ad9f-000f53306ae1
 * ```
 */
public class Volume internal constructor(
    override val javaResource: com.pulumi.digitalocean.Volume,
) : KotlinCustomResource(javaResource, VolumeMapper) {
    /**
     * A free-form text field up to a limit of 1024 bytes to describe a block storage volume.
     */
    public val description: Output?
        get() = javaResource.description().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A list of associated droplet ids.
     */
    public val dropletIds: Output>
        get() = javaResource.dropletIds().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * Filesystem label for the block storage volume.
     */
    public val filesystemLabel: Output
        get() = javaResource.filesystemLabel().applyValue({ args0 -> args0 })

    /**
     * Filesystem type (`xfs` or `ext4`) for the block storage volume.
     */
    @Deprecated(
        message = """
  This fields functionality has been replaced by `initial_filesystem_type`. The property will still
      remain as a computed attribute representing the current volumes filesystem type.
  """,
    )
    public val filesystemType: Output
        get() = javaResource.filesystemType().applyValue({ args0 -> args0 })

    /**
     * Initial filesystem label for the block storage volume.
     */
    public val initialFilesystemLabel: Output?
        get() = javaResource.initialFilesystemLabel().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Initial filesystem type (`xfs` or `ext4`) for the block storage volume.
     */
    public val initialFilesystemType: Output?
        get() = javaResource.initialFilesystemType().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A name for the block storage volume. Must be lowercase and be composed only of numbers, letters and "-", up to a limit of 64 characters. The name must begin with a letter.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * The region that the block storage volume will be created in.
     */
    public val region: Output
        get() = javaResource.region().applyValue({ args0 -> args0 })

    /**
     * The size of the block storage volume in GiB. If updated, can only be expanded.
     */
    public val size: Output
        get() = javaResource.size().applyValue({ args0 -> args0 })

    /**
     * The ID of an existing volume snapshot from which the new volume will be created. If supplied, the region and size will be limited on creation to that of the referenced snapshot
     */
    public val snapshotId: Output?
        get() = javaResource.snapshotId().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A list of the tags to be applied to this Volume.
     */
    public val tags: Output>?
        get() = javaResource.tags().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0
                })
            }).orElse(null)
        })

    /**
     * The uniform resource name for the volume.
     */
    public val volumeUrn: Output
        get() = javaResource.volumeUrn().applyValue({ args0 -> args0 })
}

public object VolumeMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.digitalocean.Volume::class == javaResource::class

    override fun map(javaResource: Resource): Volume = Volume(
        javaResource as
            com.pulumi.digitalocean.Volume,
    )
}

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

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




© 2015 - 2025 Weber Informatics LLC | Privacy Policy