1. Packages
  2. Azure Native
  3. API Docs
  4. securityinsights
  5. TIDataConnector
This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi

azure-native.securityinsights.TIDataConnector

Explore with Pulumi AI

azure-native logo
This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi

    Represents threat intelligence data connector. Azure REST API version: 2023-02-01. Prior API version in Azure Native 1.x: 2020-01-01.

    Example Usage

    Creates or updates an Office365 data connector.

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using AzureNative = Pulumi.AzureNative;
    
    return await Deployment.RunAsync(() => 
    {
        var tiDataConnector = new AzureNative.SecurityInsights.TIDataConnector("tiDataConnector", new()
        {
            DataConnectorId = "73e01a99-5cd7-4139-a149-9f2736ff2ab5",
            ResourceGroupName = "myRg",
            WorkspaceName = "myWorkspace",
        });
    
    });
    
    package main
    
    import (
    	securityinsights "github.com/pulumi/pulumi-azure-native-sdk/securityinsights/v2"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := securityinsights.NewTIDataConnector(ctx, "tiDataConnector", &securityinsights.TIDataConnectorArgs{
    			DataConnectorId:   pulumi.String("73e01a99-5cd7-4139-a149-9f2736ff2ab5"),
    			ResourceGroupName: pulumi.String("myRg"),
    			WorkspaceName:     pulumi.String("myWorkspace"),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.azurenative.securityinsights.TIDataConnector;
    import com.pulumi.azurenative.securityinsights.TIDataConnectorArgs;
    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 tiDataConnector = new TIDataConnector("tiDataConnector", TIDataConnectorArgs.builder()
                .dataConnectorId("73e01a99-5cd7-4139-a149-9f2736ff2ab5")
                .resourceGroupName("myRg")
                .workspaceName("myWorkspace")
                .build());
    
        }
    }
    
    import pulumi
    import pulumi_azure_native as azure_native
    
    ti_data_connector = azure_native.securityinsights.TIDataConnector("tiDataConnector",
        data_connector_id="73e01a99-5cd7-4139-a149-9f2736ff2ab5",
        resource_group_name="myRg",
        workspace_name="myWorkspace")
    
    import * as pulumi from "@pulumi/pulumi";
    import * as azure_native from "@pulumi/azure-native";
    
    const tiDataConnector = new azure_native.securityinsights.TIDataConnector("tiDataConnector", {
        dataConnectorId: "73e01a99-5cd7-4139-a149-9f2736ff2ab5",
        resourceGroupName: "myRg",
        workspaceName: "myWorkspace",
    });
    
    resources:
      tiDataConnector:
        type: azure-native:securityinsights:TIDataConnector
        properties:
          dataConnectorId: 73e01a99-5cd7-4139-a149-9f2736ff2ab5
          resourceGroupName: myRg
          workspaceName: myWorkspace
    

    Creates or updates an Threat Intelligence Platform data connector.

    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using AzureNative = Pulumi.AzureNative;
    
    return await Deployment.RunAsync(() => 
    {
        var tiDataConnector = new AzureNative.SecurityInsights.TIDataConnector("tiDataConnector", new()
        {
            DataConnectorId = "73e01a99-5cd7-4139-a149-9f2736ff2ab5",
            DataTypes = new AzureNative.SecurityInsights.Inputs.TIDataConnectorDataTypesArgs
            {
                Indicators = new AzureNative.SecurityInsights.Inputs.TIDataConnectorDataTypesIndicatorsArgs
                {
                    State = AzureNative.SecurityInsights.DataTypeState.Enabled,
                },
            },
            Kind = "ThreatIntelligence",
            ResourceGroupName = "myRg",
            TenantId = "06b3ccb8-1384-4bcc-aec7-852f6d57161b",
            TipLookbackPeriod = "2020-01-01T13:00:30.123Z",
            WorkspaceName = "myWorkspace",
        });
    
    });
    
    package main
    
    import (
    	securityinsights "github.com/pulumi/pulumi-azure-native-sdk/securityinsights/v2"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := securityinsights.NewTIDataConnector(ctx, "tiDataConnector", &securityinsights.TIDataConnectorArgs{
    			DataConnectorId: pulumi.String("73e01a99-5cd7-4139-a149-9f2736ff2ab5"),
    			DataTypes: &securityinsights.TIDataConnectorDataTypesArgs{
    				Indicators: &securityinsights.TIDataConnectorDataTypesIndicatorsArgs{
    					State: pulumi.String(securityinsights.DataTypeStateEnabled),
    				},
    			},
    			Kind:              pulumi.String("ThreatIntelligence"),
    			ResourceGroupName: pulumi.String("myRg"),
    			TenantId:          pulumi.String("06b3ccb8-1384-4bcc-aec7-852f6d57161b"),
    			TipLookbackPeriod: pulumi.String("2020-01-01T13:00:30.123Z"),
    			WorkspaceName:     pulumi.String("myWorkspace"),
    		})
    		if err != nil {
    			return err
    		}
    		return nil
    	})
    }
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.azurenative.securityinsights.TIDataConnector;
    import com.pulumi.azurenative.securityinsights.TIDataConnectorArgs;
    import com.pulumi.azurenative.securityinsights.inputs.TIDataConnectorDataTypesArgs;
    import com.pulumi.azurenative.securityinsights.inputs.TIDataConnectorDataTypesIndicatorsArgs;
    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 tiDataConnector = new TIDataConnector("tiDataConnector", TIDataConnectorArgs.builder()
                .dataConnectorId("73e01a99-5cd7-4139-a149-9f2736ff2ab5")
                .dataTypes(TIDataConnectorDataTypesArgs.builder()
                    .indicators(TIDataConnectorDataTypesIndicatorsArgs.builder()
                        .state("Enabled")
                        .build())
                    .build())
                .kind("ThreatIntelligence")
                .resourceGroupName("myRg")
                .tenantId("06b3ccb8-1384-4bcc-aec7-852f6d57161b")
                .tipLookbackPeriod("2020-01-01T13:00:30.123Z")
                .workspaceName("myWorkspace")
                .build());
    
        }
    }
    
    import pulumi
    import pulumi_azure_native as azure_native
    
    ti_data_connector = azure_native.securityinsights.TIDataConnector("tiDataConnector",
        data_connector_id="73e01a99-5cd7-4139-a149-9f2736ff2ab5",
        data_types={
            "indicators": {
                "state": azure_native.securityinsights.DataTypeState.ENABLED,
            },
        },
        kind="ThreatIntelligence",
        resource_group_name="myRg",
        tenant_id="06b3ccb8-1384-4bcc-aec7-852f6d57161b",
        tip_lookback_period="2020-01-01T13:00:30.123Z",
        workspace_name="myWorkspace")
    
    import * as pulumi from "@pulumi/pulumi";
    import * as azure_native from "@pulumi/azure-native";
    
    const tiDataConnector = new azure_native.securityinsights.TIDataConnector("tiDataConnector", {
        dataConnectorId: "73e01a99-5cd7-4139-a149-9f2736ff2ab5",
        dataTypes: {
            indicators: {
                state: azure_native.securityinsights.DataTypeState.Enabled,
            },
        },
        kind: "ThreatIntelligence",
        resourceGroupName: "myRg",
        tenantId: "06b3ccb8-1384-4bcc-aec7-852f6d57161b",
        tipLookbackPeriod: "2020-01-01T13:00:30.123Z",
        workspaceName: "myWorkspace",
    });
    
    resources:
      tiDataConnector:
        type: azure-native:securityinsights:TIDataConnector
        properties:
          dataConnectorId: 73e01a99-5cd7-4139-a149-9f2736ff2ab5
          dataTypes:
            indicators:
              state: Enabled
          kind: ThreatIntelligence
          resourceGroupName: myRg
          tenantId: 06b3ccb8-1384-4bcc-aec7-852f6d57161b
          tipLookbackPeriod: 2020-01-01T13:00:30.123Z
          workspaceName: myWorkspace
    

    Create TIDataConnector Resource

    Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.

    Constructor syntax

    new TIDataConnector(name: string, args: TIDataConnectorArgs, opts?: CustomResourceOptions);
    @overload
    def TIDataConnector(resource_name: str,
                        args: TIDataConnectorArgs,
                        opts: Optional[ResourceOptions] = None)
    
    @overload
    def TIDataConnector(resource_name: str,
                        opts: Optional[ResourceOptions] = None,
                        resource_group_name: Optional[str] = None,
                        workspace_name: Optional[str] = None,
                        data_connector_id: Optional[str] = None,
                        data_types: Optional[TIDataConnectorDataTypesArgs] = None,
                        tenant_id: Optional[str] = None,
                        tip_lookback_period: Optional[str] = None)
    func NewTIDataConnector(ctx *Context, name string, args TIDataConnectorArgs, opts ...ResourceOption) (*TIDataConnector, error)
    public TIDataConnector(string name, TIDataConnectorArgs args, CustomResourceOptions? opts = null)
    public TIDataConnector(String name, TIDataConnectorArgs args)
    public TIDataConnector(String name, TIDataConnectorArgs args, CustomResourceOptions options)
    
    type: azure-native:securityinsights:TIDataConnector
    properties: # The arguments to resource properties.
    options: # Bag of options to control resource's behavior.
    
    

    Parameters

    name string
    The unique name of the resource.
    args TIDataConnectorArgs
    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 TIDataConnectorArgs
    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 TIDataConnectorArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args TIDataConnectorArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args TIDataConnectorArgs
    The arguments to resource properties.
    options CustomResourceOptions
    Bag of options to control resource's behavior.

    Constructor example

    The following reference example uses placeholder values for all input properties.

    var tidataConnectorResource = new AzureNative.SecurityInsights.TIDataConnector("tidataConnectorResource", new()
    {
        Kind = "string",
        ResourceGroupName = "string",
        WorkspaceName = "string",
        DataConnectorId = "string",
        DataTypes = new AzureNative.SecurityInsights.Inputs.TIDataConnectorDataTypesArgs
        {
            Indicators = new AzureNative.SecurityInsights.Inputs.TIDataConnectorDataTypesIndicatorsArgs
            {
                State = "string",
            },
        },
        TenantId = "string",
        TipLookbackPeriod = "string",
    });
    
    example, err := securityinsights.NewTIDataConnector(ctx, "tidataConnectorResource", &securityinsights.TIDataConnectorArgs{
    	Kind:              pulumi.String("string"),
    	ResourceGroupName: pulumi.String("string"),
    	WorkspaceName:     pulumi.String("string"),
    	DataConnectorId:   pulumi.String("string"),
    	DataTypes: &securityinsights.TIDataConnectorDataTypesArgs{
    		Indicators: &securityinsights.TIDataConnectorDataTypesIndicatorsArgs{
    			State: pulumi.String("string"),
    		},
    	},
    	TenantId:          pulumi.String("string"),
    	TipLookbackPeriod: pulumi.String("string"),
    })
    
    var tidataConnectorResource = new TIDataConnector("tidataConnectorResource", TIDataConnectorArgs.builder()
        .kind("string")
        .resourceGroupName("string")
        .workspaceName("string")
        .dataConnectorId("string")
        .dataTypes(TIDataConnectorDataTypesArgs.builder()
            .indicators(TIDataConnectorDataTypesIndicatorsArgs.builder()
                .state("string")
                .build())
            .build())
        .tenantId("string")
        .tipLookbackPeriod("string")
        .build());
    
    tidata_connector_resource = azure_native.securityinsights.TIDataConnector("tidataConnectorResource",
        kind="string",
        resource_group_name="string",
        workspace_name="string",
        data_connector_id="string",
        data_types={
            "indicators": {
                "state": "string",
            },
        },
        tenant_id="string",
        tip_lookback_period="string")
    
    const tidataConnectorResource = new azure_native.securityinsights.TIDataConnector("tidataConnectorResource", {
        kind: "string",
        resourceGroupName: "string",
        workspaceName: "string",
        dataConnectorId: "string",
        dataTypes: {
            indicators: {
                state: "string",
            },
        },
        tenantId: "string",
        tipLookbackPeriod: "string",
    });
    
    type: azure-native:securityinsights:TIDataConnector
    properties:
        dataConnectorId: string
        dataTypes:
            indicators:
                state: string
        kind: string
        resourceGroupName: string
        tenantId: string
        tipLookbackPeriod: string
        workspaceName: string
    

    TIDataConnector 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 TIDataConnector resource accepts the following input properties:

    ResourceGroupName string
    The name of the resource group. The name is case insensitive.
    WorkspaceName string
    The name of the workspace.
    DataConnectorId string
    Connector ID
    DataTypes Pulumi.AzureNative.SecurityInsights.Inputs.TIDataConnectorDataTypes
    The available data types for the connector.
    TenantId string
    The tenant id to connect to, and get the data from.
    TipLookbackPeriod string
    The lookback period for the feed to be imported.
    ResourceGroupName string
    The name of the resource group. The name is case insensitive.
    WorkspaceName string
    The name of the workspace.
    DataConnectorId string
    Connector ID
    DataTypes TIDataConnectorDataTypesArgs
    The available data types for the connector.
    TenantId string
    The tenant id to connect to, and get the data from.
    TipLookbackPeriod string
    The lookback period for the feed to be imported.
    resourceGroupName String
    The name of the resource group. The name is case insensitive.
    workspaceName String
    The name of the workspace.
    dataConnectorId String
    Connector ID
    dataTypes TIDataConnectorDataTypes
    The available data types for the connector.
    tenantId String
    The tenant id to connect to, and get the data from.
    tipLookbackPeriod String
    The lookback period for the feed to be imported.
    resourceGroupName string
    The name of the resource group. The name is case insensitive.
    workspaceName string
    The name of the workspace.
    dataConnectorId string
    Connector ID
    dataTypes TIDataConnectorDataTypes
    The available data types for the connector.
    tenantId string
    The tenant id to connect to, and get the data from.
    tipLookbackPeriod string
    The lookback period for the feed to be imported.
    resource_group_name str
    The name of the resource group. The name is case insensitive.
    workspace_name str
    The name of the workspace.
    data_connector_id str
    Connector ID
    data_types TIDataConnectorDataTypesArgs
    The available data types for the connector.
    tenant_id str
    The tenant id to connect to, and get the data from.
    tip_lookback_period str
    The lookback period for the feed to be imported.
    resourceGroupName String
    The name of the resource group. The name is case insensitive.
    workspaceName String
    The name of the workspace.
    dataConnectorId String
    Connector ID
    dataTypes Property Map
    The available data types for the connector.
    tenantId String
    The tenant id to connect to, and get the data from.
    tipLookbackPeriod String
    The lookback period for the feed to be imported.

    Outputs

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

    Id string
    The provider-assigned unique ID for this managed resource.
    Name string
    The name of the resource
    SystemData Pulumi.AzureNative.SecurityInsights.Outputs.SystemDataResponse
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    Type string
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    Etag string
    Etag of the azure resource
    Id string
    The provider-assigned unique ID for this managed resource.
    Name string
    The name of the resource
    SystemData SystemDataResponse
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    Type string
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    Etag string
    Etag of the azure resource
    id String
    The provider-assigned unique ID for this managed resource.
    name String
    The name of the resource
    systemData SystemDataResponse
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    type String
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    etag String
    Etag of the azure resource
    id string
    The provider-assigned unique ID for this managed resource.
    name string
    The name of the resource
    systemData SystemDataResponse
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    type string
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    etag string
    Etag of the azure resource
    id str
    The provider-assigned unique ID for this managed resource.
    name str
    The name of the resource
    system_data SystemDataResponse
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    type str
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    etag str
    Etag of the azure resource
    id String
    The provider-assigned unique ID for this managed resource.
    name String
    The name of the resource
    systemData Property Map
    Azure Resource Manager metadata containing createdBy and modifiedBy information.
    type String
    The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or "Microsoft.Storage/storageAccounts"
    etag String
    Etag of the azure resource

    Supporting Types

    DataTypeState, DataTypeStateArgs

    Enabled
    Enabled
    Disabled
    Disabled
    DataTypeStateEnabled
    Enabled
    DataTypeStateDisabled
    Disabled
    Enabled
    Enabled
    Disabled
    Disabled
    Enabled
    Enabled
    Disabled
    Disabled
    ENABLED
    Enabled
    DISABLED
    Disabled
    "Enabled"
    Enabled
    "Disabled"
    Disabled

    SystemDataResponse, SystemDataResponseArgs

    CreatedAt string
    The timestamp of resource creation (UTC).
    CreatedBy string
    The identity that created the resource.
    CreatedByType string
    The type of identity that created the resource.
    LastModifiedAt string
    The timestamp of resource last modification (UTC)
    LastModifiedBy string
    The identity that last modified the resource.
    LastModifiedByType string
    The type of identity that last modified the resource.
    CreatedAt string
    The timestamp of resource creation (UTC).
    CreatedBy string
    The identity that created the resource.
    CreatedByType string
    The type of identity that created the resource.
    LastModifiedAt string
    The timestamp of resource last modification (UTC)
    LastModifiedBy string
    The identity that last modified the resource.
    LastModifiedByType string
    The type of identity that last modified the resource.
    createdAt String
    The timestamp of resource creation (UTC).
    createdBy String
    The identity that created the resource.
    createdByType String
    The type of identity that created the resource.
    lastModifiedAt String
    The timestamp of resource last modification (UTC)
    lastModifiedBy String
    The identity that last modified the resource.
    lastModifiedByType String
    The type of identity that last modified the resource.
    createdAt string
    The timestamp of resource creation (UTC).
    createdBy string
    The identity that created the resource.
    createdByType string
    The type of identity that created the resource.
    lastModifiedAt string
    The timestamp of resource last modification (UTC)
    lastModifiedBy string
    The identity that last modified the resource.
    lastModifiedByType string
    The type of identity that last modified the resource.
    created_at str
    The timestamp of resource creation (UTC).
    created_by str
    The identity that created the resource.
    created_by_type str
    The type of identity that created the resource.
    last_modified_at str
    The timestamp of resource last modification (UTC)
    last_modified_by str
    The identity that last modified the resource.
    last_modified_by_type str
    The type of identity that last modified the resource.
    createdAt String
    The timestamp of resource creation (UTC).
    createdBy String
    The identity that created the resource.
    createdByType String
    The type of identity that created the resource.
    lastModifiedAt String
    The timestamp of resource last modification (UTC)
    lastModifiedBy String
    The identity that last modified the resource.
    lastModifiedByType String
    The type of identity that last modified the resource.

    TIDataConnectorDataTypes, TIDataConnectorDataTypesArgs

    Indicators TIDataConnectorDataTypesIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesIndicators
    Data type for indicators connection.
    indicators Property Map
    Data type for indicators connection.

    TIDataConnectorDataTypesIndicators, TIDataConnectorDataTypesIndicatorsArgs

    State string | Pulumi.AzureNative.SecurityInsights.DataTypeState
    Describe whether this data type connection is enabled or not.
    State string | DataTypeState
    Describe whether this data type connection is enabled or not.
    state String | DataTypeState
    Describe whether this data type connection is enabled or not.
    state string | DataTypeState
    Describe whether this data type connection is enabled or not.
    state str | DataTypeState
    Describe whether this data type connection is enabled or not.
    state String | "Enabled" | "Disabled"
    Describe whether this data type connection is enabled or not.

    TIDataConnectorDataTypesResponse, TIDataConnectorDataTypesResponseArgs

    Indicators TIDataConnectorDataTypesResponseIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesResponseIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesResponseIndicators
    Data type for indicators connection.
    indicators TIDataConnectorDataTypesResponseIndicators
    Data type for indicators connection.
    indicators Property Map
    Data type for indicators connection.

    TIDataConnectorDataTypesResponseIndicators, TIDataConnectorDataTypesResponseIndicatorsArgs

    State string
    Describe whether this data type connection is enabled or not.
    State string
    Describe whether this data type connection is enabled or not.
    state String
    Describe whether this data type connection is enabled or not.
    state string
    Describe whether this data type connection is enabled or not.
    state str
    Describe whether this data type connection is enabled or not.
    state String
    Describe whether this data type connection is enabled or not.

    Import

    An existing resource can be imported using its type token, name, and identifier, e.g.

    $ pulumi import azure-native:securityinsights:TIDataConnector 73e01a99-5cd7-4139-a149-9f2736ff2ab5 /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}/providers/Microsoft.SecurityInsights/dataConnectors/{dataConnectorId} 
    

    To learn more about importing existing cloud resources, see Importing resources.

    Package Details

    Repository
    Azure Native pulumi/pulumi-azure-native
    License
    Apache-2.0
    azure-native logo
    This is the latest version of Azure Native. Use the Azure Native v1 docs if using the v1 version of this package.
    Azure Native v2.63.0 published on Tuesday, Sep 24, 2024 by Pulumi