FolderSettings class

Manages Cloud Observability settings for a folder.

> Warning: This resource is in beta, and should be used with the terraform-provider-google-beta provider. See Provider Versions for more details on beta resources.

Example Usage

Observability Folder Settings Basic

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as time from "@pulumiverse/time";

const testFolder = new gcp.organizations.Folder("test_folder", {
    displayName: "tf-test-_80411",
    parent: "organizations/123456789",
    deletionProtection: false,
});
// Wait for the folder to be created and recognized by the Observability API
const waitForSettingsPropagation = new time.Sleep("wait_for_settings_propagation", {createDuration: "90s"}, {
    dependsOn: [testFolder],
});
const settingsData = gcp.observability.getFolderSettingsOutput({
    folder: testFolder.folderId,
    location: "us",
});
// Add a delay to allow the service account to propagate
const waitForSaPropagation = new time.Sleep("wait_for_sa_propagation", {createDuration: "90s"}, {
    dependsOn: [settingsData],
});
const iam = new gcp.kms.CryptoKeyIAMMember("iam", {
    cryptoKeyId: "example-key",
    role: "roles/cloudkms.cryptoKeyEncrypterDecrypter",
    member: pulumi.interpolate`serviceAccount:${settingsData.serviceAccountId}`,
}, {
    dependsOn: [waitForSaPropagation],
});
const primary = new gcp.observability.FolderSettings("primary", {
    location: "us",
    folder: testFolder.folderId,
    kmsKeyName: "example-key",
}, {
    dependsOn: [iam],
});
import pulumi
import pulumi_gcp as gcp
import pulumiverse_time as time

test_folder = gcp.organizations.Folder("test_folder",
    display_name="tf-test-_80411",
    parent="organizations/123456789",
    deletion_protection=False)
# Wait for the folder to be created and recognized by the Observability API
wait_for_settings_propagation = time.Sleep("wait_for_settings_propagation", create_duration="90s",
opts = pulumi.ResourceOptions(depends_on=[test_folder]))
settings_data = gcp.observability.get_folder_settings_output(folder=test_folder.folder_id,
    location="us")
# Add a delay to allow the service account to propagate
wait_for_sa_propagation = time.Sleep("wait_for_sa_propagation", create_duration="90s",
opts = pulumi.ResourceOptions(depends_on=[settings_data]))
iam = gcp.kms.CryptoKeyIAMMember("iam",
    crypto_key_id="example-key",
    role="roles/cloudkms.cryptoKeyEncrypterDecrypter",
    member=settings_data.apply(lambda settings_data: f"serviceAccount:{settings_data.service_account_id}"),
    opts = pulumi.ResourceOptions(depends_on=[wait_for_sa_propagation]))
primary = gcp.observability.FolderSettings("primary",
    location="us",
    folder=test_folder.folder_id,
    kms_key_name="example-key",
    opts = pulumi.ResourceOptions(depends_on=[iam]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Time = Pulumiverse.Time;

return await Deployment.RunAsync(() =>
{
    var testFolder = new Gcp.Organizations.Folder("test_folder", new()
    {
        DisplayName = "tf-test-_80411",
        Parent = "organizations/123456789",
        DeletionProtection = false,
    });

    // Wait for the folder to be created and recognized by the Observability API
    var waitForSettingsPropagation = new Time.Sleep("wait_for_settings_propagation", new()
    {
        CreateDuration = "90s",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            testFolder,
        },
    });

    var settingsData = Gcp.Observability.GetFolderSettings.Invoke(new()
    {
        Folder = testFolder.FolderId,
        Location = "us",
    });

    // Add a delay to allow the service account to propagate
    var waitForSaPropagation = new Time.Sleep("wait_for_sa_propagation", new()
    {
        CreateDuration = "90s",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            settingsData,
        },
    });

    var iam = new Gcp.Kms.CryptoKeyIAMMember("iam", new()
    {
        CryptoKeyId = "example-key",
        Role = "roles/cloudkms.cryptoKeyEncrypterDecrypter",
        Member = $"serviceAccount:{settingsData.Apply(getFolderSettingsResult => getFolderSettingsResult.ServiceAccountId)}",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            waitForSaPropagation,
        },
    });

    var primary = new Gcp.Observability.FolderSettings("primary", new()
    {
        Location = "us",
        Folder = testFolder.FolderId,
        KmsKeyName = "example-key",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            iam,
        },
    });

});
package main

import (
	"fmt"

	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/kms"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/observability"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/organizations"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
	"github.com/pulumiverse/pulumi-time/sdk/go/time"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		testFolder, err := organizations.NewFolder(ctx, "test_folder", &organizations.FolderArgs{
			DisplayName:        pulumi.String("tf-test-_80411"),
			Parent:             pulumi.String("organizations/123456789"),
			DeletionProtection: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		// Wait for the folder to be created and recognized by the Observability API
		_, err = time.NewSleep(ctx, "wait_for_settings_propagation", &time.SleepArgs{
			CreateDuration: pulumi.String("90s"),
		}, pulumi.DependsOn([]pulumi.Resource{
			testFolder,
		}))
		if err != nil {
			return err
		}
		settingsData := observability.LookupFolderSettingsOutput(ctx, observability.GetFolderSettingsOutputArgs{
			Folder:   testFolder.FolderId,
			Location: pulumi.String("us"),
		}, nil)
		// Add a delay to allow the service account to propagate
		waitForSaPropagation, err := time.NewSleep(ctx, "wait_for_sa_propagation", &time.SleepArgs{
			CreateDuration: pulumi.String("90s"),
		}, pulumi.DependsOn([]pulumi.Resource{
			settingsData,
		}))
		if err != nil {
			return err
		}
		iam, err := kms.NewCryptoKeyIAMMember(ctx, "iam", &kms.CryptoKeyIAMMemberArgs{
			CryptoKeyId: pulumi.String("example-key"),
			Role:        pulumi.String("roles/cloudkms.cryptoKeyEncrypterDecrypter"),
			Member: settingsData.ApplyT(func(settingsData observability.GetFolderSettingsResult) (string, error) {
				return fmt.Sprintf("serviceAccount:%v", settingsData.ServiceAccountId), nil
			}).(pulumi.StringOutput),
		}, pulumi.DependsOn([]pulumi.Resource{
			waitForSaPropagation,
		}))
		if err != nil {
			return err
		}
		_, err = observability.NewFolderSettings(ctx, "primary", &observability.FolderSettingsArgs{
			Location:   pulumi.String("us"),
			Folder:     testFolder.FolderId,
			KmsKeyName: pulumi.String("example-key"),
		}, pulumi.DependsOn([]pulumi.Resource{
			iam,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
    time = {
      source = "pulumi/time"
    }
  }
}

data "gcp_observability_getfoldersettings" "settingsData" {
  folder   = gcp_organizations_folder.test_folder.folder_id
  location = "us"
}

resource "gcp_organizations_folder" "test_folder" {
  display_name        = "tf-test-_80411"
  parent              = "organizations/123456789"
  deletion_protection = false
}
# Wait for the folder to be created and recognized by the Observability API
resource "time_sleep" "wait_for_settings_propagation" {
  depends_on      = [gcp_organizations_folder.test_folder]
  create_duration = "90s"
}
# Add a delay to allow the service account to propagate
resource "time_sleep" "wait_for_sa_propagation" {
  depends_on      = [data.gcp_observability_getfoldersettings.settingsData]
  create_duration = "90s"
}
resource "gcp_kms_cryptokeyiammember" "iam" {
  depends_on    = [time_sleep.wait_for_sa_propagation]
  crypto_key_id = "example-key"
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member        ="serviceAccount:${data.gcp_observability_getfoldersettings.settingsData.service_account_id}"
}
resource "gcp_observability_foldersettings" "primary" {
  depends_on   = [gcp_kms_cryptokeyiammember.iam]
  location     = "us"
  folder       = gcp_organizations_folder.test_folder.folder_id
  kms_key_name = "example-key"
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.Folder;
import com.pulumi.gcp.organizations.FolderArgs;
import com.pulumiverse.time.Sleep;
import com.pulumiverse.time.SleepArgs;
import com.pulumi.gcp.observability.ObservabilityFunctions;
import com.pulumi.gcp.observability.inputs.GetFolderSettingsArgs;
import com.pulumi.gcp.kms.CryptoKeyIAMMember;
import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;
import com.pulumi.gcp.observability.FolderSettings;
import com.pulumi.gcp.observability.FolderSettingsArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
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 testFolder = new Folder("testFolder", FolderArgs.builder()
            .displayName("tf-test-_80411")
            .parent("organizations/123456789")
            .deletionProtection(false)
            .build());

        // Wait for the folder to be created and recognized by the Observability API
        var waitForSettingsPropagation = new Sleep("waitForSettingsPropagation", SleepArgs.builder()
            .createDuration("90s")
            .build(), CustomResourceOptions.builder()
                .dependsOn(testFolder)
                .build());

        final var settingsData = ObservabilityFunctions.getFolderSettings(GetFolderSettingsArgs.builder()
            .folder(testFolder.folderId())
            .location("us")
            .build());

        // Add a delay to allow the service account to propagate
        var waitForSaPropagation = new Sleep("waitForSaPropagation", SleepArgs.builder()
            .createDuration("90s")
            .build(), CustomResourceOptions.builder()
                .dependsOn(settingsData)
                .build());

        var iam = new CryptoKeyIAMMember("iam", CryptoKeyIAMMemberArgs.builder()
            .cryptoKeyId("example-key")
            .role("roles/cloudkms.cryptoKeyEncrypterDecrypter")
            .member(settingsData.applyValue(_settingsData -> String.format("serviceAccount:%s", _settingsData.serviceAccountId())))
            .build(), CustomResourceOptions.builder()
                .dependsOn(waitForSaPropagation)
                .build());

        var primary = new FolderSettings("primary", FolderSettingsArgs.builder()
            .location("us")
            .folder(testFolder.folderId())
            .kmsKeyName("example-key")
            .build(), CustomResourceOptions.builder()
                .dependsOn(iam)
                .build());

    }
}
resources:
  testFolder:
    type: gcp:organizations:Folder
    name: test_folder
    properties:
      displayName: tf-test-_80411
      parent: organizations/123456789
      deletionProtection: false
  # Wait for the folder to be created and recognized by the Observability API
  waitForSettingsPropagation:
    type: time:Sleep
    name: wait_for_settings_propagation
    properties:
      createDuration: 90s
    options:
      dependsOn:
        - ${testFolder}
  # Add a delay to allow the service account to propagate
  waitForSaPropagation:
    type: time:Sleep
    name: wait_for_sa_propagation
    properties:
      createDuration: 90s
    options:
      dependsOn:
        - ${settingsData}
  iam:
    type: gcp:kms:CryptoKeyIAMMember
    properties:
      cryptoKeyId: example-key
      role: roles/cloudkms.cryptoKeyEncrypterDecrypter
      member: serviceAccount:${settingsData.serviceAccountId}
    options:
      dependsOn:
        - ${waitForSaPropagation}
  primary:
    type: gcp:observability:FolderSettings
    properties:
      location: us
      folder: ${testFolder.folderId}
      kmsKeyName: example-key
    options:
      dependsOn:
        - ${iam}
variables:
  settingsData:
    fn::invoke:
      function: gcp:observability:getFolderSettings
      arguments:
        folder: ${testFolder.folderId}
        location: us

Observability Folder Settings Basic Global

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as time from "@pulumiverse/time";

const testFolder = new gcp.organizations.Folder("test_folder", {
    displayName: "tf-test-_44263",
    parent: "organizations/123456789",
    deletionProtection: false,
});
// Wait for the folder to be created and recognized by the Observability API
const waitForFolder = new time.Sleep("wait_for_folder", {createDuration: "90s"}, {
    dependsOn: [testFolder],
});
const settingsData = gcp.observability.getFolderSettingsOutput({
    folder: testFolder.folderId,
    location: "global",
});
const primaryGlobal = new gcp.observability.FolderSettings("primary_global", {
    location: "global",
    folder: testFolder.folderId,
    defaultStorageLocation: "us",
}, {
    dependsOn: [settingsData],
});
import pulumi
import pulumi_gcp as gcp
import pulumiverse_time as time

test_folder = gcp.organizations.Folder("test_folder",
    display_name="tf-test-_44263",
    parent="organizations/123456789",
    deletion_protection=False)
# Wait for the folder to be created and recognized by the Observability API
wait_for_folder = time.Sleep("wait_for_folder", create_duration="90s",
opts = pulumi.ResourceOptions(depends_on=[test_folder]))
settings_data = gcp.observability.get_folder_settings_output(folder=test_folder.folder_id,
    location="global")
primary_global = gcp.observability.FolderSettings("primary_global",
    location="global",
    folder=test_folder.folder_id,
    default_storage_location="us",
    opts = pulumi.ResourceOptions(depends_on=[settings_data]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Time = Pulumiverse.Time;

return await Deployment.RunAsync(() =>
{
    var testFolder = new Gcp.Organizations.Folder("test_folder", new()
    {
        DisplayName = "tf-test-_44263",
        Parent = "organizations/123456789",
        DeletionProtection = false,
    });

    // Wait for the folder to be created and recognized by the Observability API
    var waitForFolder = new Time.Sleep("wait_for_folder", new()
    {
        CreateDuration = "90s",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            testFolder,
        },
    });

    var settingsData = Gcp.Observability.GetFolderSettings.Invoke(new()
    {
        Folder = testFolder.FolderId,
        Location = "global",
    });

    var primaryGlobal = new Gcp.Observability.FolderSettings("primary_global", new()
    {
        Location = "global",
        Folder = testFolder.FolderId,
        DefaultStorageLocation = "us",
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            settingsData,
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/observability"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/organizations"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
	"github.com/pulumiverse/pulumi-time/sdk/go/time"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		testFolder, err := organizations.NewFolder(ctx, "test_folder", &organizations.FolderArgs{
			DisplayName:        pulumi.String("tf-test-_44263"),
			Parent:             pulumi.String("organizations/123456789"),
			DeletionProtection: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		// Wait for the folder to be created and recognized by the Observability API
		_, err = time.NewSleep(ctx, "wait_for_folder", &time.SleepArgs{
			CreateDuration: pulumi.String("90s"),
		}, pulumi.DependsOn([]pulumi.Resource{
			testFolder,
		}))
		if err != nil {
			return err
		}
		settingsData := observability.LookupFolderSettingsOutput(ctx, observability.GetFolderSettingsOutputArgs{
			Folder:   testFolder.FolderId,
			Location: pulumi.String("global"),
		}, nil)
		_, err = observability.NewFolderSettings(ctx, "primary_global", &observability.FolderSettingsArgs{
			Location:               pulumi.String("global"),
			Folder:                 testFolder.FolderId,
			DefaultStorageLocation: pulumi.String("us"),
		}, pulumi.DependsOn([]pulumi.Resource{
			settingsData,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
    time = {
      source = "pulumi/time"
    }
  }
}

data "gcp_observability_getfoldersettings" "settingsData" {
  folder   = gcp_organizations_folder.test_folder.folder_id
  location = "global"
}

resource "gcp_organizations_folder" "test_folder" {
  display_name        = "tf-test-_44263"
  parent              = "organizations/123456789"
  deletion_protection = false
}
# Wait for the folder to be created and recognized by the Observability API
resource "time_sleep" "wait_for_folder" {
  depends_on      = [gcp_organizations_folder.test_folder]
  create_duration = "90s"
}
resource "gcp_observability_foldersettings" "primary_global" {
  depends_on               = [data.gcp_observability_getfoldersettings.settingsData]
  location                 = "global"
  folder                   = gcp_organizations_folder.test_folder.folder_id
  default_storage_location = "us"
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.Folder;
import com.pulumi.gcp.organizations.FolderArgs;
import com.pulumiverse.time.Sleep;
import com.pulumiverse.time.SleepArgs;
import com.pulumi.gcp.observability.ObservabilityFunctions;
import com.pulumi.gcp.observability.inputs.GetFolderSettingsArgs;
import com.pulumi.gcp.observability.FolderSettings;
import com.pulumi.gcp.observability.FolderSettingsArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
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 testFolder = new Folder("testFolder", FolderArgs.builder()
            .displayName("tf-test-_44263")
            .parent("organizations/123456789")
            .deletionProtection(false)
            .build());

        // Wait for the folder to be created and recognized by the Observability API
        var waitForFolder = new Sleep("waitForFolder", SleepArgs.builder()
            .createDuration("90s")
            .build(), CustomResourceOptions.builder()
                .dependsOn(testFolder)
                .build());

        final var settingsData = ObservabilityFunctions.getFolderSettings(GetFolderSettingsArgs.builder()
            .folder(testFolder.folderId())
            .location("global")
            .build());

        var primaryGlobal = new FolderSettings("primaryGlobal", FolderSettingsArgs.builder()
            .location("global")
            .folder(testFolder.folderId())
            .defaultStorageLocation("us")
            .build(), CustomResourceOptions.builder()
                .dependsOn(settingsData)
                .build());

    }
}
resources:
  testFolder:
    type: gcp:organizations:Folder
    name: test_folder
    properties:
      displayName: tf-test-_44263
      parent: organizations/123456789
      deletionProtection: false
  # Wait for the folder to be created and recognized by the Observability API
  waitForFolder:
    type: time:Sleep
    name: wait_for_folder
    properties:
      createDuration: 90s
    options:
      dependsOn:
        - ${testFolder}
  primaryGlobal:
    type: gcp:observability:FolderSettings
    name: primary_global
    properties:
      location: global
      folder: ${testFolder.folderId}
      defaultStorageLocation: us
    options:
      dependsOn:
        - ${settingsData}
variables:
  settingsData:
    fn::invoke:
      function: gcp:observability:getFolderSettings
      arguments:
        folder: ${testFolder.folderId}
        location: global

Import

FolderSettings can be imported using any of these accepted formats:

  • folders/{{folder}}/locations/{{location}}/settings
  • {{folder}}/{{location}}

When using the pulumi import command, FolderSettings can be imported using one of the formats above. For example:

$ pulumi import gcp:observability/folderSettings:FolderSettings default folders/{{folder}}/locations/{{location}}/settings
$ pulumi import gcp:observability/folderSettings:FolderSettings default {{folder}}/{{location}}

Constructors

FolderSettings(String name, {FolderSettingsArgs? args, CustomResourceOptions? options})
Creates a new FolderSettings. name The Pulumi resource name. args Arguments used to configure this FolderSettings. The set of arguments for FolderSettings. options Resource options controlling this resource's behavior.
FolderSettings.reference(String urn)
Creates a typed reference to an existing FolderSettings resource.

Properties

childResources → Set<Resource>
finalinherited
completionSources ↔ Map<String, IOutputCompletionSource>
latefinalinherited
defaultStorageLocation ↔ Output<String?>
The default storage location for new resources, e.g. buckets. Only valid for global location.
latefinal
folder ↔ Output<String>
The folder ID.
latefinal
hashCode → int
The hash code for this object.
no setterinherited
id ↔ Output<String>
getter/setter pairinherited
isCustom → bool
Returns whether this resource is provider-managed.
no setterinherited
isProtected → bool
Returns whether this resource is protected from deletion.
no setterinherited
isRemote → bool
Whether this resource is registered as remote.
no setterinherited
isResourceReference → bool
Whether this instance represents a resource value returned over RPC.
finalinherited
kmsKeyName ↔ Output<String?>
The default Cloud KMS key to use for new resources. Only valid for regional locations.
latefinal
location ↔ Output<String>
The location of the settings.
latefinal
name ↔ Output<String>
The resource name of the settings.
latefinal
resourceTransforms → List<ResourceTransform>
Inherited/explicit async transforms.
no setterinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
serviceAccountId ↔ Output<String>
The service account used by Cloud Observability for this folder.
latefinal
transformations → List<ResourceTransformation>
Inherited/explicit legacy transformations.
no setterinherited
urn ↔ Output<String>
latefinalinherited

Methods

failId(Object error) → void
Completes this resource ID with an error when registration fails.
inherited
failOutputs(Object error) → void
Completes all output properties with error.
inherited
failUrn(Object error) → void
Completes this resource URN with an error when registration fails.
inherited
getProvider(String moduleMember) → ProviderResource?
Returns provider for moduleMember's package, if configured.
inherited
getResourceName() → String
Returns this resource's logical name.
inherited
getResourceType() → String
Returns this resource's Pulumi type token.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
registerOutput<T>(String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output<T>
Registers a dynamic output property for this resource.
inherited
resolveId(String? value, {required bool isKnown}) → void
Resolves the provider-assigned ID for this resource.
inherited
resolveOutputs(Struct outputs) → void
Resolves all output properties from a monitor response payload.
inherited
resolveUrn(String value) → void
Resolves this resource's URN once assigned by the engine.
inherited
serializeProperties(Map<String, dynamic> properties) → Future<Struct>
Serializes resource properties for RPC transmission.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

get(String name, Input<String> id, {FolderSettingsState? state, CustomResourceOptions? options}) → FolderSettings
Gets an existing FolderSettings resource's state with the given name and id.