1. Packages
  2. Oracle Cloud Infrastructure
  3. API Docs
  4. Core
  5. AppCatalogSubscription
Oracle Cloud Infrastructure v2.17.0 published on Friday, Nov 15, 2024 by Pulumi

oci.Core.AppCatalogSubscription

Explore with Pulumi AI

oci logo
Oracle Cloud Infrastructure v2.17.0 published on Friday, Nov 15, 2024 by Pulumi

    This resource provides the App Catalog Subscription resource in Oracle Cloud Infrastructure Core service.

    Create a subscription for listing resource version for a compartment. It will take some time to propagate to all regions.

    Example Usage

    import * as pulumi from "@pulumi/pulumi";
    import * as oci from "@pulumi/oci";
    
    const testAppCatalogSubscription = new oci.core.AppCatalogSubscription("test_app_catalog_subscription", {
        compartmentId: compartmentId,
        listingId: testListing.id,
        listingResourceVersion: appCatalogSubscriptionListingResourceVersion,
        oracleTermsOfUseLink: appCatalogSubscriptionOracleTermsOfUseLink,
        signature: appCatalogSubscriptionSignature,
        timeRetrieved: appCatalogSubscriptionTimeRetrieved,
        eulaLink: appCatalogSubscriptionEulaLink,
    });
    
    import pulumi
    import pulumi_oci as oci
    
    test_app_catalog_subscription = oci.core.AppCatalogSubscription("test_app_catalog_subscription",
        compartment_id=compartment_id,
        listing_id=test_listing["id"],
        listing_resource_version=app_catalog_subscription_listing_resource_version,
        oracle_terms_of_use_link=app_catalog_subscription_oracle_terms_of_use_link,
        signature=app_catalog_subscription_signature,
        time_retrieved=app_catalog_subscription_time_retrieved,
        eula_link=app_catalog_subscription_eula_link)
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-oci/sdk/v2/go/oci/Core"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_, err := Core.NewAppCatalogSubscription(ctx, "test_app_catalog_subscription", &Core.AppCatalogSubscriptionArgs{
    			CompartmentId:          pulumi.Any(compartmentId),
    			ListingId:              pulumi.Any(testListing.Id),
    			ListingResourceVersion: pulumi.Any(appCatalogSubscriptionListingResourceVersion),
    			OracleTermsOfUseLink:   pulumi.Any(appCatalogSubscriptionOracleTermsOfUseLink),
    			Signature:              pulumi.Any(appCatalogSubscriptionSignature),
    			TimeRetrieved:          pulumi.Any(appCatalogSubscriptionTimeRetrieved),
    			EulaLink:               pulumi.Any(appCatalogSubscriptionEulaLink),
    		})
    		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 testAppCatalogSubscription = new Oci.Core.AppCatalogSubscription("test_app_catalog_subscription", new()
        {
            CompartmentId = compartmentId,
            ListingId = testListing.Id,
            ListingResourceVersion = appCatalogSubscriptionListingResourceVersion,
            OracleTermsOfUseLink = appCatalogSubscriptionOracleTermsOfUseLink,
            Signature = appCatalogSubscriptionSignature,
            TimeRetrieved = appCatalogSubscriptionTimeRetrieved,
            EulaLink = appCatalogSubscriptionEulaLink,
        });
    
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.oci.Core.AppCatalogSubscription;
    import com.pulumi.oci.Core.AppCatalogSubscriptionArgs;
    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 testAppCatalogSubscription = new AppCatalogSubscription("testAppCatalogSubscription", AppCatalogSubscriptionArgs.builder()
                .compartmentId(compartmentId)
                .listingId(testListing.id())
                .listingResourceVersion(appCatalogSubscriptionListingResourceVersion)
                .oracleTermsOfUseLink(appCatalogSubscriptionOracleTermsOfUseLink)
                .signature(appCatalogSubscriptionSignature)
                .timeRetrieved(appCatalogSubscriptionTimeRetrieved)
                .eulaLink(appCatalogSubscriptionEulaLink)
                .build());
    
        }
    }
    
    resources:
      testAppCatalogSubscription:
        type: oci:Core:AppCatalogSubscription
        name: test_app_catalog_subscription
        properties:
          compartmentId: ${compartmentId}
          listingId: ${testListing.id}
          listingResourceVersion: ${appCatalogSubscriptionListingResourceVersion}
          oracleTermsOfUseLink: ${appCatalogSubscriptionOracleTermsOfUseLink}
          signature: ${appCatalogSubscriptionSignature}
          timeRetrieved: ${appCatalogSubscriptionTimeRetrieved}
          eulaLink: ${appCatalogSubscriptionEulaLink}
    

    Create AppCatalogSubscription Resource

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

    Constructor syntax

    new AppCatalogSubscription(name: string, args: AppCatalogSubscriptionArgs, opts?: CustomResourceOptions);
    @overload
    def AppCatalogSubscription(resource_name: str,
                               args: AppCatalogSubscriptionArgs,
                               opts: Optional[ResourceOptions] = None)
    
    @overload
    def AppCatalogSubscription(resource_name: str,
                               opts: Optional[ResourceOptions] = None,
                               compartment_id: Optional[str] = None,
                               listing_id: Optional[str] = None,
                               listing_resource_version: Optional[str] = None,
                               oracle_terms_of_use_link: Optional[str] = None,
                               signature: Optional[str] = None,
                               time_retrieved: Optional[str] = None,
                               eula_link: Optional[str] = None)
    func NewAppCatalogSubscription(ctx *Context, name string, args AppCatalogSubscriptionArgs, opts ...ResourceOption) (*AppCatalogSubscription, error)
    public AppCatalogSubscription(string name, AppCatalogSubscriptionArgs args, CustomResourceOptions? opts = null)
    public AppCatalogSubscription(String name, AppCatalogSubscriptionArgs args)
    public AppCatalogSubscription(String name, AppCatalogSubscriptionArgs args, CustomResourceOptions options)
    
    type: oci:Core:AppCatalogSubscription
    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 AppCatalogSubscriptionArgs
    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 AppCatalogSubscriptionArgs
    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 AppCatalogSubscriptionArgs
    The arguments to resource properties.
    opts ResourceOption
    Bag of options to control resource's behavior.
    name string
    The unique name of the resource.
    args AppCatalogSubscriptionArgs
    The arguments to resource properties.
    opts CustomResourceOptions
    Bag of options to control resource's behavior.
    name String
    The unique name of the resource.
    args AppCatalogSubscriptionArgs
    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 appCatalogSubscriptionResource = new Oci.Core.AppCatalogSubscription("appCatalogSubscriptionResource", new()
    {
        CompartmentId = "string",
        ListingId = "string",
        ListingResourceVersion = "string",
        OracleTermsOfUseLink = "string",
        Signature = "string",
        TimeRetrieved = "string",
        EulaLink = "string",
    });
    
    example, err := Core.NewAppCatalogSubscription(ctx, "appCatalogSubscriptionResource", &Core.AppCatalogSubscriptionArgs{
    	CompartmentId:          pulumi.String("string"),
    	ListingId:              pulumi.String("string"),
    	ListingResourceVersion: pulumi.String("string"),
    	OracleTermsOfUseLink:   pulumi.String("string"),
    	Signature:              pulumi.String("string"),
    	TimeRetrieved:          pulumi.String("string"),
    	EulaLink:               pulumi.String("string"),
    })
    
    var appCatalogSubscriptionResource = new AppCatalogSubscription("appCatalogSubscriptionResource", AppCatalogSubscriptionArgs.builder()
        .compartmentId("string")
        .listingId("string")
        .listingResourceVersion("string")
        .oracleTermsOfUseLink("string")
        .signature("string")
        .timeRetrieved("string")
        .eulaLink("string")
        .build());
    
    app_catalog_subscription_resource = oci.core.AppCatalogSubscription("appCatalogSubscriptionResource",
        compartment_id="string",
        listing_id="string",
        listing_resource_version="string",
        oracle_terms_of_use_link="string",
        signature="string",
        time_retrieved="string",
        eula_link="string")
    
    const appCatalogSubscriptionResource = new oci.core.AppCatalogSubscription("appCatalogSubscriptionResource", {
        compartmentId: "string",
        listingId: "string",
        listingResourceVersion: "string",
        oracleTermsOfUseLink: "string",
        signature: "string",
        timeRetrieved: "string",
        eulaLink: "string",
    });
    
    type: oci:Core:AppCatalogSubscription
    properties:
        compartmentId: string
        eulaLink: string
        listingId: string
        listingResourceVersion: string
        oracleTermsOfUseLink: string
        signature: string
        timeRetrieved: string
    

    AppCatalogSubscription Resource Properties

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

    Inputs

    In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.

    The AppCatalogSubscription resource accepts the following input properties:

    CompartmentId string
    The compartmentID for the subscription.
    ListingId string
    The OCID of the listing.
    ListingResourceVersion string
    Listing resource version.
    OracleTermsOfUseLink string
    Oracle TOU link
    Signature string
    A generated signature for this listing resource version retrieved the agreements API.
    TimeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    EulaLink string
    EULA link
    CompartmentId string
    The compartmentID for the subscription.
    ListingId string
    The OCID of the listing.
    ListingResourceVersion string
    Listing resource version.
    OracleTermsOfUseLink string
    Oracle TOU link
    Signature string
    A generated signature for this listing resource version retrieved the agreements API.
    TimeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    EulaLink string
    EULA link
    compartmentId String
    The compartmentID for the subscription.
    listingId String
    The OCID of the listing.
    listingResourceVersion String
    Listing resource version.
    oracleTermsOfUseLink String
    Oracle TOU link
    signature String
    A generated signature for this listing resource version retrieved the agreements API.
    timeRetrieved String

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    eulaLink String
    EULA link
    compartmentId string
    The compartmentID for the subscription.
    listingId string
    The OCID of the listing.
    listingResourceVersion string
    Listing resource version.
    oracleTermsOfUseLink string
    Oracle TOU link
    signature string
    A generated signature for this listing resource version retrieved the agreements API.
    timeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    eulaLink string
    EULA link
    compartment_id str
    The compartmentID for the subscription.
    listing_id str
    The OCID of the listing.
    listing_resource_version str
    Listing resource version.
    oracle_terms_of_use_link str
    Oracle TOU link
    signature str
    A generated signature for this listing resource version retrieved the agreements API.
    time_retrieved str

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    eula_link str
    EULA link
    compartmentId String
    The compartmentID for the subscription.
    listingId String
    The OCID of the listing.
    listingResourceVersion String
    Listing resource version.
    oracleTermsOfUseLink String
    Oracle TOU link
    signature String
    A generated signature for this listing resource version retrieved the agreements API.
    timeRetrieved String

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    eulaLink String
    EULA link

    Outputs

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

    DisplayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    Id string
    The provider-assigned unique ID for this managed resource.
    ListingResourceId string
    Listing resource id.
    PublisherName string
    Name of the publisher who published this listing.
    Summary string
    The short summary to the listing.
    TimeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    DisplayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    Id string
    The provider-assigned unique ID for this managed resource.
    ListingResourceId string
    Listing resource id.
    PublisherName string
    Name of the publisher who published this listing.
    Summary string
    The short summary to the listing.
    TimeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    displayName String
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    id String
    The provider-assigned unique ID for this managed resource.
    listingResourceId String
    Listing resource id.
    publisherName String
    Name of the publisher who published this listing.
    summary String
    The short summary to the listing.
    timeCreated String
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    displayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    id string
    The provider-assigned unique ID for this managed resource.
    listingResourceId string
    Listing resource id.
    publisherName string
    Name of the publisher who published this listing.
    summary string
    The short summary to the listing.
    timeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    display_name str
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    id str
    The provider-assigned unique ID for this managed resource.
    listing_resource_id str
    Listing resource id.
    publisher_name str
    Name of the publisher who published this listing.
    summary str
    The short summary to the listing.
    time_created str
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    displayName String
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    id String
    The provider-assigned unique ID for this managed resource.
    listingResourceId String
    Listing resource id.
    publisherName String
    Name of the publisher who published this listing.
    summary String
    The short summary to the listing.
    timeCreated String
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    Look up Existing AppCatalogSubscription Resource

    Get an existing AppCatalogSubscription 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?: AppCatalogSubscriptionState, opts?: CustomResourceOptions): AppCatalogSubscription
    @staticmethod
    def get(resource_name: str,
            id: str,
            opts: Optional[ResourceOptions] = None,
            compartment_id: Optional[str] = None,
            display_name: Optional[str] = None,
            eula_link: Optional[str] = None,
            listing_id: Optional[str] = None,
            listing_resource_id: Optional[str] = None,
            listing_resource_version: Optional[str] = None,
            oracle_terms_of_use_link: Optional[str] = None,
            publisher_name: Optional[str] = None,
            signature: Optional[str] = None,
            summary: Optional[str] = None,
            time_created: Optional[str] = None,
            time_retrieved: Optional[str] = None) -> AppCatalogSubscription
    func GetAppCatalogSubscription(ctx *Context, name string, id IDInput, state *AppCatalogSubscriptionState, opts ...ResourceOption) (*AppCatalogSubscription, error)
    public static AppCatalogSubscription Get(string name, Input<string> id, AppCatalogSubscriptionState? state, CustomResourceOptions? opts = null)
    public static AppCatalogSubscription get(String name, Output<String> id, AppCatalogSubscriptionState 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
    The compartmentID for the subscription.
    DisplayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    EulaLink string
    EULA link
    ListingId string
    The OCID of the listing.
    ListingResourceId string
    Listing resource id.
    ListingResourceVersion string
    Listing resource version.
    OracleTermsOfUseLink string
    Oracle TOU link
    PublisherName string
    Name of the publisher who published this listing.
    Signature string
    A generated signature for this listing resource version retrieved the agreements API.
    Summary string
    The short summary to the listing.
    TimeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    TimeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    CompartmentId string
    The compartmentID for the subscription.
    DisplayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    EulaLink string
    EULA link
    ListingId string
    The OCID of the listing.
    ListingResourceId string
    Listing resource id.
    ListingResourceVersion string
    Listing resource version.
    OracleTermsOfUseLink string
    Oracle TOU link
    PublisherName string
    Name of the publisher who published this listing.
    Signature string
    A generated signature for this listing resource version retrieved the agreements API.
    Summary string
    The short summary to the listing.
    TimeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    TimeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    compartmentId String
    The compartmentID for the subscription.
    displayName String
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    eulaLink String
    EULA link
    listingId String
    The OCID of the listing.
    listingResourceId String
    Listing resource id.
    listingResourceVersion String
    Listing resource version.
    oracleTermsOfUseLink String
    Oracle TOU link
    publisherName String
    Name of the publisher who published this listing.
    signature String
    A generated signature for this listing resource version retrieved the agreements API.
    summary String
    The short summary to the listing.
    timeCreated String
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    timeRetrieved String

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    compartmentId string
    The compartmentID for the subscription.
    displayName string
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    eulaLink string
    EULA link
    listingId string
    The OCID of the listing.
    listingResourceId string
    Listing resource id.
    listingResourceVersion string
    Listing resource version.
    oracleTermsOfUseLink string
    Oracle TOU link
    publisherName string
    Name of the publisher who published this listing.
    signature string
    A generated signature for this listing resource version retrieved the agreements API.
    summary string
    The short summary to the listing.
    timeCreated string
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    timeRetrieved string

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    compartment_id str
    The compartmentID for the subscription.
    display_name str
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    eula_link str
    EULA link
    listing_id str
    The OCID of the listing.
    listing_resource_id str
    Listing resource id.
    listing_resource_version str
    Listing resource version.
    oracle_terms_of_use_link str
    Oracle TOU link
    publisher_name str
    Name of the publisher who published this listing.
    signature str
    A generated signature for this listing resource version retrieved the agreements API.
    summary str
    The short summary to the listing.
    time_created str
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    time_retrieved str

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    compartmentId String
    The compartmentID for the subscription.
    displayName String
    A user-friendly name. Does not have to be unique, and it's changeable. Avoid entering confidential information.
    eulaLink String
    EULA link
    listingId String
    The OCID of the listing.
    listingResourceId String
    Listing resource id.
    listingResourceVersion String
    Listing resource version.
    oracleTermsOfUseLink String
    Oracle TOU link
    publisherName String
    Name of the publisher who published this listing.
    signature String
    A generated signature for this listing resource version retrieved the agreements API.
    summary String
    The short summary to the listing.
    timeCreated String
    Date and time at which the subscription was created, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z
    timeRetrieved String

    Date and time the agreements were retrieved, in RFC3339 format. Example: 2018-03-20T12:32:53.532Z

    ** 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

    Import

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

    $ pulumi import oci:Core/appCatalogSubscription:AppCatalogSubscription test_app_catalog_subscription "compartmentId/{compartmentId}/listingId/{listingId}/listingResourceVersion/{listingResourceVersion}"
    

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

    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 v2.17.0 published on Friday, Nov 15, 2024 by Pulumi