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

com.pulumi.digitalocean.kotlin.DigitaloceanFunctions.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.digitalocean.kotlin

import com.pulumi.digitalocean.DigitaloceanFunctions.getAccountPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getAppPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getCertificatePlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getContainerRegistryPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDatabaseCaPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDatabaseClusterPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDatabaseConnectionPoolPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDatabaseReplicaPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDatabaseUserPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDomainPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDomainsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDropletPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDropletSnapshotPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getDropletsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getFirewallPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getFloatingIpPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getImagePlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getImagesPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getKubernetesClusterPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getKubernetesVersionsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getLoadBalancerPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getProjectPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getProjectsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getRecordPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getRecordsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getRegionPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getRegionsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getReservedIpPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSizesPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSpacesBucketObjectPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSpacesBucketObjectsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSpacesBucketPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSpacesBucketsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSshKeyPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getSshKeysPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getTagPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getTagsPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getVolumePlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getVolumeSnapshotPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getVpcPeeringPlain
import com.pulumi.digitalocean.DigitaloceanFunctions.getVpcPlain
import com.pulumi.digitalocean.kotlin.inputs.GetAppDedicatedIp
import com.pulumi.digitalocean.kotlin.inputs.GetAppPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetAppPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetCertificatePlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetCertificatePlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetContainerRegistryPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetContainerRegistryPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseCaPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseCaPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseClusterPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseClusterPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseConnectionPoolPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseConnectionPoolPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseReplicaPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseReplicaPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseUserPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDatabaseUserPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDomainPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDomainPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDomainsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetDomainsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDomainsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDomainsSort
import com.pulumi.digitalocean.kotlin.inputs.GetDropletPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDropletPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDropletSnapshotPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDropletSnapshotPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDropletsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetDropletsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetDropletsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetDropletsSort
import com.pulumi.digitalocean.kotlin.inputs.GetFirewallInboundRule
import com.pulumi.digitalocean.kotlin.inputs.GetFirewallOutboundRule
import com.pulumi.digitalocean.kotlin.inputs.GetFirewallPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetFirewallPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetFloatingIpPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetFloatingIpPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetImagePlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetImagePlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetImagesFilter
import com.pulumi.digitalocean.kotlin.inputs.GetImagesPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetImagesPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetImagesSort
import com.pulumi.digitalocean.kotlin.inputs.GetKubernetesClusterPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetKubernetesClusterPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetKubernetesVersionsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetKubernetesVersionsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetLoadBalancerPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetLoadBalancerPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetProjectPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetProjectPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetProjectsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetProjectsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetProjectsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetProjectsSort
import com.pulumi.digitalocean.kotlin.inputs.GetRecordPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetRecordPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetRecordsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetRecordsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetRecordsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetRecordsSort
import com.pulumi.digitalocean.kotlin.inputs.GetRegionPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetRegionPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetRegionsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetRegionsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetRegionsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetRegionsSort
import com.pulumi.digitalocean.kotlin.inputs.GetReservedIpPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetReservedIpPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSizesFilter
import com.pulumi.digitalocean.kotlin.inputs.GetSizesPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSizesPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSizesSort
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketsSort
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeyPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeyPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeysFilter
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeysPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeysPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetSshKeysSort
import com.pulumi.digitalocean.kotlin.inputs.GetTagPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetTagPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetTagsFilter
import com.pulumi.digitalocean.kotlin.inputs.GetTagsPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetTagsPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetTagsSort
import com.pulumi.digitalocean.kotlin.inputs.GetVolumePlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetVolumePlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetVolumeSnapshotPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetVolumeSnapshotPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetVpcPeeringPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetVpcPeeringPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.inputs.GetVpcPlainArgs
import com.pulumi.digitalocean.kotlin.inputs.GetVpcPlainArgsBuilder
import com.pulumi.digitalocean.kotlin.outputs.GetAccountResult
import com.pulumi.digitalocean.kotlin.outputs.GetAppResult
import com.pulumi.digitalocean.kotlin.outputs.GetCertificateResult
import com.pulumi.digitalocean.kotlin.outputs.GetContainerRegistryResult
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseCaResult
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseClusterResult
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseConnectionPoolResult
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseReplicaResult
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseUserResult
import com.pulumi.digitalocean.kotlin.outputs.GetDomainResult
import com.pulumi.digitalocean.kotlin.outputs.GetDomainsResult
import com.pulumi.digitalocean.kotlin.outputs.GetDropletResult
import com.pulumi.digitalocean.kotlin.outputs.GetDropletSnapshotResult
import com.pulumi.digitalocean.kotlin.outputs.GetDropletsResult
import com.pulumi.digitalocean.kotlin.outputs.GetFirewallResult
import com.pulumi.digitalocean.kotlin.outputs.GetFloatingIpResult
import com.pulumi.digitalocean.kotlin.outputs.GetImageResult
import com.pulumi.digitalocean.kotlin.outputs.GetImagesResult
import com.pulumi.digitalocean.kotlin.outputs.GetKubernetesClusterResult
import com.pulumi.digitalocean.kotlin.outputs.GetKubernetesVersionsResult
import com.pulumi.digitalocean.kotlin.outputs.GetLoadBalancerResult
import com.pulumi.digitalocean.kotlin.outputs.GetProjectResult
import com.pulumi.digitalocean.kotlin.outputs.GetProjectsResult
import com.pulumi.digitalocean.kotlin.outputs.GetRecordResult
import com.pulumi.digitalocean.kotlin.outputs.GetRecordsResult
import com.pulumi.digitalocean.kotlin.outputs.GetRegionResult
import com.pulumi.digitalocean.kotlin.outputs.GetRegionsResult
import com.pulumi.digitalocean.kotlin.outputs.GetReservedIpResult
import com.pulumi.digitalocean.kotlin.outputs.GetSizesResult
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketObjectResult
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketObjectsResult
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketResult
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketsResult
import com.pulumi.digitalocean.kotlin.outputs.GetSshKeyResult
import com.pulumi.digitalocean.kotlin.outputs.GetSshKeysResult
import com.pulumi.digitalocean.kotlin.outputs.GetTagResult
import com.pulumi.digitalocean.kotlin.outputs.GetTagsResult
import com.pulumi.digitalocean.kotlin.outputs.GetVolumeResult
import com.pulumi.digitalocean.kotlin.outputs.GetVolumeSnapshotResult
import com.pulumi.digitalocean.kotlin.outputs.GetVpcPeeringResult
import com.pulumi.digitalocean.kotlin.outputs.GetVpcResult
import kotlinx.coroutines.future.await
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import com.pulumi.digitalocean.kotlin.outputs.GetAccountResult.Companion.toKotlin as getAccountResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetAppResult.Companion.toKotlin as getAppResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetCertificateResult.Companion.toKotlin as getCertificateResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetContainerRegistryResult.Companion.toKotlin as getContainerRegistryResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseCaResult.Companion.toKotlin as getDatabaseCaResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseClusterResult.Companion.toKotlin as getDatabaseClusterResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseConnectionPoolResult.Companion.toKotlin as getDatabaseConnectionPoolResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseReplicaResult.Companion.toKotlin as getDatabaseReplicaResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDatabaseUserResult.Companion.toKotlin as getDatabaseUserResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDomainResult.Companion.toKotlin as getDomainResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDomainsResult.Companion.toKotlin as getDomainsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDropletResult.Companion.toKotlin as getDropletResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDropletSnapshotResult.Companion.toKotlin as getDropletSnapshotResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetDropletsResult.Companion.toKotlin as getDropletsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetFirewallResult.Companion.toKotlin as getFirewallResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetFloatingIpResult.Companion.toKotlin as getFloatingIpResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetImageResult.Companion.toKotlin as getImageResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetImagesResult.Companion.toKotlin as getImagesResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetKubernetesClusterResult.Companion.toKotlin as getKubernetesClusterResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetKubernetesVersionsResult.Companion.toKotlin as getKubernetesVersionsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetLoadBalancerResult.Companion.toKotlin as getLoadBalancerResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetProjectResult.Companion.toKotlin as getProjectResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetProjectsResult.Companion.toKotlin as getProjectsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetRecordResult.Companion.toKotlin as getRecordResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetRecordsResult.Companion.toKotlin as getRecordsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetRegionResult.Companion.toKotlin as getRegionResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetRegionsResult.Companion.toKotlin as getRegionsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetReservedIpResult.Companion.toKotlin as getReservedIpResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSizesResult.Companion.toKotlin as getSizesResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketObjectResult.Companion.toKotlin as getSpacesBucketObjectResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketObjectsResult.Companion.toKotlin as getSpacesBucketObjectsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketResult.Companion.toKotlin as getSpacesBucketResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSpacesBucketsResult.Companion.toKotlin as getSpacesBucketsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSshKeyResult.Companion.toKotlin as getSshKeyResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetSshKeysResult.Companion.toKotlin as getSshKeysResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetTagResult.Companion.toKotlin as getTagResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetTagsResult.Companion.toKotlin as getTagsResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetVolumeResult.Companion.toKotlin as getVolumeResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetVolumeSnapshotResult.Companion.toKotlin as getVolumeSnapshotResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetVpcPeeringResult.Companion.toKotlin as getVpcPeeringResultToKotlin
import com.pulumi.digitalocean.kotlin.outputs.GetVpcResult.Companion.toKotlin as getVpcResultToKotlin

public object DigitaloceanFunctions {
    /**
     * Get information on your DigitalOcean account.
     * ## Example Usage
     * Get the account:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getAccount({});
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_account()
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetAccount.Invoke();
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetAccount(ctx, nil, nil)
     * 		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 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 example = DigitaloceanFunctions.getAccount();
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getAccount
     *       Arguments: {}
     * ```
     * 
     * @param argument Get information on your DigitalOcean account.
     * ## Example Usage
     * Get the account:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getAccount({});
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_account()
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetAccount.Invoke();
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetAccount(ctx, nil, nil)
     * 		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 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 example = DigitaloceanFunctions.getAccount();
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getAccount
     *       Arguments: {}
     * ```
     * 
     * @return A collection of values returned by getAccount.
     */
    public suspend fun getAccount(): GetAccountResult =
        getAccountResultToKotlin(getAccountPlain().await())

    /**
     * Get information on a DigitalOcean App.
     * ## Example Usage
     * Get the account:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getApp({
     *     appId: "e665d18d-7b56-44a9-92ce-31979174d544",
     * });
     * export const defaultIngress = example.then(example => example.defaultIngress);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_app(app_id="e665d18d-7b56-44a9-92ce-31979174d544")
     * pulumi.export("defaultIngress", example.default_ingress)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetApp.Invoke(new()
     *     {
     *         AppId = "e665d18d-7b56-44a9-92ce-31979174d544",
     *     });
     *     return new Dictionary
     *     {
     *         ["defaultIngress"] = example.Apply(getAppResult => getAppResult.DefaultIngress),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupApp(ctx, &digitalocean.LookupAppArgs{
     * 			AppId: "e665d18d-7b56-44a9-92ce-31979174d544",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("defaultIngress", example.DefaultIngress)
     * 		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.GetAppArgs;
     * 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 example = DigitaloceanFunctions.getApp(GetAppArgs.builder()
     *             .appId("e665d18d-7b56-44a9-92ce-31979174d544")
     *             .build());
     *         ctx.export("defaultIngress", example.applyValue(getAppResult -> getAppResult.defaultIngress()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getApp
     *       Arguments:
     *         appId: e665d18d-7b56-44a9-92ce-31979174d544
     * outputs:
     *   defaultIngress: ${example.defaultIngress}
     * ```
     * 
     * @param argument A collection of arguments for invoking getApp.
     * @return A collection of values returned by getApp.
     */
    public suspend fun getApp(argument: GetAppPlainArgs): GetAppResult =
        getAppResultToKotlin(getAppPlain(argument.toJava()).await())

    /**
     * @see [getApp].
     * @param appId The ID of the app to retrieve information about.
     * @param dedicatedIps A list of dedicated egress IP addresses associated with the app.
     * @return A collection of values returned by getApp.
     */
    public suspend fun getApp(appId: String, dedicatedIps: List? = null): GetAppResult {
        val argument = GetAppPlainArgs(
            appId = appId,
            dedicatedIps = dedicatedIps,
        )
        return getAppResultToKotlin(getAppPlain(argument.toJava()).await())
    }

    /**
     * @see [getApp].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetAppPlainArgs].
     * @return A collection of values returned by getApp.
     */
    public suspend fun getApp(argument: suspend GetAppPlainArgsBuilder.() -> Unit): GetAppResult {
        val builder = GetAppPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getAppResultToKotlin(getAppPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a certificate. This data source provides the name, type, state,
     * domains, expiry date, and the sha1 fingerprint as configured on your DigitalOcean account.
     * This is useful if the certificate in question is not managed by this provider or you need to utilize
     * any of the certificates data.
     * An error is triggered if the provided certificate name does not exist.
     * ## Example Usage
     * Get the certificate:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getCertificate({
     *     name: "example",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_certificate(name="example")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetCertificate.Invoke(new()
     *     {
     *         Name = "example",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupCertificate(ctx, &digitalocean.LookupCertificateArgs{
     * 			Name: "example",
     * 		}, nil)
     * 		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.GetCertificateArgs;
     * 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 example = DigitaloceanFunctions.getCertificate(GetCertificateArgs.builder()
     *             .name("example")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getCertificate
     *       Arguments:
     *         name: example
     * ```
     * 
     * @param argument A collection of arguments for invoking getCertificate.
     * @return A collection of values returned by getCertificate.
     */
    public suspend fun getCertificate(argument: GetCertificatePlainArgs): GetCertificateResult =
        getCertificateResultToKotlin(getCertificatePlain(argument.toJava()).await())

    /**
     * @see [getCertificate].
     * @param name The name of certificate.
     * @return A collection of values returned by getCertificate.
     */
    public suspend fun getCertificate(name: String): GetCertificateResult {
        val argument = GetCertificatePlainArgs(
            name = name,
        )
        return getCertificateResultToKotlin(getCertificatePlain(argument.toJava()).await())
    }

    /**
     * @see [getCertificate].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetCertificatePlainArgs].
     * @return A collection of values returned by getCertificate.
     */
    public suspend fun getCertificate(argument: suspend GetCertificatePlainArgsBuilder.() -> Unit): GetCertificateResult {
        val builder = GetCertificatePlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getCertificateResultToKotlin(getCertificatePlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a container registry. This data source provides the name as
     * configured on your DigitalOcean account. This is useful if the container
     * registry name in question is not managed by this provider or you need validate if
     * the container registry exists in the account.
     * An error is triggered if the provided container registry name does not exist.
     * ## Example Usage
     * ### Basic Example
     * Get the container registry:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getContainerRegistry({
     *     name: "example",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_container_registry(name="example")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetContainerRegistry.Invoke(new()
     *     {
     *         Name = "example",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupContainerRegistry(ctx, &digitalocean.LookupContainerRegistryArgs{
     * 			Name: "example",
     * 		}, nil)
     * 		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.GetContainerRegistryArgs;
     * 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 example = DigitaloceanFunctions.getContainerRegistry(GetContainerRegistryArgs.builder()
     *             .name("example")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getContainerRegistry
     *       Arguments:
     *         name: example
     * ```
     * 
     * @param argument A collection of arguments for invoking getContainerRegistry.
     * @return A collection of values returned by getContainerRegistry.
     */
    public suspend fun getContainerRegistry(argument: GetContainerRegistryPlainArgs): GetContainerRegistryResult =
        getContainerRegistryResultToKotlin(getContainerRegistryPlain(argument.toJava()).await())

    /**
     * @see [getContainerRegistry].
     * @param name The name of the container registry.
     * @return A collection of values returned by getContainerRegistry.
     */
    public suspend fun getContainerRegistry(name: String): GetContainerRegistryResult {
        val argument = GetContainerRegistryPlainArgs(
            name = name,
        )
        return getContainerRegistryResultToKotlin(getContainerRegistryPlain(argument.toJava()).await())
    }

    /**
     * @see [getContainerRegistry].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetContainerRegistryPlainArgs].
     * @return A collection of values returned by getContainerRegistry.
     */
    public suspend fun getContainerRegistry(argument: suspend GetContainerRegistryPlainArgsBuilder.() -> Unit): GetContainerRegistryResult {
        val builder = GetContainerRegistryPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getContainerRegistryResultToKotlin(getContainerRegistryPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides the CA certificate for a DigitalOcean database.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const ca = digitalocean.getDatabaseCa({
     *     clusterId: "aaa-bbb-ccc-ddd",
     * });
     * export const caOutput = ca.then(ca => ca.certificate);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * ca = digitalocean.get_database_ca(cluster_id="aaa-bbb-ccc-ddd")
     * pulumi.export("caOutput", ca.certificate)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var ca = DigitalOcean.GetDatabaseCa.Invoke(new()
     *     {
     *         ClusterId = "aaa-bbb-ccc-ddd",
     *     });
     *     return new Dictionary
     *     {
     *         ["caOutput"] = ca.Apply(getDatabaseCaResult => getDatabaseCaResult.Certificate),
     *     };
     * });
     * ```
     * ```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 {
     * 		ca, err := digitalocean.GetDatabaseCa(ctx, &digitalocean.GetDatabaseCaArgs{
     * 			ClusterId: "aaa-bbb-ccc-ddd",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("caOutput", ca.Certificate)
     * 		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.GetDatabaseCaArgs;
     * 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 ca = DigitaloceanFunctions.getDatabaseCa(GetDatabaseCaArgs.builder()
     *             .clusterId("aaa-bbb-ccc-ddd")
     *             .build());
     *         ctx.export("caOutput", ca.applyValue(getDatabaseCaResult -> getDatabaseCaResult.certificate()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   ca:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseCa
     *       Arguments:
     *         clusterId: aaa-bbb-ccc-ddd
     * outputs:
     *   caOutput: ${ca.certificate}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDatabaseCa.
     * @return A collection of values returned by getDatabaseCa.
     */
    public suspend fun getDatabaseCa(argument: GetDatabaseCaPlainArgs): GetDatabaseCaResult =
        getDatabaseCaResultToKotlin(getDatabaseCaPlain(argument.toJava()).await())

    /**
     * @see [getDatabaseCa].
     * @param clusterId The ID of the source database cluster.
     * @return A collection of values returned by getDatabaseCa.
     */
    public suspend fun getDatabaseCa(clusterId: String): GetDatabaseCaResult {
        val argument = GetDatabaseCaPlainArgs(
            clusterId = clusterId,
        )
        return getDatabaseCaResultToKotlin(getDatabaseCaPlain(argument.toJava()).await())
    }

    /**
     * @see [getDatabaseCa].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDatabaseCaPlainArgs].
     * @return A collection of values returned by getDatabaseCa.
     */
    public suspend fun getDatabaseCa(argument: suspend GetDatabaseCaPlainArgsBuilder.() -> Unit): GetDatabaseCaResult {
        val builder = GetDatabaseCaPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDatabaseCaResultToKotlin(getDatabaseCaPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides information on a DigitalOcean database cluster resource.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDatabaseCluster({
     *     name: "example-cluster",
     * });
     * export const databaseOutput = example.then(example => example.uri);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_database_cluster(name="example-cluster")
     * pulumi.export("databaseOutput", example.uri)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDatabaseCluster.Invoke(new()
     *     {
     *         Name = "example-cluster",
     *     });
     *     return new Dictionary
     *     {
     *         ["databaseOutput"] = example.Apply(getDatabaseClusterResult => getDatabaseClusterResult.Uri),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupDatabaseCluster(ctx, &digitalocean.LookupDatabaseClusterArgs{
     * 			Name: "example-cluster",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("databaseOutput", example.Uri)
     * 		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.GetDatabaseClusterArgs;
     * 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 example = DigitaloceanFunctions.getDatabaseCluster(GetDatabaseClusterArgs.builder()
     *             .name("example-cluster")
     *             .build());
     *         ctx.export("databaseOutput", example.applyValue(getDatabaseClusterResult -> getDatabaseClusterResult.uri()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseCluster
     *       Arguments:
     *         name: example-cluster
     * outputs:
     *   databaseOutput: ${example.uri}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDatabaseCluster.
     * @return A collection of values returned by getDatabaseCluster.
     */
    public suspend fun getDatabaseCluster(argument: GetDatabaseClusterPlainArgs): GetDatabaseClusterResult =
        getDatabaseClusterResultToKotlin(getDatabaseClusterPlain(argument.toJava()).await())

    /**
     * @see [getDatabaseCluster].
     * @param name The name of the database cluster.
     * @param tags
     * @return A collection of values returned by getDatabaseCluster.
     */
    public suspend fun getDatabaseCluster(name: String, tags: List? = null): GetDatabaseClusterResult {
        val argument = GetDatabaseClusterPlainArgs(
            name = name,
            tags = tags,
        )
        return getDatabaseClusterResultToKotlin(getDatabaseClusterPlain(argument.toJava()).await())
    }

    /**
     * @see [getDatabaseCluster].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDatabaseClusterPlainArgs].
     * @return A collection of values returned by getDatabaseCluster.
     */
    public suspend fun getDatabaseCluster(argument: suspend GetDatabaseClusterPlainArgsBuilder.() -> Unit): GetDatabaseClusterResult {
        val builder = GetDatabaseClusterPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDatabaseClusterResultToKotlin(getDatabaseClusterPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides information on a DigitalOcean PostgreSQL database connection pool.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDatabaseCluster({
     *     name: "example-cluster",
     * });
     * const read-only = example.then(example => digitalocean.getDatabaseConnectionPool({
     *     clusterId: example.id,
     *     name: "pool-01",
     * }));
     * export const connectionPoolUriOutput = read_only.then(read_only => read_only.uri);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_database_cluster(name="example-cluster")
     * read_only = digitalocean.get_database_connection_pool(cluster_id=example.id,
     *     name="pool-01")
     * pulumi.export("connectionPoolUriOutput", read_only.uri)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDatabaseCluster.Invoke(new()
     *     {
     *         Name = "example-cluster",
     *     });
     *     var read_only = DigitalOcean.GetDatabaseConnectionPool.Invoke(new()
     *     {
     *         ClusterId = example.Apply(getDatabaseClusterResult => getDatabaseClusterResult.Id),
     *         Name = "pool-01",
     *     });
     *     return new Dictionary
     *     {
     *         ["connectionPoolUriOutput"] = read_only.Apply(read_only => read_only.Apply(getDatabaseConnectionPoolResult => getDatabaseConnectionPoolResult.Uri)),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupDatabaseCluster(ctx, &digitalocean.LookupDatabaseClusterArgs{
     * 			Name: "example-cluster",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		read_only, err := digitalocean.LookupDatabaseConnectionPool(ctx, &digitalocean.LookupDatabaseConnectionPoolArgs{
     * 			ClusterId: example.Id,
     * 			Name:      "pool-01",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("connectionPoolUriOutput", read_only.Uri)
     * 		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.GetDatabaseClusterArgs;
     * import com.pulumi.digitalocean.inputs.GetDatabaseConnectionPoolArgs;
     * 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 example = DigitaloceanFunctions.getDatabaseCluster(GetDatabaseClusterArgs.builder()
     *             .name("example-cluster")
     *             .build());
     *         final var read-only = DigitaloceanFunctions.getDatabaseConnectionPool(GetDatabaseConnectionPoolArgs.builder()
     *             .clusterId(example.applyValue(getDatabaseClusterResult -> getDatabaseClusterResult.id()))
     *             .name("pool-01")
     *             .build());
     *         ctx.export("connectionPoolUriOutput", read_only.uri());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseCluster
     *       Arguments:
     *         name: example-cluster
     *   read-only:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseConnectionPool
     *       Arguments:
     *         clusterId: ${example.id}
     *         name: pool-01
     * outputs:
     *   connectionPoolUriOutput: ${["read-only"].uri}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDatabaseConnectionPool.
     * @return A collection of values returned by getDatabaseConnectionPool.
     */
    public suspend fun getDatabaseConnectionPool(argument: GetDatabaseConnectionPoolPlainArgs): GetDatabaseConnectionPoolResult =
        getDatabaseConnectionPoolResultToKotlin(getDatabaseConnectionPoolPlain(argument.toJava()).await())

    /**
     * @see [getDatabaseConnectionPool].
     * @param clusterId The ID of the original source database cluster.
     * @param name The name for the database connection pool.
     * @return A collection of values returned by getDatabaseConnectionPool.
     */
    public suspend fun getDatabaseConnectionPool(clusterId: String, name: String): GetDatabaseConnectionPoolResult {
        val argument = GetDatabaseConnectionPoolPlainArgs(
            clusterId = clusterId,
            name = name,
        )
        return getDatabaseConnectionPoolResultToKotlin(getDatabaseConnectionPoolPlain(argument.toJava()).await())
    }

    /**
     * @see [getDatabaseConnectionPool].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDatabaseConnectionPoolPlainArgs].
     * @return A collection of values returned by getDatabaseConnectionPool.
     */
    public suspend fun getDatabaseConnectionPool(argument: suspend GetDatabaseConnectionPoolPlainArgsBuilder.() -> Unit): GetDatabaseConnectionPoolResult {
        val builder = GetDatabaseConnectionPoolPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDatabaseConnectionPoolResultToKotlin(getDatabaseConnectionPoolPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides information on a DigitalOcean database replica.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDatabaseCluster({
     *     name: "example-cluster",
     * });
     * const read-only = example.then(example => digitalocean.getDatabaseReplica({
     *     clusterId: example.id,
     *     name: "terra-test-ro",
     * }));
     * export const replicaOutput = read_only.then(read_only => read_only.uri);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_database_cluster(name="example-cluster")
     * read_only = digitalocean.get_database_replica(cluster_id=example.id,
     *     name="terra-test-ro")
     * pulumi.export("replicaOutput", read_only.uri)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDatabaseCluster.Invoke(new()
     *     {
     *         Name = "example-cluster",
     *     });
     *     var read_only = DigitalOcean.GetDatabaseReplica.Invoke(new()
     *     {
     *         ClusterId = example.Apply(getDatabaseClusterResult => getDatabaseClusterResult.Id),
     *         Name = "terra-test-ro",
     *     });
     *     return new Dictionary
     *     {
     *         ["replicaOutput"] = read_only.Apply(read_only => read_only.Apply(getDatabaseReplicaResult => getDatabaseReplicaResult.Uri)),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupDatabaseCluster(ctx, &digitalocean.LookupDatabaseClusterArgs{
     * 			Name: "example-cluster",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		read_only, err := digitalocean.LookupDatabaseReplica(ctx, &digitalocean.LookupDatabaseReplicaArgs{
     * 			ClusterId: example.Id,
     * 			Name:      "terra-test-ro",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("replicaOutput", read_only.Uri)
     * 		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.GetDatabaseClusterArgs;
     * import com.pulumi.digitalocean.inputs.GetDatabaseReplicaArgs;
     * 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 example = DigitaloceanFunctions.getDatabaseCluster(GetDatabaseClusterArgs.builder()
     *             .name("example-cluster")
     *             .build());
     *         final var read-only = DigitaloceanFunctions.getDatabaseReplica(GetDatabaseReplicaArgs.builder()
     *             .clusterId(example.applyValue(getDatabaseClusterResult -> getDatabaseClusterResult.id()))
     *             .name("terra-test-ro")
     *             .build());
     *         ctx.export("replicaOutput", read_only.uri());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseCluster
     *       Arguments:
     *         name: example-cluster
     *   read-only:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseReplica
     *       Arguments:
     *         clusterId: ${example.id}
     *         name: terra-test-ro
     * outputs:
     *   replicaOutput: ${["read-only"].uri}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDatabaseReplica.
     * @return A collection of values returned by getDatabaseReplica.
     */
    public suspend fun getDatabaseReplica(argument: GetDatabaseReplicaPlainArgs): GetDatabaseReplicaResult =
        getDatabaseReplicaResultToKotlin(getDatabaseReplicaPlain(argument.toJava()).await())

    /**
     * @see [getDatabaseReplica].
     * @param clusterId The ID of the original source database cluster.
     * @param name The name for the database replica.
     * @param tags A list of tag names to be applied to the database replica.
     * @return A collection of values returned by getDatabaseReplica.
     */
    public suspend fun getDatabaseReplica(
        clusterId: String,
        name: String,
        tags: List? = null,
    ): GetDatabaseReplicaResult {
        val argument = GetDatabaseReplicaPlainArgs(
            clusterId = clusterId,
            name = name,
            tags = tags,
        )
        return getDatabaseReplicaResultToKotlin(getDatabaseReplicaPlain(argument.toJava()).await())
    }

    /**
     * @see [getDatabaseReplica].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDatabaseReplicaPlainArgs].
     * @return A collection of values returned by getDatabaseReplica.
     */
    public suspend fun getDatabaseReplica(argument: suspend GetDatabaseReplicaPlainArgsBuilder.() -> Unit): GetDatabaseReplicaResult {
        val builder = GetDatabaseReplicaPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDatabaseReplicaResultToKotlin(getDatabaseReplicaPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides information on a DigitalOcean database user resource.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const main = digitalocean.getDatabaseCluster({
     *     name: "main-cluster",
     * });
     * const example = main.then(main => digitalocean.getDatabaseUser({
     *     clusterId: main.id,
     *     name: "example-user",
     * }));
     * export const databaseUserPassword = example.then(example => example.password);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * main = digitalocean.get_database_cluster(name="main-cluster")
     * example = digitalocean.get_database_user(cluster_id=main.id,
     *     name="example-user")
     * pulumi.export("databaseUserPassword", example.password)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var main = DigitalOcean.GetDatabaseCluster.Invoke(new()
     *     {
     *         Name = "main-cluster",
     *     });
     *     var example = DigitalOcean.GetDatabaseUser.Invoke(new()
     *     {
     *         ClusterId = main.Apply(getDatabaseClusterResult => getDatabaseClusterResult.Id),
     *         Name = "example-user",
     *     });
     *     return new Dictionary
     *     {
     *         ["databaseUserPassword"] = example.Apply(getDatabaseUserResult => getDatabaseUserResult.Password),
     *     };
     * });
     * ```
     * ```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 {
     * 		main, err := digitalocean.LookupDatabaseCluster(ctx, &digitalocean.LookupDatabaseClusterArgs{
     * 			Name: "main-cluster",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		example, err := digitalocean.LookupDatabaseUser(ctx, &digitalocean.LookupDatabaseUserArgs{
     * 			ClusterId: main.Id,
     * 			Name:      "example-user",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("databaseUserPassword", example.Password)
     * 		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.GetDatabaseClusterArgs;
     * import com.pulumi.digitalocean.inputs.GetDatabaseUserArgs;
     * 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 main = DigitaloceanFunctions.getDatabaseCluster(GetDatabaseClusterArgs.builder()
     *             .name("main-cluster")
     *             .build());
     *         final var example = DigitaloceanFunctions.getDatabaseUser(GetDatabaseUserArgs.builder()
     *             .clusterId(main.applyValue(getDatabaseClusterResult -> getDatabaseClusterResult.id()))
     *             .name("example-user")
     *             .build());
     *         ctx.export("databaseUserPassword", example.applyValue(getDatabaseUserResult -> getDatabaseUserResult.password()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   main:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseCluster
     *       Arguments:
     *         name: main-cluster
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDatabaseUser
     *       Arguments:
     *         clusterId: ${main.id}
     *         name: example-user
     * outputs:
     *   databaseUserPassword: ${example.password}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDatabaseUser.
     * @return A collection of values returned by getDatabaseUser.
     */
    public suspend fun getDatabaseUser(argument: GetDatabaseUserPlainArgs): GetDatabaseUserResult =
        getDatabaseUserResultToKotlin(getDatabaseUserPlain(argument.toJava()).await())

    /**
     * @see [getDatabaseUser].
     * @param clusterId The ID of the database cluster.
     * @param name The name of the database user.
     * @return A collection of values returned by getDatabaseUser.
     */
    public suspend fun getDatabaseUser(clusterId: String, name: String): GetDatabaseUserResult {
        val argument = GetDatabaseUserPlainArgs(
            clusterId = clusterId,
            name = name,
        )
        return getDatabaseUserResultToKotlin(getDatabaseUserPlain(argument.toJava()).await())
    }

    /**
     * @see [getDatabaseUser].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDatabaseUserPlainArgs].
     * @return A collection of values returned by getDatabaseUser.
     */
    public suspend fun getDatabaseUser(argument: suspend GetDatabaseUserPlainArgsBuilder.() -> Unit): GetDatabaseUserResult {
        val builder = GetDatabaseUserPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDatabaseUserResultToKotlin(getDatabaseUserPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a domain. This data source provides the name, TTL, and zone
     * file as configured on your DigitalOcean account. This is useful if the domain
     * name in question is not managed by this provider or you need to utilize TTL or zone
     * file data.
     * An error is triggered if the provided domain name is not managed with your
     * DigitalOcean account.
     * ## Example Usage
     * Get the zone file for a domain:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDomain({
     *     name: "example.com",
     * });
     * export const domainOutput = example.then(example => example.zoneFile);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_domain(name="example.com")
     * pulumi.export("domainOutput", example.zone_file)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDomain.Invoke(new()
     *     {
     *         Name = "example.com",
     *     });
     *     return new Dictionary
     *     {
     *         ["domainOutput"] = example.Apply(getDomainResult => getDomainResult.ZoneFile),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupDomain(ctx, &digitalocean.LookupDomainArgs{
     * 			Name: "example.com",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("domainOutput", example.ZoneFile)
     * 		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.GetDomainArgs;
     * 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 example = DigitaloceanFunctions.getDomain(GetDomainArgs.builder()
     *             .name("example.com")
     *             .build());
     *         ctx.export("domainOutput", example.applyValue(getDomainResult -> getDomainResult.zoneFile()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDomain
     *       Arguments:
     *         name: example.com
     * outputs:
     *   domainOutput: ${example.zoneFile}
     * ```
     * 
     * ```
     * data.digitalocean_domain.example: Refreshing state...
     * Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
     * Outputs:
     * domain_output = $ORIGIN example.com.
     * $TTL 1800
     * example.com. IN SOA ns1.digitalocean.com. hostmaster.example.com. 1516944700 10800 3600 604800 1800
     * example.com. 1800 IN NS ns1.digitalocean.com.
     * example.com. 1800 IN NS ns2.digitalocean.com.
     * example.com. 1800 IN NS ns3.digitalocean.com.
     * www.example.com. 3600 IN A 176.107.155.137
     * db.example.com. 3600 IN A 179.189.166.115
     * jira.example.com. 3600 IN A 207.189.228.15
     * ```
     * @param argument A collection of arguments for invoking getDomain.
     * @return A collection of values returned by getDomain.
     */
    public suspend fun getDomain(argument: GetDomainPlainArgs): GetDomainResult =
        getDomainResultToKotlin(getDomainPlain(argument.toJava()).await())

    /**
     * @see [getDomain].
     * @param name The name of the domain.
     * @return A collection of values returned by getDomain.
     */
    public suspend fun getDomain(name: String): GetDomainResult {
        val argument = GetDomainPlainArgs(
            name = name,
        )
        return getDomainResultToKotlin(getDomainPlain(argument.toJava()).await())
    }

    /**
     * @see [getDomain].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDomainPlainArgs].
     * @return A collection of values returned by getDomain.
     */
    public suspend fun getDomain(argument: suspend GetDomainPlainArgsBuilder.() -> Unit): GetDomainResult {
        val builder = GetDomainPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDomainResultToKotlin(getDomainPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on domains for use in other resources, with the ability to filter and sort the results.
     * If no filters are specified, all domains will be returned.
     * This data source is useful if the domains in question are not managed by this provider or you need to
     * utilize any of the domains' data.
     * Note: You can use the `digitalocean.Domain` data source to obtain metadata
     * about a single domain if you already know the `name`.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter domains. (This example
     * also uses the regular expression `match_by` mode in order to match domains by suffix.)
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const examples = digitalocean.getDomains({
     *     filters: [{
     *         key: "name",
     *         values: ["example\\.com$"],
     *         matchBy: "re",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * examples = digitalocean.get_domains(filters=[{
     *     "key": "name",
     *     "values": ["example\\.com$"],
     *     "match_by": "re",
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var examples = DigitalOcean.GetDomains.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetDomainsFilterInputArgs
     *             {
     *                 Key = "name",
     *                 Values = new[]
     *                 {
     *                     "example\\.com$",
     *                 },
     *                 MatchBy = "re",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetDomains(ctx, &digitalocean.GetDomainsArgs{
     * 			Filters: []digitalocean.GetDomainsFilter{
     * 				{
     * 					Key: "name",
     * 					Values: []string{
     * 						"example\\.com$",
     * 					},
     * 					MatchBy: pulumi.StringRef("re"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetDomainsArgs;
     * 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 examples = DigitaloceanFunctions.getDomains(GetDomainsArgs.builder()
     *             .filters(GetDomainsFilterArgs.builder()
     *                 .key("name")
     *                 .values("example\\.com$")
     *                 .matchBy("re")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   examples:
     *     fn::invoke:
     *       Function: digitalocean:getDomains
     *       Arguments:
     *         filters:
     *           - key: name
     *             values:
     *               - example\.com$
     *             matchBy: re
     * ```
     * 
     * @param argument A collection of arguments for invoking getDomains.
     * @return A collection of values returned by getDomains.
     */
    public suspend fun getDomains(argument: GetDomainsPlainArgs): GetDomainsResult =
        getDomainsResultToKotlin(getDomainsPlain(argument.toJava()).await())

    /**
     * @see [getDomains].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getDomains.
     */
    public suspend fun getDomains(
        filters: List? = null,
        sorts: List? = null,
    ): GetDomainsResult {
        val argument = GetDomainsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getDomainsResultToKotlin(getDomainsPlain(argument.toJava()).await())
    }

    /**
     * @see [getDomains].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDomainsPlainArgs].
     * @return A collection of values returned by getDomains.
     */
    public suspend fun getDomains(argument: suspend GetDomainsPlainArgsBuilder.() -> Unit): GetDomainsResult {
        val builder = GetDomainsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDomainsResultToKotlin(getDomainsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a Droplet for use in other resources. This data source provides
     * all of the Droplet's properties as configured on your DigitalOcean account. This
     * is useful if the Droplet in question is not managed by this provider or you need to
     * utilize any of the Droplet's data.
     * **Note:** This data source returns a single Droplet. When specifying a `tag`, an
     * error is triggered if more than one Droplet is found.
     * ## Example Usage
     * Get the Droplet by name:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDroplet({
     *     name: "web",
     * });
     * export const dropletOutput = example.then(example => example.ipv4Address);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_droplet(name="web")
     * pulumi.export("dropletOutput", example.ipv4_address)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDroplet.Invoke(new()
     *     {
     *         Name = "web",
     *     });
     *     return new Dictionary
     *     {
     *         ["dropletOutput"] = example.Apply(getDropletResult => getDropletResult.Ipv4Address),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupDroplet(ctx, &digitalocean.LookupDropletArgs{
     * 			Name: pulumi.StringRef("web"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("dropletOutput", example.Ipv4Address)
     * 		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.GetDropletArgs;
     * 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 example = DigitaloceanFunctions.getDroplet(GetDropletArgs.builder()
     *             .name("web")
     *             .build());
     *         ctx.export("dropletOutput", example.applyValue(getDropletResult -> getDropletResult.ipv4Address()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDroplet
     *       Arguments:
     *         name: web
     * outputs:
     *   dropletOutput: ${example.ipv4Address}
     * ```
     * 
     * Get the Droplet by tag:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDroplet({
     *     tag: "web",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_droplet(tag="web")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDroplet.Invoke(new()
     *     {
     *         Tag = "web",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupDroplet(ctx, &digitalocean.LookupDropletArgs{
     * 			Tag: pulumi.StringRef("web"),
     * 		}, nil)
     * 		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.GetDropletArgs;
     * 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 example = DigitaloceanFunctions.getDroplet(GetDropletArgs.builder()
     *             .tag("web")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDroplet
     *       Arguments:
     *         tag: web
     * ```
     * 
     * Get the Droplet by ID:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getDroplet({
     *     id: exampleDigitaloceanKubernetesCluster.nodePool[0].nodes[0].dropletId,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_droplet(id=example_digitalocean_kubernetes_cluster["nodePool"][0]["nodes"][0]["dropletId"])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetDroplet.Invoke(new()
     *     {
     *         Id = exampleDigitaloceanKubernetesCluster.NodePool[0].Nodes[0].DropletId,
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupDroplet(ctx, &digitalocean.LookupDropletArgs{
     * 			Id: pulumi.IntRef(exampleDigitaloceanKubernetesCluster.NodePool[0].Nodes[0].DropletId),
     * 		}, nil)
     * 		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.GetDropletArgs;
     * 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 example = DigitaloceanFunctions.getDroplet(GetDropletArgs.builder()
     *             .id(exampleDigitaloceanKubernetesCluster.nodePool()[0].nodes()[0].dropletId())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getDroplet
     *       Arguments:
     *         id: ${exampleDigitaloceanKubernetesCluster.nodePool[0].nodes[0].dropletId}
     * ```
     * 
     * @param argument A collection of arguments for invoking getDroplet.
     * @return A collection of values returned by getDroplet.
     */
    public suspend fun getDroplet(argument: GetDropletPlainArgs): GetDropletResult =
        getDropletResultToKotlin(getDropletPlain(argument.toJava()).await())

    /**
     * @see [getDroplet].
     * @param id The ID of the Droplet
     * @param name The name of the Droplet.
     * @param tag A tag applied to the Droplet.
     * @return A collection of values returned by getDroplet.
     */
    public suspend fun getDroplet(
        id: Int? = null,
        name: String? = null,
        tag: String? = null,
    ): GetDropletResult {
        val argument = GetDropletPlainArgs(
            id = id,
            name = name,
            tag = tag,
        )
        return getDropletResultToKotlin(getDropletPlain(argument.toJava()).await())
    }

    /**
     * @see [getDroplet].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDropletPlainArgs].
     * @return A collection of values returned by getDroplet.
     */
    public suspend fun getDroplet(argument: suspend GetDropletPlainArgsBuilder.() -> Unit): GetDropletResult {
        val builder = GetDropletPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDropletResultToKotlin(getDropletPlain(builtArgument.toJava()).await())
    }

    /**
     * Droplet snapshots are saved instances of a Droplet. Use this data
     * source to retrieve the ID of a DigitalOcean Droplet snapshot for use in other
     * resources.
     * ## Example Usage
     * Get the Droplet snapshot:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const web-snapshot = digitalocean.getDropletSnapshot({
     *     nameRegex: "^web",
     *     region: "nyc3",
     *     mostRecent: true,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * web_snapshot = digitalocean.get_droplet_snapshot(name_regex="^web",
     *     region="nyc3",
     *     most_recent=True)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var web_snapshot = DigitalOcean.GetDropletSnapshot.Invoke(new()
     *     {
     *         NameRegex = "^web",
     *         Region = "nyc3",
     *         MostRecent = true,
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupDropletSnapshot(ctx, &digitalocean.LookupDropletSnapshotArgs{
     * 			NameRegex:  pulumi.StringRef("^web"),
     * 			Region:     pulumi.StringRef("nyc3"),
     * 			MostRecent: pulumi.BoolRef(true),
     * 		}, nil)
     * 		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.GetDropletSnapshotArgs;
     * 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 web-snapshot = DigitaloceanFunctions.getDropletSnapshot(GetDropletSnapshotArgs.builder()
     *             .nameRegex("^web")
     *             .region("nyc3")
     *             .mostRecent(true)
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   web-snapshot:
     *     fn::invoke:
     *       Function: digitalocean:getDropletSnapshot
     *       Arguments:
     *         nameRegex: ^web
     *         region: nyc3
     *         mostRecent: true
     * ```
     * 
     * Create image from snapshot:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const web-snapshot = digitalocean.getDropletSnapshot({
     *     nameRegex: "^web",
     *     region: "nyc3",
     *     mostRecent: true,
     * });
     * const from_snapshot = new digitalocean.Droplet("from-snapshot", {
     *     image: web_snapshot.then(web_snapshot => web_snapshot.id),
     *     name: "web-02",
     *     region: digitalocean.Region.NYC3,
     *     size: digitalocean.DropletSlug.DropletS2VCPU4GB,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * web_snapshot = digitalocean.get_droplet_snapshot(name_regex="^web",
     *     region="nyc3",
     *     most_recent=True)
     * from_snapshot = digitalocean.Droplet("from-snapshot",
     *     image=web_snapshot.id,
     *     name="web-02",
     *     region=digitalocean.Region.NYC3,
     *     size=digitalocean.DropletSlug.DROPLET_S2_VCPU4_GB)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var web_snapshot = DigitalOcean.GetDropletSnapshot.Invoke(new()
     *     {
     *         NameRegex = "^web",
     *         Region = "nyc3",
     *         MostRecent = true,
     *     });
     *     var from_snapshot = new DigitalOcean.Droplet("from-snapshot", new()
     *     {
     *         Image = web_snapshot.Apply(web_snapshot => web_snapshot.Apply(getDropletSnapshotResult => getDropletSnapshotResult.Id)),
     *         Name = "web-02",
     *         Region = DigitalOcean.Region.NYC3,
     *         Size = DigitalOcean.DropletSlug.DropletS2VCPU4GB,
     *     });
     * });
     * ```
     * ```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 {
     * 		web_snapshot, err := digitalocean.LookupDropletSnapshot(ctx, &digitalocean.LookupDropletSnapshotArgs{
     * 			NameRegex:  pulumi.StringRef("^web"),
     * 			Region:     pulumi.StringRef("nyc3"),
     * 			MostRecent: pulumi.BoolRef(true),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "from-snapshot", &digitalocean.DropletArgs{
     * 			Image:  pulumi.String(web_snapshot.Id),
     * 			Name:   pulumi.String("web-02"),
     * 			Region: pulumi.String(digitalocean.RegionNYC3),
     * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS2VCPU4GB),
     * 		})
     * 		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.GetDropletSnapshotArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 web-snapshot = DigitaloceanFunctions.getDropletSnapshot(GetDropletSnapshotArgs.builder()
     *             .nameRegex("^web")
     *             .region("nyc3")
     *             .mostRecent(true)
     *             .build());
     *         var from_snapshot = new Droplet("from-snapshot", DropletArgs.builder()
     *             .image(web_snapshot.id())
     *             .name("web-02")
     *             .region("nyc3")
     *             .size("s-2vcpu-4gb")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   from-snapshot:
     *     type: digitalocean:Droplet
     *     properties:
     *       image: ${["web-snapshot"].id}
     *       name: web-02
     *       region: nyc3
     *       size: s-2vcpu-4gb
     * variables:
     *   web-snapshot:
     *     fn::invoke:
     *       Function: digitalocean:getDropletSnapshot
     *       Arguments:
     *         nameRegex: ^web
     *         region: nyc3
     *         mostRecent: true
     * ```
     * 
     * @param argument A collection of arguments for invoking getDropletSnapshot.
     * @return A collection of values returned by getDropletSnapshot.
     */
    public suspend fun getDropletSnapshot(argument: GetDropletSnapshotPlainArgs): GetDropletSnapshotResult =
        getDropletSnapshotResultToKotlin(getDropletSnapshotPlain(argument.toJava()).await())

    /**
     * @see [getDropletSnapshot].
     * @param mostRecent If more than one result is returned, use the most recent Droplet snapshot.
     * > **NOTE:** If more or less than a single match is returned by the search,
     * the update will fail. Ensure that your search is specific enough to return
     * a single Droplet snapshot ID only, or use `most_recent` to choose the most recent one.
     * @param name The name of the Droplet snapshot.
     * @param nameRegex A regex string to apply to the Droplet snapshot list returned by DigitalOcean. This allows more advanced filtering not supported from the DigitalOcean API. This filtering is done locally on what DigitalOcean returns.
     * @param region A "slug" representing a DigitalOcean region (e.g. `nyc1`). If set, only Droplet snapshots available in the region will be returned.
     * @return A collection of values returned by getDropletSnapshot.
     */
    public suspend fun getDropletSnapshot(
        mostRecent: Boolean? = null,
        name: String? = null,
        nameRegex: String? = null,
        region: String? = null,
    ): GetDropletSnapshotResult {
        val argument = GetDropletSnapshotPlainArgs(
            mostRecent = mostRecent,
            name = name,
            nameRegex = nameRegex,
            region = region,
        )
        return getDropletSnapshotResultToKotlin(getDropletSnapshotPlain(argument.toJava()).await())
    }

    /**
     * @see [getDropletSnapshot].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDropletSnapshotPlainArgs].
     * @return A collection of values returned by getDropletSnapshot.
     */
    public suspend fun getDropletSnapshot(argument: suspend GetDropletSnapshotPlainArgsBuilder.() -> Unit): GetDropletSnapshotResult {
        val builder = GetDropletSnapshotPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDropletSnapshotResultToKotlin(getDropletSnapshotPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on Droplets for use in other resources, with the ability to filter and sort the results.
     * If no filters are specified, all Droplets will be returned.
     * This data source is useful if the Droplets in question are not managed by the provider or you need to
     * utilize any of the Droplets' data.
     * Note: You can use the `digitalocean.Droplet` data source to obtain metadata
     * about a single Droplet if you already know the `id`, unique `name`, or unique `tag` to retrieve.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter images.
     * For example to find all Droplets with size `s-1vcpu-1gb`:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const small = digitalocean.getDroplets({
     *     filters: [{
     *         key: "size",
     *         values: ["s-1vcpu-1gb"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * small = digitalocean.get_droplets(filters=[{
     *     "key": "size",
     *     "values": ["s-1vcpu-1gb"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var small = DigitalOcean.GetDroplets.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetDropletsFilterInputArgs
     *             {
     *                 Key = "size",
     *                 Values = new[]
     *                 {
     *                     "s-1vcpu-1gb",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetDroplets(ctx, &digitalocean.GetDropletsArgs{
     * 			Filters: []digitalocean.GetDropletsFilter{
     * 				{
     * 					Key: "size",
     * 					Values: []string{
     * 						"s-1vcpu-1gb",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetDropletsArgs;
     * 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 small = DigitaloceanFunctions.getDroplets(GetDropletsArgs.builder()
     *             .filters(GetDropletsFilterArgs.builder()
     *                 .key("size")
     *                 .values("s-1vcpu-1gb")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   small:
     *     fn::invoke:
     *       Function: digitalocean:getDroplets
     *       Arguments:
     *         filters:
     *           - key: size
     *             values:
     *               - s-1vcpu-1gb
     * ```
     * 
     * You can filter on multiple fields and sort the results as well:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const small-with-backups = digitalocean.getDroplets({
     *     filters: [
     *         {
     *             key: "size",
     *             values: ["s-1vcpu-1gb"],
     *         },
     *         {
     *             key: "backups",
     *             values: ["true"],
     *         },
     *     ],
     *     sorts: [{
     *         key: "created_at",
     *         direction: "desc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * small_with_backups = digitalocean.get_droplets(filters=[
     *         {
     *             "key": "size",
     *             "values": ["s-1vcpu-1gb"],
     *         },
     *         {
     *             "key": "backups",
     *             "values": ["true"],
     *         },
     *     ],
     *     sorts=[{
     *         "key": "created_at",
     *         "direction": "desc",
     *     }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var small_with_backups = DigitalOcean.GetDroplets.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetDropletsFilterInputArgs
     *             {
     *                 Key = "size",
     *                 Values = new[]
     *                 {
     *                     "s-1vcpu-1gb",
     *                 },
     *             },
     *             new DigitalOcean.Inputs.GetDropletsFilterInputArgs
     *             {
     *                 Key = "backups",
     *                 Values = new[]
     *                 {
     *                     "true",
     *                 },
     *             },
     *         },
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetDropletsSortInputArgs
     *             {
     *                 Key = "created_at",
     *                 Direction = "desc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetDroplets(ctx, &digitalocean.GetDropletsArgs{
     * 			Filters: []digitalocean.GetDropletsFilter{
     * 				{
     * 					Key: "size",
     * 					Values: []string{
     * 						"s-1vcpu-1gb",
     * 					},
     * 				},
     * 				{
     * 					Key: "backups",
     * 					Values: []string{
     * 						"true",
     * 					},
     * 				},
     * 			},
     * 			Sorts: []digitalocean.GetDropletsSort{
     * 				{
     * 					Key:       "created_at",
     * 					Direction: pulumi.StringRef("desc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetDropletsArgs;
     * 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 small-with-backups = DigitaloceanFunctions.getDroplets(GetDropletsArgs.builder()
     *             .filters(
     *                 GetDropletsFilterArgs.builder()
     *                     .key("size")
     *                     .values("s-1vcpu-1gb")
     *                     .build(),
     *                 GetDropletsFilterArgs.builder()
     *                     .key("backups")
     *                     .values("true")
     *                     .build())
     *             .sorts(GetDropletsSortArgs.builder()
     *                 .key("created_at")
     *                 .direction("desc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   small-with-backups:
     *     fn::invoke:
     *       Function: digitalocean:getDroplets
     *       Arguments:
     *         filters:
     *           - key: size
     *             values:
     *               - s-1vcpu-1gb
     *           - key: backups
     *             values:
     *               - 'true'
     *         sorts:
     *           - key: created_at
     *             direction: desc
     * ```
     * 
     * @param argument A collection of arguments for invoking getDroplets.
     * @return A collection of values returned by getDroplets.
     */
    public suspend fun getDroplets(argument: GetDropletsPlainArgs): GetDropletsResult =
        getDropletsResultToKotlin(getDropletsPlain(argument.toJava()).await())

    /**
     * @see [getDroplets].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getDroplets.
     */
    public suspend fun getDroplets(
        filters: List? = null,
        sorts: List? = null,
    ): GetDropletsResult {
        val argument = GetDropletsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getDropletsResultToKotlin(getDropletsPlain(argument.toJava()).await())
    }

    /**
     * @see [getDroplets].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetDropletsPlainArgs].
     * @return A collection of values returned by getDroplets.
     */
    public suspend fun getDroplets(argument: suspend GetDropletsPlainArgsBuilder.() -> Unit): GetDropletsResult {
        val builder = GetDropletsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getDropletsResultToKotlin(getDropletsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a DigitalOcean Firewall.
     * ## Example Usage
     * Get the firewall:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getFirewall({
     *     firewallId: "1df48973-6eef-4214-854f-fa7726e7e583",
     * });
     * export const exampleFirewallName = example.then(example => example.name);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_firewall(firewall_id="1df48973-6eef-4214-854f-fa7726e7e583")
     * pulumi.export("exampleFirewallName", example.name)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetFirewall.Invoke(new()
     *     {
     *         FirewallId = "1df48973-6eef-4214-854f-fa7726e7e583",
     *     });
     *     return new Dictionary
     *     {
     *         ["exampleFirewallName"] = example.Apply(getFirewallResult => getFirewallResult.Name),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupFirewall(ctx, &digitalocean.LookupFirewallArgs{
     * 			FirewallId: "1df48973-6eef-4214-854f-fa7726e7e583",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("exampleFirewallName", example.Name)
     * 		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.GetFirewallArgs;
     * 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 example = DigitaloceanFunctions.getFirewall(GetFirewallArgs.builder()
     *             .firewallId("1df48973-6eef-4214-854f-fa7726e7e583")
     *             .build());
     *         ctx.export("exampleFirewallName", example.applyValue(getFirewallResult -> getFirewallResult.name()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getFirewall
     *       Arguments:
     *         firewallId: 1df48973-6eef-4214-854f-fa7726e7e583
     * outputs:
     *   exampleFirewallName: ${example.name}
     * ```
     * 
     * @param argument A collection of arguments for invoking getFirewall.
     * @return A collection of values returned by getFirewall.
     */
    public suspend fun getFirewall(argument: GetFirewallPlainArgs): GetFirewallResult =
        getFirewallResultToKotlin(getFirewallPlain(argument.toJava()).await())

    /**
     * @see [getFirewall].
     * @param dropletIds The list of the IDs of the Droplets assigned to
     * the Firewall.
     * @param firewallId The ID of the firewall to retrieve information
     * about.
     * @param inboundRules
     * @param outboundRules
     * @param tags The names of the Tags assigned to the Firewall.
     * @return A collection of values returned by getFirewall.
     */
    public suspend fun getFirewall(
        dropletIds: List? = null,
        firewallId: String,
        inboundRules: List? = null,
        outboundRules: List? = null,
        tags: List? = null,
    ): GetFirewallResult {
        val argument = GetFirewallPlainArgs(
            dropletIds = dropletIds,
            firewallId = firewallId,
            inboundRules = inboundRules,
            outboundRules = outboundRules,
            tags = tags,
        )
        return getFirewallResultToKotlin(getFirewallPlain(argument.toJava()).await())
    }

    /**
     * @see [getFirewall].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetFirewallPlainArgs].
     * @return A collection of values returned by getFirewall.
     */
    public suspend fun getFirewall(argument: suspend GetFirewallPlainArgsBuilder.() -> Unit): GetFirewallResult {
        val builder = GetFirewallPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getFirewallResultToKotlin(getFirewallPlain(builtArgument.toJava()).await())
    }

    /**
     * > **Deprecated:** DigitalOcean Floating IPs have been renamed reserved IPs. This data source will be removed in a future release. Please use `digitalocean.ReservedIp` instead.
     * Get information on a floating ip. This data source provides the region and Droplet id
     * as configured on your DigitalOcean account. This is useful if the floating IP
     * in question is not managed by the provider or you need to find the Droplet the IP is
     * attached to.
     * An error is triggered if the provided floating IP does not exist.
     * ## Example Usage
     * Get the floating IP:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const config = new pulumi.Config();
     * const publicIp = config.requireObject("publicIp");
     * const example = digitalocean.getFloatingIp({
     *     ipAddress: publicIp,
     * });
     * export const fipOutput = example.then(example => example.dropletId);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * config = pulumi.Config()
     * public_ip = config.require_object("publicIp")
     * example = digitalocean.get_floating_ip(ip_address=public_ip)
     * pulumi.export("fipOutput", example.droplet_id)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var config = new Config();
     *     var publicIp = config.RequireObject("publicIp");
     *     var example = DigitalOcean.GetFloatingIp.Invoke(new()
     *     {
     *         IpAddress = publicIp,
     *     });
     *     return new Dictionary
     *     {
     *         ["fipOutput"] = example.Apply(getFloatingIpResult => getFloatingIpResult.DropletId),
     *     };
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		cfg := config.New(ctx, "")
     * 		publicIp := cfg.RequireObject("publicIp")
     * 		example, err := digitalocean.LookupFloatingIp(ctx, &digitalocean.LookupFloatingIpArgs{
     * 			IpAddress: publicIp,
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("fipOutput", example.DropletId)
     * 		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.GetFloatingIpArgs;
     * 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 config = ctx.config();
     *         final var publicIp = config.get("publicIp");
     *         final var example = DigitaloceanFunctions.getFloatingIp(GetFloatingIpArgs.builder()
     *             .ipAddress(publicIp)
     *             .build());
     *         ctx.export("fipOutput", example.applyValue(getFloatingIpResult -> getFloatingIpResult.dropletId()));
     *     }
     * }
     * ```
     * ```yaml
     * configuration:
     *   publicIp:
     *     type: dynamic
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getFloatingIp
     *       Arguments:
     *         ipAddress: ${publicIp}
     * outputs:
     *   fipOutput: ${example.dropletId}
     * ```
     * 
     * @param argument A collection of arguments for invoking getFloatingIp.
     * @return A collection of values returned by getFloatingIp.
     */
    public suspend fun getFloatingIp(argument: GetFloatingIpPlainArgs): GetFloatingIpResult =
        getFloatingIpResultToKotlin(getFloatingIpPlain(argument.toJava()).await())

    /**
     * @see [getFloatingIp].
     * @param ipAddress The allocated IP address of the specific floating IP to retrieve.
     * @return A collection of values returned by getFloatingIp.
     */
    public suspend fun getFloatingIp(ipAddress: String): GetFloatingIpResult {
        val argument = GetFloatingIpPlainArgs(
            ipAddress = ipAddress,
        )
        return getFloatingIpResultToKotlin(getFloatingIpPlain(argument.toJava()).await())
    }

    /**
     * @see [getFloatingIp].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetFloatingIpPlainArgs].
     * @return A collection of values returned by getFloatingIp.
     */
    public suspend fun getFloatingIp(argument: suspend GetFloatingIpPlainArgsBuilder.() -> Unit): GetFloatingIpResult {
        val builder = GetFloatingIpPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getFloatingIpResultToKotlin(getFloatingIpPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on an image for use in other resources (e.g. creating a Droplet
     * based on snapshot). This data source provides all of the image properties as
     * configured on your DigitalOcean account. This is useful if the image in question
     * is not managed by the provider or you need to utilize any of the image's data.
     * An error is triggered if zero or more than one result is returned by the query.
     * ## Example Usage
     * Get the data about a snapshot:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example1 = digitalocean.getImage({
     *     name: "example-1.0.0",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example1 = digitalocean.get_image(name="example-1.0.0")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example1 = DigitalOcean.GetImage.Invoke(new()
     *     {
     *         Name = "example-1.0.0",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetImage(ctx, &digitalocean.GetImageArgs{
     * 			Name: pulumi.StringRef("example-1.0.0"),
     * 		}, nil)
     * 		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.GetImageArgs;
     * 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 example1 = DigitaloceanFunctions.getImage(GetImageArgs.builder()
     *             .name("example-1.0.0")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example1:
     *     fn::invoke:
     *       Function: digitalocean:getImage
     *       Arguments:
     *         name: example-1.0.0
     * ```
     * 
     * Reuse the data about a snapshot to create a Droplet:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getImage({
     *     name: "example-1.0.0",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     image: example.then(example => example.id),
     *     name: "example-1",
     *     region: digitalocean.Region.NYC2,
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_image(name="example-1.0.0")
     * example_droplet = digitalocean.Droplet("example",
     *     image=example.id,
     *     name="example-1",
     *     region=digitalocean.Region.NYC2,
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetImage.Invoke(new()
     *     {
     *         Name = "example-1.0.0",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Image = example.Apply(getImageResult => getImageResult.Id),
     *         Name = "example-1",
     *         Region = DigitalOcean.Region.NYC2,
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.GetImage(ctx, &digitalocean.GetImageArgs{
     * 			Name: pulumi.StringRef("example-1.0.0"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Image:  pulumi.Int(example.Id),
     * 			Name:   pulumi.String("example-1"),
     * 			Region: pulumi.String(digitalocean.RegionNYC2),
     * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 		})
     * 		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.GetImageArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getImage(GetImageArgs.builder()
     *             .name("example-1.0.0")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .image(example.applyValue(getImageResult -> getImageResult.id()))
     *             .name("example-1")
     *             .region("nyc2")
     *             .size("s-1vcpu-1gb")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       image: ${example.id}
     *       name: example-1
     *       region: nyc2
     *       size: s-1vcpu-1gb
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getImage
     *       Arguments:
     *         name: example-1.0.0
     * ```
     * 
     * Get the data about an official image:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example2 = digitalocean.getImage({
     *     slug: "ubuntu-18-04-x64",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example2 = digitalocean.get_image(slug="ubuntu-18-04-x64")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example2 = DigitalOcean.GetImage.Invoke(new()
     *     {
     *         Slug = "ubuntu-18-04-x64",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetImage(ctx, &digitalocean.GetImageArgs{
     * 			Slug: pulumi.StringRef("ubuntu-18-04-x64"),
     * 		}, nil)
     * 		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.GetImageArgs;
     * 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 example2 = DigitaloceanFunctions.getImage(GetImageArgs.builder()
     *             .slug("ubuntu-18-04-x64")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example2:
     *     fn::invoke:
     *       Function: digitalocean:getImage
     *       Arguments:
     *         slug: ubuntu-18-04-x64
     * ```
     * 
     * @param argument A collection of arguments for invoking getImage.
     * @return A collection of values returned by getImage.
     */
    public suspend fun getImage(argument: GetImagePlainArgs): GetImageResult =
        getImageResultToKotlin(getImagePlain(argument.toJava()).await())

    /**
     * @see [getImage].
     * @param id The id of the image
     * @param name The name of the image.
     * @param slug The slug of the official image.
     * If `name` is specified, you may also specify:
     * @param source Restrict the search to one of the following categories of images:
     * @return A collection of values returned by getImage.
     */
    public suspend fun getImage(
        id: Int? = null,
        name: String? = null,
        slug: String? = null,
        source: String? = null,
    ): GetImageResult {
        val argument = GetImagePlainArgs(
            id = id,
            name = name,
            slug = slug,
            source = source,
        )
        return getImageResultToKotlin(getImagePlain(argument.toJava()).await())
    }

    /**
     * @see [getImage].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetImagePlainArgs].
     * @return A collection of values returned by getImage.
     */
    public suspend fun getImage(argument: suspend GetImagePlainArgsBuilder.() -> Unit): GetImageResult {
        val builder = GetImagePlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getImageResultToKotlin(getImagePlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on images for use in other resources (e.g. creating a Droplet
     * based on a snapshot), with the ability to filter and sort the results. If no filters are specified,
     * all images will be returned.
     * This data source is useful if the image in question is not managed by the provider or you need to utilize any
     * of the image's data.
     * Note: You can use the `digitalocean.getImage` data source to obtain metadata
     * about a single image if you already know the `slug`, unique `name`, or `id` to retrieve.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter images.
     * For example to find all Ubuntu images:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const ubuntu = digitalocean.getImages({
     *     filters: [{
     *         key: "distribution",
     *         values: ["Ubuntu"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * ubuntu = digitalocean.get_images(filters=[{
     *     "key": "distribution",
     *     "values": ["Ubuntu"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var ubuntu = DigitalOcean.GetImages.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetImagesFilterInputArgs
     *             {
     *                 Key = "distribution",
     *                 Values = new[]
     *                 {
     *                     "Ubuntu",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetImages(ctx, &digitalocean.GetImagesArgs{
     * 			Filters: []digitalocean.GetImagesFilter{
     * 				{
     * 					Key: "distribution",
     * 					Values: []string{
     * 						"Ubuntu",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetImagesArgs;
     * 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 ubuntu = DigitaloceanFunctions.getImages(GetImagesArgs.builder()
     *             .filters(GetImagesFilterArgs.builder()
     *                 .key("distribution")
     *                 .values("Ubuntu")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   ubuntu:
     *     fn::invoke:
     *       Function: digitalocean:getImages
     *       Arguments:
     *         filters:
     *           - key: distribution
     *             values:
     *               - Ubuntu
     * ```
     * 
     * You can filter on multiple fields and sort the results as well:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const available = digitalocean.getImages({
     *     filters: [
     *         {
     *             key: "distribution",
     *             values: ["Ubuntu"],
     *         },
     *         {
     *             key: "regions",
     *             values: ["nyc3"],
     *         },
     *     ],
     *     sorts: [{
     *         key: "created",
     *         direction: "desc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * available = digitalocean.get_images(filters=[
     *         {
     *             "key": "distribution",
     *             "values": ["Ubuntu"],
     *         },
     *         {
     *             "key": "regions",
     *             "values": ["nyc3"],
     *         },
     *     ],
     *     sorts=[{
     *         "key": "created",
     *         "direction": "desc",
     *     }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var available = DigitalOcean.GetImages.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetImagesFilterInputArgs
     *             {
     *                 Key = "distribution",
     *                 Values = new[]
     *                 {
     *                     "Ubuntu",
     *                 },
     *             },
     *             new DigitalOcean.Inputs.GetImagesFilterInputArgs
     *             {
     *                 Key = "regions",
     *                 Values = new[]
     *                 {
     *                     "nyc3",
     *                 },
     *             },
     *         },
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetImagesSortInputArgs
     *             {
     *                 Key = "created",
     *                 Direction = "desc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetImages(ctx, &digitalocean.GetImagesArgs{
     * 			Filters: []digitalocean.GetImagesFilter{
     * 				{
     * 					Key: "distribution",
     * 					Values: []string{
     * 						"Ubuntu",
     * 					},
     * 				},
     * 				{
     * 					Key: "regions",
     * 					Values: []string{
     * 						"nyc3",
     * 					},
     * 				},
     * 			},
     * 			Sorts: []digitalocean.GetImagesSort{
     * 				{
     * 					Key:       "created",
     * 					Direction: pulumi.StringRef("desc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetImagesArgs;
     * 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 available = DigitaloceanFunctions.getImages(GetImagesArgs.builder()
     *             .filters(
     *                 GetImagesFilterArgs.builder()
     *                     .key("distribution")
     *                     .values("Ubuntu")
     *                     .build(),
     *                 GetImagesFilterArgs.builder()
     *                     .key("regions")
     *                     .values("nyc3")
     *                     .build())
     *             .sorts(GetImagesSortArgs.builder()
     *                 .key("created")
     *                 .direction("desc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   available:
     *     fn::invoke:
     *       Function: digitalocean:getImages
     *       Arguments:
     *         filters:
     *           - key: distribution
     *             values:
     *               - Ubuntu
     *           - key: regions
     *             values:
     *               - nyc3
     *         sorts:
     *           - key: created
     *             direction: desc
     * ```
     * 
     * @param argument A collection of arguments for invoking getImages.
     * @return A collection of values returned by getImages.
     */
    public suspend fun getImages(argument: GetImagesPlainArgs): GetImagesResult =
        getImagesResultToKotlin(getImagesPlain(argument.toJava()).await())

    /**
     * @see [getImages].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getImages.
     */
    public suspend fun getImages(
        filters: List? = null,
        sorts: List? =
            null,
    ): GetImagesResult {
        val argument = GetImagesPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getImagesResultToKotlin(getImagesPlain(argument.toJava()).await())
    }

    /**
     * @see [getImages].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetImagesPlainArgs].
     * @return A collection of values returned by getImages.
     */
    public suspend fun getImages(argument: suspend GetImagesPlainArgsBuilder.() -> Unit): GetImagesResult {
        val builder = GetImagesPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getImagesResultToKotlin(getImagesPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieves information about a DigitalOcean Kubernetes cluster for use in other resources. This data source provides all of the cluster's properties as configured on your DigitalOcean account. This is useful if the cluster in question is not managed by the provider.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getKubernetesCluster({
     *     name: "prod-cluster-01",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_kubernetes_cluster(name="prod-cluster-01")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetKubernetesCluster.Invoke(new()
     *     {
     *         Name = "prod-cluster-01",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupKubernetesCluster(ctx, &digitalocean.LookupKubernetesClusterArgs{
     * 			Name: "prod-cluster-01",
     * 		}, nil)
     * 		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.GetKubernetesClusterArgs;
     * 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 example = DigitaloceanFunctions.getKubernetesCluster(GetKubernetesClusterArgs.builder()
     *             .name("prod-cluster-01")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getKubernetesCluster
     *       Arguments:
     *         name: prod-cluster-01
     * ```
     * 
     * @param argument A collection of arguments for invoking getKubernetesCluster.
     * @return A collection of values returned by getKubernetesCluster.
     */
    public suspend fun getKubernetesCluster(argument: GetKubernetesClusterPlainArgs): GetKubernetesClusterResult =
        getKubernetesClusterResultToKotlin(getKubernetesClusterPlain(argument.toJava()).await())

    /**
     * @see [getKubernetesCluster].
     * @param name The name of Kubernetes cluster.
     * @param tags A list of tag names applied to the node pool.
     * @return A collection of values returned by getKubernetesCluster.
     */
    public suspend fun getKubernetesCluster(name: String, tags: List? = null): GetKubernetesClusterResult {
        val argument = GetKubernetesClusterPlainArgs(
            name = name,
            tags = tags,
        )
        return getKubernetesClusterResultToKotlin(getKubernetesClusterPlain(argument.toJava()).await())
    }

    /**
     * @see [getKubernetesCluster].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetKubernetesClusterPlainArgs].
     * @return A collection of values returned by getKubernetesCluster.
     */
    public suspend fun getKubernetesCluster(argument: suspend GetKubernetesClusterPlainArgsBuilder.() -> Unit): GetKubernetesClusterResult {
        val builder = GetKubernetesClusterPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getKubernetesClusterResultToKotlin(getKubernetesClusterPlain(builtArgument.toJava()).await())
    }

    /**
     * Provides access to the available DigitalOcean Kubernetes Service versions.
     * ## Example Usage
     * ### Output a list of all available versions
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * export = async () => {
     *     const example = await digitalocean.getKubernetesVersions({});
     *     return {
     *         "k8s-versions": example.validVersions,
     *     };
     * }
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_kubernetes_versions()
     * pulumi.export("k8s-versions", example.valid_versions)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetKubernetesVersions.Invoke();
     *     return new Dictionary
     *     {
     *         ["k8s-versions"] = example.Apply(getKubernetesVersionsResult => getKubernetesVersionsResult.ValidVersions),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.GetKubernetesVersions(ctx, nil, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("k8s-versions", example.ValidVersions)
     * 		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.GetKubernetesVersionsArgs;
     * 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 example = DigitaloceanFunctions.getKubernetesVersions();
     *         ctx.export("k8s-versions", example.applyValue(getKubernetesVersionsResult -> getKubernetesVersionsResult.validVersions()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getKubernetesVersions
     *       Arguments: {}
     * outputs:
     *   k8s-versions: ${example.validVersions}
     * ```
     * 
     * ### Create a Kubernetes cluster using the most recent version available
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getKubernetesVersions({});
     * const example_cluster = new digitalocean.KubernetesCluster("example-cluster", {
     *     name: "example-cluster",
     *     region: digitalocean.Region.LON1,
     *     version: example.then(example => example.latestVersion),
     *     nodePool: {
     *         name: "default",
     *         size: "s-1vcpu-2gb",
     *         nodeCount: 3,
     *     },
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_kubernetes_versions()
     * example_cluster = digitalocean.KubernetesCluster("example-cluster",
     *     name="example-cluster",
     *     region=digitalocean.Region.LON1,
     *     version=example.latest_version,
     *     node_pool={
     *         "name": "default",
     *         "size": "s-1vcpu-2gb",
     *         "node_count": 3,
     *     })
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetKubernetesVersions.Invoke();
     *     var example_cluster = new DigitalOcean.KubernetesCluster("example-cluster", new()
     *     {
     *         Name = "example-cluster",
     *         Region = DigitalOcean.Region.LON1,
     *         Version = example.Apply(getKubernetesVersionsResult => getKubernetesVersionsResult.LatestVersion),
     *         NodePool = new DigitalOcean.Inputs.KubernetesClusterNodePoolArgs
     *         {
     *             Name = "default",
     *             Size = "s-1vcpu-2gb",
     *             NodeCount = 3,
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.GetKubernetesVersions(ctx, nil, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewKubernetesCluster(ctx, "example-cluster", &digitalocean.KubernetesClusterArgs{
     * 			Name:    pulumi.String("example-cluster"),
     * 			Region:  pulumi.String(digitalocean.RegionLON1),
     * 			Version: pulumi.String(example.LatestVersion),
     * 			NodePool: &digitalocean.KubernetesClusterNodePoolArgs{
     * 				Name:      pulumi.String("default"),
     * 				Size:      pulumi.String("s-1vcpu-2gb"),
     * 				NodeCount: pulumi.Int(3),
     * 			},
     * 		})
     * 		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.GetKubernetesVersionsArgs;
     * import com.pulumi.digitalocean.KubernetesCluster;
     * import com.pulumi.digitalocean.KubernetesClusterArgs;
     * import com.pulumi.digitalocean.inputs.KubernetesClusterNodePoolArgs;
     * 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 example = DigitaloceanFunctions.getKubernetesVersions();
     *         var example_cluster = new KubernetesCluster("example-cluster", KubernetesClusterArgs.builder()
     *             .name("example-cluster")
     *             .region("lon1")
     *             .version(example.applyValue(getKubernetesVersionsResult -> getKubernetesVersionsResult.latestVersion()))
     *             .nodePool(KubernetesClusterNodePoolArgs.builder()
     *                 .name("default")
     *                 .size("s-1vcpu-2gb")
     *                 .nodeCount(3)
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   example-cluster:
     *     type: digitalocean:KubernetesCluster
     *     properties:
     *       name: example-cluster
     *       region: lon1
     *       version: ${example.latestVersion}
     *       nodePool:
     *         name: default
     *         size: s-1vcpu-2gb
     *         nodeCount: 3
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getKubernetesVersions
     *       Arguments: {}
     * ```
     * 
     * ### Pin a Kubernetes cluster to a specific minor version
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getKubernetesVersions({
     *     versionPrefix: "1.22.",
     * });
     * const example_cluster = new digitalocean.KubernetesCluster("example-cluster", {
     *     name: "example-cluster",
     *     region: digitalocean.Region.LON1,
     *     version: example.then(example => example.latestVersion),
     *     nodePool: {
     *         name: "default",
     *         size: "s-1vcpu-2gb",
     *         nodeCount: 3,
     *     },
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_kubernetes_versions(version_prefix="1.22.")
     * example_cluster = digitalocean.KubernetesCluster("example-cluster",
     *     name="example-cluster",
     *     region=digitalocean.Region.LON1,
     *     version=example.latest_version,
     *     node_pool={
     *         "name": "default",
     *         "size": "s-1vcpu-2gb",
     *         "node_count": 3,
     *     })
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetKubernetesVersions.Invoke(new()
     *     {
     *         VersionPrefix = "1.22.",
     *     });
     *     var example_cluster = new DigitalOcean.KubernetesCluster("example-cluster", new()
     *     {
     *         Name = "example-cluster",
     *         Region = DigitalOcean.Region.LON1,
     *         Version = example.Apply(getKubernetesVersionsResult => getKubernetesVersionsResult.LatestVersion),
     *         NodePool = new DigitalOcean.Inputs.KubernetesClusterNodePoolArgs
     *         {
     *             Name = "default",
     *             Size = "s-1vcpu-2gb",
     *             NodeCount = 3,
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.GetKubernetesVersions(ctx, &digitalocean.GetKubernetesVersionsArgs{
     * 			VersionPrefix: pulumi.StringRef("1.22."),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewKubernetesCluster(ctx, "example-cluster", &digitalocean.KubernetesClusterArgs{
     * 			Name:    pulumi.String("example-cluster"),
     * 			Region:  pulumi.String(digitalocean.RegionLON1),
     * 			Version: pulumi.String(example.LatestVersion),
     * 			NodePool: &digitalocean.KubernetesClusterNodePoolArgs{
     * 				Name:      pulumi.String("default"),
     * 				Size:      pulumi.String("s-1vcpu-2gb"),
     * 				NodeCount: pulumi.Int(3),
     * 			},
     * 		})
     * 		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.GetKubernetesVersionsArgs;
     * import com.pulumi.digitalocean.KubernetesCluster;
     * import com.pulumi.digitalocean.KubernetesClusterArgs;
     * import com.pulumi.digitalocean.inputs.KubernetesClusterNodePoolArgs;
     * 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 example = DigitaloceanFunctions.getKubernetesVersions(GetKubernetesVersionsArgs.builder()
     *             .versionPrefix("1.22.")
     *             .build());
     *         var example_cluster = new KubernetesCluster("example-cluster", KubernetesClusterArgs.builder()
     *             .name("example-cluster")
     *             .region("lon1")
     *             .version(example.applyValue(getKubernetesVersionsResult -> getKubernetesVersionsResult.latestVersion()))
     *             .nodePool(KubernetesClusterNodePoolArgs.builder()
     *                 .name("default")
     *                 .size("s-1vcpu-2gb")
     *                 .nodeCount(3)
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   example-cluster:
     *     type: digitalocean:KubernetesCluster
     *     properties:
     *       name: example-cluster
     *       region: lon1
     *       version: ${example.latestVersion}
     *       nodePool:
     *         name: default
     *         size: s-1vcpu-2gb
     *         nodeCount: 3
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getKubernetesVersions
     *       Arguments:
     *         versionPrefix: 1.22.
     * ```
     * 
     * @param argument A collection of arguments for invoking getKubernetesVersions.
     * @return A collection of values returned by getKubernetesVersions.
     */
    public suspend fun getKubernetesVersions(argument: GetKubernetesVersionsPlainArgs): GetKubernetesVersionsResult =
        getKubernetesVersionsResultToKotlin(getKubernetesVersionsPlain(argument.toJava()).await())

    /**
     * @see [getKubernetesVersions].
     * @param versionPrefix If provided, the provider will only return versions that match the string prefix. For example, `1.15.` will match all 1.15.x series releases.
     * @return A collection of values returned by getKubernetesVersions.
     */
    public suspend fun getKubernetesVersions(versionPrefix: String? = null): GetKubernetesVersionsResult {
        val argument = GetKubernetesVersionsPlainArgs(
            versionPrefix = versionPrefix,
        )
        return getKubernetesVersionsResultToKotlin(getKubernetesVersionsPlain(argument.toJava()).await())
    }

    /**
     * @see [getKubernetesVersions].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetKubernetesVersionsPlainArgs].
     * @return A collection of values returned by getKubernetesVersions.
     */
    public suspend fun getKubernetesVersions(argument: suspend GetKubernetesVersionsPlainArgsBuilder.() -> Unit): GetKubernetesVersionsResult {
        val builder = GetKubernetesVersionsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getKubernetesVersionsResultToKotlin(getKubernetesVersionsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a load balancer for use in other resources. This data source
     * provides all of the load balancers properties as configured on your DigitalOcean
     * account. This is useful if the load balancer in question is not managed by
     * the provider or you need to utilize any of the load balancers data.
     * An error is triggered if the provided load balancer name does not exist.
     * ## Example Usage
     * Get the load balancer by name:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getLoadBalancer({
     *     name: "app",
     * });
     * export const lbOutput = example.then(example => example.ip);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_load_balancer(name="app")
     * pulumi.export("lbOutput", example.ip)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetLoadBalancer.Invoke(new()
     *     {
     *         Name = "app",
     *     });
     *     return new Dictionary
     *     {
     *         ["lbOutput"] = example.Apply(getLoadBalancerResult => getLoadBalancerResult.Ip),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupLoadBalancer(ctx, &digitalocean.LookupLoadBalancerArgs{
     * 			Name: pulumi.StringRef("app"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("lbOutput", example.Ip)
     * 		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.GetLoadBalancerArgs;
     * 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 example = DigitaloceanFunctions.getLoadBalancer(GetLoadBalancerArgs.builder()
     *             .name("app")
     *             .build());
     *         ctx.export("lbOutput", example.applyValue(getLoadBalancerResult -> getLoadBalancerResult.ip()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getLoadBalancer
     *       Arguments:
     *         name: app
     * outputs:
     *   lbOutput: ${example.ip}
     * ```
     * 
     * Get the load balancer by ID:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getLoadBalancer({
     *     id: "loadbalancer_id",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_load_balancer(id="loadbalancer_id")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetLoadBalancer.Invoke(new()
     *     {
     *         Id = "loadbalancer_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 {
     * 		_, err := digitalocean.LookupLoadBalancer(ctx, &digitalocean.LookupLoadBalancerArgs{
     * 			Id: pulumi.StringRef("loadbalancer_id"),
     * 		}, nil)
     * 		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.GetLoadBalancerArgs;
     * 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 example = DigitaloceanFunctions.getLoadBalancer(GetLoadBalancerArgs.builder()
     *             .id("loadbalancer_id")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getLoadBalancer
     *       Arguments:
     *         id: loadbalancer_id
     * ```
     * 
     * @param argument A collection of arguments for invoking getLoadBalancer.
     * @return A collection of values returned by getLoadBalancer.
     */
    public suspend fun getLoadBalancer(argument: GetLoadBalancerPlainArgs): GetLoadBalancerResult =
        getLoadBalancerResultToKotlin(getLoadBalancerPlain(argument.toJava()).await())

    /**
     * @see [getLoadBalancer].
     * @param id The ID of load balancer.
     * @param name The name of load balancer.
     * @return A collection of values returned by getLoadBalancer.
     */
    public suspend fun getLoadBalancer(id: String? = null, name: String? = null): GetLoadBalancerResult {
        val argument = GetLoadBalancerPlainArgs(
            id = id,
            name = name,
        )
        return getLoadBalancerResultToKotlin(getLoadBalancerPlain(argument.toJava()).await())
    }

    /**
     * @see [getLoadBalancer].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetLoadBalancerPlainArgs].
     * @return A collection of values returned by getLoadBalancer.
     */
    public suspend fun getLoadBalancer(argument: suspend GetLoadBalancerPlainArgsBuilder.() -> Unit): GetLoadBalancerResult {
        val builder = GetLoadBalancerPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getLoadBalancerResultToKotlin(getLoadBalancerPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a single DigitalOcean project. If neither the `id` nor `name` attributes are provided,
     * then this data source returns the default project.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const default = digitalocean.getProject({});
     * const staging = digitalocean.getProject({
     *     name: "My Staging Project",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * default = digitalocean.get_project()
     * staging = digitalocean.get_project(name="My Staging Project")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var @default = DigitalOcean.GetProject.Invoke();
     *     var staging = DigitalOcean.GetProject.Invoke(new()
     *     {
     *         Name = "My Staging Project",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupProject(ctx, nil, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.LookupProject(ctx, &digitalocean.LookupProjectArgs{
     * 			Name: pulumi.StringRef("My Staging Project"),
     * 		}, nil)
     * 		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.GetProjectArgs;
     * 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 default = DigitaloceanFunctions.getProject();
     *         final var staging = DigitaloceanFunctions.getProject(GetProjectArgs.builder()
     *             .name("My Staging Project")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   default:
     *     fn::invoke:
     *       Function: digitalocean:getProject
     *       Arguments: {}
     *   staging:
     *     fn::invoke:
     *       Function: digitalocean:getProject
     *       Arguments:
     *         name: My Staging Project
     * ```
     * 
     * @param argument A collection of arguments for invoking getProject.
     * @return A collection of values returned by getProject.
     */
    public suspend fun getProject(argument: GetProjectPlainArgs): GetProjectResult =
        getProjectResultToKotlin(getProjectPlain(argument.toJava()).await())

    /**
     * @see [getProject].
     * @param id the ID of the project to retrieve
     * @param name the name of the project to retrieve. The data source will raise an error if more than
     * one project has the provided name or if no project has that name.
     * @return A collection of values returned by getProject.
     */
    public suspend fun getProject(id: String? = null, name: String? = null): GetProjectResult {
        val argument = GetProjectPlainArgs(
            id = id,
            name = name,
        )
        return getProjectResultToKotlin(getProjectPlain(argument.toJava()).await())
    }

    /**
     * @see [getProject].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetProjectPlainArgs].
     * @return A collection of values returned by getProject.
     */
    public suspend fun getProject(argument: suspend GetProjectPlainArgsBuilder.() -> Unit): GetProjectResult {
        val builder = GetProjectPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getProjectResultToKotlin(getProjectPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieve information about all DigitalOcean projects associated with an account, with
     * the ability to filter and sort the results. If no filters are specified, all projects
     * will be returned.
     * Note: You can use the `digitalocean.Project` data source to
     * obtain metadata about a single project if you already know the `id` to retrieve or the unique
     * `name` of the project.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter projects.
     * For example to find all staging environment projects:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const staging = digitalocean.getProjects({
     *     filters: [{
     *         key: "environment",
     *         values: ["Staging"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * staging = digitalocean.get_projects(filters=[{
     *     "key": "environment",
     *     "values": ["Staging"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var staging = DigitalOcean.GetProjects.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetProjectsFilterInputArgs
     *             {
     *                 Key = "environment",
     *                 Values = new[]
     *                 {
     *                     "Staging",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetProjects(ctx, &digitalocean.GetProjectsArgs{
     * 			Filters: []digitalocean.GetProjectsFilter{
     * 				{
     * 					Key: "environment",
     * 					Values: []string{
     * 						"Staging",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetProjectsArgs;
     * 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 staging = DigitaloceanFunctions.getProjects(GetProjectsArgs.builder()
     *             .filters(GetProjectsFilterArgs.builder()
     *                 .key("environment")
     *                 .values("Staging")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   staging:
     *     fn::invoke:
     *       Function: digitalocean:getProjects
     *       Arguments:
     *         filters:
     *           - key: environment
     *             values:
     *               - Staging
     * ```
     * 
     * You can filter on multiple fields and sort the results as well:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const non-default-production = digitalocean.getProjects({
     *     filters: [
     *         {
     *             key: "environment",
     *             values: ["Production"],
     *         },
     *         {
     *             key: "is_default",
     *             values: ["false"],
     *         },
     *     ],
     *     sorts: [{
     *         key: "name",
     *         direction: "asc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * non_default_production = digitalocean.get_projects(filters=[
     *         {
     *             "key": "environment",
     *             "values": ["Production"],
     *         },
     *         {
     *             "key": "is_default",
     *             "values": ["false"],
     *         },
     *     ],
     *     sorts=[{
     *         "key": "name",
     *         "direction": "asc",
     *     }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var non_default_production = DigitalOcean.GetProjects.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetProjectsFilterInputArgs
     *             {
     *                 Key = "environment",
     *                 Values = new[]
     *                 {
     *                     "Production",
     *                 },
     *             },
     *             new DigitalOcean.Inputs.GetProjectsFilterInputArgs
     *             {
     *                 Key = "is_default",
     *                 Values = new[]
     *                 {
     *                     "false",
     *                 },
     *             },
     *         },
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetProjectsSortInputArgs
     *             {
     *                 Key = "name",
     *                 Direction = "asc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetProjects(ctx, &digitalocean.GetProjectsArgs{
     * 			Filters: []digitalocean.GetProjectsFilter{
     * 				{
     * 					Key: "environment",
     * 					Values: []string{
     * 						"Production",
     * 					},
     * 				},
     * 				{
     * 					Key: "is_default",
     * 					Values: []string{
     * 						"false",
     * 					},
     * 				},
     * 			},
     * 			Sorts: []digitalocean.GetProjectsSort{
     * 				{
     * 					Key:       "name",
     * 					Direction: pulumi.StringRef("asc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetProjectsArgs;
     * 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 non-default-production = DigitaloceanFunctions.getProjects(GetProjectsArgs.builder()
     *             .filters(
     *                 GetProjectsFilterArgs.builder()
     *                     .key("environment")
     *                     .values("Production")
     *                     .build(),
     *                 GetProjectsFilterArgs.builder()
     *                     .key("is_default")
     *                     .values("false")
     *                     .build())
     *             .sorts(GetProjectsSortArgs.builder()
     *                 .key("name")
     *                 .direction("asc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   non-default-production:
     *     fn::invoke:
     *       Function: digitalocean:getProjects
     *       Arguments:
     *         filters:
     *           - key: environment
     *             values:
     *               - Production
     *           - key: is_default
     *             values:
     *               - 'false'
     *         sorts:
     *           - key: name
     *             direction: asc
     * ```
     * 
     * @param argument A collection of arguments for invoking getProjects.
     * @return A collection of values returned by getProjects.
     */
    public suspend fun getProjects(argument: GetProjectsPlainArgs): GetProjectsResult =
        getProjectsResultToKotlin(getProjectsPlain(argument.toJava()).await())

    /**
     * @see [getProjects].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getProjects.
     */
    public suspend fun getProjects(
        filters: List? = null,
        sorts: List? = null,
    ): GetProjectsResult {
        val argument = GetProjectsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getProjectsResultToKotlin(getProjectsPlain(argument.toJava()).await())
    }

    /**
     * @see [getProjects].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetProjectsPlainArgs].
     * @return A collection of values returned by getProjects.
     */
    public suspend fun getProjects(argument: suspend GetProjectsPlainArgsBuilder.() -> Unit): GetProjectsResult {
        val builder = GetProjectsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getProjectsResultToKotlin(getProjectsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a DNS record. This data source provides the name, TTL, and zone
     * file as configured on your DigitalOcean account. This is useful if the record
     * in question is not managed by the provider.
     * An error is triggered if the provided domain name or record are not managed with
     * your DigitalOcean account.
     * ## Example Usage
     * Get data from a DNS record:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getRecord({
     *     domain: "example.com",
     *     name: "test",
     * });
     * export const recordType = example.then(example => example.type);
     * export const recordTtl = example.then(example => example.ttl);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_record(domain="example.com",
     *     name="test")
     * pulumi.export("recordType", example.type)
     * pulumi.export("recordTtl", example.ttl)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetRecord.Invoke(new()
     *     {
     *         Domain = "example.com",
     *         Name = "test",
     *     });
     *     return new Dictionary
     *     {
     *         ["recordType"] = example.Apply(getRecordResult => getRecordResult.Type),
     *         ["recordTtl"] = example.Apply(getRecordResult => getRecordResult.Ttl),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.GetRecord(ctx, &digitalocean.GetRecordArgs{
     * 			Domain: "example.com",
     * 			Name:   "test",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("recordType", example.Type)
     * 		ctx.Export("recordTtl", example.Ttl)
     * 		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.GetRecordArgs;
     * 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 example = DigitaloceanFunctions.getRecord(GetRecordArgs.builder()
     *             .domain("example.com")
     *             .name("test")
     *             .build());
     *         ctx.export("recordType", example.applyValue(getRecordResult -> getRecordResult.type()));
     *         ctx.export("recordTtl", example.applyValue(getRecordResult -> getRecordResult.ttl()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getRecord
     *       Arguments:
     *         domain: example.com
     *         name: test
     * outputs:
     *   recordType: ${example.type}
     *   recordTtl: ${example.ttl}
     * ```
     * 
     * ```
     * data.digitalocean_record.example: Refreshing state...
     * Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
     * Outputs:
     * record_ttl = 3600
     * record_type = A
     * ```
     * @param argument A collection of arguments for invoking getRecord.
     * @return A collection of values returned by getRecord.
     */
    public suspend fun getRecord(argument: GetRecordPlainArgs): GetRecordResult =
        getRecordResultToKotlin(getRecordPlain(argument.toJava()).await())

    /**
     * @see [getRecord].
     * @param domain The domain name of the record.
     * @param name The name of the record.
     * @return A collection of values returned by getRecord.
     */
    public suspend fun getRecord(domain: String, name: String): GetRecordResult {
        val argument = GetRecordPlainArgs(
            domain = domain,
            name = name,
        )
        return getRecordResultToKotlin(getRecordPlain(argument.toJava()).await())
    }

    /**
     * @see [getRecord].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetRecordPlainArgs].
     * @return A collection of values returned by getRecord.
     */
    public suspend fun getRecord(argument: suspend GetRecordPlainArgsBuilder.() -> Unit): GetRecordResult {
        val builder = GetRecordPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getRecordResultToKotlin(getRecordPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieve information about all DNS records within a domain, with the ability to filter and sort the results.
     * If no filters are specified, all records will be returned.
     * ## Example Usage
     * Get data for all MX records in a domain:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * import * as std from "@pulumi/std";
     * const example = digitalocean.getRecords({
     *     domain: "example.com",
     *     filters: [{
     *         key: "type",
     *         values: ["MX"],
     *     }],
     * });
     * export const mailServers = example.then(example => std.join({
     *     separator: ",",
     *     input: example.records.map(__item => __item.value),
     * })).then(invoke => invoke.result);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * import pulumi_std as std
     * example = digitalocean.get_records(domain="example.com",
     *     filters=[{
     *         "key": "type",
     *         "values": ["MX"],
     *     }])
     * pulumi.export("mailServers", std.join(separator=",",
     *     input=[__item.value for __item in example.records]).result)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * using Std = Pulumi.Std;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetRecords.Invoke(new()
     *     {
     *         Domain = "example.com",
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetRecordsFilterInputArgs
     *             {
     *                 Key = "type",
     *                 Values = new[]
     *                 {
     *                     "MX",
     *                 },
     *             },
     *         },
     *     });
     *     return new Dictionary
     *     {
     *         ["mailServers"] = Std.Join.Invoke(new()
     *         {
     *             Separator = ",",
     *             Input = example.Apply(getRecordsResult => getRecordsResult.Records).Select(__item => __item.Value).ToList(),
     *         }).Apply(invoke => invoke.Result),
     *     };
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
     * 	"github.com/pulumi/pulumi-std/sdk/go/std"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * )
     * func main() {
     * pulumi.Run(func(ctx *pulumi.Context) error {
     * example, err := digitalocean.GetRecords(ctx, &digitalocean.GetRecordsArgs{
     * Domain: "example.com",
     * Filters: []digitalocean.GetRecordsFilter{
     * {
     * Key: "type",
     * Values: []string{
     * "MX",
     * },
     * },
     * },
     * }, nil);
     * if err != nil {
     * return err
     * }
     * ctx.Export("mailServers", pulumi.String(std.Join(ctx, &std.JoinArgs{
     * Separator: ",",
     * Input: %!v(PANIC=Format method: fatal: A failure has occurred: unlowered splat expression @ example.pp:11,17-41),
     * }, nil).Result))
     * 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.GetRecordsArgs;
     * 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 example = DigitaloceanFunctions.getRecords(GetRecordsArgs.builder()
     *             .domain("example.com")
     *             .filters(GetRecordsFilterArgs.builder()
     *                 .key("type")
     *                 .values("MX")
     *                 .build())
     *             .build());
     *         ctx.export("mailServers", StdFunctions.join(JoinArgs.builder()
     *             .separator(",")
     *             .input(example.applyValue(getRecordsResult -> getRecordsResult.records()).stream().map(element -> element.value()).collect(toList()))
     *             .build()).result());
     *     }
     * }
     * ```
     * 
     * @param argument A collection of arguments for invoking getRecords.
     * @return A collection of values returned by getRecords.
     */
    public suspend fun getRecords(argument: GetRecordsPlainArgs): GetRecordsResult =
        getRecordsResultToKotlin(getRecordsPlain(argument.toJava()).await())

    /**
     * @see [getRecords].
     * @param domain The domain name to search for DNS records
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getRecords.
     */
    public suspend fun getRecords(
        domain: String,
        filters: List? = null,
        sorts: List? = null,
    ): GetRecordsResult {
        val argument = GetRecordsPlainArgs(
            domain = domain,
            filters = filters,
            sorts = sorts,
        )
        return getRecordsResultToKotlin(getRecordsPlain(argument.toJava()).await())
    }

    /**
     * @see [getRecords].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetRecordsPlainArgs].
     * @return A collection of values returned by getRecords.
     */
    public suspend fun getRecords(argument: suspend GetRecordsPlainArgsBuilder.() -> Unit): GetRecordsResult {
        val builder = GetRecordsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getRecordsResultToKotlin(getRecordsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a single DigitalOcean region. This is useful to find out
     * what Droplet sizes and features are supported within a region.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const sfo2 = digitalocean.getRegion({
     *     slug: "sfo2",
     * });
     * export const regionName = sfo2.then(sfo2 => sfo2.name);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * sfo2 = digitalocean.get_region(slug="sfo2")
     * pulumi.export("regionName", sfo2.name)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var sfo2 = DigitalOcean.GetRegion.Invoke(new()
     *     {
     *         Slug = "sfo2",
     *     });
     *     return new Dictionary
     *     {
     *         ["regionName"] = sfo2.Apply(getRegionResult => getRegionResult.Name),
     *     };
     * });
     * ```
     * ```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 {
     * 		sfo2, err := digitalocean.GetRegion(ctx, &digitalocean.GetRegionArgs{
     * 			Slug: "sfo2",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("regionName", sfo2.Name)
     * 		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.GetRegionArgs;
     * 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 sfo2 = DigitaloceanFunctions.getRegion(GetRegionArgs.builder()
     *             .slug("sfo2")
     *             .build());
     *         ctx.export("regionName", sfo2.applyValue(getRegionResult -> getRegionResult.name()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   sfo2:
     *     fn::invoke:
     *       Function: digitalocean:getRegion
     *       Arguments:
     *         slug: sfo2
     * outputs:
     *   regionName: ${sfo2.name}
     * ```
     * 
     * @param argument A collection of arguments for invoking getRegion.
     * @return A collection of values returned by getRegion.
     */
    public suspend fun getRegion(argument: GetRegionPlainArgs): GetRegionResult =
        getRegionResultToKotlin(getRegionPlain(argument.toJava()).await())

    /**
     * @see [getRegion].
     * @param slug A human-readable string that is used as a unique identifier for each region.
     * @return A collection of values returned by getRegion.
     */
    public suspend fun getRegion(slug: String): GetRegionResult {
        val argument = GetRegionPlainArgs(
            slug = slug,
        )
        return getRegionResultToKotlin(getRegionPlain(argument.toJava()).await())
    }

    /**
     * @see [getRegion].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetRegionPlainArgs].
     * @return A collection of values returned by getRegion.
     */
    public suspend fun getRegion(argument: suspend GetRegionPlainArgsBuilder.() -> Unit): GetRegionResult {
        val builder = GetRegionPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getRegionResultToKotlin(getRegionPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieve information about all supported DigitalOcean regions, with the ability to
     * filter and sort the results. If no filters are specified, all regions will be returned.
     * Note: You can use the `digitalocean.getRegion` data source
     * to obtain metadata about a single region if you already know the `slug` to retrieve.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter regions.
     * For example to find all available regions:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const available = digitalocean.getRegions({
     *     filters: [{
     *         key: "available",
     *         values: ["true"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * available = digitalocean.get_regions(filters=[{
     *     "key": "available",
     *     "values": ["true"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var available = DigitalOcean.GetRegions.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetRegionsFilterInputArgs
     *             {
     *                 Key = "available",
     *                 Values = new[]
     *                 {
     *                     "true",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetRegions(ctx, &digitalocean.GetRegionsArgs{
     * 			Filters: []digitalocean.GetRegionsFilter{
     * 				{
     * 					Key: "available",
     * 					Values: []string{
     * 						"true",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetRegionsArgs;
     * 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 available = DigitaloceanFunctions.getRegions(GetRegionsArgs.builder()
     *             .filters(GetRegionsFilterArgs.builder()
     *                 .key("available")
     *                 .values("true")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   available:
     *     fn::invoke:
     *       Function: digitalocean:getRegions
     *       Arguments:
     *         filters:
     *           - key: available
     *             values:
     *               - 'true'
     * ```
     * 
     * You can filter on multiple fields and sort the results as well:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const available = digitalocean.getRegions({
     *     filters: [
     *         {
     *             key: "available",
     *             values: ["true"],
     *         },
     *         {
     *             key: "features",
     *             values: ["private_networking"],
     *         },
     *     ],
     *     sorts: [{
     *         key: "name",
     *         direction: "desc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * available = digitalocean.get_regions(filters=[
     *         {
     *             "key": "available",
     *             "values": ["true"],
     *         },
     *         {
     *             "key": "features",
     *             "values": ["private_networking"],
     *         },
     *     ],
     *     sorts=[{
     *         "key": "name",
     *         "direction": "desc",
     *     }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var available = DigitalOcean.GetRegions.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetRegionsFilterInputArgs
     *             {
     *                 Key = "available",
     *                 Values = new[]
     *                 {
     *                     "true",
     *                 },
     *             },
     *             new DigitalOcean.Inputs.GetRegionsFilterInputArgs
     *             {
     *                 Key = "features",
     *                 Values = new[]
     *                 {
     *                     "private_networking",
     *                 },
     *             },
     *         },
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetRegionsSortInputArgs
     *             {
     *                 Key = "name",
     *                 Direction = "desc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetRegions(ctx, &digitalocean.GetRegionsArgs{
     * 			Filters: []digitalocean.GetRegionsFilter{
     * 				{
     * 					Key: "available",
     * 					Values: []string{
     * 						"true",
     * 					},
     * 				},
     * 				{
     * 					Key: "features",
     * 					Values: []string{
     * 						"private_networking",
     * 					},
     * 				},
     * 			},
     * 			Sorts: []digitalocean.GetRegionsSort{
     * 				{
     * 					Key:       "name",
     * 					Direction: pulumi.StringRef("desc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetRegionsArgs;
     * 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 available = DigitaloceanFunctions.getRegions(GetRegionsArgs.builder()
     *             .filters(
     *                 GetRegionsFilterArgs.builder()
     *                     .key("available")
     *                     .values("true")
     *                     .build(),
     *                 GetRegionsFilterArgs.builder()
     *                     .key("features")
     *                     .values("private_networking")
     *                     .build())
     *             .sorts(GetRegionsSortArgs.builder()
     *                 .key("name")
     *                 .direction("desc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   available:
     *     fn::invoke:
     *       Function: digitalocean:getRegions
     *       Arguments:
     *         filters:
     *           - key: available
     *             values:
     *               - 'true'
     *           - key: features
     *             values:
     *               - private_networking
     *         sorts:
     *           - key: name
     *             direction: desc
     * ```
     * 
     * @param argument A collection of arguments for invoking getRegions.
     * @return A collection of values returned by getRegions.
     */
    public suspend fun getRegions(argument: GetRegionsPlainArgs): GetRegionsResult =
        getRegionsResultToKotlin(getRegionsPlain(argument.toJava()).await())

    /**
     * @see [getRegions].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getRegions.
     */
    public suspend fun getRegions(
        filters: List? = null,
        sorts: List? = null,
    ): GetRegionsResult {
        val argument = GetRegionsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getRegionsResultToKotlin(getRegionsPlain(argument.toJava()).await())
    }

    /**
     * @see [getRegions].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetRegionsPlainArgs].
     * @return A collection of values returned by getRegions.
     */
    public suspend fun getRegions(argument: suspend GetRegionsPlainArgsBuilder.() -> Unit): GetRegionsResult {
        val builder = GetRegionsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getRegionsResultToKotlin(getRegionsPlain(builtArgument.toJava()).await())
    }

    /**
     * ## Example Usage
     * Get the reserved IP:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const config = new pulumi.Config();
     * const publicIp = config.requireObject("publicIp");
     * const example = digitalocean.getReservedIp({
     *     ipAddress: publicIp,
     * });
     * export const fipOutput = example.then(example => example.dropletId);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * config = pulumi.Config()
     * public_ip = config.require_object("publicIp")
     * example = digitalocean.get_reserved_ip(ip_address=public_ip)
     * pulumi.export("fipOutput", example.droplet_id)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var config = new Config();
     *     var publicIp = config.RequireObject("publicIp");
     *     var example = DigitalOcean.GetReservedIp.Invoke(new()
     *     {
     *         IpAddress = publicIp,
     *     });
     *     return new Dictionary
     *     {
     *         ["fipOutput"] = example.Apply(getReservedIpResult => getReservedIpResult.DropletId),
     *     };
     * });
     * ```
     * ```go
     * package main
     * import (
     * 	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
     * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
     * )
     * func main() {
     * 	pulumi.Run(func(ctx *pulumi.Context) error {
     * 		cfg := config.New(ctx, "")
     * 		publicIp := cfg.RequireObject("publicIp")
     * 		example, err := digitalocean.LookupReservedIp(ctx, &digitalocean.LookupReservedIpArgs{
     * 			IpAddress: publicIp,
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("fipOutput", example.DropletId)
     * 		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.GetReservedIpArgs;
     * 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 config = ctx.config();
     *         final var publicIp = config.get("publicIp");
     *         final var example = DigitaloceanFunctions.getReservedIp(GetReservedIpArgs.builder()
     *             .ipAddress(publicIp)
     *             .build());
     *         ctx.export("fipOutput", example.applyValue(getReservedIpResult -> getReservedIpResult.dropletId()));
     *     }
     * }
     * ```
     * ```yaml
     * configuration:
     *   publicIp:
     *     type: dynamic
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getReservedIp
     *       Arguments:
     *         ipAddress: ${publicIp}
     * outputs:
     *   fipOutput: ${example.dropletId}
     * ```
     * 
     * @param argument A collection of arguments for invoking getReservedIp.
     * @return A collection of values returned by getReservedIp.
     */
    public suspend fun getReservedIp(argument: GetReservedIpPlainArgs): GetReservedIpResult =
        getReservedIpResultToKotlin(getReservedIpPlain(argument.toJava()).await())

    /**
     * @see [getReservedIp].
     * @param ipAddress The allocated IP address of the specific reserved IP to retrieve.
     * @return A collection of values returned by getReservedIp.
     */
    public suspend fun getReservedIp(ipAddress: String): GetReservedIpResult {
        val argument = GetReservedIpPlainArgs(
            ipAddress = ipAddress,
        )
        return getReservedIpResultToKotlin(getReservedIpPlain(argument.toJava()).await())
    }

    /**
     * @see [getReservedIp].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetReservedIpPlainArgs].
     * @return A collection of values returned by getReservedIp.
     */
    public suspend fun getReservedIp(argument: suspend GetReservedIpPlainArgsBuilder.() -> Unit): GetReservedIpResult {
        val builder = GetReservedIpPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getReservedIpResultToKotlin(getReservedIpPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieves information about the Droplet sizes that DigitalOcean supports, with
     * the ability to filter and sort the results. If no filters are specified, all sizes
     * will be returned.
     * @param argument A collection of arguments for invoking getSizes.
     * @return A collection of values returned by getSizes.
     */
    public suspend fun getSizes(argument: GetSizesPlainArgs): GetSizesResult =
        getSizesResultToKotlin(getSizesPlain(argument.toJava()).await())

    /**
     * @see [getSizes].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getSizes.
     */
    public suspend fun getSizes(
        filters: List? = null,
        sorts: List? =
            null,
    ): GetSizesResult {
        val argument = GetSizesPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getSizesResultToKotlin(getSizesPlain(argument.toJava()).await())
    }

    /**
     * @see [getSizes].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSizesPlainArgs].
     * @return A collection of values returned by getSizes.
     */
    public suspend fun getSizes(argument: suspend GetSizesPlainArgsBuilder.() -> Unit): GetSizesResult {
        val builder = GetSizesPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSizesResultToKotlin(getSizesPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a Spaces bucket for use in other resources. This is useful if the Spaces bucket in question
     * is not managed by the provider or you need to utilize any of the bucket's data.
     * ## Example Usage
     * Get the bucket by name:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getSpacesBucket({
     *     name: "my-spaces-bucket",
     *     region: "nyc3",
     * });
     * export const bucketDomainName = example.then(example => example.bucketDomainName);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_spaces_bucket(name="my-spaces-bucket",
     *     region="nyc3")
     * pulumi.export("bucketDomainName", example.bucket_domain_name)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetSpacesBucket.Invoke(new()
     *     {
     *         Name = "my-spaces-bucket",
     *         Region = "nyc3",
     *     });
     *     return new Dictionary
     *     {
     *         ["bucketDomainName"] = example.Apply(getSpacesBucketResult => getSpacesBucketResult.BucketDomainName),
     *     };
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupSpacesBucket(ctx, &digitalocean.LookupSpacesBucketArgs{
     * 			Name:   "my-spaces-bucket",
     * 			Region: "nyc3",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("bucketDomainName", example.BucketDomainName)
     * 		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.GetSpacesBucketArgs;
     * 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 example = DigitaloceanFunctions.getSpacesBucket(GetSpacesBucketArgs.builder()
     *             .name("my-spaces-bucket")
     *             .region("nyc3")
     *             .build());
     *         ctx.export("bucketDomainName", example.applyValue(getSpacesBucketResult -> getSpacesBucketResult.bucketDomainName()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getSpacesBucket
     *       Arguments:
     *         name: my-spaces-bucket
     *         region: nyc3
     * outputs:
     *   bucketDomainName: ${example.bucketDomainName}
     * ```
     * 
     * @param argument A collection of arguments for invoking getSpacesBucket.
     * @return A collection of values returned by getSpacesBucket.
     */
    public suspend fun getSpacesBucket(argument: GetSpacesBucketPlainArgs): GetSpacesBucketResult =
        getSpacesBucketResultToKotlin(getSpacesBucketPlain(argument.toJava()).await())

    /**
     * @see [getSpacesBucket].
     * @param name The name of the Spaces bucket.
     * @param region The slug of the region where the bucket is stored.
     * @return A collection of values returned by getSpacesBucket.
     */
    public suspend fun getSpacesBucket(name: String, region: String): GetSpacesBucketResult {
        val argument = GetSpacesBucketPlainArgs(
            name = name,
            region = region,
        )
        return getSpacesBucketResultToKotlin(getSpacesBucketPlain(argument.toJava()).await())
    }

    /**
     * @see [getSpacesBucket].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketPlainArgs].
     * @return A collection of values returned by getSpacesBucket.
     */
    public suspend fun getSpacesBucket(argument: suspend GetSpacesBucketPlainArgsBuilder.() -> Unit): GetSpacesBucketResult {
        val builder = GetSpacesBucketPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSpacesBucketResultToKotlin(getSpacesBucketPlain(builtArgument.toJava()).await())
    }

    /**
     * The Spaces object data source allows access to the metadata and
     * _optionally_ (see below) content of an object stored inside a Spaces bucket.
     * > **Note:** The content of an object (`body` field) is available only for objects which have a human-readable
     * `Content-Type` (`text/*` and `application/json`). This is to prevent printing unsafe characters and potentially
     * downloading large amount of data which would be thrown away in favor of metadata.
     * ## Example Usage
     * The following example retrieves a text object (which must have a `Content-Type`
     * value starting with `text/`) and uses it as the `user_data` for a Droplet:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const bootstrapScript = digitalocean.getSpacesBucketObject({
     *     bucket: "ourcorp-deploy-config",
     *     region: "nyc3",
     *     key: "droplet-bootstrap-script.sh",
     * });
     * const web = new digitalocean.Droplet("web", {
     *     image: "ubuntu-18-04-x64",
     *     name: "web-1",
     *     region: digitalocean.Region.NYC2,
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     userData: bootstrapScript.then(bootstrapScript => bootstrapScript.body),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * bootstrap_script = digitalocean.get_spaces_bucket_object(bucket="ourcorp-deploy-config",
     *     region="nyc3",
     *     key="droplet-bootstrap-script.sh")
     * web = digitalocean.Droplet("web",
     *     image="ubuntu-18-04-x64",
     *     name="web-1",
     *     region=digitalocean.Region.NYC2,
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     user_data=bootstrap_script.body)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var bootstrapScript = DigitalOcean.GetSpacesBucketObject.Invoke(new()
     *     {
     *         Bucket = "ourcorp-deploy-config",
     *         Region = "nyc3",
     *         Key = "droplet-bootstrap-script.sh",
     *     });
     *     var web = new DigitalOcean.Droplet("web", new()
     *     {
     *         Image = "ubuntu-18-04-x64",
     *         Name = "web-1",
     *         Region = DigitalOcean.Region.NYC2,
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         UserData = bootstrapScript.Apply(getSpacesBucketObjectResult => getSpacesBucketObjectResult.Body),
     *     });
     * });
     * ```
     * ```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 {
     * 		bootstrapScript, err := digitalocean.LookupSpacesBucketObject(ctx, &digitalocean.LookupSpacesBucketObjectArgs{
     * 			Bucket: "ourcorp-deploy-config",
     * 			Region: "nyc3",
     * 			Key:    "droplet-bootstrap-script.sh",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "web", &digitalocean.DropletArgs{
     * 			Image:    pulumi.String("ubuntu-18-04-x64"),
     * 			Name:     pulumi.String("web-1"),
     * 			Region:   pulumi.String(digitalocean.RegionNYC2),
     * 			Size:     pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			UserData: pulumi.String(bootstrapScript.Body),
     * 		})
     * 		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.GetSpacesBucketObjectArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 bootstrapScript = DigitaloceanFunctions.getSpacesBucketObject(GetSpacesBucketObjectArgs.builder()
     *             .bucket("ourcorp-deploy-config")
     *             .region("nyc3")
     *             .key("droplet-bootstrap-script.sh")
     *             .build());
     *         var web = new Droplet("web", DropletArgs.builder()
     *             .image("ubuntu-18-04-x64")
     *             .name("web-1")
     *             .region("nyc2")
     *             .size("s-1vcpu-1gb")
     *             .userData(bootstrapScript.applyValue(getSpacesBucketObjectResult -> getSpacesBucketObjectResult.body()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   web:
     *     type: digitalocean:Droplet
     *     properties:
     *       image: ubuntu-18-04-x64
     *       name: web-1
     *       region: nyc2
     *       size: s-1vcpu-1gb
     *       userData: ${bootstrapScript.body}
     * variables:
     *   bootstrapScript:
     *     fn::invoke:
     *       Function: digitalocean:getSpacesBucketObject
     *       Arguments:
     *         bucket: ourcorp-deploy-config
     *         region: nyc3
     *         key: droplet-bootstrap-script.sh
     * ```
     * 
     * @param argument A collection of arguments for invoking getSpacesBucketObject.
     * @return A collection of values returned by getSpacesBucketObject.
     * */
     */
    public suspend fun getSpacesBucketObject(argument: GetSpacesBucketObjectPlainArgs): GetSpacesBucketObjectResult =
        getSpacesBucketObjectResultToKotlin(getSpacesBucketObjectPlain(argument.toJava()).await())

    /**
     * @see [getSpacesBucketObject].
     * @param bucket The name of the bucket to read the object from.
     * @param key The full path to the object inside the bucket
     * @param range
     * @param region The slug of the region where the bucket is stored.
     * @param versionId Specific version ID of the object returned (defaults to latest version)
     * @return A collection of values returned by getSpacesBucketObject.
     */
    public suspend fun getSpacesBucketObject(
        bucket: String,
        key: String,
        range: String? = null,
        region: String,
        versionId: String? = null,
    ): GetSpacesBucketObjectResult {
        val argument = GetSpacesBucketObjectPlainArgs(
            bucket = bucket,
            key = key,
            range = range,
            region = region,
            versionId = versionId,
        )
        return getSpacesBucketObjectResultToKotlin(getSpacesBucketObjectPlain(argument.toJava()).await())
    }

    /**
     * @see [getSpacesBucketObject].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectPlainArgs].
     * @return A collection of values returned by getSpacesBucketObject.
     */
    public suspend fun getSpacesBucketObject(argument: suspend GetSpacesBucketObjectPlainArgsBuilder.() -> Unit): GetSpacesBucketObjectResult {
        val builder = GetSpacesBucketObjectPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSpacesBucketObjectResultToKotlin(getSpacesBucketObjectPlain(builtArgument.toJava()).await())
    }

    /**
     * > **NOTE on `max_keys`:** Retrieving very large numbers of keys can adversely affect the provider's performance.
     * The bucket-objects data source returns keys (i.e., file names) and other metadata about objects in a Spaces bucket.
     * @param argument A collection of arguments for invoking getSpacesBucketObjects.
     * @return A collection of values returned by getSpacesBucketObjects.
     */
    public suspend fun getSpacesBucketObjects(argument: GetSpacesBucketObjectsPlainArgs): GetSpacesBucketObjectsResult =
        getSpacesBucketObjectsResultToKotlin(getSpacesBucketObjectsPlain(argument.toJava()).await())

    /**
     * @see [getSpacesBucketObjects].
     * @param bucket Lists object keys in this Spaces bucket
     * @param delimiter A character used to group keys (Default: none)
     * @param encodingType Encodes keys using this method (Default: none; besides none, only "url" can be used)
     * @param maxKeys Maximum object keys to return (Default: 1000)
     * @param prefix Limits results to object keys with this prefix (Default: none)
     * @param region The slug of the region where the bucket is stored.
     * @return A collection of values returned by getSpacesBucketObjects.
     */
    public suspend fun getSpacesBucketObjects(
        bucket: String,
        delimiter: String? = null,
        encodingType: String? = null,
        maxKeys: Int? = null,
        prefix: String? = null,
        region: String,
    ): GetSpacesBucketObjectsResult {
        val argument = GetSpacesBucketObjectsPlainArgs(
            bucket = bucket,
            delimiter = delimiter,
            encodingType = encodingType,
            maxKeys = maxKeys,
            prefix = prefix,
            region = region,
        )
        return getSpacesBucketObjectsResultToKotlin(getSpacesBucketObjectsPlain(argument.toJava()).await())
    }

    /**
     * @see [getSpacesBucketObjects].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketObjectsPlainArgs].
     * @return A collection of values returned by getSpacesBucketObjects.
     */
    public suspend fun getSpacesBucketObjects(argument: suspend GetSpacesBucketObjectsPlainArgsBuilder.() -> Unit): GetSpacesBucketObjectsResult {
        val builder = GetSpacesBucketObjectsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSpacesBucketObjectsResultToKotlin(getSpacesBucketObjectsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on Spaces buckets for use in other resources, with the ability to filter and sort the results.
     * If no filters are specified, all Spaces buckets will be returned.
     * Note: You can use the `digitalocean.SpacesBucket` data source to
     * obtain metadata about a single bucket if you already know its `name` and `region`.
     * ## Example Usage
     * Use the `filter` block with a `key` string and `values` list to filter buckets.
     * Get all buckets in a region:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const nyc3 = digitalocean.getSpacesBuckets({
     *     filters: [{
     *         key: "region",
     *         values: ["nyc3"],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * nyc3 = digitalocean.get_spaces_buckets(filters=[{
     *     "key": "region",
     *     "values": ["nyc3"],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var nyc3 = DigitalOcean.GetSpacesBuckets.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetSpacesBucketsFilterInputArgs
     *             {
     *                 Key = "region",
     *                 Values = new[]
     *                 {
     *                     "nyc3",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetSpacesBuckets(ctx, &digitalocean.GetSpacesBucketsArgs{
     * 			Filters: []digitalocean.GetSpacesBucketsFilter{
     * 				{
     * 					Key: "region",
     * 					Values: []string{
     * 						"nyc3",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetSpacesBucketsArgs;
     * 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 nyc3 = DigitaloceanFunctions.getSpacesBuckets(GetSpacesBucketsArgs.builder()
     *             .filters(GetSpacesBucketsFilterArgs.builder()
     *                 .key("region")
     *                 .values("nyc3")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   nyc3:
     *     fn::invoke:
     *       Function: digitalocean:getSpacesBuckets
     *       Arguments:
     *         filters:
     *           - key: region
     *             values:
     *               - nyc3
     * ```
     * 
     * You can sort the results as well:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const nyc3 = digitalocean.getSpacesBuckets({
     *     filters: [{
     *         key: "region",
     *         values: ["nyc3"],
     *     }],
     *     sorts: [{
     *         key: "name",
     *         direction: "desc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * nyc3 = digitalocean.get_spaces_buckets(filters=[{
     *         "key": "region",
     *         "values": ["nyc3"],
     *     }],
     *     sorts=[{
     *         "key": "name",
     *         "direction": "desc",
     *     }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var nyc3 = DigitalOcean.GetSpacesBuckets.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetSpacesBucketsFilterInputArgs
     *             {
     *                 Key = "region",
     *                 Values = new[]
     *                 {
     *                     "nyc3",
     *                 },
     *             },
     *         },
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetSpacesBucketsSortInputArgs
     *             {
     *                 Key = "name",
     *                 Direction = "desc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetSpacesBuckets(ctx, &digitalocean.GetSpacesBucketsArgs{
     * 			Filters: []digitalocean.GetSpacesBucketsFilter{
     * 				{
     * 					Key: "region",
     * 					Values: []string{
     * 						"nyc3",
     * 					},
     * 				},
     * 			},
     * 			Sorts: []digitalocean.GetSpacesBucketsSort{
     * 				{
     * 					Key:       "name",
     * 					Direction: pulumi.StringRef("desc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetSpacesBucketsArgs;
     * 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 nyc3 = DigitaloceanFunctions.getSpacesBuckets(GetSpacesBucketsArgs.builder()
     *             .filters(GetSpacesBucketsFilterArgs.builder()
     *                 .key("region")
     *                 .values("nyc3")
     *                 .build())
     *             .sorts(GetSpacesBucketsSortArgs.builder()
     *                 .key("name")
     *                 .direction("desc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   nyc3:
     *     fn::invoke:
     *       Function: digitalocean:getSpacesBuckets
     *       Arguments:
     *         filters:
     *           - key: region
     *             values:
     *               - nyc3
     *         sorts:
     *           - key: name
     *             direction: desc
     * ```
     * 
     * @param argument A collection of arguments for invoking getSpacesBuckets.
     * @return A collection of values returned by getSpacesBuckets.
     */
    public suspend fun getSpacesBuckets(argument: GetSpacesBucketsPlainArgs): GetSpacesBucketsResult =
        getSpacesBucketsResultToKotlin(getSpacesBucketsPlain(argument.toJava()).await())

    /**
     * @see [getSpacesBuckets].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getSpacesBuckets.
     */
    public suspend fun getSpacesBuckets(
        filters: List? = null,
        sorts: List? = null,
    ): GetSpacesBucketsResult {
        val argument = GetSpacesBucketsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getSpacesBucketsResultToKotlin(getSpacesBucketsPlain(argument.toJava()).await())
    }

    /**
     * @see [getSpacesBuckets].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSpacesBucketsPlainArgs].
     * @return A collection of values returned by getSpacesBuckets.
     */
    public suspend fun getSpacesBuckets(argument: suspend GetSpacesBucketsPlainArgsBuilder.() -> Unit): GetSpacesBucketsResult {
        val builder = GetSpacesBucketsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSpacesBucketsResultToKotlin(getSpacesBucketsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a ssh key. This data source provides the name, public key,
     * and fingerprint as configured on your DigitalOcean account. This is useful if
     * the ssh key in question is not managed by the provider or you need to utilize any
     * of the keys data.
     * An error is triggered if the provided ssh key name does not exist.
     * ## Example Usage
     * Get the ssh key:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getSshKey({
     *     name: "example",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     image: "ubuntu-18-04-x64",
     *     name: "example-1",
     *     region: digitalocean.Region.NYC2,
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     sshKeys: [example.then(example => example.id)],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_ssh_key(name="example")
     * example_droplet = digitalocean.Droplet("example",
     *     image="ubuntu-18-04-x64",
     *     name="example-1",
     *     region=digitalocean.Region.NYC2,
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     ssh_keys=[example.id])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetSshKey.Invoke(new()
     *     {
     *         Name = "example",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Image = "ubuntu-18-04-x64",
     *         Name = "example-1",
     *         Region = DigitalOcean.Region.NYC2,
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         SshKeys = new[]
     *         {
     *             example.Apply(getSshKeyResult => getSshKeyResult.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 {
     * 		example, err := digitalocean.LookupSshKey(ctx, &digitalocean.LookupSshKeyArgs{
     * 			Name: "example",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Image:  pulumi.String("ubuntu-18-04-x64"),
     * 			Name:   pulumi.String("example-1"),
     * 			Region: pulumi.String(digitalocean.RegionNYC2),
     * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			SshKeys: pulumi.StringArray{
     * 				pulumi.Int(example.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.GetSshKeyArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getSshKey(GetSshKeyArgs.builder()
     *             .name("example")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .image("ubuntu-18-04-x64")
     *             .name("example-1")
     *             .region("nyc2")
     *             .size("s-1vcpu-1gb")
     *             .sshKeys(example.applyValue(getSshKeyResult -> getSshKeyResult.id()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       image: ubuntu-18-04-x64
     *       name: example-1
     *       region: nyc2
     *       size: s-1vcpu-1gb
     *       sshKeys:
     *         - ${example.id}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getSshKey
     *       Arguments:
     *         name: example
     * ```
     * 
     * @param argument A collection of arguments for invoking getSshKey.
     * @return A collection of values returned by getSshKey.
     */
    public suspend fun getSshKey(argument: GetSshKeyPlainArgs): GetSshKeyResult =
        getSshKeyResultToKotlin(getSshKeyPlain(argument.toJava()).await())

    /**
     * @see [getSshKey].
     * @param name The name of the ssh key.
     * @return A collection of values returned by getSshKey.
     */
    public suspend fun getSshKey(name: String): GetSshKeyResult {
        val argument = GetSshKeyPlainArgs(
            name = name,
        )
        return getSshKeyResultToKotlin(getSshKeyPlain(argument.toJava()).await())
    }

    /**
     * @see [getSshKey].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSshKeyPlainArgs].
     * @return A collection of values returned by getSshKey.
     */
    public suspend fun getSshKey(argument: suspend GetSshKeyPlainArgsBuilder.() -> Unit): GetSshKeyResult {
        val builder = GetSshKeyPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSshKeyResultToKotlin(getSshKeyPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on SSH Keys for use in other resources.
     * This data source is useful if the SSH Keys in question are not managed by the provider or you need to
     * utilize any of the SSH Keys' data.
     * Note: You can use the `digitalocean.SshKey` data source to obtain metadata
     * about a single SSH Key if you already know the unique `name` to retrieve.
     * ## Example Usage
     * For example, to find all SSH keys:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const keys = digitalocean.getSshKeys({
     *     sorts: [{
     *         key: "name",
     *         direction: "asc",
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * keys = digitalocean.get_ssh_keys(sorts=[{
     *     "key": "name",
     *     "direction": "asc",
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var keys = DigitalOcean.GetSshKeys.Invoke(new()
     *     {
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetSshKeysSortInputArgs
     *             {
     *                 Key = "name",
     *                 Direction = "asc",
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetSshKeys(ctx, &digitalocean.GetSshKeysArgs{
     * 			Sorts: []digitalocean.GetSshKeysSort{
     * 				{
     * 					Key:       "name",
     * 					Direction: pulumi.StringRef("asc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetSshKeysArgs;
     * 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 keys = DigitaloceanFunctions.getSshKeys(GetSshKeysArgs.builder()
     *             .sorts(GetSshKeysSortArgs.builder()
     *                 .key("name")
     *                 .direction("asc")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   keys:
     *     fn::invoke:
     *       Function: digitalocean:getSshKeys
     *       Arguments:
     *         sorts:
     *           - key: name
     *             direction: asc
     * ```
     * 
     * Or to find ones matching specific values:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const keys = digitalocean.getSshKeys({
     *     filters: [{
     *         key: "name",
     *         values: [
     *             "laptop",
     *             "desktop",
     *         ],
     *     }],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * keys = digitalocean.get_ssh_keys(filters=[{
     *     "key": "name",
     *     "values": [
     *         "laptop",
     *         "desktop",
     *     ],
     * }])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var keys = DigitalOcean.GetSshKeys.Invoke(new()
     *     {
     *         Filters = new[]
     *         {
     *             new DigitalOcean.Inputs.GetSshKeysFilterInputArgs
     *             {
     *                 Key = "name",
     *                 Values = new[]
     *                 {
     *                     "laptop",
     *                     "desktop",
     *                 },
     *             },
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.GetSshKeys(ctx, &digitalocean.GetSshKeysArgs{
     * 			Filters: []digitalocean.GetSshKeysFilter{
     * 				{
     * 					Key: "name",
     * 					Values: []string{
     * 						"laptop",
     * 						"desktop",
     * 					},
     * 				},
     * 			},
     * 		}, nil)
     * 		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.GetSshKeysArgs;
     * 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 keys = DigitaloceanFunctions.getSshKeys(GetSshKeysArgs.builder()
     *             .filters(GetSshKeysFilterArgs.builder()
     *                 .key("name")
     *                 .values(
     *                     "laptop",
     *                     "desktop")
     *                 .build())
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   keys:
     *     fn::invoke:
     *       Function: digitalocean:getSshKeys
     *       Arguments:
     *         filters:
     *           - key: name
     *             values:
     *               - laptop
     *               - desktop
     * ```
     * 
     * @param argument A collection of arguments for invoking getSshKeys.
     * @return A collection of values returned by getSshKeys.
     */
    public suspend fun getSshKeys(argument: GetSshKeysPlainArgs): GetSshKeysResult =
        getSshKeysResultToKotlin(getSshKeysPlain(argument.toJava()).await())

    /**
     * @see [getSshKeys].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getSshKeys.
     */
    public suspend fun getSshKeys(
        filters: List? = null,
        sorts: List? = null,
    ): GetSshKeysResult {
        val argument = GetSshKeysPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getSshKeysResultToKotlin(getSshKeysPlain(argument.toJava()).await())
    }

    /**
     * @see [getSshKeys].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetSshKeysPlainArgs].
     * @return A collection of values returned by getSshKeys.
     */
    public suspend fun getSshKeys(argument: suspend GetSshKeysPlainArgsBuilder.() -> Unit): GetSshKeysResult {
        val builder = GetSshKeysPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getSshKeysResultToKotlin(getSshKeysPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a tag. This data source provides the name as configured on
     * your DigitalOcean account. This is useful if the tag name in question is not
     * managed by the provider or you need validate if the tag exists in the account.
     * An error is triggered if the provided tag name does not exist.
     * ## Example Usage
     * Get the tag:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getTag({
     *     name: "example",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     image: "ubuntu-18-04-x64",
     *     name: "example-1",
     *     region: digitalocean.Region.NYC2,
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     tags: [example.then(example => example.name)],
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_tag(name="example")
     * example_droplet = digitalocean.Droplet("example",
     *     image="ubuntu-18-04-x64",
     *     name="example-1",
     *     region=digitalocean.Region.NYC2,
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     tags=[example.name])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetTag.Invoke(new()
     *     {
     *         Name = "example",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Image = "ubuntu-18-04-x64",
     *         Name = "example-1",
     *         Region = DigitalOcean.Region.NYC2,
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         Tags = new[]
     *         {
     *             example.Apply(getTagResult => getTagResult.Name),
     *         },
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupTag(ctx, &digitalocean.LookupTagArgs{
     * 			Name: "example",
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Image:  pulumi.String("ubuntu-18-04-x64"),
     * 			Name:   pulumi.String("example-1"),
     * 			Region: pulumi.String(digitalocean.RegionNYC2),
     * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			Tags: pulumi.StringArray{
     * 				pulumi.String(example.Name),
     * 			},
     * 		})
     * 		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.GetTagArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getTag(GetTagArgs.builder()
     *             .name("example")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .image("ubuntu-18-04-x64")
     *             .name("example-1")
     *             .region("nyc2")
     *             .size("s-1vcpu-1gb")
     *             .tags(example.applyValue(getTagResult -> getTagResult.name()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       image: ubuntu-18-04-x64
     *       name: example-1
     *       region: nyc2
     *       size: s-1vcpu-1gb
     *       tags:
     *         - ${example.name}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getTag
     *       Arguments:
     *         name: example
     * ```
     * 
     * @param argument A collection of arguments for invoking getTag.
     * @return A collection of values returned by getTag.
     */
    public suspend fun getTag(argument: GetTagPlainArgs): GetTagResult =
        getTagResultToKotlin(getTagPlain(argument.toJava()).await())

    /**
     * @see [getTag].
     * @param name The name of the tag.
     * @return A collection of values returned by getTag.
     */
    public suspend fun getTag(name: String): GetTagResult {
        val argument = GetTagPlainArgs(
            name = name,
        )
        return getTagResultToKotlin(getTagPlain(argument.toJava()).await())
    }

    /**
     * @see [getTag].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetTagPlainArgs].
     * @return A collection of values returned by getTag.
     */
    public suspend fun getTag(argument: suspend GetTagPlainArgsBuilder.() -> Unit): GetTagResult {
        val builder = GetTagPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getTagResultToKotlin(getTagPlain(builtArgument.toJava()).await())
    }

    /**
     * Returns a list of tags in your DigitalOcean account, with the ability to
     * filter and sort the results. If no filters are specified, all tags will be
     * returned.
     * ## Example Usage
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const list = digitalocean.getTags({
     *     sorts: [{
     *         key: "total_resource_count",
     *         direction: "asc",
     *     }],
     * });
     * export const sortedTags = list.then(list => list.tags);
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * list = digitalocean.get_tags(sorts=[{
     *     "key": "total_resource_count",
     *     "direction": "asc",
     * }])
     * pulumi.export("sortedTags", list.tags)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var list = DigitalOcean.GetTags.Invoke(new()
     *     {
     *         Sorts = new[]
     *         {
     *             new DigitalOcean.Inputs.GetTagsSortInputArgs
     *             {
     *                 Key = "total_resource_count",
     *                 Direction = "asc",
     *             },
     *         },
     *     });
     *     return new Dictionary
     *     {
     *         ["sortedTags"] = list.Apply(getTagsResult => getTagsResult.Tags),
     *     };
     * });
     * ```
     * ```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 {
     * 		list, err := digitalocean.GetTags(ctx, &digitalocean.GetTagsArgs{
     * 			Sorts: []digitalocean.GetTagsSort{
     * 				{
     * 					Key:       "total_resource_count",
     * 					Direction: pulumi.StringRef("asc"),
     * 				},
     * 			},
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		ctx.Export("sortedTags", list.Tags)
     * 		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.GetTagsArgs;
     * 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 list = DigitaloceanFunctions.getTags(GetTagsArgs.builder()
     *             .sorts(GetTagsSortArgs.builder()
     *                 .key("total_resource_count")
     *                 .direction("asc")
     *                 .build())
     *             .build());
     *         ctx.export("sortedTags", list.applyValue(getTagsResult -> getTagsResult.tags()));
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   list:
     *     fn::invoke:
     *       Function: digitalocean:getTags
     *       Arguments:
     *         sorts:
     *           - key: total_resource_count
     *             direction: asc
     * outputs:
     *   sortedTags: ${list.tags}
     * ```
     * 
     * @param argument A collection of arguments for invoking getTags.
     * @return A collection of values returned by getTags.
     */
    public suspend fun getTags(argument: GetTagsPlainArgs): GetTagsResult =
        getTagsResultToKotlin(getTagsPlain(argument.toJava()).await())

    /**
     * @see [getTags].
     * @param filters Filter the results.
     * The `filter` block is documented below.
     * @param sorts Sort the results.
     * The `sort` block is documented below.
     * @return A collection of values returned by getTags.
     */
    public suspend fun getTags(
        filters: List? = null,
        sorts: List? =
            null,
    ): GetTagsResult {
        val argument = GetTagsPlainArgs(
            filters = filters,
            sorts = sorts,
        )
        return getTagsResultToKotlin(getTagsPlain(argument.toJava()).await())
    }

    /**
     * @see [getTags].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetTagsPlainArgs].
     * @return A collection of values returned by getTags.
     */
    public suspend fun getTags(argument: suspend GetTagsPlainArgsBuilder.() -> Unit): GetTagsResult {
        val builder = GetTagsPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getTagsResultToKotlin(getTagsPlain(builtArgument.toJava()).await())
    }

    /**
     * Get information on a volume for use in other resources. This data source provides
     * all of the volumes properties as configured on your DigitalOcean account. This is
     * useful if the volume in question is not managed by the provider or you need to utilize
     * any of the volumes data.
     * An error is triggered if the provided volume name does not exist.
     * ## Example Usage
     * Get the volume:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVolume({
     *     name: "app-data",
     *     region: "nyc3",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_volume(name="app-data",
     *     region="nyc3")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVolume.Invoke(new()
     *     {
     *         Name = "app-data",
     *         Region = "nyc3",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupVolume(ctx, &digitalocean.LookupVolumeArgs{
     * 			Name:   "app-data",
     * 			Region: pulumi.StringRef("nyc3"),
     * 		}, nil)
     * 		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.GetVolumeArgs;
     * 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 example = DigitaloceanFunctions.getVolume(GetVolumeArgs.builder()
     *             .name("app-data")
     *             .region("nyc3")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVolume
     *       Arguments:
     *         name: app-data
     *         region: nyc3
     * ```
     * 
     * Reuse the data about a volume to attach it to a Droplet:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVolume({
     *     name: "app-data",
     *     region: "nyc3",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     name: "foo",
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     image: "ubuntu-18-04-x64",
     *     region: digitalocean.Region.NYC3,
     * });
     * const foobar = new digitalocean.VolumeAttachment("foobar", {
     *     dropletId: exampleDroplet.id,
     *     volumeId: example.then(example => example.id),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_volume(name="app-data",
     *     region="nyc3")
     * example_droplet = digitalocean.Droplet("example",
     *     name="foo",
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     image="ubuntu-18-04-x64",
     *     region=digitalocean.Region.NYC3)
     * foobar = digitalocean.VolumeAttachment("foobar",
     *     droplet_id=example_droplet.id,
     *     volume_id=example.id)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVolume.Invoke(new()
     *     {
     *         Name = "app-data",
     *         Region = "nyc3",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Name = "foo",
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         Image = "ubuntu-18-04-x64",
     *         Region = DigitalOcean.Region.NYC3,
     *     });
     *     var foobar = new DigitalOcean.VolumeAttachment("foobar", new()
     *     {
     *         DropletId = exampleDroplet.Id,
     *         VolumeId = example.Apply(getVolumeResult => getVolumeResult.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 {
     * 		example, err := digitalocean.LookupVolume(ctx, &digitalocean.LookupVolumeArgs{
     * 			Name:   "app-data",
     * 			Region: pulumi.StringRef("nyc3"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		exampleDroplet, err := digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Name:   pulumi.String("foo"),
     * 			Size:   pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			Image:  pulumi.String("ubuntu-18-04-x64"),
     * 			Region: pulumi.String(digitalocean.RegionNYC3),
     * 		})
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewVolumeAttachment(ctx, "foobar", &digitalocean.VolumeAttachmentArgs{
     * 			DropletId: exampleDroplet.ID(),
     * 			VolumeId:  pulumi.String(example.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.GetVolumeArgs;
     * 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) {
     *         final var example = DigitaloceanFunctions.getVolume(GetVolumeArgs.builder()
     *             .name("app-data")
     *             .region("nyc3")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .name("foo")
     *             .size("s-1vcpu-1gb")
     *             .image("ubuntu-18-04-x64")
     *             .region("nyc3")
     *             .build());
     *         var foobar = new VolumeAttachment("foobar", VolumeAttachmentArgs.builder()
     *             .dropletId(exampleDroplet.id())
     *             .volumeId(example.applyValue(getVolumeResult -> getVolumeResult.id()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       name: foo
     *       size: s-1vcpu-1gb
     *       image: ubuntu-18-04-x64
     *       region: nyc3
     *   foobar:
     *     type: digitalocean:VolumeAttachment
     *     properties:
     *       dropletId: ${exampleDroplet.id}
     *       volumeId: ${example.id}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVolume
     *       Arguments:
     *         name: app-data
     *         region: nyc3
     * ```
     * 
     * @param argument A collection of arguments for invoking getVolume.
     * @return A collection of values returned by getVolume.
     */
    public suspend fun getVolume(argument: GetVolumePlainArgs): GetVolumeResult =
        getVolumeResultToKotlin(getVolumePlain(argument.toJava()).await())

    /**
     * @see [getVolume].
     * @param description Text describing a block storage volume.
     * @param name The name of block storage volume.
     * @param region The region the block storage volume is provisioned in.
     * @return A collection of values returned by getVolume.
     */
    public suspend fun getVolume(
        description: String? = null,
        name: String,
        region: String? = null,
    ): GetVolumeResult {
        val argument = GetVolumePlainArgs(
            description = description,
            name = name,
            region = region,
        )
        return getVolumeResultToKotlin(getVolumePlain(argument.toJava()).await())
    }

    /**
     * @see [getVolume].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetVolumePlainArgs].
     * @return A collection of values returned by getVolume.
     */
    public suspend fun getVolume(argument: suspend GetVolumePlainArgsBuilder.() -> Unit): GetVolumeResult {
        val builder = GetVolumePlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getVolumeResultToKotlin(getVolumePlain(builtArgument.toJava()).await())
    }

    /**
     * Volume snapshots are saved instances of a block storage volume. Use this data
     * source to retrieve the ID of a DigitalOcean volume snapshot for use in other
     * resources.
     * ## Example Usage
     * Get the volume snapshot:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const snapshot = digitalocean.getVolumeSnapshot({
     *     nameRegex: "^web",
     *     region: "nyc3",
     *     mostRecent: true,
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * snapshot = digitalocean.get_volume_snapshot(name_regex="^web",
     *     region="nyc3",
     *     most_recent=True)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var snapshot = DigitalOcean.GetVolumeSnapshot.Invoke(new()
     *     {
     *         NameRegex = "^web",
     *         Region = "nyc3",
     *         MostRecent = true,
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupVolumeSnapshot(ctx, &digitalocean.LookupVolumeSnapshotArgs{
     * 			NameRegex:  pulumi.StringRef("^web"),
     * 			Region:     pulumi.StringRef("nyc3"),
     * 			MostRecent: pulumi.BoolRef(true),
     * 		}, nil)
     * 		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 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 snapshot = DigitaloceanFunctions.getVolumeSnapshot(GetVolumeSnapshotArgs.builder()
     *             .nameRegex("^web")
     *             .region("nyc3")
     *             .mostRecent(true)
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   snapshot:
     *     fn::invoke:
     *       Function: digitalocean:getVolumeSnapshot
     *       Arguments:
     *         nameRegex: ^web
     *         region: nyc3
     *         mostRecent: true
     * ```
     * 
     * Reuse the data about a volume snapshot to create a new volume based on it:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const snapshot = digitalocean.getVolumeSnapshot({
     *     nameRegex: "^web",
     *     region: "nyc3",
     *     mostRecent: true,
     * });
     * const foobar = new digitalocean.Volume("foobar", {
     *     region: digitalocean.Region.NYC3,
     *     name: "baz",
     *     size: 100,
     *     snapshotId: snapshot.then(snapshot => snapshot.id),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * snapshot = digitalocean.get_volume_snapshot(name_regex="^web",
     *     region="nyc3",
     *     most_recent=True)
     * foobar = digitalocean.Volume("foobar",
     *     region=digitalocean.Region.NYC3,
     *     name="baz",
     *     size=100,
     *     snapshot_id=snapshot.id)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var snapshot = DigitalOcean.GetVolumeSnapshot.Invoke(new()
     *     {
     *         NameRegex = "^web",
     *         Region = "nyc3",
     *         MostRecent = true,
     *     });
     *     var foobar = new DigitalOcean.Volume("foobar", new()
     *     {
     *         Region = DigitalOcean.Region.NYC3,
     *         Name = "baz",
     *         Size = 100,
     *         SnapshotId = snapshot.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 {
     * 		snapshot, err := digitalocean.LookupVolumeSnapshot(ctx, &digitalocean.LookupVolumeSnapshotArgs{
     * 			NameRegex:  pulumi.StringRef("^web"),
     * 			Region:     pulumi.StringRef("nyc3"),
     * 			MostRecent: pulumi.BoolRef(true),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewVolume(ctx, "foobar", &digitalocean.VolumeArgs{
     * 			Region:     pulumi.String(digitalocean.RegionNYC3),
     * 			Name:       pulumi.String("baz"),
     * 			Size:       pulumi.Int(100),
     * 			SnapshotId: pulumi.String(snapshot.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 snapshot = DigitaloceanFunctions.getVolumeSnapshot(GetVolumeSnapshotArgs.builder()
     *             .nameRegex("^web")
     *             .region("nyc3")
     *             .mostRecent(true)
     *             .build());
     *         var foobar = new Volume("foobar", VolumeArgs.builder()
     *             .region("nyc3")
     *             .name("baz")
     *             .size(100)
     *             .snapshotId(snapshot.applyValue(getVolumeSnapshotResult -> getVolumeSnapshotResult.id()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   foobar:
     *     type: digitalocean:Volume
     *     properties:
     *       region: nyc3
     *       name: baz
     *       size: 100
     *       snapshotId: ${snapshot.id}
     * variables:
     *   snapshot:
     *     fn::invoke:
     *       Function: digitalocean:getVolumeSnapshot
     *       Arguments:
     *         nameRegex: ^web
     *         region: nyc3
     *         mostRecent: true
     * ```
     * 
     * @param argument A collection of arguments for invoking getVolumeSnapshot.
     * @return A collection of values returned by getVolumeSnapshot.
     */
    public suspend fun getVolumeSnapshot(argument: GetVolumeSnapshotPlainArgs): GetVolumeSnapshotResult =
        getVolumeSnapshotResultToKotlin(getVolumeSnapshotPlain(argument.toJava()).await())

    /**
     * @see [getVolumeSnapshot].
     * @param mostRecent If more than one result is returned, use the most recent volume snapshot.
     * > **NOTE:** If more or less than a single match is returned by the search,
     * the provider will fail. Ensure that your search is specific enough to return
     * a single volume snapshot ID only, or use `most_recent` to choose the most recent one.
     * @param name The name of the volume snapshot.
     * @param nameRegex A regex string to apply to the volume snapshot list returned by DigitalOcean. This allows more advanced filtering not supported from the DigitalOcean API. This filtering is done locally on what DigitalOcean returns.
     * @param region A "slug" representing a DigitalOcean region (e.g. `nyc1`). If set, only volume snapshots available in the region will be returned.
     * @return A collection of values returned by getVolumeSnapshot.
     */
    public suspend fun getVolumeSnapshot(
        mostRecent: Boolean? = null,
        name: String? = null,
        nameRegex: String? = null,
        region: String? = null,
    ): GetVolumeSnapshotResult {
        val argument = GetVolumeSnapshotPlainArgs(
            mostRecent = mostRecent,
            name = name,
            nameRegex = nameRegex,
            region = region,
        )
        return getVolumeSnapshotResultToKotlin(getVolumeSnapshotPlain(argument.toJava()).await())
    }

    /**
     * @see [getVolumeSnapshot].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetVolumeSnapshotPlainArgs].
     * @return A collection of values returned by getVolumeSnapshot.
     */
    public suspend fun getVolumeSnapshot(argument: suspend GetVolumeSnapshotPlainArgsBuilder.() -> Unit): GetVolumeSnapshotResult {
        val builder = GetVolumeSnapshotPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getVolumeSnapshotResultToKotlin(getVolumeSnapshotPlain(builtArgument.toJava()).await())
    }

    /**
     * Retrieve information about a VPC for use in other resources.
     * This data source provides all of the VPC's properties as configured on your
     * DigitalOcean account. This is useful if the VPC in question is not managed by
     * the provider or you need to utilize any of the VPC's data.
     * VPCs may be looked up by `id` or `name`. Specifying a `region` will
     * return that that region's default VPC.
     * ## Example Usage
     * ### VPC By Name
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpc({
     *     name: "example-network",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc(name="example-network")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpc.Invoke(new()
     *     {
     *         Name = "example-network",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupVpc(ctx, &digitalocean.LookupVpcArgs{
     * 			Name: pulumi.StringRef("example-network"),
     * 		}, nil)
     * 		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.GetVpcArgs;
     * 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 example = DigitaloceanFunctions.getVpc(GetVpcArgs.builder()
     *             .name("example-network")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpc
     *       Arguments:
     *         name: example-network
     * ```
     * 
     * Reuse the data about a VPC to assign a Droplet to it:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpc({
     *     name: "example-network",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     name: "example-01",
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     image: "ubuntu-18-04-x64",
     *     region: digitalocean.Region.NYC3,
     *     vpcUuid: example.then(example => example.id),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc(name="example-network")
     * example_droplet = digitalocean.Droplet("example",
     *     name="example-01",
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     image="ubuntu-18-04-x64",
     *     region=digitalocean.Region.NYC3,
     *     vpc_uuid=example.id)
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpc.Invoke(new()
     *     {
     *         Name = "example-network",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Name = "example-01",
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         Image = "ubuntu-18-04-x64",
     *         Region = DigitalOcean.Region.NYC3,
     *         VpcUuid = example.Apply(getVpcResult => getVpcResult.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 {
     * 		example, err := digitalocean.LookupVpc(ctx, &digitalocean.LookupVpcArgs{
     * 			Name: pulumi.StringRef("example-network"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Name:    pulumi.String("example-01"),
     * 			Size:    pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			Image:   pulumi.String("ubuntu-18-04-x64"),
     * 			Region:  pulumi.String(digitalocean.RegionNYC3),
     * 			VpcUuid: pulumi.String(example.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.GetVpcArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getVpc(GetVpcArgs.builder()
     *             .name("example-network")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .name("example-01")
     *             .size("s-1vcpu-1gb")
     *             .image("ubuntu-18-04-x64")
     *             .region("nyc3")
     *             .vpcUuid(example.applyValue(getVpcResult -> getVpcResult.id()))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       name: example-01
     *       size: s-1vcpu-1gb
     *       image: ubuntu-18-04-x64
     *       region: nyc3
     *       vpcUuid: ${example.id}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpc
     *       Arguments:
     *         name: example-network
     * ```
     * 
     * @param argument A collection of arguments for invoking getVpc.
     * @return A collection of values returned by getVpc.
     */
    public suspend fun getVpc(argument: GetVpcPlainArgs): GetVpcResult =
        getVpcResultToKotlin(getVpcPlain(argument.toJava()).await())

    /**
     * @see [getVpc].
     * @param id The unique identifier of an existing VPC.
     * @param name The name of an existing VPC.
     * @param region The DigitalOcean region slug for the VPC's location.
     * @return A collection of values returned by getVpc.
     */
    public suspend fun getVpc(
        id: String? = null,
        name: String? = null,
        region: String? = null,
    ): GetVpcResult {
        val argument = GetVpcPlainArgs(
            id = id,
            name = name,
            region = region,
        )
        return getVpcResultToKotlin(getVpcPlain(argument.toJava()).await())
    }

    /**
     * @see [getVpc].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetVpcPlainArgs].
     * @return A collection of values returned by getVpc.
     */
    public suspend fun getVpc(argument: suspend GetVpcPlainArgsBuilder.() -> Unit): GetVpcResult {
        val builder = GetVpcPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getVpcResultToKotlin(getVpcPlain(builtArgument.toJava()).await())
    }

    /**
     * ## Example Usage
     * ### VPC Peering By Id
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpcPeering({
     *     id: "example-id",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc_peering(id="example-id")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpcPeering.Invoke(new()
     *     {
     *         Id = "example-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 {
     * 		_, err := digitalocean.LookupVpcPeering(ctx, &digitalocean.LookupVpcPeeringArgs{
     * 			Id: pulumi.StringRef("example-id"),
     * 		}, nil)
     * 		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.GetVpcPeeringArgs;
     * 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 example = DigitaloceanFunctions.getVpcPeering(GetVpcPeeringArgs.builder()
     *             .id("example-id")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpcPeering
     *       Arguments:
     *         id: example-id
     * ```
     * 
     * Reuse the data about a VPC Peering in other resources:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpcPeering({
     *     id: "example-id",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     name: "example-01",
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     image: "ubuntu-18-04-x64",
     *     region: digitalocean.Region.NYC3,
     *     vpcUuid: example.then(example => example.vpcIds?.[0]),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc_peering(id="example-id")
     * example_droplet = digitalocean.Droplet("example",
     *     name="example-01",
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     image="ubuntu-18-04-x64",
     *     region=digitalocean.Region.NYC3,
     *     vpc_uuid=example.vpc_ids[0])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpcPeering.Invoke(new()
     *     {
     *         Id = "example-id",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Name = "example-01",
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         Image = "ubuntu-18-04-x64",
     *         Region = DigitalOcean.Region.NYC3,
     *         VpcUuid = example.Apply(getVpcPeeringResult => getVpcPeeringResult.VpcIds[0]),
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupVpcPeering(ctx, &digitalocean.LookupVpcPeeringArgs{
     * 			Id: pulumi.StringRef("example-id"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Name:    pulumi.String("example-01"),
     * 			Size:    pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			Image:   pulumi.String("ubuntu-18-04-x64"),
     * 			Region:  pulumi.String(digitalocean.RegionNYC3),
     * 			VpcUuid: pulumi.String(example.VpcIds[0]),
     * 		})
     * 		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.GetVpcPeeringArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getVpcPeering(GetVpcPeeringArgs.builder()
     *             .id("example-id")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .name("example-01")
     *             .size("s-1vcpu-1gb")
     *             .image("ubuntu-18-04-x64")
     *             .region("nyc3")
     *             .vpcUuid(example.applyValue(getVpcPeeringResult -> getVpcPeeringResult.vpcIds()[0]))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       name: example-01
     *       size: s-1vcpu-1gb
     *       image: ubuntu-18-04-x64
     *       region: nyc3
     *       vpcUuid: ${example.vpcIds[0]}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpcPeering
     *       Arguments:
     *         id: example-id
     * ```
     * 
     * ### VPC Peering By Name
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpcPeering({
     *     name: "example-peering",
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc_peering(name="example-peering")
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpcPeering.Invoke(new()
     *     {
     *         Name = "example-peering",
     *     });
     * });
     * ```
     * ```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 {
     * 		_, err := digitalocean.LookupVpcPeering(ctx, &digitalocean.LookupVpcPeeringArgs{
     * 			Name: pulumi.StringRef("example-peering"),
     * 		}, nil)
     * 		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.GetVpcPeeringArgs;
     * 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 example = DigitaloceanFunctions.getVpcPeering(GetVpcPeeringArgs.builder()
     *             .name("example-peering")
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpcPeering
     *       Arguments:
     *         name: example-peering
     * ```
     * 
     * Reuse the data about a VPC Peering in other resources:
     * 
     * ```typescript
     * import * as pulumi from "@pulumi/pulumi";
     * import * as digitalocean from "@pulumi/digitalocean";
     * const example = digitalocean.getVpcPeering({
     *     name: "example-peering",
     * });
     * const exampleDroplet = new digitalocean.Droplet("example", {
     *     name: "example-01",
     *     size: digitalocean.DropletSlug.DropletS1VCPU1GB,
     *     image: "ubuntu-18-04-x64",
     *     region: digitalocean.Region.NYC3,
     *     vpcUuid: example.then(example => example.vpcIds?.[0]),
     * });
     * ```
     * ```python
     * import pulumi
     * import pulumi_digitalocean as digitalocean
     * example = digitalocean.get_vpc_peering(name="example-peering")
     * example_droplet = digitalocean.Droplet("example",
     *     name="example-01",
     *     size=digitalocean.DropletSlug.DROPLET_S1_VCPU1_GB,
     *     image="ubuntu-18-04-x64",
     *     region=digitalocean.Region.NYC3,
     *     vpc_uuid=example.vpc_ids[0])
     * ```
     * ```csharp
     * using System.Collections.Generic;
     * using System.Linq;
     * using Pulumi;
     * using DigitalOcean = Pulumi.DigitalOcean;
     * return await Deployment.RunAsync(() =>
     * {
     *     var example = DigitalOcean.GetVpcPeering.Invoke(new()
     *     {
     *         Name = "example-peering",
     *     });
     *     var exampleDroplet = new DigitalOcean.Droplet("example", new()
     *     {
     *         Name = "example-01",
     *         Size = DigitalOcean.DropletSlug.DropletS1VCPU1GB,
     *         Image = "ubuntu-18-04-x64",
     *         Region = DigitalOcean.Region.NYC3,
     *         VpcUuid = example.Apply(getVpcPeeringResult => getVpcPeeringResult.VpcIds[0]),
     *     });
     * });
     * ```
     * ```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 {
     * 		example, err := digitalocean.LookupVpcPeering(ctx, &digitalocean.LookupVpcPeeringArgs{
     * 			Name: pulumi.StringRef("example-peering"),
     * 		}, nil)
     * 		if err != nil {
     * 			return err
     * 		}
     * 		_, err = digitalocean.NewDroplet(ctx, "example", &digitalocean.DropletArgs{
     * 			Name:    pulumi.String("example-01"),
     * 			Size:    pulumi.String(digitalocean.DropletSlugDropletS1VCPU1GB),
     * 			Image:   pulumi.String("ubuntu-18-04-x64"),
     * 			Region:  pulumi.String(digitalocean.RegionNYC3),
     * 			VpcUuid: pulumi.String(example.VpcIds[0]),
     * 		})
     * 		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.GetVpcPeeringArgs;
     * import com.pulumi.digitalocean.Droplet;
     * import com.pulumi.digitalocean.DropletArgs;
     * 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 example = DigitaloceanFunctions.getVpcPeering(GetVpcPeeringArgs.builder()
     *             .name("example-peering")
     *             .build());
     *         var exampleDroplet = new Droplet("exampleDroplet", DropletArgs.builder()
     *             .name("example-01")
     *             .size("s-1vcpu-1gb")
     *             .image("ubuntu-18-04-x64")
     *             .region("nyc3")
     *             .vpcUuid(example.applyValue(getVpcPeeringResult -> getVpcPeeringResult.vpcIds()[0]))
     *             .build());
     *     }
     * }
     * ```
     * ```yaml
     * resources:
     *   exampleDroplet:
     *     type: digitalocean:Droplet
     *     name: example
     *     properties:
     *       name: example-01
     *       size: s-1vcpu-1gb
     *       image: ubuntu-18-04-x64
     *       region: nyc3
     *       vpcUuid: ${example.vpcIds[0]}
     * variables:
     *   example:
     *     fn::invoke:
     *       Function: digitalocean:getVpcPeering
     *       Arguments:
     *         name: example-peering
     * ```
     * 
     * @param argument A collection of arguments for invoking getVpcPeering.
     * @return A collection of values returned by getVpcPeering.
     */
    public suspend fun getVpcPeering(argument: GetVpcPeeringPlainArgs): GetVpcPeeringResult =
        getVpcPeeringResultToKotlin(getVpcPeeringPlain(argument.toJava()).await())

    /**
     * @see [getVpcPeering].
     * @param id The unique identifier of an existing VPC Peering.
     * @param name The name of an existing VPC Peering.
     * @param vpcIds The list of VPC IDs involved in the peering.
     * @return A collection of values returned by getVpcPeering.
     */
    public suspend fun getVpcPeering(
        id: String? = null,
        name: String? = null,
        vpcIds: List? = null,
    ): GetVpcPeeringResult {
        val argument = GetVpcPeeringPlainArgs(
            id = id,
            name = name,
            vpcIds = vpcIds,
        )
        return getVpcPeeringResultToKotlin(getVpcPeeringPlain(argument.toJava()).await())
    }

    /**
     * @see [getVpcPeering].
     * @param argument Builder for [com.pulumi.digitalocean.kotlin.inputs.GetVpcPeeringPlainArgs].
     * @return A collection of values returned by getVpcPeering.
     */
    public suspend fun getVpcPeering(argument: suspend GetVpcPeeringPlainArgsBuilder.() -> Unit): GetVpcPeeringResult {
        val builder = GetVpcPeeringPlainArgsBuilder()
        builder.argument()
        val builtArgument = builder.build()
        return getVpcPeeringResultToKotlin(getVpcPeeringPlain(builtArgument.toJava()).await())
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy