1. Packages
  2. Oracle Cloud Infrastructure
  3. API Docs
  4. Identity
  5. TagNamespace
Oracle Cloud Infrastructure v1.29.0 published on Thursday, Mar 28, 2024 by Pulumi

oci.Identity.TagNamespace

Explore with Pulumi AI

oci logo
Oracle Cloud Infrastructure v1.29.0 published on Thursday, Mar 28, 2024 by Pulumi

    This resource provides the Tag Namespace resource in Oracle Cloud Infrastructure Identity service.

    Creates a new tag namespace in the specified compartment.

    You must specify the compartment ID in the request object (remember that the tenancy is simply the root compartment).

    You must also specify a name for the namespace, which must be unique across all namespaces in your tenancy and cannot be changed. The name can contain any ASCII character except the space (_) or period (.). Names are case insensitive. That means, for example, “myNamespace” and “mynamespace” are not allowed in the same tenancy. Once you created a namespace, you cannot change the name. If you specify a name that’s already in use in the tenancy, a 409 error is returned.

    You must also specify a description for the namespace. It does not have to be unique, and you can change it with UpdateTagNamespace.

    Example Usage

    import * as pulumi from "@pulumi/pulumi";
    import * as oci from "@pulumi/oci";
    
    const testTagNamespace = new oci.identity.TagNamespace("testTagNamespace", {
        compartmentId: _var.compartment_id,
        description: _var.tag_namespace_description,
        definedTags: {
            "Operations.CostCenter": "42",
        },
        freeformTags: {
            Department: "Finance",
        },
        isRetired: false,
    });
    
    import pulumi
    import pulumi_oci as oci
    
    test_tag_namespace = oci.identity.TagNamespace("testTagNamespace",
        compartment_id=var["compartment_id"],
        description=var["tag_namespace_description"],
        defined_tags={
            "Operations.CostCenter": "42",
        },
        freeform_tags={
            "Department": "Finance",
        },
        is_retired=False)
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-oci/sdk/go/oci/Identity"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := Identity.NewTagNamespace(ctx, "testTagNamespace", &Identity.TagNamespaceArgs{
    			CompartmentId: pulumi.Any(_var.Compartment_id),
    			Description:   pulumi.Any(_var.Tag_namespace_description),
    			DefinedTags: pulumi.Map{
    				"Operations.CostCenter": pulumi.Any("42"),
    			},
    			FreeformTags: pulumi.Map{
    				"Department": pulumi.Any("Finance"),
    			},
    			IsRetired: pulumi.Bool(false),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using Oci = Pulumi.Oci;
    
    return await Deployment.RunAsync(() => 
    {
        var testTagNamespace = new Oci.Identity.TagNamespace("testTagNamespace", new()
        {
            CompartmentId = @var.Compartment_id,
            Description = @var.Tag_namespace_description,
            DefinedTags = 
            {
                { "Operations.CostCenter", "42" },
            },
            FreeformTags = 
            {
                { "Department", "Finance" },
            },
            IsRetired = false,
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.oci.Identity.TagNamespace;
    import com.pulumi.oci.Identity.TagNamespaceArgs;
    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 testTagNamespace = new TagNamespace("testTagNamespace", TagNamespaceArgs.builder()        
                .compartmentId(var_.compartment_id())
                .description(var_.tag_namespace_description())
                .definedTags(Map.of("Operations.CostCenter", "42"))
                .freeformTags(Map.of("Department", "Finance"))
                .isRetired(false)
                .build());
    
        }
    }
    
    resources:
      testTagNamespace:
        type: oci:Identity:TagNamespace
        properties:
          #Required
          compartmentId: ${var.compartment_id}
          description: ${var.tag_namespace_description}
          #Optional
          definedTags:
            Operations.CostCenter: '42'
          freeformTags:
            Department: Finance
          isRetired: false
    

    Create TagNamespace Resource

    new TagNamespace(name: string, args: TagNamespaceArgs, opts?: CustomResourceOptions);
    @overload
    def TagNamespace(resource_name: str,
                     opts: Optional[ResourceOptions] = None,
                     compartment_id: Optional[str] = None,
                     defined_tags: Optional[Mapping[str, Any]] = None,
                     description: Optional[str] = None,
                     freeform_tags: Optional[Mapping[str, Any]] = None,
                     is_retired: Optional[bool] = None,
                     name: Optional[str] = None)
    @overload
    def TagNamespace(resource_name: str,
                     args: TagNamespaceArgs,
                     opts: Optional[ResourceOptions] = None)
    func NewTagNamespace(ctx *Context, name string, args TagNamespaceArgs, opts ...ResourceOption) (*TagNamespace, error)
    public TagNamespace(string name, TagNamespaceArgs args, CustomResourceOptions? opts = null)
    public TagNamespace(String name, TagNamespaceArgs args)
    public TagNamespace(String name, TagNamespaceArgs args, CustomResourceOptions options)
    
    type: oci:Identity:TagNamespace
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    
    name string
    The unique name of the resource.
    args TagNamespaceArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    resource_name str
    The unique name of the resource.
    args TagNamespaceArgs
    The arguments to resource properties.
    opts ResourceOptions
    Bag of options to control resource's behavior.
    ctx Context
    Context object for the current deployment.
    name string
    The unique name of the resource.
    args TagNamespaceArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args TagNamespaceArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args TagNamespaceArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    TagNamespace Resource Properties

    To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.

    Inputs

    The TagNamespace resource accepts the following input properties:

    CompartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    Description string
    (Updatable) The description you assign to the tag namespace during creation.
    DefinedTags Dictionary<string, object>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    FreeformTags Dictionary<string, object>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    IsRetired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    Name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    CompartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    Description string
    (Updatable) The description you assign to the tag namespace during creation.
    DefinedTags map[string]interface{}
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    FreeformTags map[string]interface{}
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    IsRetired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    Name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    compartmentId String
    (Updatable) The OCID of the tenancy containing the tag namespace.
    description String
    (Updatable) The description you assign to the tag namespace during creation.
    definedTags Map<String,Object>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    freeformTags Map<String,Object>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired Boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name String
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    compartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    description string
    (Updatable) The description you assign to the tag namespace during creation.
    definedTags {[key: string]: any}
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    freeformTags {[key: string]: any}
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    compartment_id str
    (Updatable) The OCID of the tenancy containing the tag namespace.
    description str
    (Updatable) The description you assign to the tag namespace during creation.
    defined_tags Mapping[str, Any]
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    freeform_tags Mapping[str, Any]
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    is_retired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name str
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    compartmentId String
    (Updatable) The OCID of the tenancy containing the tag namespace.
    description String
    (Updatable) The description you assign to the tag namespace during creation.
    definedTags Map<Any>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    freeformTags Map<Any>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired Boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name String
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.

    Outputs

    All input properties are implicitly available as output properties. Additionally, the TagNamespace resource produces the following output properties:

    Id string
    The provider-assigned unique ID for this managed resource.
    State string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    TimeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    Id string
    The provider-assigned unique ID for this managed resource.
    State string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    TimeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    id String
    The provider-assigned unique ID for this managed resource.
    state String
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated String
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    id string
    The provider-assigned unique ID for this managed resource.
    state string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    id str
    The provider-assigned unique ID for this managed resource.
    state str
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    time_created str
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    id String
    The provider-assigned unique ID for this managed resource.
    state String
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated String
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z

    Look up Existing TagNamespace Resource

    Get an existing TagNamespace resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

    public static get(name: string, id: Input<ID>, state?: TagNamespaceState, opts?: CustomResourceOptions): TagNamespace
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            compartment_id: Optional[str] = None,
            defined_tags: Optional[Mapping[str, Any]] = None,
            description: Optional[str] = None,
            freeform_tags: Optional[Mapping[str, Any]] = None,
            is_retired: Optional[bool] = None,
            name: Optional[str] = None,
            state: Optional[str] = None,
            time_created: Optional[str] = None) -> TagNamespace
    func GetTagNamespace(ctx *Context, name string, id IDInput, state *TagNamespaceState, opts ...ResourceOption) (*TagNamespace, error)
    public static TagNamespace Get(string name, Input<string> id, TagNamespaceState? state, CustomResourceOptions? opts = null)
    public static TagNamespace get(String name, Output<String> id, TagNamespaceState state, CustomResourceOptions options)
    Resource lookup is not supported in YAML
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    resource_name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    name
    The unique name of the resulting resource.
    id
    The unique provider ID of the resource to lookup.
    state
    Any extra arguments used during the lookup.
    opts
    A bag of options that control this resource's behavior.
    The following state arguments are supported:
    CompartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    DefinedTags Dictionary<string, object>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    Description string
    (Updatable) The description you assign to the tag namespace during creation.
    FreeformTags Dictionary<string, object>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    IsRetired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    Name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    State string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    TimeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    CompartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    DefinedTags map[string]interface{}
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    Description string
    (Updatable) The description you assign to the tag namespace during creation.
    FreeformTags map[string]interface{}
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    IsRetired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    Name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    State string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    TimeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    compartmentId String
    (Updatable) The OCID of the tenancy containing the tag namespace.
    definedTags Map<String,Object>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    description String
    (Updatable) The description you assign to the tag namespace during creation.
    freeformTags Map<String,Object>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired Boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name String
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    state String
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated String
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    compartmentId string
    (Updatable) The OCID of the tenancy containing the tag namespace.
    definedTags {[key: string]: any}
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    description string
    (Updatable) The description you assign to the tag namespace during creation.
    freeformTags {[key: string]: any}
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name string
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    state string
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated string
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    compartment_id str
    (Updatable) The OCID of the tenancy containing the tag namespace.
    defined_tags Mapping[str, Any]
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    description str
    (Updatable) The description you assign to the tag namespace during creation.
    freeform_tags Mapping[str, Any]
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    is_retired bool

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name str
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    state str
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    time_created str
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z
    compartmentId String
    (Updatable) The OCID of the tenancy containing the tag namespace.
    definedTags Map<Any>
    (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see Resource Tags. Example: {"Operations.CostCenter": "42"}
    description String
    (Updatable) The description you assign to the tag namespace during creation.
    freeformTags Map<Any>
    (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see Resource Tags. Example: {"Department": "Finance"}
    isRetired Boolean

    (Updatable) Whether the tag namespace is retired. For more information, see Retiring Key Definitions and Namespace Definitions.

    ** IMPORTANT ** Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values

    name String
    The name you assign to the tag namespace during creation. It must be unique across all tag namespaces in the tenancy and cannot be changed.
    state String
    The tagnamespace's current state. After creating a tagnamespace, make sure its lifecycleState is ACTIVE before using it. After retiring a tagnamespace, make sure its lifecycleState is INACTIVE before using it.
    timeCreated String
    Date and time the tag namespace was created, in the format defined by RFC3339. Example: 2016-08-25T21:10:29.600Z

    Import

    TagNamespaces can be imported using the id, e.g.

    $ pulumi import oci:Identity/tagNamespace:TagNamespace test_tag_namespace "id"
    

    Package Details

    Repository
    oci pulumi/pulumi-oci
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the oci Terraform Provider.
    oci logo
    Oracle Cloud Infrastructure v1.29.0 published on Thursday, Mar 28, 2024 by Pulumi