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

com.pulumi.gcp.storage.kotlin.Bucket.kt Maven / Gradle / Ivy

Go to download

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

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

package com.pulumi.gcp.storage.kotlin

import com.pulumi.core.Output
import com.pulumi.gcp.storage.kotlin.outputs.BucketAutoclass
import com.pulumi.gcp.storage.kotlin.outputs.BucketCor
import com.pulumi.gcp.storage.kotlin.outputs.BucketCustomPlacementConfig
import com.pulumi.gcp.storage.kotlin.outputs.BucketEncryption
import com.pulumi.gcp.storage.kotlin.outputs.BucketLifecycleRule
import com.pulumi.gcp.storage.kotlin.outputs.BucketLogging
import com.pulumi.gcp.storage.kotlin.outputs.BucketRetentionPolicy
import com.pulumi.gcp.storage.kotlin.outputs.BucketSoftDeletePolicy
import com.pulumi.gcp.storage.kotlin.outputs.BucketVersioning
import com.pulumi.gcp.storage.kotlin.outputs.BucketWebsite
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import com.pulumi.gcp.storage.kotlin.outputs.BucketAutoclass.Companion.toKotlin as bucketAutoclassToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketCor.Companion.toKotlin as bucketCorToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketCustomPlacementConfig.Companion.toKotlin as bucketCustomPlacementConfigToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketEncryption.Companion.toKotlin as bucketEncryptionToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketLifecycleRule.Companion.toKotlin as bucketLifecycleRuleToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketLogging.Companion.toKotlin as bucketLoggingToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketRetentionPolicy.Companion.toKotlin as bucketRetentionPolicyToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketSoftDeletePolicy.Companion.toKotlin as bucketSoftDeletePolicyToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketVersioning.Companion.toKotlin as bucketVersioningToKotlin
import com.pulumi.gcp.storage.kotlin.outputs.BucketWebsite.Companion.toKotlin as bucketWebsiteToKotlin

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

    public var args: BucketArgs = BucketArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

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

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

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

    internal fun build(): Bucket {
        val builtJavaResource = com.pulumi.gcp.storage.Bucket(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Bucket(builtJavaResource)
    }
}

/**
 * Creates a new bucket in Google cloud storage service (GCS).
 * Once a bucket has been created, its location can't be changed.
 * For more information see
 * [the official documentation](https://cloud.google.com/storage/docs/overview)
 * and
 * [API](https://cloud.google.com/storage/docs/json_api/v1/buckets).
 * **Note**: If the project id is not set on the resource or in the provider block it will be dynamically
 * determined which will require enabling the compute api.
 * ## Example Usage
 * ### Creating A Private Bucket In Standard Storage, In The EU Region. Bucket Configured As Static Website And CORS Configurations
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const static_site = new gcp.storage.Bucket("static-site", {
 *     name: "image-store.com",
 *     location: "EU",
 *     forceDestroy: true,
 *     uniformBucketLevelAccess: true,
 *     website: {
 *         mainPageSuffix: "index.html",
 *         notFoundPage: "404.html",
 *     },
 *     cors: [{
 *         origins: ["http://image-store.com"],
 *         methods: [
 *             "GET",
 *             "HEAD",
 *             "PUT",
 *             "POST",
 *             "DELETE",
 *         ],
 *         responseHeaders: ["*"],
 *         maxAgeSeconds: 3600,
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * static_site = gcp.storage.Bucket("static-site",
 *     name="image-store.com",
 *     location="EU",
 *     force_destroy=True,
 *     uniform_bucket_level_access=True,
 *     website=gcp.storage.BucketWebsiteArgs(
 *         main_page_suffix="index.html",
 *         not_found_page="404.html",
 *     ),
 *     cors=[gcp.storage.BucketCorArgs(
 *         origins=["http://image-store.com"],
 *         methods=[
 *             "GET",
 *             "HEAD",
 *             "PUT",
 *             "POST",
 *             "DELETE",
 *         ],
 *         response_headers=["*"],
 *         max_age_seconds=3600,
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var static_site = new Gcp.Storage.Bucket("static-site", new()
 *     {
 *         Name = "image-store.com",
 *         Location = "EU",
 *         ForceDestroy = true,
 *         UniformBucketLevelAccess = true,
 *         Website = new Gcp.Storage.Inputs.BucketWebsiteArgs
 *         {
 *             MainPageSuffix = "index.html",
 *             NotFoundPage = "404.html",
 *         },
 *         Cors = new[]
 *         {
 *             new Gcp.Storage.Inputs.BucketCorArgs
 *             {
 *                 Origins = new[]
 *                 {
 *                     "http://image-store.com",
 *                 },
 *                 Methods = new[]
 *                 {
 *                     "GET",
 *                     "HEAD",
 *                     "PUT",
 *                     "POST",
 *                     "DELETE",
 *                 },
 *                 ResponseHeaders = new[]
 *                 {
 *                     "*",
 *                 },
 *                 MaxAgeSeconds = 3600,
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := storage.NewBucket(ctx, "static-site", &storage.BucketArgs{
 * 			Name:                     pulumi.String("image-store.com"),
 * 			Location:                 pulumi.String("EU"),
 * 			ForceDestroy:             pulumi.Bool(true),
 * 			UniformBucketLevelAccess: pulumi.Bool(true),
 * 			Website: &storage.BucketWebsiteArgs{
 * 				MainPageSuffix: pulumi.String("index.html"),
 * 				NotFoundPage:   pulumi.String("404.html"),
 * 			},
 * 			Cors: storage.BucketCorArray{
 * 				&storage.BucketCorArgs{
 * 					Origins: pulumi.StringArray{
 * 						pulumi.String("http://image-store.com"),
 * 					},
 * 					Methods: pulumi.StringArray{
 * 						pulumi.String("GET"),
 * 						pulumi.String("HEAD"),
 * 						pulumi.String("PUT"),
 * 						pulumi.String("POST"),
 * 						pulumi.String("DELETE"),
 * 					},
 * 					ResponseHeaders: pulumi.StringArray{
 * 						pulumi.String("*"),
 * 					},
 * 					MaxAgeSeconds: pulumi.Int(3600),
 * 				},
 * 			},
 * 		})
 * 		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.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import com.pulumi.gcp.storage.inputs.BucketWebsiteArgs;
 * import com.pulumi.gcp.storage.inputs.BucketCorArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var static_site = new Bucket("static-site", BucketArgs.builder()
 *             .name("image-store.com")
 *             .location("EU")
 *             .forceDestroy(true)
 *             .uniformBucketLevelAccess(true)
 *             .website(BucketWebsiteArgs.builder()
 *                 .mainPageSuffix("index.html")
 *                 .notFoundPage("404.html")
 *                 .build())
 *             .cors(BucketCorArgs.builder()
 *                 .origins("http://image-store.com")
 *                 .methods(
 *                     "GET",
 *                     "HEAD",
 *                     "PUT",
 *                     "POST",
 *                     "DELETE")
 *                 .responseHeaders("*")
 *                 .maxAgeSeconds(3600)
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   static-site:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: image-store.com
 *       location: EU
 *       forceDestroy: true
 *       uniformBucketLevelAccess: true
 *       website:
 *         mainPageSuffix: index.html
 *         notFoundPage: 404.html
 *       cors:
 *         - origins:
 *             - http://image-store.com
 *           methods:
 *             - GET
 *             - HEAD
 *             - PUT
 *             - POST
 *             - DELETE
 *           responseHeaders:
 *             - '*'
 *           maxAgeSeconds: 3600
 * ```
 * 
 * ### Life Cycle Settings For Storage Bucket Objects
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const auto_expire = new gcp.storage.Bucket("auto-expire", {
 *     name: "auto-expiring-bucket",
 *     location: "US",
 *     forceDestroy: true,
 *     lifecycleRules: [
 *         {
 *             condition: {
 *                 age: 3,
 *             },
 *             action: {
 *                 type: "Delete",
 *             },
 *         },
 *         {
 *             condition: {
 *                 age: 1,
 *             },
 *             action: {
 *                 type: "AbortIncompleteMultipartUpload",
 *             },
 *         },
 *     ],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * auto_expire = gcp.storage.Bucket("auto-expire",
 *     name="auto-expiring-bucket",
 *     location="US",
 *     force_destroy=True,
 *     lifecycle_rules=[
 *         gcp.storage.BucketLifecycleRuleArgs(
 *             condition=gcp.storage.BucketLifecycleRuleConditionArgs(
 *                 age=3,
 *             ),
 *             action=gcp.storage.BucketLifecycleRuleActionArgs(
 *                 type="Delete",
 *             ),
 *         ),
 *         gcp.storage.BucketLifecycleRuleArgs(
 *             condition=gcp.storage.BucketLifecycleRuleConditionArgs(
 *                 age=1,
 *             ),
 *             action=gcp.storage.BucketLifecycleRuleActionArgs(
 *                 type="AbortIncompleteMultipartUpload",
 *             ),
 *         ),
 *     ])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var auto_expire = new Gcp.Storage.Bucket("auto-expire", new()
 *     {
 *         Name = "auto-expiring-bucket",
 *         Location = "US",
 *         ForceDestroy = true,
 *         LifecycleRules = new[]
 *         {
 *             new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
 *             {
 *                 Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
 *                 {
 *                     Age = 3,
 *                 },
 *                 Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
 *                 {
 *                     Type = "Delete",
 *                 },
 *             },
 *             new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
 *             {
 *                 Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
 *                 {
 *                     Age = 1,
 *                 },
 *                 Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
 *                 {
 *                     Type = "AbortIncompleteMultipartUpload",
 *                 },
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := storage.NewBucket(ctx, "auto-expire", &storage.BucketArgs{
 * 			Name:         pulumi.String("auto-expiring-bucket"),
 * 			Location:     pulumi.String("US"),
 * 			ForceDestroy: pulumi.Bool(true),
 * 			LifecycleRules: storage.BucketLifecycleRuleArray{
 * 				&storage.BucketLifecycleRuleArgs{
 * 					Condition: &storage.BucketLifecycleRuleConditionArgs{
 * 						Age: pulumi.Int(3),
 * 					},
 * 					Action: &storage.BucketLifecycleRuleActionArgs{
 * 						Type: pulumi.String("Delete"),
 * 					},
 * 				},
 * 				&storage.BucketLifecycleRuleArgs{
 * 					Condition: &storage.BucketLifecycleRuleConditionArgs{
 * 						Age: pulumi.Int(1),
 * 					},
 * 					Action: &storage.BucketLifecycleRuleActionArgs{
 * 						Type: pulumi.String("AbortIncompleteMultipartUpload"),
 * 					},
 * 				},
 * 			},
 * 		})
 * 		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.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleConditionArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleActionArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var auto_expire = new Bucket("auto-expire", BucketArgs.builder()
 *             .name("auto-expiring-bucket")
 *             .location("US")
 *             .forceDestroy(true)
 *             .lifecycleRules(
 *                 BucketLifecycleRuleArgs.builder()
 *                     .condition(BucketLifecycleRuleConditionArgs.builder()
 *                         .age(3)
 *                         .build())
 *                     .action(BucketLifecycleRuleActionArgs.builder()
 *                         .type("Delete")
 *                         .build())
 *                     .build(),
 *                 BucketLifecycleRuleArgs.builder()
 *                     .condition(BucketLifecycleRuleConditionArgs.builder()
 *                         .age(1)
 *                         .build())
 *                     .action(BucketLifecycleRuleActionArgs.builder()
 *                         .type("AbortIncompleteMultipartUpload")
 *                         .build())
 *                     .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   auto-expire:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: auto-expiring-bucket
 *       location: US
 *       forceDestroy: true
 *       lifecycleRules:
 *         - condition:
 *             age: 3
 *           action:
 *             type: Delete
 *         - condition:
 *             age: 1
 *           action:
 *             type: AbortIncompleteMultipartUpload
 * ```
 * 
 * ### Life Cycle Settings For Storage Bucket Objects With `No_age` Enabled
 * When creating a life cycle condition that does not also include an `age` field, a default `age` of 0 will be set. Set the `no_age` flag to `true` to prevent this and avoid any potentially unintended interactions.
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const no_age_enabled = new gcp.storage.Bucket("no-age-enabled", {
 *     name: "no-age-enabled-bucket",
 *     location: "US",
 *     forceDestroy: true,
 *     lifecycleRules: [{
 *         action: {
 *             type: "Delete",
 *         },
 *         condition: {
 *             daysSinceNoncurrentTime: 3,
 *             noAge: true,
 *         },
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * no_age_enabled = gcp.storage.Bucket("no-age-enabled",
 *     name="no-age-enabled-bucket",
 *     location="US",
 *     force_destroy=True,
 *     lifecycle_rules=[gcp.storage.BucketLifecycleRuleArgs(
 *         action=gcp.storage.BucketLifecycleRuleActionArgs(
 *             type="Delete",
 *         ),
 *         condition=gcp.storage.BucketLifecycleRuleConditionArgs(
 *             days_since_noncurrent_time=3,
 *             no_age=True,
 *         ),
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var no_age_enabled = new Gcp.Storage.Bucket("no-age-enabled", new()
 *     {
 *         Name = "no-age-enabled-bucket",
 *         Location = "US",
 *         ForceDestroy = true,
 *         LifecycleRules = new[]
 *         {
 *             new Gcp.Storage.Inputs.BucketLifecycleRuleArgs
 *             {
 *                 Action = new Gcp.Storage.Inputs.BucketLifecycleRuleActionArgs
 *                 {
 *                     Type = "Delete",
 *                 },
 *                 Condition = new Gcp.Storage.Inputs.BucketLifecycleRuleConditionArgs
 *                 {
 *                     DaysSinceNoncurrentTime = 3,
 *                     NoAge = true,
 *                 },
 *             },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := storage.NewBucket(ctx, "no-age-enabled", &storage.BucketArgs{
 * 			Name:         pulumi.String("no-age-enabled-bucket"),
 * 			Location:     pulumi.String("US"),
 * 			ForceDestroy: pulumi.Bool(true),
 * 			LifecycleRules: storage.BucketLifecycleRuleArray{
 * 				&storage.BucketLifecycleRuleArgs{
 * 					Action: &storage.BucketLifecycleRuleActionArgs{
 * 						Type: pulumi.String("Delete"),
 * 					},
 * 					Condition: &storage.BucketLifecycleRuleConditionArgs{
 * 						DaysSinceNoncurrentTime: pulumi.Int(3),
 * 						NoAge:                   pulumi.Bool(true),
 * 					},
 * 				},
 * 			},
 * 		})
 * 		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.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleActionArgs;
 * import com.pulumi.gcp.storage.inputs.BucketLifecycleRuleConditionArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var no_age_enabled = new Bucket("no-age-enabled", BucketArgs.builder()
 *             .name("no-age-enabled-bucket")
 *             .location("US")
 *             .forceDestroy(true)
 *             .lifecycleRules(BucketLifecycleRuleArgs.builder()
 *                 .action(BucketLifecycleRuleActionArgs.builder()
 *                     .type("Delete")
 *                     .build())
 *                 .condition(BucketLifecycleRuleConditionArgs.builder()
 *                     .daysSinceNoncurrentTime(3)
 *                     .noAge(true)
 *                     .build())
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   no-age-enabled:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: no-age-enabled-bucket
 *       location: US
 *       forceDestroy: true
 *       lifecycleRules:
 *         - action:
 *             type: Delete
 *           condition:
 *             daysSinceNoncurrentTime: 3
 *             noAge: true
 * ```
 * 
 * ### Enabling Public Access Prevention
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const auto_expire = new gcp.storage.Bucket("auto-expire", {
 *     name: "no-public-access-bucket",
 *     location: "US",
 *     forceDestroy: true,
 *     publicAccessPrevention: "enforced",
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * auto_expire = gcp.storage.Bucket("auto-expire",
 *     name="no-public-access-bucket",
 *     location="US",
 *     force_destroy=True,
 *     public_access_prevention="enforced")
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var auto_expire = new Gcp.Storage.Bucket("auto-expire", new()
 *     {
 *         Name = "no-public-access-bucket",
 *         Location = "US",
 *         ForceDestroy = true,
 *         PublicAccessPrevention = "enforced",
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/storage"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := storage.NewBucket(ctx, "auto-expire", &storage.BucketArgs{
 * 			Name:                   pulumi.String("no-public-access-bucket"),
 * 			Location:               pulumi.String("US"),
 * 			ForceDestroy:           pulumi.Bool(true),
 * 			PublicAccessPrevention: pulumi.String("enforced"),
 * 		})
 * 		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.gcp.storage.Bucket;
 * import com.pulumi.gcp.storage.BucketArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var auto_expire = new Bucket("auto-expire", BucketArgs.builder()
 *             .name("no-public-access-bucket")
 *             .location("US")
 *             .forceDestroy(true)
 *             .publicAccessPrevention("enforced")
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   auto-expire:
 *     type: gcp:storage:Bucket
 *     properties:
 *       name: no-public-access-bucket
 *       location: US
 *       forceDestroy: true
 *       publicAccessPrevention: enforced
 * ```
 * 
 * ## Import
 * Storage buckets can be imported using the `name` or  `project/name`. If the project is not
 * passed to the import command it will be inferred from the provider block or environment variables.
 * If it cannot be inferred it will be queried from the Compute API (this will fail if the API is
 * not enabled).
 * * `{{project_id}}/{{bucket}}`
 * * `{{bucket}}`
 * When using the `pulumi import` command, Storage buckets can be imported using one of the formats above. For example:
 * ```sh
 * $ pulumi import gcp:storage/bucket:Bucket default {{bucket}}
 * ```
 * ```sh
 * $ pulumi import gcp:storage/bucket:Bucket default {{project_id}}/{{bucket}}
 * ```
 * `false` in state. If you've set it to `true` in config, run `pulumi up` to
 * update the value set in state. If you delete this resource before updating the
 * value, objects in the bucket will not be destroyed.
 */
public class Bucket internal constructor(
    override val javaResource: com.pulumi.gcp.storage.Bucket,
) : KotlinCustomResource(javaResource, BucketMapper) {
    /**
     * The bucket's [Autoclass](https://cloud.google.com/storage/docs/autoclass) configuration.  Structure is documented below.
     */
    public val autoclass: Output?
        get() = javaResource.autoclass().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    bucketAutoclassToKotlin(args0)
                })
            }).orElse(null)
        })

    /**
     * The bucket's [Cross-Origin Resource Sharing (CORS)](https://www.w3.org/TR/cors/) configuration. Multiple blocks of this type are permitted. Structure is documented below.
     */
    public val cors: Output>?
        get() = javaResource.cors().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 -> bucketCorToKotlin(args0) })
                })
            }).orElse(null)
        })

    /**
     * The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below.
     */
    public val customPlacementConfig: Output?
        get() = javaResource.customPlacementConfig().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> bucketCustomPlacementConfigToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * Whether or not to automatically apply an eventBasedHold to new objects added to the bucket.
     */
    public val defaultEventBasedHold: Output?
        get() = javaResource.defaultEventBasedHold().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    public val effectiveLabels: Output>
        get() = javaResource.effectiveLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Enables [object retention](https://cloud.google.com/storage/docs/object-lock) on a storage bucket.
     */
    public val enableObjectRetention: Output?
        get() = javaResource.enableObjectRetention().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The bucket's encryption configuration. Structure is documented below.
     */
    public val encryption: Output?
        get() = javaResource.encryption().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    bucketEncryptionToKotlin(args0)
                })
            }).orElse(null)
        })

    /**
     * When deleting a bucket, this
     * boolean option will delete all contained objects. If you try to delete a
     * bucket that contains objects, the provider will fail that run.
     */
    public val forceDestroy: Output?
        get() = javaResource.forceDestroy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A map of key/value label pairs to assign to the bucket.
     */
    public val labels: Output>?
        get() = javaResource.labels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.key.to(args0.value)
                }).toMap()
            }).orElse(null)
        })

    /**
     * The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below.
     */
    public val lifecycleRules: Output>?
        get() = javaResource.lifecycleRules().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.let({ args0 ->
                        bucketLifecycleRuleToKotlin(args0)
                    })
                })
            }).orElse(null)
        })

    /**
     * The [GCS location](https://cloud.google.com/storage/docs/bucket-locations).
     * - - -
     */
    public val location: Output
        get() = javaResource.location().applyValue({ args0 -> args0 })

    /**
     * The bucket's [Access & Storage Logs](https://cloud.google.com/storage/docs/access-logs) configuration. Structure is documented below.
     */
    public val logging: Output?
        get() = javaResource.logging().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 ->
                    bucketLoggingToKotlin(args0)
                })
            }).orElse(null)
        })

    /**
     * The name of the bucket.
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * The ID of the project in which the resource belongs. If it
     * is not provided, the provider project is used.
     */
    public val project: Output
        get() = javaResource.project().applyValue({ args0 -> args0 })

    /**
     * The project number of the project in which the resource belongs.
     */
    public val projectNumber: Output
        get() = javaResource.projectNumber().applyValue({ args0 -> args0 })

    /**
     * Prevents public access to a bucket. Acceptable values are "inherited" or "enforced". If "inherited", the bucket uses [public access prevention](https://cloud.google.com/storage/docs/public-access-prevention). only if the bucket is subject to the public access prevention organization policy constraint. Defaults to "inherited".
     */
    public val publicAccessPrevention: Output
        get() = javaResource.publicAccessPrevention().applyValue({ args0 -> args0 })

    /**
     * The combination of labels configured directly on the resource and default labels configured on the provider.
     */
    public val pulumiLabels: Output>
        get() = javaResource.pulumiLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Enables [Requester Pays](https://cloud.google.com/storage/docs/requester-pays) on a storage bucket.
     */
    public val requesterPays: Output?
        get() = javaResource.requesterPays().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Configuration of the bucket's data retention policy for how long objects in the bucket should be retained. Structure is documented below.
     */
    public val retentionPolicy: Output?
        get() = javaResource.retentionPolicy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.let({ args0 -> bucketRetentionPolicyToKotlin(args0) })
            }).orElse(null)
        })

    /**
     * The recovery point objective for cross-region replication of the bucket. Applicable only for dual and multi-region buckets. `"DEFAULT"` sets default replication. `"ASYNC_TURBO"` value enables turbo replication, valid for dual-region buckets only. See [Turbo Replication](https://cloud.google.com/storage/docs/managing-turbo-replication) for more information. If rpo is not specified at bucket creation, it defaults to `"DEFAULT"` for dual and multi-region buckets. **NOTE** If used with single-region bucket, It will throw an error.
     */
    public val rpo: Output
        get() = javaResource.rpo().applyValue({ args0 -> args0 })

    /**
     * The URI of the created resource.
     */
    public val selfLink: Output
        get() = javaResource.selfLink().applyValue({ args0 -> args0 })

    /**
     * The bucket's soft delete policy, which defines the period of time that soft-deleted objects will be retained, and cannot
     * be permanently deleted. If it is not provided, by default Google Cloud Storage sets this to default soft delete policy
     */
    public val softDeletePolicy: Output
        get() = javaResource.softDeletePolicy().applyValue({ args0 ->
            args0.let({ args0 ->
                bucketSoftDeletePolicyToKotlin(args0)
            })
        })

    /**
     * The [Storage Class](https://cloud.google.com/storage/docs/storage-classes) of the new bucket. Supported values include: `STANDARD`, `MULTI_REGIONAL`, `REGIONAL`, `NEARLINE`, `COLDLINE`, `ARCHIVE`.
     */
    public val storageClass: Output?
        get() = javaResource.storageClass().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Enables [Uniform bucket-level access](https://cloud.google.com/storage/docs/uniform-bucket-level-access) access to a bucket.
     */
    public val uniformBucketLevelAccess: Output
        get() = javaResource.uniformBucketLevelAccess().applyValue({ args0 -> args0 })

    /**
     * The base URL of the bucket, in the format `gs://`.
     */
    public val url: Output
        get() = javaResource.url().applyValue({ args0 -> args0 })

    /**
     * The bucket's [Versioning](https://cloud.google.com/storage/docs/object-versioning) configuration.  Structure is documented below.
     */
    public val versioning: Output
        get() = javaResource.versioning().applyValue({ args0 ->
            args0.let({ args0 ->
                bucketVersioningToKotlin(args0)
            })
        })

    /**
     * Configuration if the bucket acts as a website. Structure is documented below.
     */
    public val website: Output
        get() = javaResource.website().applyValue({ args0 ->
            args0.let({ args0 ->
                bucketWebsiteToKotlin(args0)
            })
        })
}

public object BucketMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.gcp.storage.Bucket::class == javaResource::class

    override fun map(javaResource: Resource): Bucket = Bucket(
        javaResource as
            com.pulumi.gcp.storage.Bucket,
    )
}

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

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy