1. Packages
  2. Alibaba Cloud Provider
  3. API Docs
  4. emrv2
  5. getClusters
Alibaba Cloud v3.90.0 published on Tuesday, Dec 2, 2025 by Pulumi
alicloud logo
Alibaba Cloud v3.90.0 published on Tuesday, Dec 2, 2025 by Pulumi

    This data source provides the Emr Clusters of the current Alibaba Cloud user.

    NOTE: Available since v1.199.0.

    Example Usage

    Basic Usage

    import * as pulumi from "@pulumi/pulumi";
    import * as alicloud from "@pulumi/alicloud";
    
    const _default = alicloud.resourcemanager.getResourceGroups({
        status: "OK",
    });
    const defaultGetZones = alicloud.getZones({
        availableInstanceType: "ecs.g7.xlarge",
    });
    const defaultNetwork = new alicloud.vpc.Network("default", {
        vpcName: "TF-VPC",
        cidrBlock: "172.16.0.0/12",
    });
    const defaultSwitch = new alicloud.vpc.Switch("default", {
        vpcId: defaultNetwork.id,
        cidrBlock: "172.16.0.0/21",
        zoneId: defaultGetZones.then(defaultGetZones => defaultGetZones.zones?.[0]?.id),
        vswitchName: "TF_VSwitch",
    });
    const defaultEcsKeyPair = new alicloud.ecs.EcsKeyPair("default", {keyPairName: "terraform-kp"});
    const defaultSecurityGroup = new alicloud.ecs.SecurityGroup("default", {
        name: "TF_SECURITY_GROUP",
        vpcId: defaultNetwork.id,
    });
    const defaultRole = new alicloud.ram.Role("default", {
        name: "emrtf",
        document: `    {
            \\"Statement\\": [
            {
                \\"Action\\": \\"sts:AssumeRole\\",
                \\"Effect\\": \\"Allow\\",
                \\"Principal\\": {
                \\"Service\\": [
                    \\"emr.aliyuncs.com\\",
                    \\"ecs.aliyuncs.com\\"
                ]
                }
            }
            ],
            \\"Version\\": \\"1\\"
        }
    `,
        description: "this is a role test.",
        force: true,
    });
    const defaultCluster = new alicloud.emrv2.Cluster("default", {
        paymentType: "PayAsYouGo",
        clusterType: "DATALAKE",
        releaseVersion: "EMR-5.10.0",
        clusterName: "terraform-emr-cluster-v2",
        deployMode: "NORMAL",
        securityMode: "NORMAL",
        applications: [
            "HADOOP-COMMON",
            "HDFS",
            "YARN",
            "HIVE",
            "SPARK3",
            "TEZ",
        ],
        applicationConfigs: [
            {
                applicationName: "HIVE",
                configFileName: "hivemetastore-site.xml",
                configItemKey: "hive.metastore.type",
                configItemValue: "DLF",
                configScope: "CLUSTER",
            },
            {
                applicationName: "SPARK3",
                configFileName: "hive-site.xml",
                configItemKey: "hive.metastore.type",
                configItemValue: "DLF",
                configScope: "CLUSTER",
            },
        ],
        nodeAttributes: [{
            ramRole: defaultRole.name,
            securityGroupId: defaultSecurityGroup.id,
            vpcId: defaultNetwork.id,
            zoneId: defaultGetZones.then(defaultGetZones => defaultGetZones.zones?.[0]?.id),
            keyPairName: defaultEcsKeyPair.id,
        }],
        tags: {
            created: "tf",
        },
        nodeGroups: [
            {
                nodeGroupType: "MASTER",
                nodeGroupName: "emr-master",
                paymentType: "PayAsYouGo",
                vswitchIds: [defaultSwitch.id],
                withPublicIp: false,
                instanceTypes: ["ecs.g7.xlarge"],
                nodeCount: 1,
                systemDisk: {
                    category: "cloud_essd",
                    size: 80,
                    count: 1,
                },
                dataDisks: [{
                    category: "cloud_essd",
                    size: 80,
                    count: 3,
                }],
            },
            {
                nodeGroupType: "CORE",
                nodeGroupName: "emr-core",
                paymentType: "PayAsYouGo",
                vswitchIds: [defaultSwitch.id],
                withPublicIp: false,
                instanceTypes: ["ecs.g7.xlarge"],
                nodeCount: 3,
                systemDisk: {
                    category: "cloud_essd",
                    size: 80,
                    count: 1,
                },
                dataDisks: [{
                    category: "cloud_essd",
                    size: 80,
                    count: 3,
                }],
            },
        ],
        resourceGroupId: _default.then(_default => _default.ids?.[0]),
    });
    const ids = alicloud.emrv2.getClusters({});
    export const emrv2ClustersId1 = ids.then(ids => ids.clusters?.[0]?.id);
    const nameRegex = alicloud.emrv2.getClusters({
        nameRegex: defaultAlicloudEmrCluster.name,
    });
    export const emrv2ClustersId2 = nameRegex.then(nameRegex => nameRegex.clusters?.[0]?.id);
    
    import pulumi
    import pulumi_alicloud as alicloud
    
    default = alicloud.resourcemanager.get_resource_groups(status="OK")
    default_get_zones = alicloud.get_zones(available_instance_type="ecs.g7.xlarge")
    default_network = alicloud.vpc.Network("default",
        vpc_name="TF-VPC",
        cidr_block="172.16.0.0/12")
    default_switch = alicloud.vpc.Switch("default",
        vpc_id=default_network.id,
        cidr_block="172.16.0.0/21",
        zone_id=default_get_zones.zones[0].id,
        vswitch_name="TF_VSwitch")
    default_ecs_key_pair = alicloud.ecs.EcsKeyPair("default", key_pair_name="terraform-kp")
    default_security_group = alicloud.ecs.SecurityGroup("default",
        name="TF_SECURITY_GROUP",
        vpc_id=default_network.id)
    default_role = alicloud.ram.Role("default",
        name="emrtf",
        document="""    {
            \"Statement\": [
            {
                \"Action\": \"sts:AssumeRole\",
                \"Effect\": \"Allow\",
                \"Principal\": {
                \"Service\": [
                    \"emr.aliyuncs.com\",
                    \"ecs.aliyuncs.com\"
                ]
                }
            }
            ],
            \"Version\": \"1\"
        }
    """,
        description="this is a role test.",
        force=True)
    default_cluster = alicloud.emrv2.Cluster("default",
        payment_type="PayAsYouGo",
        cluster_type="DATALAKE",
        release_version="EMR-5.10.0",
        cluster_name="terraform-emr-cluster-v2",
        deploy_mode="NORMAL",
        security_mode="NORMAL",
        applications=[
            "HADOOP-COMMON",
            "HDFS",
            "YARN",
            "HIVE",
            "SPARK3",
            "TEZ",
        ],
        application_configs=[
            {
                "application_name": "HIVE",
                "config_file_name": "hivemetastore-site.xml",
                "config_item_key": "hive.metastore.type",
                "config_item_value": "DLF",
                "config_scope": "CLUSTER",
            },
            {
                "application_name": "SPARK3",
                "config_file_name": "hive-site.xml",
                "config_item_key": "hive.metastore.type",
                "config_item_value": "DLF",
                "config_scope": "CLUSTER",
            },
        ],
        node_attributes=[{
            "ram_role": default_role.name,
            "security_group_id": default_security_group.id,
            "vpc_id": default_network.id,
            "zone_id": default_get_zones.zones[0].id,
            "key_pair_name": default_ecs_key_pair.id,
        }],
        tags={
            "created": "tf",
        },
        node_groups=[
            {
                "node_group_type": "MASTER",
                "node_group_name": "emr-master",
                "payment_type": "PayAsYouGo",
                "vswitch_ids": [default_switch.id],
                "with_public_ip": False,
                "instance_types": ["ecs.g7.xlarge"],
                "node_count": 1,
                "system_disk": {
                    "category": "cloud_essd",
                    "size": 80,
                    "count": 1,
                },
                "data_disks": [{
                    "category": "cloud_essd",
                    "size": 80,
                    "count": 3,
                }],
            },
            {
                "node_group_type": "CORE",
                "node_group_name": "emr-core",
                "payment_type": "PayAsYouGo",
                "vswitch_ids": [default_switch.id],
                "with_public_ip": False,
                "instance_types": ["ecs.g7.xlarge"],
                "node_count": 3,
                "system_disk": {
                    "category": "cloud_essd",
                    "size": 80,
                    "count": 1,
                },
                "data_disks": [{
                    "category": "cloud_essd",
                    "size": 80,
                    "count": 3,
                }],
            },
        ],
        resource_group_id=default.ids[0])
    ids = alicloud.emrv2.get_clusters()
    pulumi.export("emrv2ClustersId1", ids.clusters[0].id)
    name_regex = alicloud.emrv2.get_clusters(name_regex=default_alicloud_emr_cluster["name"])
    pulumi.export("emrv2ClustersId2", name_regex.clusters[0].id)
    
    package main
    
    import (
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud"
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/ecs"
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/emrv2"
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/ram"
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/resourcemanager"
    	"github.com/pulumi/pulumi-alicloud/sdk/v3/go/alicloud/vpc"
    	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
    )
    
    func main() {
    	pulumi.Run(func(ctx *pulumi.Context) error {
    		_default, err := resourcemanager.GetResourceGroups(ctx, &resourcemanager.GetResourceGroupsArgs{
    			Status: pulumi.StringRef("OK"),
    		}, nil)
    		if err != nil {
    			return err
    		}
    		defaultGetZones, err := alicloud.GetZones(ctx, &alicloud.GetZonesArgs{
    			AvailableInstanceType: pulumi.StringRef("ecs.g7.xlarge"),
    		}, nil)
    		if err != nil {
    			return err
    		}
    		defaultNetwork, err := vpc.NewNetwork(ctx, "default", &vpc.NetworkArgs{
    			VpcName:   pulumi.String("TF-VPC"),
    			CidrBlock: pulumi.String("172.16.0.0/12"),
    		})
    		if err != nil {
    			return err
    		}
    		defaultSwitch, err := vpc.NewSwitch(ctx, "default", &vpc.SwitchArgs{
    			VpcId:       defaultNetwork.ID(),
    			CidrBlock:   pulumi.String("172.16.0.0/21"),
    			ZoneId:      pulumi.String(defaultGetZones.Zones[0].Id),
    			VswitchName: pulumi.String("TF_VSwitch"),
    		})
    		if err != nil {
    			return err
    		}
    		defaultEcsKeyPair, err := ecs.NewEcsKeyPair(ctx, "default", &ecs.EcsKeyPairArgs{
    			KeyPairName: pulumi.String("terraform-kp"),
    		})
    		if err != nil {
    			return err
    		}
    		defaultSecurityGroup, err := ecs.NewSecurityGroup(ctx, "default", &ecs.SecurityGroupArgs{
    			Name:  pulumi.String("TF_SECURITY_GROUP"),
    			VpcId: defaultNetwork.ID(),
    		})
    		if err != nil {
    			return err
    		}
    		defaultRole, err := ram.NewRole(ctx, "default", &ram.RoleArgs{
    			Name: pulumi.String("emrtf"),
    			Document: pulumi.String(`    {
            \"Statement\": [
            {
                \"Action\": \"sts:AssumeRole\",
                \"Effect\": \"Allow\",
                \"Principal\": {
                \"Service\": [
                    \"emr.aliyuncs.com\",
                    \"ecs.aliyuncs.com\"
                ]
                }
            }
            ],
            \"Version\": \"1\"
        }
    `),
    			Description: pulumi.String("this is a role test."),
    			Force:       pulumi.Bool(true),
    		})
    		if err != nil {
    			return err
    		}
    		_, err = emrv2.NewCluster(ctx, "default", &emrv2.ClusterArgs{
    			PaymentType:    pulumi.String("PayAsYouGo"),
    			ClusterType:    pulumi.String("DATALAKE"),
    			ReleaseVersion: pulumi.String("EMR-5.10.0"),
    			ClusterName:    pulumi.String("terraform-emr-cluster-v2"),
    			DeployMode:     pulumi.String("NORMAL"),
    			SecurityMode:   pulumi.String("NORMAL"),
    			Applications: pulumi.StringArray{
    				pulumi.String("HADOOP-COMMON"),
    				pulumi.String("HDFS"),
    				pulumi.String("YARN"),
    				pulumi.String("HIVE"),
    				pulumi.String("SPARK3"),
    				pulumi.String("TEZ"),
    			},
    			ApplicationConfigs: emrv2.ClusterApplicationConfigArray{
    				&emrv2.ClusterApplicationConfigArgs{
    					ApplicationName: pulumi.String("HIVE"),
    					ConfigFileName:  pulumi.String("hivemetastore-site.xml"),
    					ConfigItemKey:   pulumi.String("hive.metastore.type"),
    					ConfigItemValue: pulumi.String("DLF"),
    					ConfigScope:     pulumi.String("CLUSTER"),
    				},
    				&emrv2.ClusterApplicationConfigArgs{
    					ApplicationName: pulumi.String("SPARK3"),
    					ConfigFileName:  pulumi.String("hive-site.xml"),
    					ConfigItemKey:   pulumi.String("hive.metastore.type"),
    					ConfigItemValue: pulumi.String("DLF"),
    					ConfigScope:     pulumi.String("CLUSTER"),
    				},
    			},
    			NodeAttributes: emrv2.ClusterNodeAttributeArray{
    				&emrv2.ClusterNodeAttributeArgs{
    					RamRole:         defaultRole.Name,
    					SecurityGroupId: defaultSecurityGroup.ID(),
    					VpcId:           defaultNetwork.ID(),
    					ZoneId:          pulumi.String(defaultGetZones.Zones[0].Id),
    					KeyPairName:     defaultEcsKeyPair.ID(),
    				},
    			},
    			Tags: pulumi.StringMap{
    				"created": pulumi.String("tf"),
    			},
    			NodeGroups: emrv2.ClusterNodeGroupArray{
    				&emrv2.ClusterNodeGroupArgs{
    					NodeGroupType: pulumi.String("MASTER"),
    					NodeGroupName: pulumi.String("emr-master"),
    					PaymentType:   pulumi.String("PayAsYouGo"),
    					VswitchIds: pulumi.StringArray{
    						defaultSwitch.ID(),
    					},
    					WithPublicIp: pulumi.Bool(false),
    					InstanceTypes: pulumi.StringArray{
    						pulumi.String("ecs.g7.xlarge"),
    					},
    					NodeCount: pulumi.Int(1),
    					SystemDisk: &emrv2.ClusterNodeGroupSystemDiskArgs{
    						Category: pulumi.String("cloud_essd"),
    						Size:     pulumi.Int(80),
    						Count:    pulumi.Int(1),
    					},
    					DataDisks: emrv2.ClusterNodeGroupDataDiskArray{
    						&emrv2.ClusterNodeGroupDataDiskArgs{
    							Category: pulumi.String("cloud_essd"),
    							Size:     pulumi.Int(80),
    							Count:    pulumi.Int(3),
    						},
    					},
    				},
    				&emrv2.ClusterNodeGroupArgs{
    					NodeGroupType: pulumi.String("CORE"),
    					NodeGroupName: pulumi.String("emr-core"),
    					PaymentType:   pulumi.String("PayAsYouGo"),
    					VswitchIds: pulumi.StringArray{
    						defaultSwitch.ID(),
    					},
    					WithPublicIp: pulumi.Bool(false),
    					InstanceTypes: pulumi.StringArray{
    						pulumi.String("ecs.g7.xlarge"),
    					},
    					NodeCount: pulumi.Int(3),
    					SystemDisk: &emrv2.ClusterNodeGroupSystemDiskArgs{
    						Category: pulumi.String("cloud_essd"),
    						Size:     pulumi.Int(80),
    						Count:    pulumi.Int(1),
    					},
    					DataDisks: emrv2.ClusterNodeGroupDataDiskArray{
    						&emrv2.ClusterNodeGroupDataDiskArgs{
    							Category: pulumi.String("cloud_essd"),
    							Size:     pulumi.Int(80),
    							Count:    pulumi.Int(3),
    						},
    					},
    				},
    			},
    			ResourceGroupId: pulumi.String(_default.Ids[0]),
    		})
    		if err != nil {
    			return err
    		}
    		ids, err := emrv2.GetClusters(ctx, &emrv2.GetClustersArgs{}, nil)
    		if err != nil {
    			return err
    		}
    		ctx.Export("emrv2ClustersId1", ids.Clusters[0].Id)
    		nameRegex, err := emrv2.GetClusters(ctx, &emrv2.GetClustersArgs{
    			NameRegex: pulumi.StringRef(defaultAlicloudEmrCluster.Name),
    		}, nil)
    		if err != nil {
    			return err
    		}
    		ctx.Export("emrv2ClustersId2", nameRegex.Clusters[0].Id)
    		return nil
    	})
    }
    
    using System.Collections.Generic;
    using System.Linq;
    using Pulumi;
    using AliCloud = Pulumi.AliCloud;
    
    return await Deployment.RunAsync(() => 
    {
        var @default = AliCloud.ResourceManager.GetResourceGroups.Invoke(new()
        {
            Status = "OK",
        });
    
        var defaultGetZones = AliCloud.GetZones.Invoke(new()
        {
            AvailableInstanceType = "ecs.g7.xlarge",
        });
    
        var defaultNetwork = new AliCloud.Vpc.Network("default", new()
        {
            VpcName = "TF-VPC",
            CidrBlock = "172.16.0.0/12",
        });
    
        var defaultSwitch = new AliCloud.Vpc.Switch("default", new()
        {
            VpcId = defaultNetwork.Id,
            CidrBlock = "172.16.0.0/21",
            ZoneId = defaultGetZones.Apply(getZonesResult => getZonesResult.Zones[0]?.Id),
            VswitchName = "TF_VSwitch",
        });
    
        var defaultEcsKeyPair = new AliCloud.Ecs.EcsKeyPair("default", new()
        {
            KeyPairName = "terraform-kp",
        });
    
        var defaultSecurityGroup = new AliCloud.Ecs.SecurityGroup("default", new()
        {
            Name = "TF_SECURITY_GROUP",
            VpcId = defaultNetwork.Id,
        });
    
        var defaultRole = new AliCloud.Ram.Role("default", new()
        {
            Name = "emrtf",
            Document = @"    {
            \""Statement\"": [
            {
                \""Action\"": \""sts:AssumeRole\"",
                \""Effect\"": \""Allow\"",
                \""Principal\"": {
                \""Service\"": [
                    \""emr.aliyuncs.com\"",
                    \""ecs.aliyuncs.com\""
                ]
                }
            }
            ],
            \""Version\"": \""1\""
        }
    ",
            Description = "this is a role test.",
            Force = true,
        });
    
        var defaultCluster = new AliCloud.Emrv2.Cluster("default", new()
        {
            PaymentType = "PayAsYouGo",
            ClusterType = "DATALAKE",
            ReleaseVersion = "EMR-5.10.0",
            ClusterName = "terraform-emr-cluster-v2",
            DeployMode = "NORMAL",
            SecurityMode = "NORMAL",
            Applications = new[]
            {
                "HADOOP-COMMON",
                "HDFS",
                "YARN",
                "HIVE",
                "SPARK3",
                "TEZ",
            },
            ApplicationConfigs = new[]
            {
                new AliCloud.Emrv2.Inputs.ClusterApplicationConfigArgs
                {
                    ApplicationName = "HIVE",
                    ConfigFileName = "hivemetastore-site.xml",
                    ConfigItemKey = "hive.metastore.type",
                    ConfigItemValue = "DLF",
                    ConfigScope = "CLUSTER",
                },
                new AliCloud.Emrv2.Inputs.ClusterApplicationConfigArgs
                {
                    ApplicationName = "SPARK3",
                    ConfigFileName = "hive-site.xml",
                    ConfigItemKey = "hive.metastore.type",
                    ConfigItemValue = "DLF",
                    ConfigScope = "CLUSTER",
                },
            },
            NodeAttributes = new[]
            {
                new AliCloud.Emrv2.Inputs.ClusterNodeAttributeArgs
                {
                    RamRole = defaultRole.Name,
                    SecurityGroupId = defaultSecurityGroup.Id,
                    VpcId = defaultNetwork.Id,
                    ZoneId = defaultGetZones.Apply(getZonesResult => getZonesResult.Zones[0]?.Id),
                    KeyPairName = defaultEcsKeyPair.Id,
                },
            },
            Tags = 
            {
                { "created", "tf" },
            },
            NodeGroups = new[]
            {
                new AliCloud.Emrv2.Inputs.ClusterNodeGroupArgs
                {
                    NodeGroupType = "MASTER",
                    NodeGroupName = "emr-master",
                    PaymentType = "PayAsYouGo",
                    VswitchIds = new[]
                    {
                        defaultSwitch.Id,
                    },
                    WithPublicIp = false,
                    InstanceTypes = new[]
                    {
                        "ecs.g7.xlarge",
                    },
                    NodeCount = 1,
                    SystemDisk = new AliCloud.Emrv2.Inputs.ClusterNodeGroupSystemDiskArgs
                    {
                        Category = "cloud_essd",
                        Size = 80,
                        Count = 1,
                    },
                    DataDisks = new[]
                    {
                        new AliCloud.Emrv2.Inputs.ClusterNodeGroupDataDiskArgs
                        {
                            Category = "cloud_essd",
                            Size = 80,
                            Count = 3,
                        },
                    },
                },
                new AliCloud.Emrv2.Inputs.ClusterNodeGroupArgs
                {
                    NodeGroupType = "CORE",
                    NodeGroupName = "emr-core",
                    PaymentType = "PayAsYouGo",
                    VswitchIds = new[]
                    {
                        defaultSwitch.Id,
                    },
                    WithPublicIp = false,
                    InstanceTypes = new[]
                    {
                        "ecs.g7.xlarge",
                    },
                    NodeCount = 3,
                    SystemDisk = new AliCloud.Emrv2.Inputs.ClusterNodeGroupSystemDiskArgs
                    {
                        Category = "cloud_essd",
                        Size = 80,
                        Count = 1,
                    },
                    DataDisks = new[]
                    {
                        new AliCloud.Emrv2.Inputs.ClusterNodeGroupDataDiskArgs
                        {
                            Category = "cloud_essd",
                            Size = 80,
                            Count = 3,
                        },
                    },
                },
            },
            ResourceGroupId = @default.Apply(@default => @default.Apply(getResourceGroupsResult => getResourceGroupsResult.Ids[0])),
        });
    
        var ids = AliCloud.Emrv2.GetClusters.Invoke();
    
        var nameRegex = AliCloud.Emrv2.GetClusters.Invoke(new()
        {
            NameRegex = defaultAlicloudEmrCluster.Name,
        });
    
        return new Dictionary<string, object?>
        {
            ["emrv2ClustersId1"] = ids.Apply(getClustersResult => getClustersResult.Clusters[0]?.Id),
            ["emrv2ClustersId2"] = nameRegex.Apply(getClustersResult => getClustersResult.Clusters[0]?.Id),
        };
    });
    
    package generated_program;
    
    import com.pulumi.Context;
    import com.pulumi.Pulumi;
    import com.pulumi.core.Output;
    import com.pulumi.alicloud.resourcemanager.ResourcemanagerFunctions;
    import com.pulumi.alicloud.resourcemanager.inputs.GetResourceGroupsArgs;
    import com.pulumi.alicloud.AlicloudFunctions;
    import com.pulumi.alicloud.inputs.GetZonesArgs;
    import com.pulumi.alicloud.vpc.Network;
    import com.pulumi.alicloud.vpc.NetworkArgs;
    import com.pulumi.alicloud.vpc.Switch;
    import com.pulumi.alicloud.vpc.SwitchArgs;
    import com.pulumi.alicloud.ecs.EcsKeyPair;
    import com.pulumi.alicloud.ecs.EcsKeyPairArgs;
    import com.pulumi.alicloud.ecs.SecurityGroup;
    import com.pulumi.alicloud.ecs.SecurityGroupArgs;
    import com.pulumi.alicloud.ram.Role;
    import com.pulumi.alicloud.ram.RoleArgs;
    import com.pulumi.alicloud.emrv2.Cluster;
    import com.pulumi.alicloud.emrv2.ClusterArgs;
    import com.pulumi.alicloud.emrv2.inputs.ClusterApplicationConfigArgs;
    import com.pulumi.alicloud.emrv2.inputs.ClusterNodeAttributeArgs;
    import com.pulumi.alicloud.emrv2.inputs.ClusterNodeGroupArgs;
    import com.pulumi.alicloud.emrv2.inputs.ClusterNodeGroupSystemDiskArgs;
    import com.pulumi.alicloud.emrv2.Emrv2Functions;
    import com.pulumi.alicloud.emrv2.inputs.GetClustersArgs;
    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) {
            final var default = ResourcemanagerFunctions.getResourceGroups(GetResourceGroupsArgs.builder()
                .status("OK")
                .build());
    
            final var defaultGetZones = AlicloudFunctions.getZones(GetZonesArgs.builder()
                .availableInstanceType("ecs.g7.xlarge")
                .build());
    
            var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
                .vpcName("TF-VPC")
                .cidrBlock("172.16.0.0/12")
                .build());
    
            var defaultSwitch = new Switch("defaultSwitch", SwitchArgs.builder()
                .vpcId(defaultNetwork.id())
                .cidrBlock("172.16.0.0/21")
                .zoneId(defaultGetZones.zones()[0].id())
                .vswitchName("TF_VSwitch")
                .build());
    
            var defaultEcsKeyPair = new EcsKeyPair("defaultEcsKeyPair", EcsKeyPairArgs.builder()
                .keyPairName("terraform-kp")
                .build());
    
            var defaultSecurityGroup = new SecurityGroup("defaultSecurityGroup", SecurityGroupArgs.builder()
                .name("TF_SECURITY_GROUP")
                .vpcId(defaultNetwork.id())
                .build());
    
            var defaultRole = new Role("defaultRole", RoleArgs.builder()
                .name("emrtf")
                .document("""
        {
            \"Statement\": [
            {
                \"Action\": \"sts:AssumeRole\",
                \"Effect\": \"Allow\",
                \"Principal\": {
                \"Service\": [
                    \"emr.aliyuncs.com\",
                    \"ecs.aliyuncs.com\"
                ]
                }
            }
            ],
            \"Version\": \"1\"
        }
                """)
                .description("this is a role test.")
                .force(true)
                .build());
    
            var defaultCluster = new Cluster("defaultCluster", ClusterArgs.builder()
                .paymentType("PayAsYouGo")
                .clusterType("DATALAKE")
                .releaseVersion("EMR-5.10.0")
                .clusterName("terraform-emr-cluster-v2")
                .deployMode("NORMAL")
                .securityMode("NORMAL")
                .applications(            
                    "HADOOP-COMMON",
                    "HDFS",
                    "YARN",
                    "HIVE",
                    "SPARK3",
                    "TEZ")
                .applicationConfigs(            
                    ClusterApplicationConfigArgs.builder()
                        .applicationName("HIVE")
                        .configFileName("hivemetastore-site.xml")
                        .configItemKey("hive.metastore.type")
                        .configItemValue("DLF")
                        .configScope("CLUSTER")
                        .build(),
                    ClusterApplicationConfigArgs.builder()
                        .applicationName("SPARK3")
                        .configFileName("hive-site.xml")
                        .configItemKey("hive.metastore.type")
                        .configItemValue("DLF")
                        .configScope("CLUSTER")
                        .build())
                .nodeAttributes(ClusterNodeAttributeArgs.builder()
                    .ramRole(defaultRole.name())
                    .securityGroupId(defaultSecurityGroup.id())
                    .vpcId(defaultNetwork.id())
                    .zoneId(defaultGetZones.zones()[0].id())
                    .keyPairName(defaultEcsKeyPair.id())
                    .build())
                .tags(Map.of("created", "tf"))
                .nodeGroups(            
                    ClusterNodeGroupArgs.builder()
                        .nodeGroupType("MASTER")
                        .nodeGroupName("emr-master")
                        .paymentType("PayAsYouGo")
                        .vswitchIds(defaultSwitch.id())
                        .withPublicIp(false)
                        .instanceTypes("ecs.g7.xlarge")
                        .nodeCount(1)
                        .systemDisk(ClusterNodeGroupSystemDiskArgs.builder()
                            .category("cloud_essd")
                            .size(80)
                            .count(1)
                            .build())
                        .dataDisks(ClusterNodeGroupDataDiskArgs.builder()
                            .category("cloud_essd")
                            .size(80)
                            .count(3)
                            .build())
                        .build(),
                    ClusterNodeGroupArgs.builder()
                        .nodeGroupType("CORE")
                        .nodeGroupName("emr-core")
                        .paymentType("PayAsYouGo")
                        .vswitchIds(defaultSwitch.id())
                        .withPublicIp(false)
                        .instanceTypes("ecs.g7.xlarge")
                        .nodeCount(3)
                        .systemDisk(ClusterNodeGroupSystemDiskArgs.builder()
                            .category("cloud_essd")
                            .size(80)
                            .count(1)
                            .build())
                        .dataDisks(ClusterNodeGroupDataDiskArgs.builder()
                            .category("cloud_essd")
                            .size(80)
                            .count(3)
                            .build())
                        .build())
                .resourceGroupId(default_.ids()[0])
                .build());
    
            final var ids = Emrv2Functions.getClusters(GetClustersArgs.builder()
                .build());
    
            ctx.export("emrv2ClustersId1", ids.clusters()[0].id());
            final var nameRegex = Emrv2Functions.getClusters(GetClustersArgs.builder()
                .nameRegex(defaultAlicloudEmrCluster.name())
                .build());
    
            ctx.export("emrv2ClustersId2", nameRegex.clusters()[0].id());
        }
    }
    
    resources:
      defaultNetwork:
        type: alicloud:vpc:Network
        name: default
        properties:
          vpcName: TF-VPC
          cidrBlock: 172.16.0.0/12
      defaultSwitch:
        type: alicloud:vpc:Switch
        name: default
        properties:
          vpcId: ${defaultNetwork.id}
          cidrBlock: 172.16.0.0/21
          zoneId: ${defaultGetZones.zones[0].id}
          vswitchName: TF_VSwitch
      defaultEcsKeyPair:
        type: alicloud:ecs:EcsKeyPair
        name: default
        properties:
          keyPairName: terraform-kp
      defaultSecurityGroup:
        type: alicloud:ecs:SecurityGroup
        name: default
        properties:
          name: TF_SECURITY_GROUP
          vpcId: ${defaultNetwork.id}
      defaultRole:
        type: alicloud:ram:Role
        name: default
        properties:
          name: emrtf
          document: |2
                {
                    \"Statement\": [
                    {
                        \"Action\": \"sts:AssumeRole\",
                        \"Effect\": \"Allow\",
                        \"Principal\": {
                        \"Service\": [
                            \"emr.aliyuncs.com\",
                            \"ecs.aliyuncs.com\"
                        ]
                        }
                    }
                    ],
                    \"Version\": \"1\"
                }
          description: this is a role test.
          force: true
      defaultCluster:
        type: alicloud:emrv2:Cluster
        name: default
        properties:
          paymentType: PayAsYouGo
          clusterType: DATALAKE
          releaseVersion: EMR-5.10.0
          clusterName: terraform-emr-cluster-v2
          deployMode: NORMAL
          securityMode: NORMAL
          applications:
            - HADOOP-COMMON
            - HDFS
            - YARN
            - HIVE
            - SPARK3
            - TEZ
          applicationConfigs:
            - applicationName: HIVE
              configFileName: hivemetastore-site.xml
              configItemKey: hive.metastore.type
              configItemValue: DLF
              configScope: CLUSTER
            - applicationName: SPARK3
              configFileName: hive-site.xml
              configItemKey: hive.metastore.type
              configItemValue: DLF
              configScope: CLUSTER
          nodeAttributes:
            - ramRole: ${defaultRole.name}
              securityGroupId: ${defaultSecurityGroup.id}
              vpcId: ${defaultNetwork.id}
              zoneId: ${defaultGetZones.zones[0].id}
              keyPairName: ${defaultEcsKeyPair.id}
          tags:
            created: tf
          nodeGroups:
            - nodeGroupType: MASTER
              nodeGroupName: emr-master
              paymentType: PayAsYouGo
              vswitchIds:
                - ${defaultSwitch.id}
              withPublicIp: false
              instanceTypes:
                - ecs.g7.xlarge
              nodeCount: 1
              systemDisk:
                category: cloud_essd
                size: 80
                count: 1
              dataDisks:
                - category: cloud_essd
                  size: 80
                  count: 3
            - nodeGroupType: CORE
              nodeGroupName: emr-core
              paymentType: PayAsYouGo
              vswitchIds:
                - ${defaultSwitch.id}
              withPublicIp: false
              instanceTypes:
                - ecs.g7.xlarge
              nodeCount: 3
              systemDisk:
                category: cloud_essd
                size: 80
                count: 1
              dataDisks:
                - category: cloud_essd
                  size: 80
                  count: 3
          resourceGroupId: ${default.ids[0]}
    variables:
      default:
        fn::invoke:
          function: alicloud:resourcemanager:getResourceGroups
          arguments:
            status: OK
      defaultGetZones:
        fn::invoke:
          function: alicloud:getZones
          arguments:
            availableInstanceType: ecs.g7.xlarge
      ids:
        fn::invoke:
          function: alicloud:emrv2:getClusters
          arguments: {}
      nameRegex:
        fn::invoke:
          function: alicloud:emrv2:getClusters
          arguments:
            nameRegex: ${defaultAlicloudEmrCluster.name}
    outputs:
      emrv2ClustersId1: ${ids.clusters[0].id}
      emrv2ClustersId2: ${nameRegex.clusters[0].id}
    

    Using getClusters

    Two invocation forms are available. The direct form accepts plain arguments and either blocks until the result value is available, or returns a Promise-wrapped result. The output form accepts Input-wrapped arguments and returns an Output-wrapped result.

    function getClusters(args: GetClustersArgs, opts?: InvokeOptions): Promise<GetClustersResult>
    function getClustersOutput(args: GetClustersOutputArgs, opts?: InvokeOptions): Output<GetClustersResult>
    def get_clusters(cluster_name: Optional[str] = None,
                     cluster_states: Optional[Sequence[str]] = None,
                     cluster_types: Optional[Sequence[str]] = None,
                     ids: Optional[Sequence[str]] = None,
                     max_results: Optional[int] = None,
                     name_regex: Optional[str] = None,
                     next_token: Optional[str] = None,
                     output_file: Optional[str] = None,
                     payment_types: Optional[Sequence[str]] = None,
                     resource_group_id: Optional[str] = None,
                     tags: Optional[Mapping[str, str]] = None,
                     opts: Optional[InvokeOptions] = None) -> GetClustersResult
    def get_clusters_output(cluster_name: Optional[pulumi.Input[str]] = None,
                     cluster_states: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                     cluster_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                     ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                     max_results: Optional[pulumi.Input[int]] = None,
                     name_regex: Optional[pulumi.Input[str]] = None,
                     next_token: Optional[pulumi.Input[str]] = None,
                     output_file: Optional[pulumi.Input[str]] = None,
                     payment_types: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                     resource_group_id: Optional[pulumi.Input[str]] = None,
                     tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None,
                     opts: Optional[InvokeOptions] = None) -> Output[GetClustersResult]
    func GetClusters(ctx *Context, args *GetClustersArgs, opts ...InvokeOption) (*GetClustersResult, error)
    func GetClustersOutput(ctx *Context, args *GetClustersOutputArgs, opts ...InvokeOption) GetClustersResultOutput

    > Note: This function is named GetClusters in the Go SDK.

    public static class GetClusters 
    {
        public static Task<GetClustersResult> InvokeAsync(GetClustersArgs args, InvokeOptions? opts = null)
        public static Output<GetClustersResult> Invoke(GetClustersInvokeArgs args, InvokeOptions? opts = null)
    }
    public static CompletableFuture<GetClustersResult> getClusters(GetClustersArgs args, InvokeOptions options)
    public static Output<GetClustersResult> getClusters(GetClustersArgs args, InvokeOptions options)
    
    fn::invoke:
      function: alicloud:emrv2/getClusters:getClusters
      arguments:
        # arguments dictionary

    The following arguments are supported:

    ClusterName string
    The cluster name.
    ClusterStates List<string>
    The cluster states.
    ClusterTypes List<string>
    The cluster types.
    Ids List<string>
    A list of Cluster IDs.
    MaxResults int
    The max results is used to list clusters for next page.
    NameRegex string
    A regex string to filter results by Cluster name.
    NextToken string
    The next token is used to list clusters for next page.
    OutputFile string
    File name where to save data source results (after running pulumi preview).
    PaymentTypes List<string>
    The cluster payment types.
    ResourceGroupId string
    The Resource Group ID.
    Tags Dictionary<string, string>
    A mapping of tags to assign to the resource.
    ClusterName string
    The cluster name.
    ClusterStates []string
    The cluster states.
    ClusterTypes []string
    The cluster types.
    Ids []string
    A list of Cluster IDs.
    MaxResults int
    The max results is used to list clusters for next page.
    NameRegex string
    A regex string to filter results by Cluster name.
    NextToken string
    The next token is used to list clusters for next page.
    OutputFile string
    File name where to save data source results (after running pulumi preview).
    PaymentTypes []string
    The cluster payment types.
    ResourceGroupId string
    The Resource Group ID.
    Tags map[string]string
    A mapping of tags to assign to the resource.
    clusterName String
    The cluster name.
    clusterStates List<String>
    The cluster states.
    clusterTypes List<String>
    The cluster types.
    ids List<String>
    A list of Cluster IDs.
    maxResults Integer
    The max results is used to list clusters for next page.
    nameRegex String
    A regex string to filter results by Cluster name.
    nextToken String
    The next token is used to list clusters for next page.
    outputFile String
    File name where to save data source results (after running pulumi preview).
    paymentTypes List<String>
    The cluster payment types.
    resourceGroupId String
    The Resource Group ID.
    tags Map<String,String>
    A mapping of tags to assign to the resource.
    clusterName string
    The cluster name.
    clusterStates string[]
    The cluster states.
    clusterTypes string[]
    The cluster types.
    ids string[]
    A list of Cluster IDs.
    maxResults number
    The max results is used to list clusters for next page.
    nameRegex string
    A regex string to filter results by Cluster name.
    nextToken string
    The next token is used to list clusters for next page.
    outputFile string
    File name where to save data source results (after running pulumi preview).
    paymentTypes string[]
    The cluster payment types.
    resourceGroupId string
    The Resource Group ID.
    tags {[key: string]: string}
    A mapping of tags to assign to the resource.
    cluster_name str
    The cluster name.
    cluster_states Sequence[str]
    The cluster states.
    cluster_types Sequence[str]
    The cluster types.
    ids Sequence[str]
    A list of Cluster IDs.
    max_results int
    The max results is used to list clusters for next page.
    name_regex str
    A regex string to filter results by Cluster name.
    next_token str
    The next token is used to list clusters for next page.
    output_file str
    File name where to save data source results (after running pulumi preview).
    payment_types Sequence[str]
    The cluster payment types.
    resource_group_id str
    The Resource Group ID.
    tags Mapping[str, str]
    A mapping of tags to assign to the resource.
    clusterName String
    The cluster name.
    clusterStates List<String>
    The cluster states.
    clusterTypes List<String>
    The cluster types.
    ids List<String>
    A list of Cluster IDs.
    maxResults Number
    The max results is used to list clusters for next page.
    nameRegex String
    A regex string to filter results by Cluster name.
    nextToken String
    The next token is used to list clusters for next page.
    outputFile String
    File name where to save data source results (after running pulumi preview).
    paymentTypes List<String>
    The cluster payment types.
    resourceGroupId String
    The Resource Group ID.
    tags Map<String>
    A mapping of tags to assign to the resource.

    getClusters Result

    The following output properties are available:

    Clusters List<Pulumi.AliCloud.Emrv2.Outputs.GetClustersCluster>
    A list of Emr Clusters. Each element contains the following attributes:
    Id string
    The provider-assigned unique ID for this managed resource.
    Ids List<string>
    A list of Cluster IDS.
    Names List<string>
    A list of Cluster names.
    TotalCount int
    The total count of list clusters.
    ClusterName string
    The name of the emr cluster.
    ClusterStates List<string>
    ClusterTypes List<string>
    MaxResults int
    NameRegex string
    NextToken string
    OutputFile string
    PaymentTypes List<string>
    ResourceGroupId string
    The resource group id of the resource.
    Tags Dictionary<string, string>
    A mapping of tags to assign to the resource.
    Clusters []GetClustersCluster
    A list of Emr Clusters. Each element contains the following attributes:
    Id string
    The provider-assigned unique ID for this managed resource.
    Ids []string
    A list of Cluster IDS.
    Names []string
    A list of Cluster names.
    TotalCount int
    The total count of list clusters.
    ClusterName string
    The name of the emr cluster.
    ClusterStates []string
    ClusterTypes []string
    MaxResults int
    NameRegex string
    NextToken string
    OutputFile string
    PaymentTypes []string
    ResourceGroupId string
    The resource group id of the resource.
    Tags map[string]string
    A mapping of tags to assign to the resource.
    clusters List<GetClustersCluster>
    A list of Emr Clusters. Each element contains the following attributes:
    id String
    The provider-assigned unique ID for this managed resource.
    ids List<String>
    A list of Cluster IDS.
    names List<String>
    A list of Cluster names.
    totalCount Integer
    The total count of list clusters.
    clusterName String
    The name of the emr cluster.
    clusterStates List<String>
    clusterTypes List<String>
    maxResults Integer
    nameRegex String
    nextToken String
    outputFile String
    paymentTypes List<String>
    resourceGroupId String
    The resource group id of the resource.
    tags Map<String,String>
    A mapping of tags to assign to the resource.
    clusters GetClustersCluster[]
    A list of Emr Clusters. Each element contains the following attributes:
    id string
    The provider-assigned unique ID for this managed resource.
    ids string[]
    A list of Cluster IDS.
    names string[]
    A list of Cluster names.
    totalCount number
    The total count of list clusters.
    clusterName string
    The name of the emr cluster.
    clusterStates string[]
    clusterTypes string[]
    maxResults number
    nameRegex string
    nextToken string
    outputFile string
    paymentTypes string[]
    resourceGroupId string
    The resource group id of the resource.
    tags {[key: string]: string}
    A mapping of tags to assign to the resource.
    clusters Sequence[GetClustersCluster]
    A list of Emr Clusters. Each element contains the following attributes:
    id str
    The provider-assigned unique ID for this managed resource.
    ids Sequence[str]
    A list of Cluster IDS.
    names Sequence[str]
    A list of Cluster names.
    total_count int
    The total count of list clusters.
    cluster_name str
    The name of the emr cluster.
    cluster_states Sequence[str]
    cluster_types Sequence[str]
    max_results int
    name_regex str
    next_token str
    output_file str
    payment_types Sequence[str]
    resource_group_id str
    The resource group id of the resource.
    tags Mapping[str, str]
    A mapping of tags to assign to the resource.
    clusters List<Property Map>
    A list of Emr Clusters. Each element contains the following attributes:
    id String
    The provider-assigned unique ID for this managed resource.
    ids List<String>
    A list of Cluster IDS.
    names List<String>
    A list of Cluster names.
    totalCount Number
    The total count of list clusters.
    clusterName String
    The name of the emr cluster.
    clusterStates List<String>
    clusterTypes List<String>
    maxResults Number
    nameRegex String
    nextToken String
    outputFile String
    paymentTypes List<String>
    resourceGroupId String
    The resource group id of the resource.
    tags Map<String>
    A mapping of tags to assign to the resource.

    Supporting Types

    GetClustersCluster

    ClusterId string
    The first ID of the resource.
    ClusterName string
    The cluster name.
    ClusterState string
    The state of the emr cluster.
    ClusterType string
    The type of the emr cluster.
    CreateTime string
    The creation time of the resource.
    EmrDefaultRole string
    The ecs default role belongs to this emr cluster.
    EndTime string
    The end time of the resource.
    ExpireTime string
    The expire time of the resource.
    PaymentType string
    The payment type of the emr cluster.
    ReadyTime string
    The ready time of the resource.
    ReleaseVersion string
    The release version of the resource.
    ResourceGroupId string
    The Resource Group ID.
    StateChangeReason Dictionary<string, string>
    The cluster state change reason.
    Tags List<Pulumi.AliCloud.Emrv2.Inputs.GetClustersClusterTag>
    A mapping of tags to assign to the resource.
    ClusterId string
    The first ID of the resource.
    ClusterName string
    The cluster name.
    ClusterState string
    The state of the emr cluster.
    ClusterType string
    The type of the emr cluster.
    CreateTime string
    The creation time of the resource.
    EmrDefaultRole string
    The ecs default role belongs to this emr cluster.
    EndTime string
    The end time of the resource.
    ExpireTime string
    The expire time of the resource.
    PaymentType string
    The payment type of the emr cluster.
    ReadyTime string
    The ready time of the resource.
    ReleaseVersion string
    The release version of the resource.
    ResourceGroupId string
    The Resource Group ID.
    StateChangeReason map[string]string
    The cluster state change reason.
    Tags []GetClustersClusterTag
    A mapping of tags to assign to the resource.
    clusterId String
    The first ID of the resource.
    clusterName String
    The cluster name.
    clusterState String
    The state of the emr cluster.
    clusterType String
    The type of the emr cluster.
    createTime String
    The creation time of the resource.
    emrDefaultRole String
    The ecs default role belongs to this emr cluster.
    endTime String
    The end time of the resource.
    expireTime String
    The expire time of the resource.
    paymentType String
    The payment type of the emr cluster.
    readyTime String
    The ready time of the resource.
    releaseVersion String
    The release version of the resource.
    resourceGroupId String
    The Resource Group ID.
    stateChangeReason Map<String,String>
    The cluster state change reason.
    tags List<GetClustersClusterTag>
    A mapping of tags to assign to the resource.
    clusterId string
    The first ID of the resource.
    clusterName string
    The cluster name.
    clusterState string
    The state of the emr cluster.
    clusterType string
    The type of the emr cluster.
    createTime string
    The creation time of the resource.
    emrDefaultRole string
    The ecs default role belongs to this emr cluster.
    endTime string
    The end time of the resource.
    expireTime string
    The expire time of the resource.
    paymentType string
    The payment type of the emr cluster.
    readyTime string
    The ready time of the resource.
    releaseVersion string
    The release version of the resource.
    resourceGroupId string
    The Resource Group ID.
    stateChangeReason {[key: string]: string}
    The cluster state change reason.
    tags GetClustersClusterTag[]
    A mapping of tags to assign to the resource.
    cluster_id str
    The first ID of the resource.
    cluster_name str
    The cluster name.
    cluster_state str
    The state of the emr cluster.
    cluster_type str
    The type of the emr cluster.
    create_time str
    The creation time of the resource.
    emr_default_role str
    The ecs default role belongs to this emr cluster.
    end_time str
    The end time of the resource.
    expire_time str
    The expire time of the resource.
    payment_type str
    The payment type of the emr cluster.
    ready_time str
    The ready time of the resource.
    release_version str
    The release version of the resource.
    resource_group_id str
    The Resource Group ID.
    state_change_reason Mapping[str, str]
    The cluster state change reason.
    tags Sequence[GetClustersClusterTag]
    A mapping of tags to assign to the resource.
    clusterId String
    The first ID of the resource.
    clusterName String
    The cluster name.
    clusterState String
    The state of the emr cluster.
    clusterType String
    The type of the emr cluster.
    createTime String
    The creation time of the resource.
    emrDefaultRole String
    The ecs default role belongs to this emr cluster.
    endTime String
    The end time of the resource.
    expireTime String
    The expire time of the resource.
    paymentType String
    The payment type of the emr cluster.
    readyTime String
    The ready time of the resource.
    releaseVersion String
    The release version of the resource.
    resourceGroupId String
    The Resource Group ID.
    stateChangeReason Map<String>
    The cluster state change reason.
    tags List<Property Map>
    A mapping of tags to assign to the resource.

    GetClustersClusterTag

    Key string
    Value string
    Key string
    Value string
    key String
    value String
    key string
    value string
    key str
    value str
    key String
    value String

    Package Details

    Repository
    Alibaba Cloud pulumi/pulumi-alicloud
    License
    Apache-2.0
    Notes
    This Pulumi package is based on the alicloud Terraform Provider.
    alicloud logo
    Alibaba Cloud v3.90.0 published on Tuesday, Dec 2, 2025 by Pulumi
      Meet Neo: Your AI Platform Teammate