published on Saturday, Mar 21, 2026 by Pulumi
published on Saturday, Mar 21, 2026 by Pulumi
DataObject resource
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as scm from "@pulumi/scm";
const scmDataFilteringProfilePredefined = new scm.DataObject("scm_data_filtering_profile_predefined", {
name: "tf-data-object-pre",
folder: "ngfw-shared",
patternType: {
predefined: {
patterns: [{
fileType: ["text/html"],
name: "ABA-Routing-Number",
}],
},
},
});
const scmDataFilteringProfileFileProperties = new scm.DataObject("scm_data_filtering_profile_file_properties", {
name: "tf-data-object-fp",
folder: "ngfw-shared",
patternType: {
fileProperties: {
patterns: [{
fileType: "pdf",
name: "test_pdf",
propertyValue: "test_value",
fileProperty: "panav-rsp-pdf-dlp-author",
}],
},
},
});
import pulumi
import pulumi_scm as scm
scm_data_filtering_profile_predefined = scm.DataObject("scm_data_filtering_profile_predefined",
name="tf-data-object-pre",
folder="ngfw-shared",
pattern_type={
"predefined": {
"patterns": [{
"file_type": ["text/html"],
"name": "ABA-Routing-Number",
}],
},
})
scm_data_filtering_profile_file_properties = scm.DataObject("scm_data_filtering_profile_file_properties",
name="tf-data-object-fp",
folder="ngfw-shared",
pattern_type={
"file_properties": {
"patterns": [{
"file_type": "pdf",
"name": "test_pdf",
"property_value": "test_value",
"file_property": "panav-rsp-pdf-dlp-author",
}],
},
})
package main
import (
"github.com/pulumi/pulumi-scm/sdk/go/scm"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := scm.NewDataObject(ctx, "scm_data_filtering_profile_predefined", &scm.DataObjectArgs{
Name: pulumi.String("tf-data-object-pre"),
Folder: pulumi.String("ngfw-shared"),
PatternType: &scm.DataObjectPatternTypeArgs{
Predefined: &scm.DataObjectPatternTypePredefinedArgs{
Patterns: scm.DataObjectPatternTypePredefinedPatternArray{
&scm.DataObjectPatternTypePredefinedPatternArgs{
FileType: []string{
"text/html",
},
Name: pulumi.String("ABA-Routing-Number"),
},
},
},
},
})
if err != nil {
return err
}
_, err = scm.NewDataObject(ctx, "scm_data_filtering_profile_file_properties", &scm.DataObjectArgs{
Name: pulumi.String("tf-data-object-fp"),
Folder: pulumi.String("ngfw-shared"),
PatternType: &scm.DataObjectPatternTypeArgs{
FileProperties: &scm.DataObjectPatternTypeFilePropertiesArgs{
Patterns: scm.DataObjectPatternTypeFilePropertiesPatternArray{
&scm.DataObjectPatternTypeFilePropertiesPatternArgs{
FileType: pulumi.String("pdf"),
Name: pulumi.String("test_pdf"),
PropertyValue: pulumi.String("test_value"),
FileProperty: pulumi.String("panav-rsp-pdf-dlp-author"),
},
},
},
},
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Scm = Pulumi.Scm;
return await Deployment.RunAsync(() =>
{
var scmDataFilteringProfilePredefined = new Scm.DataObject("scm_data_filtering_profile_predefined", new()
{
Name = "tf-data-object-pre",
Folder = "ngfw-shared",
PatternType = new Scm.Inputs.DataObjectPatternTypeArgs
{
Predefined = new Scm.Inputs.DataObjectPatternTypePredefinedArgs
{
Patterns = new[]
{
new Scm.Inputs.DataObjectPatternTypePredefinedPatternArgs
{
FileType = new[]
{
"text/html",
},
Name = "ABA-Routing-Number",
},
},
},
},
});
var scmDataFilteringProfileFileProperties = new Scm.DataObject("scm_data_filtering_profile_file_properties", new()
{
Name = "tf-data-object-fp",
Folder = "ngfw-shared",
PatternType = new Scm.Inputs.DataObjectPatternTypeArgs
{
FileProperties = new Scm.Inputs.DataObjectPatternTypeFilePropertiesArgs
{
Patterns = new[]
{
new Scm.Inputs.DataObjectPatternTypeFilePropertiesPatternArgs
{
FileType = "pdf",
Name = "test_pdf",
PropertyValue = "test_value",
FileProperty = "panav-rsp-pdf-dlp-author",
},
},
},
},
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.scm.DataObject;
import com.pulumi.scm.DataObjectArgs;
import com.pulumi.scm.inputs.DataObjectPatternTypeArgs;
import com.pulumi.scm.inputs.DataObjectPatternTypePredefinedArgs;
import com.pulumi.scm.inputs.DataObjectPatternTypeFilePropertiesArgs;
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 scmDataFilteringProfilePredefined = new DataObject("scmDataFilteringProfilePredefined", DataObjectArgs.builder()
.name("tf-data-object-pre")
.folder("ngfw-shared")
.patternType(DataObjectPatternTypeArgs.builder()
.predefined(DataObjectPatternTypePredefinedArgs.builder()
.patterns(DataObjectPatternTypePredefinedPatternArgs.builder()
.fileType(List.of("text/html"))
.name("ABA-Routing-Number")
.build())
.build())
.build())
.build());
var scmDataFilteringProfileFileProperties = new DataObject("scmDataFilteringProfileFileProperties", DataObjectArgs.builder()
.name("tf-data-object-fp")
.folder("ngfw-shared")
.patternType(DataObjectPatternTypeArgs.builder()
.fileProperties(DataObjectPatternTypeFilePropertiesArgs.builder()
.patterns(DataObjectPatternTypeFilePropertiesPatternArgs.builder()
.fileType("pdf")
.name("test_pdf")
.propertyValue("test_value")
.fileProperty("panav-rsp-pdf-dlp-author")
.build())
.build())
.build())
.build());
}
}
resources:
scmDataFilteringProfilePredefined:
type: scm:DataObject
name: scm_data_filtering_profile_predefined
properties:
name: tf-data-object-pre
folder: ngfw-shared
patternType:
predefined:
patterns:
- fileType:
- text/html
name: ABA-Routing-Number
scmDataFilteringProfileFileProperties:
type: scm:DataObject
name: scm_data_filtering_profile_file_properties
properties:
name: tf-data-object-fp
folder: ngfw-shared
patternType:
fileProperties:
patterns:
- fileType: pdf
name: test_pdf
propertyValue: test_value
fileProperty: panav-rsp-pdf-dlp-author
Create DataObject Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new DataObject(name: string, args?: DataObjectArgs, opts?: CustomResourceOptions);@overload
def DataObject(resource_name: str,
args: Optional[DataObjectArgs] = None,
opts: Optional[ResourceOptions] = None)
@overload
def DataObject(resource_name: str,
opts: Optional[ResourceOptions] = None,
description: Optional[str] = None,
device: Optional[str] = None,
disable_override: Optional[str] = None,
folder: Optional[str] = None,
name: Optional[str] = None,
pattern_type: Optional[DataObjectPatternTypeArgs] = None,
snippet: Optional[str] = None)func NewDataObject(ctx *Context, name string, args *DataObjectArgs, opts ...ResourceOption) (*DataObject, error)public DataObject(string name, DataObjectArgs? args = null, CustomResourceOptions? opts = null)
public DataObject(String name, DataObjectArgs args)
public DataObject(String name, DataObjectArgs args, CustomResourceOptions options)
type: scm:DataObject
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 DataObjectArgs
- 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 DataObjectArgs
- 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 DataObjectArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args DataObjectArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args DataObjectArgs
- 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 dataObjectResource = new Scm.DataObject("dataObjectResource", new()
{
Description = "string",
Device = "string",
DisableOverride = "string",
Folder = "string",
Name = "string",
PatternType = new Scm.Inputs.DataObjectPatternTypeArgs
{
FileProperties = new Scm.Inputs.DataObjectPatternTypeFilePropertiesArgs
{
Patterns = new[]
{
new Scm.Inputs.DataObjectPatternTypeFilePropertiesPatternArgs
{
FileProperty = "string",
FileType = "string",
Name = "string",
PropertyValue = "string",
},
},
},
Predefined = new Scm.Inputs.DataObjectPatternTypePredefinedArgs
{
Patterns = new[]
{
new Scm.Inputs.DataObjectPatternTypePredefinedPatternArgs
{
FileTypes = new[]
{
"string",
},
Name = "string",
},
},
},
Regex = new Scm.Inputs.DataObjectPatternTypeRegexArgs
{
Patterns = new[]
{
new Scm.Inputs.DataObjectPatternTypeRegexPatternArgs
{
FileTypes = new[]
{
"string",
},
Name = "string",
Regex = "string",
},
},
},
},
Snippet = "string",
});
example, err := scm.NewDataObject(ctx, "dataObjectResource", &scm.DataObjectArgs{
Description: pulumi.String("string"),
Device: pulumi.String("string"),
DisableOverride: pulumi.String("string"),
Folder: pulumi.String("string"),
Name: pulumi.String("string"),
PatternType: &scm.DataObjectPatternTypeArgs{
FileProperties: &scm.DataObjectPatternTypeFilePropertiesArgs{
Patterns: scm.DataObjectPatternTypeFilePropertiesPatternArray{
&scm.DataObjectPatternTypeFilePropertiesPatternArgs{
FileProperty: pulumi.String("string"),
FileType: pulumi.String("string"),
Name: pulumi.String("string"),
PropertyValue: pulumi.String("string"),
},
},
},
Predefined: &scm.DataObjectPatternTypePredefinedArgs{
Patterns: scm.DataObjectPatternTypePredefinedPatternArray{
&scm.DataObjectPatternTypePredefinedPatternArgs{
FileTypes: pulumi.StringArray{
pulumi.String("string"),
},
Name: pulumi.String("string"),
},
},
},
Regex: &scm.DataObjectPatternTypeRegexArgs{
Patterns: scm.DataObjectPatternTypeRegexPatternArray{
&scm.DataObjectPatternTypeRegexPatternArgs{
FileTypes: pulumi.StringArray{
pulumi.String("string"),
},
Name: pulumi.String("string"),
Regex: pulumi.String("string"),
},
},
},
},
Snippet: pulumi.String("string"),
})
var dataObjectResource = new DataObject("dataObjectResource", DataObjectArgs.builder()
.description("string")
.device("string")
.disableOverride("string")
.folder("string")
.name("string")
.patternType(DataObjectPatternTypeArgs.builder()
.fileProperties(DataObjectPatternTypeFilePropertiesArgs.builder()
.patterns(DataObjectPatternTypeFilePropertiesPatternArgs.builder()
.fileProperty("string")
.fileType("string")
.name("string")
.propertyValue("string")
.build())
.build())
.predefined(DataObjectPatternTypePredefinedArgs.builder()
.patterns(DataObjectPatternTypePredefinedPatternArgs.builder()
.fileTypes("string")
.name("string")
.build())
.build())
.regex(DataObjectPatternTypeRegexArgs.builder()
.patterns(DataObjectPatternTypeRegexPatternArgs.builder()
.fileTypes("string")
.name("string")
.regex("string")
.build())
.build())
.build())
.snippet("string")
.build());
data_object_resource = scm.DataObject("dataObjectResource",
description="string",
device="string",
disable_override="string",
folder="string",
name="string",
pattern_type={
"file_properties": {
"patterns": [{
"file_property": "string",
"file_type": "string",
"name": "string",
"property_value": "string",
}],
},
"predefined": {
"patterns": [{
"file_types": ["string"],
"name": "string",
}],
},
"regex": {
"patterns": [{
"file_types": ["string"],
"name": "string",
"regex": "string",
}],
},
},
snippet="string")
const dataObjectResource = new scm.DataObject("dataObjectResource", {
description: "string",
device: "string",
disableOverride: "string",
folder: "string",
name: "string",
patternType: {
fileProperties: {
patterns: [{
fileProperty: "string",
fileType: "string",
name: "string",
propertyValue: "string",
}],
},
predefined: {
patterns: [{
fileTypes: ["string"],
name: "string",
}],
},
regex: {
patterns: [{
fileTypes: ["string"],
name: "string",
regex: "string",
}],
},
},
snippet: "string",
});
type: scm:DataObject
properties:
description: string
device: string
disableOverride: string
folder: string
name: string
patternType:
fileProperties:
patterns:
- fileProperty: string
fileType: string
name: string
propertyValue: string
predefined:
patterns:
- fileTypes:
- string
name: string
regex:
patterns:
- fileTypes:
- string
name: string
regex: string
snippet: string
DataObject 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 DataObject resource accepts the following input properties:
- Description string
- The description of the data object
- Device string
- The device in which the resource is defined
- Disable
Override string - Disable override
- Folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Name string
- The name of the data object
- Pattern
Type DataObject Pattern Type - Pattern type
- Snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
- Description string
- The description of the data object
- Device string
- The device in which the resource is defined
- Disable
Override string - Disable override
- Folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Name string
- The name of the data object
- Pattern
Type DataObject Pattern Type Args - Pattern type
- Snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
- description String
- The description of the data object
- device String
- The device in which the resource is defined
- disable
Override String - Disable override
- folder String
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name String
- The name of the data object
- pattern
Type DataObject Pattern Type - Pattern type
- snippet String
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
- description string
- The description of the data object
- device string
- The device in which the resource is defined
- disable
Override string - Disable override
- folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name string
- The name of the data object
- pattern
Type DataObject Pattern Type - Pattern type
- snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
- description str
- The description of the data object
- device str
- The device in which the resource is defined
- disable_
override str - Disable override
- folder str
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name str
- The name of the data object
- pattern_
type DataObject Pattern Type Args - Pattern type
- snippet str
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
- description String
- The description of the data object
- device String
- The device in which the resource is defined
- disable
Override String - Disable override
- folder String
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name String
- The name of the data object
- pattern
Type Property Map - Pattern type
- snippet String
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.
Outputs
All input properties are implicitly available as output properties. Additionally, the DataObject resource produces the following output properties:
Look up Existing DataObject Resource
Get an existing DataObject 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?: DataObjectState, opts?: CustomResourceOptions): DataObject@staticmethod
def get(resource_name: str,
id: str,
opts: Optional[ResourceOptions] = None,
description: Optional[str] = None,
device: Optional[str] = None,
disable_override: Optional[str] = None,
folder: Optional[str] = None,
name: Optional[str] = None,
pattern_type: Optional[DataObjectPatternTypeArgs] = None,
snippet: Optional[str] = None,
tfid: Optional[str] = None) -> DataObjectfunc GetDataObject(ctx *Context, name string, id IDInput, state *DataObjectState, opts ...ResourceOption) (*DataObject, error)public static DataObject Get(string name, Input<string> id, DataObjectState? state, CustomResourceOptions? opts = null)public static DataObject get(String name, Output<String> id, DataObjectState state, CustomResourceOptions options)resources: _: type: scm:DataObject get: id: ${id}- 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.
- Description string
- The description of the data object
- Device string
- The device in which the resource is defined
- Disable
Override string - Disable override
- Folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Name string
- The name of the data object
- Pattern
Type DataObject Pattern Type - Pattern type
- Snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Tfid string
- The Terraform ID.
- Description string
- The description of the data object
- Device string
- The device in which the resource is defined
- Disable
Override string - Disable override
- Folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Name string
- The name of the data object
- Pattern
Type DataObject Pattern Type Args - Pattern type
- Snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- Tfid string
- The Terraform ID.
- description String
- The description of the data object
- device String
- The device in which the resource is defined
- disable
Override String - Disable override
- folder String
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name String
- The name of the data object
- pattern
Type DataObject Pattern Type - Pattern type
- snippet String
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- tfid String
- The Terraform ID.
- description string
- The description of the data object
- device string
- The device in which the resource is defined
- disable
Override string - Disable override
- folder string
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name string
- The name of the data object
- pattern
Type DataObject Pattern Type - Pattern type
- snippet string
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- tfid string
- The Terraform ID.
- description str
- The description of the data object
- device str
- The device in which the resource is defined
- disable_
override str - Disable override
- folder str
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name str
- The name of the data object
- pattern_
type DataObject Pattern Type Args - Pattern type
- snippet str
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- tfid str
- The Terraform ID.
- description String
- The description of the data object
- device String
- The device in which the resource is defined
- disable
Override String - Disable override
- folder String
The folder in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- name String
- The name of the data object
- pattern
Type Property Map - Pattern type
- snippet String
The snippet in which the resource is defined
ℹ️ Note: You must specify exactly one of
device,folder, andsnippet.- tfid String
- The Terraform ID.
Supporting Types
DataObjectPatternType, DataObjectPatternTypeArgs
- File
Properties DataObject Pattern Type File Properties - File properties
- Predefined
Data
Object Pattern Type Predefined - Predefined
- Regex
Data
Object Pattern Type Regex - Regex
- File
Properties DataObject Pattern Type File Properties - File properties
- Predefined
Data
Object Pattern Type Predefined - Predefined
- Regex
Data
Object Pattern Type Regex - Regex
- file
Properties DataObject Pattern Type File Properties - File properties
- predefined
Data
Object Pattern Type Predefined - Predefined
- regex
Data
Object Pattern Type Regex - Regex
- file
Properties DataObject Pattern Type File Properties - File properties
- predefined
Data
Object Pattern Type Predefined - Predefined
- regex
Data
Object Pattern Type Regex - Regex
- file_
properties DataObject Pattern Type File Properties - File properties
- predefined
Data
Object Pattern Type Predefined - Predefined
- regex
Data
Object Pattern Type Regex - Regex
- file
Properties Property Map - File properties
- predefined Property Map
- Predefined
- regex Property Map
- Regex
DataObjectPatternTypeFileProperties, DataObjectPatternTypeFilePropertiesArgs
- patterns List<Property Map>
- Pattern
DataObjectPatternTypeFilePropertiesPattern, DataObjectPatternTypeFilePropertiesPatternArgs
- File
Property string - File property
- File
Type string - File type
- Name string
- Name
- Property
Value string - Property value
- File
Property string - File property
- File
Type string - File type
- Name string
- Name
- Property
Value string - Property value
- file
Property String - File property
- file
Type String - File type
- name String
- Name
- property
Value String - Property value
- file
Property string - File property
- file
Type string - File type
- name string
- Name
- property
Value string - Property value
- file_
property str - File property
- file_
type str - File type
- name str
- Name
- property_
value str - Property value
- file
Property String - File property
- file
Type String - File type
- name String
- Name
- property
Value String - Property value
DataObjectPatternTypePredefined, DataObjectPatternTypePredefinedArgs
- patterns List<Property Map>
- Pattern
DataObjectPatternTypePredefinedPattern, DataObjectPatternTypePredefinedPatternArgs
- file_
types Sequence[str] - File type
- name str
- Name
DataObjectPatternTypeRegex, DataObjectPatternTypeRegexArgs
- patterns List<Property Map>
- Pattern
DataObjectPatternTypeRegexPattern, DataObjectPatternTypeRegexPatternArgs
- file_
types Sequence[str] - File type
- name str
- Name
- regex str
- Regex
Import
The following command can be used to import a resource not managed by Terraform:
$ pulumi import scm:index/dataObject:DataObject example folder:::id
or
$ pulumi import scm:index/dataObject:DataObject example :snippet::id
or
$ pulumi import scm:index/dataObject:DataObject example ::device:id
Note: Please provide just one of folder, snippet, or device for the import command.
To learn more about importing existing cloud resources, see Importing resources.
Package Details
- Repository
- scm pulumi/pulumi-scm
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the
scmTerraform Provider.
published on Saturday, Mar 21, 2026 by Pulumi
