Cluster class

A cluster in a private cloud.

To get more information about Cluster, see:

Example Usage

Vmware Engine Cluster Basic

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const cluster_nw = new gcp.vmwareengine.Network("cluster-nw", {
    name: "pc-nw",
    type: "STANDARD",
    location: "global",
    description: "PC network description.",
});
const cluster_pc = new gcp.vmwareengine.PrivateCloud("cluster-pc", {
    location: "us-west1-a",
    name: "sample-pc",
    description: "Sample test PC.",
    networkConfig: {
        managementCidr: "192.168.30.0/24",
        vmwareEngineNetwork: cluster_nw.id,
    },
    managementCluster: {
        clusterId: "sample-mgmt-cluster",
        nodeTypeConfigs: [{
            nodeTypeId: "standard-72",
            nodeCount: 3,
        }],
    },
});
const vmw_engine_ext_cluster = new gcp.vmwareengine.Cluster("vmw-engine-ext-cluster", {
    name: "ext-cluster",
    parent: cluster_pc.id,
    nodeTypeConfigs: [{
        nodeTypeId: "standard-72",
        nodeCount: 3,
    }],
});
import pulumi
import pulumi_gcp as gcp

cluster_nw = gcp.vmwareengine.Network("cluster-nw",
    name="pc-nw",
    type="STANDARD",
    location="global",
    description="PC network description.")
cluster_pc = gcp.vmwareengine.PrivateCloud("cluster-pc",
    location="us-west1-a",
    name="sample-pc",
    description="Sample test PC.",
    network_config={
        "management_cidr": "192.168.30.0/24",
        "vmware_engine_network": cluster_nw.id,
    },
    management_cluster={
        "cluster_id": "sample-mgmt-cluster",
        "node_type_configs": [{
            "node_type_id": "standard-72",
            "node_count": 3,
        }],
    })
vmw_engine_ext_cluster = gcp.vmwareengine.Cluster("vmw-engine-ext-cluster",
    name="ext-cluster",
    parent=cluster_pc.id,
    node_type_configs=[{
        "node_type_id": "standard-72",
        "node_count": 3,
    }])
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var cluster_nw = new Gcp.VMwareEngine.Network("cluster-nw", new()
    {
        Name = "pc-nw",
        Type = "STANDARD",
        Location = "global",
        Description = "PC network description.",
    });

    var cluster_pc = new Gcp.VMwareEngine.PrivateCloud("cluster-pc", new()
    {
        Location = "us-west1-a",
        Name = "sample-pc",
        Description = "Sample test PC.",
        NetworkConfig = new Gcp.VMwareEngine.Inputs.PrivateCloudNetworkConfigArgs
        {
            ManagementCidr = "192.168.30.0/24",
            VmwareEngineNetwork = cluster_nw.Id,
        },
        ManagementCluster = new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterArgs
        {
            ClusterId = "sample-mgmt-cluster",
            NodeTypeConfigs = new[]
            {
                new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterNodeTypeConfigArgs
                {
                    NodeTypeId = "standard-72",
                    NodeCount = 3,
                },
            },
        },
    });

    var vmw_engine_ext_cluster = new Gcp.VMwareEngine.Cluster("vmw-engine-ext-cluster", new()
    {
        Name = "ext-cluster",
        Parent = cluster_pc.Id,
        NodeTypeConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterNodeTypeConfigArgs
            {
                NodeTypeId = "standard-72",
                NodeCount = 3,
            },
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/vmwareengine"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		cluster_nw, err := vmwareengine.NewNetwork(ctx, "cluster-nw", &vmwareengine.NetworkArgs{
			Name:        pulumi.String("pc-nw"),
			Type:        pulumi.String("STANDARD"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("PC network description."),
		})
		if err != nil {
			return err
		}
		cluster_pc, err := vmwareengine.NewPrivateCloud(ctx, "cluster-pc", &vmwareengine.PrivateCloudArgs{
			Location:    pulumi.String("us-west1-a"),
			Name:        pulumi.String("sample-pc"),
			Description: pulumi.String("Sample test PC."),
			NetworkConfig: &vmwareengine.PrivateCloudNetworkConfigArgs{
				ManagementCidr:      pulumi.String("192.168.30.0/24"),
				VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			},
			ManagementCluster: &vmwareengine.PrivateCloudManagementClusterArgs{
				ClusterId: pulumi.String("sample-mgmt-cluster"),
				NodeTypeConfigs: vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArray{
					&vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArgs{
						NodeTypeId: pulumi.String("standard-72"),
						NodeCount:  pulumi.Int(3),
					},
				},
			},
		})
		if err != nil {
			return err
		}
		_, err = vmwareengine.NewCluster(ctx, "vmw-engine-ext-cluster", &vmwareengine.ClusterArgs{
			Name:   pulumi.String("ext-cluster"),
			Parent: cluster_pc.ID().ToIDOutput().ToStringOutput(),
			NodeTypeConfigs: vmwareengine.ClusterNodeTypeConfigArray{
				&vmwareengine.ClusterNodeTypeConfigArgs{
					NodeTypeId: pulumi.String("standard-72"),
					NodeCount:  pulumi.Int(3),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_vmwareengine_cluster" "vmw-engine-ext-cluster" {
  name   = "ext-cluster"
  parent = gcp_vmwareengine_privatecloud.cluster-pc.id
  node_type_configs {
    node_type_id = "standard-72"
    node_count   = 3
  }
}
resource "gcp_vmwareengine_privatecloud" "cluster-pc" {
  location    = "us-west1-a"
  name        = "sample-pc"
  description = "Sample test PC."
  network_config = {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  }
  management_cluster = {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs = [{
      "nodeTypeId" = "standard-72"
      "nodeCount"  = 3
    }]
  }
}
resource "gcp_vmwareengine_network" "cluster-nw" {
  name        = "pc-nw"
  type        = "STANDARD"
  location    = "global"
  description = "PC network description."
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.vmwareengine.Network;
import com.pulumi.gcp.vmwareengine.NetworkArgs;
import com.pulumi.gcp.vmwareengine.PrivateCloud;
import com.pulumi.gcp.vmwareengine.PrivateCloudArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudNetworkConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.Cluster;
import com.pulumi.gcp.vmwareengine.ClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterNodeTypeConfigArgs;
import java.util.ArrayList;
import java.util.Arrays;
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 cluster_nw = new Network("cluster-nw", NetworkArgs.builder()
            .name("pc-nw")
            .type("STANDARD")
            .location("global")
            .description("PC network description.")
            .build());

        var cluster_pc = new PrivateCloud("cluster-pc", PrivateCloudArgs.builder()
            .location("us-west1-a")
            .name("sample-pc")
            .description("Sample test PC.")
            .networkConfig(PrivateCloudNetworkConfigArgs.builder()
                .managementCidr("192.168.30.0/24")
                .vmwareEngineNetwork(cluster_nw.id())
                .build())
            .managementCluster(PrivateCloudManagementClusterArgs.builder()
                .clusterId("sample-mgmt-cluster")
                .nodeTypeConfigs(PrivateCloudManagementClusterNodeTypeConfigArgs.builder()
                    .nodeTypeId("standard-72")
                    .nodeCount(3)
                    .build())
                .build())
            .build());

        var vmw_engine_ext_cluster = new Cluster("vmw-engine-ext-cluster", ClusterArgs.builder()
            .name("ext-cluster")
            .parent(cluster_pc.id())
            .nodeTypeConfigs(ClusterNodeTypeConfigArgs.builder()
                .nodeTypeId("standard-72")
                .nodeCount(3)
                .build())
            .build());

    }
}
resources:
  vmw-engine-ext-cluster:
    type: gcp:vmwareengine:Cluster
    properties:
      name: ext-cluster
      parent: ${["cluster-pc"].id}
      nodeTypeConfigs:
        - nodeTypeId: standard-72
          nodeCount: 3
  cluster-pc:
    type: gcp:vmwareengine:PrivateCloud
    properties:
      location: us-west1-a
      name: sample-pc
      description: Sample test PC.
      networkConfig:
        managementCidr: 192.168.30.0/24
        vmwareEngineNetwork: ${["cluster-nw"].id}
      managementCluster:
        clusterId: sample-mgmt-cluster
        nodeTypeConfigs:
          - nodeTypeId: standard-72
            nodeCount: 3
  cluster-nw:
    type: gcp:vmwareengine:Network
    properties:
      name: pc-nw
      type: STANDARD
      location: global
      description: PC network description.

Vmware Engine Cluster Full

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";

const cluster_nw = new gcp.vmwareengine.Network("cluster-nw", {
    name: "pc-nw",
    type: "STANDARD",
    location: "global",
    description: "PC network description.",
});
const cluster_pc = new gcp.vmwareengine.PrivateCloud("cluster-pc", {
    location: "us-west1-a",
    name: "sample-pc",
    description: "Sample test PC.",
    networkConfig: {
        managementCidr: "192.168.30.0/24",
        vmwareEngineNetwork: cluster_nw.id,
    },
    managementCluster: {
        clusterId: "sample-mgmt-cluster",
        nodeTypeConfigs: [{
            nodeTypeId: "standard-72",
            nodeCount: 3,
            customCoreCount: 32,
        }],
    },
});
const vmw_ext_cluster = new gcp.vmwareengine.Cluster("vmw-ext-cluster", {
    name: "ext-cluster",
    parent: cluster_pc.id,
    nodeTypeConfigs: [{
        nodeTypeId: "standard-72",
        nodeCount: 3,
        customCoreCount: 32,
    }],
    autoscalingSettings: {
        autoscalingPolicies: [{
            autoscalePolicyId: "autoscaling-policy",
            nodeTypeId: "standard-72",
            scaleOutSize: 1,
            cpuThresholds: {
                scaleOut: 80,
                scaleIn: 15,
            },
            consumedMemoryThresholds: {
                scaleOut: 75,
                scaleIn: 20,
            },
            storageThresholds: {
                scaleOut: 80,
                scaleIn: 20,
            },
        }],
        minClusterNodeCount: 3,
        maxClusterNodeCount: 8,
        coolDownPeriod: "1800s",
    },
});
import pulumi
import pulumi_gcp as gcp

cluster_nw = gcp.vmwareengine.Network("cluster-nw",
    name="pc-nw",
    type="STANDARD",
    location="global",
    description="PC network description.")
cluster_pc = gcp.vmwareengine.PrivateCloud("cluster-pc",
    location="us-west1-a",
    name="sample-pc",
    description="Sample test PC.",
    network_config={
        "management_cidr": "192.168.30.0/24",
        "vmware_engine_network": cluster_nw.id,
    },
    management_cluster={
        "cluster_id": "sample-mgmt-cluster",
        "node_type_configs": [{
            "node_type_id": "standard-72",
            "node_count": 3,
            "custom_core_count": 32,
        }],
    })
vmw_ext_cluster = gcp.vmwareengine.Cluster("vmw-ext-cluster",
    name="ext-cluster",
    parent=cluster_pc.id,
    node_type_configs=[{
        "node_type_id": "standard-72",
        "node_count": 3,
        "custom_core_count": 32,
    }],
    autoscaling_settings={
        "autoscaling_policies": [{
            "autoscale_policy_id": "autoscaling-policy",
            "node_type_id": "standard-72",
            "scale_out_size": 1,
            "cpu_thresholds": {
                "scale_out": 80,
                "scale_in": 15,
            },
            "consumed_memory_thresholds": {
                "scale_out": 75,
                "scale_in": 20,
            },
            "storage_thresholds": {
                "scale_out": 80,
                "scale_in": 20,
            },
        }],
        "min_cluster_node_count": 3,
        "max_cluster_node_count": 8,
        "cool_down_period": "1800s",
    })
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() =>
{
    var cluster_nw = new Gcp.VMwareEngine.Network("cluster-nw", new()
    {
        Name = "pc-nw",
        Type = "STANDARD",
        Location = "global",
        Description = "PC network description.",
    });

    var cluster_pc = new Gcp.VMwareEngine.PrivateCloud("cluster-pc", new()
    {
        Location = "us-west1-a",
        Name = "sample-pc",
        Description = "Sample test PC.",
        NetworkConfig = new Gcp.VMwareEngine.Inputs.PrivateCloudNetworkConfigArgs
        {
            ManagementCidr = "192.168.30.0/24",
            VmwareEngineNetwork = cluster_nw.Id,
        },
        ManagementCluster = new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterArgs
        {
            ClusterId = "sample-mgmt-cluster",
            NodeTypeConfigs = new[]
            {
                new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterNodeTypeConfigArgs
                {
                    NodeTypeId = "standard-72",
                    NodeCount = 3,
                    CustomCoreCount = 32,
                },
            },
        },
    });

    var vmw_ext_cluster = new Gcp.VMwareEngine.Cluster("vmw-ext-cluster", new()
    {
        Name = "ext-cluster",
        Parent = cluster_pc.Id,
        NodeTypeConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterNodeTypeConfigArgs
            {
                NodeTypeId = "standard-72",
                NodeCount = 3,
                CustomCoreCount = 32,
            },
        },
        AutoscalingSettings = new Gcp.VMwareEngine.Inputs.ClusterAutoscalingSettingsArgs
        {
            AutoscalingPolicies = new[]
            {
                new Gcp.VMwareEngine.Inputs.ClusterAutoscalingSettingsAutoscalingPolicyArgs
                {
                    AutoscalePolicyId = "autoscaling-policy",
                    NodeTypeId = "standard-72",
                    ScaleOutSize = 1,
                    CpuThresholds = new Gcp.VMwareEngine.Inputs.ClusterAutoscalingSettingsAutoscalingPolicyCpuThresholdsArgs
                    {
                        ScaleOut = 80,
                        ScaleIn = 15,
                    },
                    ConsumedMemoryThresholds = new Gcp.VMwareEngine.Inputs.ClusterAutoscalingSettingsAutoscalingPolicyConsumedMemoryThresholdsArgs
                    {
                        ScaleOut = 75,
                        ScaleIn = 20,
                    },
                    StorageThresholds = new Gcp.VMwareEngine.Inputs.ClusterAutoscalingSettingsAutoscalingPolicyStorageThresholdsArgs
                    {
                        ScaleOut = 80,
                        ScaleIn = 20,
                    },
                },
            },
            MinClusterNodeCount = 3,
            MaxClusterNodeCount = 8,
            CoolDownPeriod = "1800s",
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/vmwareengine"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		cluster_nw, err := vmwareengine.NewNetwork(ctx, "cluster-nw", &vmwareengine.NetworkArgs{
			Name:        pulumi.String("pc-nw"),
			Type:        pulumi.String("STANDARD"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("PC network description."),
		})
		if err != nil {
			return err
		}
		cluster_pc, err := vmwareengine.NewPrivateCloud(ctx, "cluster-pc", &vmwareengine.PrivateCloudArgs{
			Location:    pulumi.String("us-west1-a"),
			Name:        pulumi.String("sample-pc"),
			Description: pulumi.String("Sample test PC."),
			NetworkConfig: &vmwareengine.PrivateCloudNetworkConfigArgs{
				ManagementCidr:      pulumi.String("192.168.30.0/24"),
				VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			},
			ManagementCluster: &vmwareengine.PrivateCloudManagementClusterArgs{
				ClusterId: pulumi.String("sample-mgmt-cluster"),
				NodeTypeConfigs: vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArray{
					&vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArgs{
						NodeTypeId:      pulumi.String("standard-72"),
						NodeCount:       pulumi.Int(3),
						CustomCoreCount: pulumi.Int(32),
					},
				},
			},
		})
		if err != nil {
			return err
		}
		_, err = vmwareengine.NewCluster(ctx, "vmw-ext-cluster", &vmwareengine.ClusterArgs{
			Name:   pulumi.String("ext-cluster"),
			Parent: cluster_pc.ID().ToIDOutput().ToStringOutput(),
			NodeTypeConfigs: vmwareengine.ClusterNodeTypeConfigArray{
				&vmwareengine.ClusterNodeTypeConfigArgs{
					NodeTypeId:      pulumi.String("standard-72"),
					NodeCount:       pulumi.Int(3),
					CustomCoreCount: pulumi.Int(32),
				},
			},
			AutoscalingSettings: &vmwareengine.ClusterAutoscalingSettingsArgs{
				AutoscalingPolicies: vmwareengine.ClusterAutoscalingSettingsAutoscalingPolicyArray{
					&vmwareengine.ClusterAutoscalingSettingsAutoscalingPolicyArgs{
						AutoscalePolicyId: pulumi.String("autoscaling-policy"),
						NodeTypeId:        pulumi.String("standard-72"),
						ScaleOutSize:      pulumi.Int(1),
						CpuThresholds: &vmwareengine.ClusterAutoscalingSettingsAutoscalingPolicyCpuThresholdsArgs{
							ScaleOut: pulumi.Int(80),
							ScaleIn:  pulumi.Int(15),
						},
						ConsumedMemoryThresholds: &vmwareengine.ClusterAutoscalingSettingsAutoscalingPolicyConsumedMemoryThresholdsArgs{
							ScaleOut: pulumi.Int(75),
							ScaleIn:  pulumi.Int(20),
						},
						StorageThresholds: &vmwareengine.ClusterAutoscalingSettingsAutoscalingPolicyStorageThresholdsArgs{
							ScaleOut: pulumi.Int(80),
							ScaleIn:  pulumi.Int(20),
						},
					},
				},
				MinClusterNodeCount: pulumi.Int(3),
				MaxClusterNodeCount: pulumi.Int(8),
				CoolDownPeriod:      pulumi.String("1800s"),
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
  }
}

resource "gcp_vmwareengine_cluster" "vmw-ext-cluster" {
  name   = "ext-cluster"
  parent = gcp_vmwareengine_privatecloud.cluster-pc.id
  node_type_configs {
    node_type_id      = "standard-72"
    node_count        = 3
    custom_core_count = 32
  }
  autoscaling_settings = {
    autoscaling_policies = [{
      "autoscalePolicyId" = "autoscaling-policy"
      "nodeTypeId"        = "standard-72"
      "scaleOutSize"      = 1
      "cpuThresholds" = {
        "scaleOut" = 80
        "scaleIn"  = 15
      }
      "consumedMemoryThresholds" = {
        "scaleOut" = 75
        "scaleIn"  = 20
      }
      "storageThresholds" = {
        "scaleOut" = 80
        "scaleIn"  = 20
      }
    }]
    min_cluster_node_count = 3
    max_cluster_node_count = 8
    cool_down_period       = "1800s"
  }
}
resource "gcp_vmwareengine_privatecloud" "cluster-pc" {
  location    = "us-west1-a"
  name        = "sample-pc"
  description = "Sample test PC."
  network_config = {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  }
  management_cluster = {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs = [{
      "nodeTypeId"      = "standard-72"
      "nodeCount"       = 3
      "customCoreCount" = 32
    }]
  }
}
resource "gcp_vmwareengine_network" "cluster-nw" {
  name        = "pc-nw"
  type        = "STANDARD"
  location    = "global"
  description = "PC network description."
}
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.vmwareengine.Network;
import com.pulumi.gcp.vmwareengine.NetworkArgs;
import com.pulumi.gcp.vmwareengine.PrivateCloud;
import com.pulumi.gcp.vmwareengine.PrivateCloudArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudNetworkConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.Cluster;
import com.pulumi.gcp.vmwareengine.ClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterAutoscalingSettingsArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterAutoscalingSettingsAutoscalingPolicyArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterAutoscalingSettingsAutoscalingPolicyCpuThresholdsArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterAutoscalingSettingsAutoscalingPolicyConsumedMemoryThresholdsArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterAutoscalingSettingsAutoscalingPolicyStorageThresholdsArgs;
import java.util.ArrayList;
import java.util.Arrays;
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 cluster_nw = new Network("cluster-nw", NetworkArgs.builder()
            .name("pc-nw")
            .type("STANDARD")
            .location("global")
            .description("PC network description.")
            .build());

        var cluster_pc = new PrivateCloud("cluster-pc", PrivateCloudArgs.builder()
            .location("us-west1-a")
            .name("sample-pc")
            .description("Sample test PC.")
            .networkConfig(PrivateCloudNetworkConfigArgs.builder()
                .managementCidr("192.168.30.0/24")
                .vmwareEngineNetwork(cluster_nw.id())
                .build())
            .managementCluster(PrivateCloudManagementClusterArgs.builder()
                .clusterId("sample-mgmt-cluster")
                .nodeTypeConfigs(PrivateCloudManagementClusterNodeTypeConfigArgs.builder()
                    .nodeTypeId("standard-72")
                    .nodeCount(3)
                    .customCoreCount(32)
                    .build())
                .build())
            .build());

        var vmw_ext_cluster = new Cluster("vmw-ext-cluster", ClusterArgs.builder()
            .name("ext-cluster")
            .parent(cluster_pc.id())
            .nodeTypeConfigs(ClusterNodeTypeConfigArgs.builder()
                .nodeTypeId("standard-72")
                .nodeCount(3)
                .customCoreCount(32)
                .build())
            .autoscalingSettings(ClusterAutoscalingSettingsArgs.builder()
                .autoscalingPolicies(ClusterAutoscalingSettingsAutoscalingPolicyArgs.builder()
                    .autoscalePolicyId("autoscaling-policy")
                    .nodeTypeId("standard-72")
                    .scaleOutSize(1)
                    .cpuThresholds(ClusterAutoscalingSettingsAutoscalingPolicyCpuThresholdsArgs.builder()
                        .scaleOut(80)
                        .scaleIn(15)
                        .build())
                    .consumedMemoryThresholds(ClusterAutoscalingSettingsAutoscalingPolicyConsumedMemoryThresholdsArgs.builder()
                        .scaleOut(75)
                        .scaleIn(20)
                        .build())
                    .storageThresholds(ClusterAutoscalingSettingsAutoscalingPolicyStorageThresholdsArgs.builder()
                        .scaleOut(80)
                        .scaleIn(20)
                        .build())
                    .build())
                .minClusterNodeCount(3)
                .maxClusterNodeCount(8)
                .coolDownPeriod("1800s")
                .build())
            .build());

    }
}
resources:
  vmw-ext-cluster:
    type: gcp:vmwareengine:Cluster
    properties:
      name: ext-cluster
      parent: ${["cluster-pc"].id}
      nodeTypeConfigs:
        - nodeTypeId: standard-72
          nodeCount: 3
          customCoreCount: 32
      autoscalingSettings:
        autoscalingPolicies:
          - autoscalePolicyId: autoscaling-policy
            nodeTypeId: standard-72
            scaleOutSize: 1
            cpuThresholds:
              scaleOut: 80
              scaleIn: 15
            consumedMemoryThresholds:
              scaleOut: 75
              scaleIn: 20
            storageThresholds:
              scaleOut: 80
              scaleIn: 20
        minClusterNodeCount: 3
        maxClusterNodeCount: 8
        coolDownPeriod: 1800s
  cluster-pc:
    type: gcp:vmwareengine:PrivateCloud
    properties:
      location: us-west1-a
      name: sample-pc
      description: Sample test PC.
      networkConfig:
        managementCidr: 192.168.30.0/24
        vmwareEngineNetwork: ${["cluster-nw"].id}
      managementCluster:
        clusterId: sample-mgmt-cluster
        nodeTypeConfigs:
          - nodeTypeId: standard-72
            nodeCount: 3
            customCoreCount: 32
  cluster-nw:
    type: gcp:vmwareengine:Network
    properties:
      name: pc-nw
      type: STANDARD
      location: global
      description: PC network description.

Vmware Engine Cluster Nfs Datastore Filestore

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";

// Use this network for filestore instance
const fsNetwork = gcp.compute.getNetwork({
    name: "filestore_nw",
});
// Create a filestore instance with delete protection enabled
//### Use ip range of private cloud service subnet in the 'nfs_export_options'
const testInstance = new gcp.filestore.Instance("test_instance", {
    name: "test-fs-filestore",
    location: "",
    tier: "ZONAL",
    deletionProtectionEnabled: "yes" === "true",
    fileShares: {
        capacityGb: 1024,
        name: "share101",
        nfsExportOptions: [{
            ipRanges: ["10.0.0.0/24"],
        }],
    },
    networks: [{
        network: fsNetwork.then(fsNetwork => fsNetwork.id),
        modes: ["MODE_IPV4"],
        connectMode: "PRIVATE_SERVICE_ACCESS",
    }],
});
const cluster_nw = new gcp.vmwareengine.Network("cluster-nw", {
    name: "pc-nw",
    type: "STANDARD",
    location: "global",
    description: "PC network description.",
});
const cluster_pc = new gcp.vmwareengine.PrivateCloud("cluster-pc", {
    location: "",
    name: "sample-pc",
    description: "Sample test PC.",
    networkConfig: {
        managementCidr: "192.168.30.0/24",
        vmwareEngineNetwork: cluster_nw.id,
    },
    managementCluster: {
        clusterId: "sample-mgmt-cluster",
        nodeTypeConfigs: [{
            nodeTypeId: "standard-72",
            nodeCount: 3,
            customCoreCount: 32,
        }],
    },
});
// Update service subnet
//###  Service subnet is used by nfs datastore mounts
//### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
const cluster_pc_subnet = new gcp.vmwareengine.Subnet("cluster-pc-subnet", {
    name: "service-1",
    parent: cluster_pc.id,
    ipCidrRange: "10.0.0.0/24",
});
// Read network peering
//### This peering is created by filestore instance
const snPeering = fsNetwork.then(fsNetwork => gcp.compute.getNetworkPeering({
    name: "servicenetworking-googleapis-com",
    network: fsNetwork.id,
}));
// Create vmware engine network peering
//## vmware network peering is required for filestore mount on cluster
const psaNetworkPeering = new gcp.vmwareengine.NetworkPeering("psa_network_peering", {
    name: "tf-test-psa-network-peering",
    description: "test description",
    vmwareEngineNetwork: cluster_nw.id,
    peerNetwork: snPeering.then(snPeering => std.trimprefix({
        input: snPeering.peerNetwork,
        prefix: "https://www.googleapis.com/compute/v1",
    })).then(invoke => invoke.result),
    peerNetworkType: "PRIVATE_SERVICES_ACCESS",
});
const testFsDatastore = new gcp.vmwareengine.Datastore("test_fs_datastore", {
    name: "ext-fs-datastore",
    location: "",
    description: "test description",
    nfsDatastore: {
        googleFileService: {
            filestoreInstance: testInstance.id,
        },
    },
});
// Mount NFS datastore on vSphere cluster
// This code block is required to mount the datastore on ESXi hosts
const vmw_ext_cluster = new gcp.vmwareengine.Cluster("vmw-ext-cluster", {
    name: "ext-cluster",
    parent: cluster_pc.id,
    nodeTypeConfigs: [{
        nodeTypeId: "standard-72",
        nodeCount: 3,
    }],
    datastoreMountConfigs: [{
        datastore: testFsDatastore.id,
        datastoreNetwork: {
            subnet: cluster_pc_subnet.id,
            connectionCount: 4,
            mtu: 1500,
        },
        nfsVersion: "NFS_V3",
        accessMode: "READ_WRITE",
        ignoreColocation: false,
    }],
}, {
    dependsOn: [psaNetworkPeering],
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std

# Use this network for filestore instance
fs_network = gcp.compute.get_network(name="filestore_nw")
# Create a filestore instance with delete protection enabled
#### Use ip range of private cloud service subnet in the 'nfs_export_options'
test_instance = gcp.filestore.Instance("test_instance",
    name="test-fs-filestore",
    location="",
    tier="ZONAL",
    deletion_protection_enabled="yes" == "true",
    file_shares={
        "capacity_gb": 1024,
        "name": "share101",
        "nfs_export_options": [{
            "ip_ranges": ["10.0.0.0/24"],
        }],
    },
    networks=[{
        "network": fs_network.id,
        "modes": ["MODE_IPV4"],
        "connect_mode": "PRIVATE_SERVICE_ACCESS",
    }])
cluster_nw = gcp.vmwareengine.Network("cluster-nw",
    name="pc-nw",
    type="STANDARD",
    location="global",
    description="PC network description.")
cluster_pc = gcp.vmwareengine.PrivateCloud("cluster-pc",
    location="",
    name="sample-pc",
    description="Sample test PC.",
    network_config={
        "management_cidr": "192.168.30.0/24",
        "vmware_engine_network": cluster_nw.id,
    },
    management_cluster={
        "cluster_id": "sample-mgmt-cluster",
        "node_type_configs": [{
            "node_type_id": "standard-72",
            "node_count": 3,
            "custom_core_count": 32,
        }],
    })
# Update service subnet
####  Service subnet is used by nfs datastore mounts
#### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
cluster_pc_subnet = gcp.vmwareengine.Subnet("cluster-pc-subnet",
    name="service-1",
    parent=cluster_pc.id,
    ip_cidr_range="10.0.0.0/24")
# Read network peering
#### This peering is created by filestore instance
sn_peering = gcp.compute.get_network_peering(name="servicenetworking-googleapis-com",
    network=fs_network.id)
# Create vmware engine network peering
### vmware network peering is required for filestore mount on cluster
psa_network_peering = gcp.vmwareengine.NetworkPeering("psa_network_peering",
    name="tf-test-psa-network-peering",
    description="test description",
    vmware_engine_network=cluster_nw.id,
    peer_network=std.trimprefix(input=sn_peering.peer_network,
        prefix="https://www.googleapis.com/compute/v1").result,
    peer_network_type="PRIVATE_SERVICES_ACCESS")
test_fs_datastore = gcp.vmwareengine.Datastore("test_fs_datastore",
    name="ext-fs-datastore",
    location="",
    description="test description",
    nfs_datastore={
        "google_file_service": {
            "filestore_instance": test_instance.id,
        },
    })
# Mount NFS datastore on vSphere cluster
# This code block is required to mount the datastore on ESXi hosts
vmw_ext_cluster = gcp.vmwareengine.Cluster("vmw-ext-cluster",
    name="ext-cluster",
    parent=cluster_pc.id,
    node_type_configs=[{
        "node_type_id": "standard-72",
        "node_count": 3,
    }],
    datastore_mount_configs=[{
        "datastore": test_fs_datastore.id,
        "datastore_network": {
            "subnet": cluster_pc_subnet.id,
            "connection_count": 4,
            "mtu": 1500,
        },
        "nfs_version": "NFS_V3",
        "access_mode": "READ_WRITE",
        "ignore_colocation": False,
    }],
    opts = pulumi.ResourceOptions(depends_on=[psa_network_peering]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;

return await Deployment.RunAsync(() =>
{
    // Use this network for filestore instance
    var fsNetwork = Gcp.Compute.GetNetwork.Invoke(new()
    {
        Name = "filestore_nw",
    });

    // Create a filestore instance with delete protection enabled
    //### Use ip range of private cloud service subnet in the 'nfs_export_options'
    var testInstance = new Gcp.Filestore.Instance("test_instance", new()
    {
        Name = "test-fs-filestore",
        Location = "",
        Tier = "ZONAL",
        DeletionProtectionEnabled = "yes" == "true",
        FileShares = new Gcp.Filestore.Inputs.InstanceFileSharesArgs
        {
            CapacityGb = 1024,
            Name = "share101",
            NfsExportOptions = new[]
            {
                new Gcp.Filestore.Inputs.InstanceFileSharesNfsExportOptionArgs
                {
                    IpRanges = new[]
                    {
                        "10.0.0.0/24",
                    },
                },
            },
        },
        Networks = new[]
        {
            new Gcp.Filestore.Inputs.InstanceNetworkArgs
            {
                Network = fsNetwork.Apply(getNetworkResult => getNetworkResult.Id),
                Modes = new[]
                {
                    "MODE_IPV4",
                },
                ConnectMode = "PRIVATE_SERVICE_ACCESS",
            },
        },
    });

    var cluster_nw = new Gcp.VMwareEngine.Network("cluster-nw", new()
    {
        Name = "pc-nw",
        Type = "STANDARD",
        Location = "global",
        Description = "PC network description.",
    });

    var cluster_pc = new Gcp.VMwareEngine.PrivateCloud("cluster-pc", new()
    {
        Location = "",
        Name = "sample-pc",
        Description = "Sample test PC.",
        NetworkConfig = new Gcp.VMwareEngine.Inputs.PrivateCloudNetworkConfigArgs
        {
            ManagementCidr = "192.168.30.0/24",
            VmwareEngineNetwork = cluster_nw.Id,
        },
        ManagementCluster = new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterArgs
        {
            ClusterId = "sample-mgmt-cluster",
            NodeTypeConfigs = new[]
            {
                new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterNodeTypeConfigArgs
                {
                    NodeTypeId = "standard-72",
                    NodeCount = 3,
                    CustomCoreCount = 32,
                },
            },
        },
    });

    // Update service subnet
    //###  Service subnet is used by nfs datastore mounts
    //### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
    var cluster_pc_subnet = new Gcp.VMwareEngine.Subnet("cluster-pc-subnet", new()
    {
        Name = "service-1",
        Parent = cluster_pc.Id,
        IpCidrRange = "10.0.0.0/24",
    });

    // Read network peering
    //### This peering is created by filestore instance
    var snPeering = Gcp.Compute.GetNetworkPeering.Invoke(new()
    {
        Name = "servicenetworking-googleapis-com",
        Network = fsNetwork.Apply(getNetworkResult => getNetworkResult.Id),
    });

    // Create vmware engine network peering
    //## vmware network peering is required for filestore mount on cluster
    var psaNetworkPeering = new Gcp.VMwareEngine.NetworkPeering("psa_network_peering", new()
    {
        Name = "tf-test-psa-network-peering",
        Description = "test description",
        VmwareEngineNetwork = cluster_nw.Id,
        PeerNetwork = Std.Trimprefix.Invoke(new()
        {
            Input = snPeering.Apply(getNetworkPeeringResult => getNetworkPeeringResult.PeerNetwork),
            Prefix = "https://www.googleapis.com/compute/v1",
        }).Apply(invoke => invoke.Result),
        PeerNetworkType = "PRIVATE_SERVICES_ACCESS",
    });

    var testFsDatastore = new Gcp.VMwareEngine.Datastore("test_fs_datastore", new()
    {
        Name = "ext-fs-datastore",
        Location = "",
        Description = "test description",
        NfsDatastore = new Gcp.VMwareEngine.Inputs.DatastoreNfsDatastoreArgs
        {
            GoogleFileService = new Gcp.VMwareEngine.Inputs.DatastoreNfsDatastoreGoogleFileServiceArgs
            {
                FilestoreInstance = testInstance.Id,
            },
        },
    });

    // Mount NFS datastore on vSphere cluster
    // This code block is required to mount the datastore on ESXi hosts
    var vmw_ext_cluster = new Gcp.VMwareEngine.Cluster("vmw-ext-cluster", new()
    {
        Name = "ext-cluster",
        Parent = cluster_pc.Id,
        NodeTypeConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterNodeTypeConfigArgs
            {
                NodeTypeId = "standard-72",
                NodeCount = 3,
            },
        },
        DatastoreMountConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterDatastoreMountConfigArgs
            {
                Datastore = testFsDatastore.Id,
                DatastoreNetwork = new Gcp.VMwareEngine.Inputs.ClusterDatastoreMountConfigDatastoreNetworkArgs
                {
                    Subnet = cluster_pc_subnet.Id,
                    ConnectionCount = 4,
                    Mtu = 1500,
                },
                NfsVersion = "NFS_V3",
                AccessMode = "READ_WRITE",
                IgnoreColocation = false,
            },
        },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            psaNetworkPeering,
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/filestore"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/vmwareengine"
	"github.com/pulumi/pulumi-std/sdk/go/std"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		// Use this network for filestore instance
		fsNetwork, err := compute.LookupNetwork(ctx, &compute.LookupNetworkArgs{
			Name: pulumi.StringRef("filestore_nw"),
		}, nil)
		if err != nil {
			return err
		}
		// Create a filestore instance with delete protection enabled
		// ### Use ip range of private cloud service subnet in the 'nfs_export_options'
		testInstance, err := filestore.NewInstance(ctx, "test_instance", &filestore.InstanceArgs{
			Name:                      pulumi.String("test-fs-filestore"),
			Location:                  pulumi.String(""),
			Tier:                      pulumi.String("ZONAL"),
			DeletionProtectionEnabled: pulumi.Bool("yes"),
			FileShares: &filestore.InstanceFileSharesArgs{
				CapacityGb: pulumi.Int(1024),
				Name:       pulumi.String("share101"),
				NfsExportOptions: filestore.InstanceFileSharesNfsExportOptionArray{
					&filestore.InstanceFileSharesNfsExportOptionArgs{
						IpRanges: pulumi.StringArray{
							pulumi.String("10.0.0.0/24"),
						},
					},
				},
			},
			Networks: filestore.InstanceNetworkArray{
				&filestore.InstanceNetworkArgs{
					Network: pulumi.String(fsNetwork.Id),
					Modes: pulumi.StringArray{
						pulumi.String("MODE_IPV4"),
					},
					ConnectMode: pulumi.String("PRIVATE_SERVICE_ACCESS"),
				},
			},
		})
		if err != nil {
			return err
		}
		cluster_nw, err := vmwareengine.NewNetwork(ctx, "cluster-nw", &vmwareengine.NetworkArgs{
			Name:        pulumi.String("pc-nw"),
			Type:        pulumi.String("STANDARD"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("PC network description."),
		})
		if err != nil {
			return err
		}
		cluster_pc, err := vmwareengine.NewPrivateCloud(ctx, "cluster-pc", &vmwareengine.PrivateCloudArgs{
			Location:    pulumi.String(""),
			Name:        pulumi.String("sample-pc"),
			Description: pulumi.String("Sample test PC."),
			NetworkConfig: &vmwareengine.PrivateCloudNetworkConfigArgs{
				ManagementCidr:      pulumi.String("192.168.30.0/24"),
				VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			},
			ManagementCluster: &vmwareengine.PrivateCloudManagementClusterArgs{
				ClusterId: pulumi.String("sample-mgmt-cluster"),
				NodeTypeConfigs: vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArray{
					&vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArgs{
						NodeTypeId:      pulumi.String("standard-72"),
						NodeCount:       pulumi.Int(3),
						CustomCoreCount: pulumi.Int(32),
					},
				},
			},
		})
		if err != nil {
			return err
		}
		// Update service subnet
		// ###  Service subnet is used by nfs datastore mounts
		// ### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
		cluster_pc_subnet, err := vmwareengine.NewSubnet(ctx, "cluster-pc-subnet", &vmwareengine.SubnetArgs{
			Name:        pulumi.String("service-1"),
			Parent:      cluster_pc.ID().ToIDOutput().ToStringOutput(),
			IpCidrRange: pulumi.String("10.0.0.0/24"),
		})
		if err != nil {
			return err
		}
		// Read network peering
		// ### This peering is created by filestore instance
		snPeering, err := compute.LookupNetworkPeering(ctx, &compute.LookupNetworkPeeringArgs{
			Name:    "servicenetworking-googleapis-com",
			Network: fsNetwork.Id,
		}, nil)
		if err != nil {
			return err
		}
		invokeTrimprefix, err := std.Trimprefix(ctx, &std.TrimprefixArgs{
			Input:  snPeering.PeerNetwork,
			Prefix: "https://www.googleapis.com/compute/v1",
		}, nil)
		if err != nil {
			return err
		}
		// Create vmware engine network peering
		// ## vmware network peering is required for filestore mount on cluster
		psaNetworkPeering, err := vmwareengine.NewNetworkPeering(ctx, "psa_network_peering", &vmwareengine.NetworkPeeringArgs{
			Name:                pulumi.String("tf-test-psa-network-peering"),
			Description:         pulumi.String("test description"),
			VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			PeerNetwork:         pulumi.String(invokeTrimprefix.Result),
			PeerNetworkType:     pulumi.String("PRIVATE_SERVICES_ACCESS"),
		})
		if err != nil {
			return err
		}
		testFsDatastore, err := vmwareengine.NewDatastore(ctx, "test_fs_datastore", &vmwareengine.DatastoreArgs{
			Name:        pulumi.String("ext-fs-datastore"),
			Location:    pulumi.String(""),
			Description: pulumi.String("test description"),
			NfsDatastore: &vmwareengine.DatastoreNfsDatastoreArgs{
				GoogleFileService: &vmwareengine.DatastoreNfsDatastoreGoogleFileServiceArgs{
					FilestoreInstance: testInstance.ID().ToIDOutput().ToStringOutput(),
				},
			},
		})
		if err != nil {
			return err
		}
		// Mount NFS datastore on vSphere cluster
		// This code block is required to mount the datastore on ESXi hosts
		_, err = vmwareengine.NewCluster(ctx, "vmw-ext-cluster", &vmwareengine.ClusterArgs{
			Name:   pulumi.String("ext-cluster"),
			Parent: cluster_pc.ID().ToIDOutput().ToStringOutput(),
			NodeTypeConfigs: vmwareengine.ClusterNodeTypeConfigArray{
				&vmwareengine.ClusterNodeTypeConfigArgs{
					NodeTypeId: pulumi.String("standard-72"),
					NodeCount:  pulumi.Int(3),
				},
			},
			DatastoreMountConfigs: vmwareengine.ClusterDatastoreMountConfigArray{
				&vmwareengine.ClusterDatastoreMountConfigArgs{
					Datastore: testFsDatastore.ID().ToIDOutput().ToStringOutput(),
					DatastoreNetwork: &vmwareengine.ClusterDatastoreMountConfigDatastoreNetworkArgs{
						Subnet:          cluster_pc_subnet.ID().ToIDOutput().ToStringOutput(),
						ConnectionCount: pulumi.Int(4),
						Mtu:             pulumi.Int(1500),
					},
					NfsVersion:       pulumi.String("NFS_V3"),
					AccessMode:       pulumi.String("READ_WRITE"),
					IgnoreColocation: pulumi.Bool(false),
				},
			},
		}, pulumi.DependsOn([]pulumi.Resource{
			psaNetworkPeering,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
    std = {
      source = "pulumi/std"
    }
  }
}

data "gcp_compute_getnetwork" "fsNetwork" {
  name = "filestore_nw"
}
data "gcp_compute_getnetworkpeering" "snPeering" {
  name    = "servicenetworking-googleapis-com"
  network = data.gcp_compute_getnetwork.fsNetwork.id
}

# Create a filestore instance with delete protection enabled
#### Use ip range of private cloud service subnet in the 'nfs_export_options'
resource "gcp_filestore_instance" "test_instance" {
  name                        = "test-fs-filestore"
  location                    = ""
  tier                        = "ZONAL"
  deletion_protection_enabled = "yes"
  file_shares = {
    capacity_gb = 1024
    name        = "share101"
    nfs_export_options = [{
      "ipRanges" = ["10.0.0.0/24"]
    }]
  }
  networks {
    network      = data.gcp_compute_getnetwork.fsNetwork.id
    modes        = ["MODE_IPV4"]
    connect_mode = "PRIVATE_SERVICE_ACCESS"
  }
}
resource "gcp_vmwareengine_network" "cluster-nw" {
  name        = "pc-nw"
  type        = "STANDARD"
  location    = "global"
  description = "PC network description."
}
resource "gcp_vmwareengine_privatecloud" "cluster-pc" {
  location    = ""
  name        = "sample-pc"
  description = "Sample test PC."
  network_config = {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  }
  management_cluster = {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs = [{
      "nodeTypeId"      = "standard-72"
      "nodeCount"       = 3
      "customCoreCount" = 32
    }]
  }
}
# Update service subnet
####  Service subnet is used by nfs datastore mounts
#### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
resource "gcp_vmwareengine_subnet" "cluster-pc-subnet" {
  name          = "service-1"
  parent        = gcp_vmwareengine_privatecloud.cluster-pc.id
  ip_cidr_range = "10.0.0.0/24"
}
# Create vmware engine network peering
### vmware network peering is required for filestore mount on cluster
resource "gcp_vmwareengine_networkpeering" "psa_network_peering" {
  name                  = "tf-test-psa-network-peering"
  description           = "test description"
  vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  peer_network          = trimprefix(data.gcp_compute_getnetworkpeering.snPeering.peer_network, "https://www.googleapis.com/compute/v1")
  peer_network_type     = "PRIVATE_SERVICES_ACCESS"
}
resource "gcp_vmwareengine_datastore" "test_fs_datastore" {
  name        = "ext-fs-datastore"
  location    = ""
  description = "test description"
  nfs_datastore = {
    google_file_service = {
      filestore_instance = gcp_filestore_instance.test_instance.id
    }
  }
}
# Mount NFS datastore on vSphere cluster
# This code block is required to mount the datastore on ESXi hosts
resource "gcp_vmwareengine_cluster" "vmw-ext-cluster" {
  depends_on = [gcp_vmwareengine_networkpeering.psa_network_peering]
  name       = "ext-cluster"
  parent     = gcp_vmwareengine_privatecloud.cluster-pc.id
  node_type_configs {
    node_type_id = "standard-72"
    node_count   = 3
  }
  datastore_mount_configs {
    datastore = gcp_vmwareengine_datastore.test_fs_datastore.id
    datastore_network = {
      subnet           = gcp_vmwareengine_subnet.cluster-pc-subnet.id
      connection_count = 4
      mtu              = 1500
    }
    nfs_version       = "NFS_V3"
    access_mode       = "READ_WRITE"
    ignore_colocation = false
  }
}
# Use this network for filestore instance
# Read network peering
#### This peering is created by filestore instance
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.ComputeFunctions;
import com.pulumi.gcp.compute.inputs.GetNetworkArgs;
import com.pulumi.gcp.filestore.Instance;
import com.pulumi.gcp.filestore.InstanceArgs;
import com.pulumi.gcp.filestore.inputs.InstanceFileSharesArgs;
import com.pulumi.gcp.filestore.inputs.InstanceFileSharesNfsExportOptionArgs;
import com.pulumi.gcp.filestore.inputs.InstanceNetworkArgs;
import com.pulumi.gcp.vmwareengine.Network;
import com.pulumi.gcp.vmwareengine.NetworkArgs;
import com.pulumi.gcp.vmwareengine.PrivateCloud;
import com.pulumi.gcp.vmwareengine.PrivateCloudArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudNetworkConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.Subnet;
import com.pulumi.gcp.vmwareengine.SubnetArgs;
import com.pulumi.gcp.compute.inputs.GetNetworkPeeringArgs;
import com.pulumi.gcp.vmwareengine.NetworkPeering;
import com.pulumi.gcp.vmwareengine.NetworkPeeringArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.TrimprefixArgs;
import com.pulumi.gcp.vmwareengine.Datastore;
import com.pulumi.gcp.vmwareengine.DatastoreArgs;
import com.pulumi.gcp.vmwareengine.inputs.DatastoreNfsDatastoreArgs;
import com.pulumi.gcp.vmwareengine.inputs.DatastoreNfsDatastoreGoogleFileServiceArgs;
import com.pulumi.gcp.vmwareengine.Cluster;
import com.pulumi.gcp.vmwareengine.ClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterDatastoreMountConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterDatastoreMountConfigDatastoreNetworkArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
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) {
        // Use this network for filestore instance
        final var fsNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()
            .name("filestore_nw")
            .build());

        // Create a filestore instance with delete protection enabled
        //### Use ip range of private cloud service subnet in the 'nfs_export_options'
        var testInstance = new Instance("testInstance", InstanceArgs.builder()
            .name("test-fs-filestore")
            .location("")
            .tier("ZONAL")
            .deletionProtectionEnabled("yes")
            .fileShares(InstanceFileSharesArgs.builder()
                .capacityGb(1024)
                .name("share101")
                .nfsExportOptions(InstanceFileSharesNfsExportOptionArgs.builder()
                    .ipRanges("10.0.0.0/24")
                    .build())
                .build())
            .networks(InstanceNetworkArgs.builder()
                .network(fsNetwork.id())
                .modes("MODE_IPV4")
                .connectMode("PRIVATE_SERVICE_ACCESS")
                .build())
            .build());

        var cluster_nw = new Network("cluster-nw", NetworkArgs.builder()
            .name("pc-nw")
            .type("STANDARD")
            .location("global")
            .description("PC network description.")
            .build());

        var cluster_pc = new PrivateCloud("cluster-pc", PrivateCloudArgs.builder()
            .location("")
            .name("sample-pc")
            .description("Sample test PC.")
            .networkConfig(PrivateCloudNetworkConfigArgs.builder()
                .managementCidr("192.168.30.0/24")
                .vmwareEngineNetwork(cluster_nw.id())
                .build())
            .managementCluster(PrivateCloudManagementClusterArgs.builder()
                .clusterId("sample-mgmt-cluster")
                .nodeTypeConfigs(PrivateCloudManagementClusterNodeTypeConfigArgs.builder()
                    .nodeTypeId("standard-72")
                    .nodeCount(3)
                    .customCoreCount(32)
                    .build())
                .build())
            .build());

        // Update service subnet
        //###  Service subnet is used by nfs datastore mounts
        //### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
        var cluster_pc_subnet = new Subnet("cluster-pc-subnet", SubnetArgs.builder()
            .name("service-1")
            .parent(cluster_pc.id())
            .ipCidrRange("10.0.0.0/24")
            .build());

        // Read network peering
        //### This peering is created by filestore instance
        final var snPeering = ComputeFunctions.getNetworkPeering(GetNetworkPeeringArgs.builder()
            .name("servicenetworking-googleapis-com")
            .network(fsNetwork.id())
            .build());

        // Create vmware engine network peering
        //## vmware network peering is required for filestore mount on cluster
        var psaNetworkPeering = new NetworkPeering("psaNetworkPeering", NetworkPeeringArgs.builder()
            .name("tf-test-psa-network-peering")
            .description("test description")
            .vmwareEngineNetwork(cluster_nw.id())
            .peerNetwork(StdFunctions.trimprefix(TrimprefixArgs.builder()
                .input(snPeering.peerNetwork())
                .prefix("https://www.googleapis.com/compute/v1")
                .build()).result())
            .peerNetworkType("PRIVATE_SERVICES_ACCESS")
            .build());

        var testFsDatastore = new Datastore("testFsDatastore", DatastoreArgs.builder()
            .name("ext-fs-datastore")
            .location("")
            .description("test description")
            .nfsDatastore(DatastoreNfsDatastoreArgs.builder()
                .googleFileService(DatastoreNfsDatastoreGoogleFileServiceArgs.builder()
                    .filestoreInstance(testInstance.id())
                    .build())
                .build())
            .build());

        // Mount NFS datastore on vSphere cluster
        // This code block is required to mount the datastore on ESXi hosts
        var vmw_ext_cluster = new Cluster("vmw-ext-cluster", ClusterArgs.builder()
            .name("ext-cluster")
            .parent(cluster_pc.id())
            .nodeTypeConfigs(ClusterNodeTypeConfigArgs.builder()
                .nodeTypeId("standard-72")
                .nodeCount(3)
                .build())
            .datastoreMountConfigs(ClusterDatastoreMountConfigArgs.builder()
                .datastore(testFsDatastore.id())
                .datastoreNetwork(ClusterDatastoreMountConfigDatastoreNetworkArgs.builder()
                    .subnet(cluster_pc_subnet.id())
                    .connectionCount(4)
                    .mtu(1500)
                    .build())
                .nfsVersion("NFS_V3")
                .accessMode("READ_WRITE")
                .ignoreColocation(false)
                .build())
            .build(), CustomResourceOptions.builder()
                .dependsOn(psaNetworkPeering)
                .build());

    }
}
resources:
  # Create a filestore instance with delete protection enabled
  #### Use ip range of private cloud service subnet in the 'nfs_export_options'
  testInstance:
    type: gcp:filestore:Instance
    name: test_instance
    properties:
      name: test-fs-filestore
      location: ""
      tier: ZONAL
      deletionProtectionEnabled: yes
      fileShares:
        capacityGb: 1024
        name: share101
        nfsExportOptions:
          - ipRanges:
              - 10.0.0.0/24
      networks:
        - network: ${fsNetwork.id}
          modes:
            - MODE_IPV4
          connectMode: PRIVATE_SERVICE_ACCESS
  cluster-nw:
    type: gcp:vmwareengine:Network
    properties:
      name: pc-nw
      type: STANDARD
      location: global
      description: PC network description.
  cluster-pc:
    type: gcp:vmwareengine:PrivateCloud
    properties:
      location: ""
      name: sample-pc
      description: Sample test PC.
      networkConfig:
        managementCidr: 192.168.30.0/24
        vmwareEngineNetwork: ${["cluster-nw"].id}
      managementCluster:
        clusterId: sample-mgmt-cluster
        nodeTypeConfigs:
          - nodeTypeId: standard-72
            nodeCount: 3
            customCoreCount: 32
  # Update service subnet
  ####  Service subnet is used by nfs datastore mounts
  #### ip_cidr_range configured on subnet must also be allowed in filestore instance's 'nfs_export_options'
  cluster-pc-subnet:
    type: gcp:vmwareengine:Subnet
    properties:
      name: service-1
      parent: ${["cluster-pc"].id}
      ipCidrRange: 10.0.0.0/24
  # Create vmware engine network peering
  ### vmware network peering is required for filestore mount on cluster
  psaNetworkPeering:
    type: gcp:vmwareengine:NetworkPeering
    name: psa_network_peering
    properties:
      name: tf-test-psa-network-peering
      description: test description
      vmwareEngineNetwork: ${["cluster-nw"].id}
      peerNetwork:
        fn::invoke:
          function: std:trimprefix
          arguments:
            input: ${snPeering.peerNetwork}
            prefix: https://www.googleapis.com/compute/v1
          return: result
      peerNetworkType: PRIVATE_SERVICES_ACCESS
  testFsDatastore:
    type: gcp:vmwareengine:Datastore
    name: test_fs_datastore
    properties:
      name: ext-fs-datastore
      location: ""
      description: test description
      nfsDatastore:
        googleFileService:
          filestoreInstance: ${testInstance.id}
  # Mount NFS datastore on vSphere cluster
  # This code block is required to mount the datastore on ESXi hosts
  vmw-ext-cluster:
    type: gcp:vmwareengine:Cluster
    properties:
      name: ext-cluster
      parent: ${["cluster-pc"].id}
      nodeTypeConfigs:
        - nodeTypeId: standard-72
          nodeCount: 3
      datastoreMountConfigs:
        - datastore: ${testFsDatastore.id}
          datastoreNetwork:
            subnet: ${["cluster-pc-subnet"].id}
            connectionCount: 4
            mtu: 1500
          nfsVersion: NFS_V3
          accessMode: READ_WRITE
          ignoreColocation: false
    options:
      dependsOn:
        - ${psaNetworkPeering}
variables:
  # Use this network for filestore instance
  fsNetwork:
    fn::invoke:
      function: gcp:compute:getNetwork
      arguments:
        name: filestore_nw
  # Read network peering
  #### This peering is created by filestore instance
  snPeering:
    fn::invoke:
      function: gcp:compute:getNetworkPeering
      arguments:
        name: servicenetworking-googleapis-com
        network: ${fsNetwork.id}

Vmware Engine Cluster Nfs Datastore Netapp

import * as pulumi from "@pulumi/pulumi";
import * as gcp from "@pulumi/gcp";
import * as std from "@pulumi/std";

// Use this network for netapp volume
const npNetwork = gcp.compute.getNetwork({
    name: "netapp_nw",
});
const cluster_nw = new gcp.vmwareengine.Network("cluster-nw", {
    name: "pc-nw",
    type: "STANDARD",
    location: "global",
    description: "PC network description.",
});
// Read network peering
//### This peering is created by netapp volume
const snPeering = npNetwork.then(npNetwork => gcp.compute.getNetworkPeering({
    name: "sn-netapp-prod",
    network: npNetwork.id,
}));
// Create vmware engine network peering
//### vmware network peering is required for netapp mount on cluster
const gcnvNetworkPeering = new gcp.vmwareengine.NetworkPeering("gcnv_network_peering", {
    name: "tf-test-gcnv-network-peering",
    description: "test description",
    vmwareEngineNetwork: cluster_nw.id,
    peerNetwork: snPeering.then(snPeering => std.trimprefix({
        input: snPeering.peerNetwork,
        prefix: "https://www.googleapis.com/compute/v1",
    })).then(invoke => invoke.result),
    peerNetworkType: "GOOGLE_CLOUD_NETAPP_VOLUMES",
});
const cluster_pc = new gcp.vmwareengine.PrivateCloud("cluster-pc", {
    location: "",
    name: "sample-pc",
    description: "Sample test PC.",
    networkConfig: {
        managementCidr: "192.168.30.0/24",
        vmwareEngineNetwork: cluster_nw.id,
    },
    managementCluster: {
        clusterId: "sample-mgmt-cluster",
        nodeTypeConfigs: [{
            nodeTypeId: "standard-72",
            nodeCount: 3,
            customCoreCount: 32,
        }],
    },
});
// Update service subnet
//###  Service subnet is used by nfs datastore mounts
//### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
const cluster_pc_subnet = new gcp.vmwareengine.Subnet("cluster-pc-subnet", {
    name: "service-1",
    parent: cluster_pc.id,
    ipCidrRange: "10.0.0.0/24",
});
const _default = new gcp.netapp.StoragePool("default", {
    name: "tf-test-test-pool",
    location: "us-west1",
    serviceLevel: "PREMIUM",
    capacityGib: "2048",
    network: npNetwork.then(npNetwork => npNetwork.id),
});
// Create a netapp volume with delete protection enabled
//## Use ip range of private cloud service subnet in the 'export_policy'
const testVolume = new gcp.netapp.Volume("test_volume", {
    location: "us-west1",
    name: "tf-test-test-volume",
    capacityGib: "100",
    shareName: "tf-test-test-volume",
    storagePool: _default.name,
    protocols: ["NFSV3"],
    exportPolicy: {
        rules: [{
            accessType: "READ_WRITE",
            allowedClients: "10.0.0.0/24",
            hasRootAccess: "true",
            kerberos5ReadOnly: false,
            kerberos5ReadWrite: false,
            kerberos5iReadOnly: false,
            kerberos5iReadWrite: false,
            kerberos5pReadOnly: false,
            kerberos5pReadWrite: false,
            nfsv3: true,
            nfsv4: false,
        }],
    },
    restrictedActions: ["DELETE"],
});
const testFsDatastore = new gcp.vmwareengine.Datastore("test_fs_datastore", {
    name: "ext-fs-datastore",
    location: "us-west1",
    description: "example google_file_service.netapp datastore.",
    nfsDatastore: {
        googleFileService: {
            netappVolume: testVolume.id,
        },
    },
});
// Mount NFS datastore on vSphere cluster
// This code block is required to mount the datastore on ESXi hosts
const vmw_ext_cluster = new gcp.vmwareengine.Cluster("vmw-ext-cluster", {
    name: "ext-cluster",
    parent: cluster_pc.id,
    nodeTypeConfigs: [{
        nodeTypeId: "standard-72",
        nodeCount: 3,
    }],
    datastoreMountConfigs: [{
        datastore: testFsDatastore.id,
        datastoreNetwork: {
            subnet: cluster_pc_subnet.id,
            connectionCount: 4,
            mtu: 1500,
        },
        nfsVersion: "NFS_V3",
        accessMode: "READ_WRITE",
        ignoreColocation: true,
    }],
}, {
    dependsOn: [gcnvNetworkPeering],
});
import pulumi
import pulumi_gcp as gcp
import pulumi_std as std

# Use this network for netapp volume
np_network = gcp.compute.get_network(name="netapp_nw")
cluster_nw = gcp.vmwareengine.Network("cluster-nw",
    name="pc-nw",
    type="STANDARD",
    location="global",
    description="PC network description.")
# Read network peering
#### This peering is created by netapp volume
sn_peering = gcp.compute.get_network_peering(name="sn-netapp-prod",
    network=np_network.id)
# Create vmware engine network peering
#### vmware network peering is required for netapp mount on cluster
gcnv_network_peering = gcp.vmwareengine.NetworkPeering("gcnv_network_peering",
    name="tf-test-gcnv-network-peering",
    description="test description",
    vmware_engine_network=cluster_nw.id,
    peer_network=std.trimprefix(input=sn_peering.peer_network,
        prefix="https://www.googleapis.com/compute/v1").result,
    peer_network_type="GOOGLE_CLOUD_NETAPP_VOLUMES")
cluster_pc = gcp.vmwareengine.PrivateCloud("cluster-pc",
    location="",
    name="sample-pc",
    description="Sample test PC.",
    network_config={
        "management_cidr": "192.168.30.0/24",
        "vmware_engine_network": cluster_nw.id,
    },
    management_cluster={
        "cluster_id": "sample-mgmt-cluster",
        "node_type_configs": [{
            "node_type_id": "standard-72",
            "node_count": 3,
            "custom_core_count": 32,
        }],
    })
# Update service subnet
####  Service subnet is used by nfs datastore mounts
#### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
cluster_pc_subnet = gcp.vmwareengine.Subnet("cluster-pc-subnet",
    name="service-1",
    parent=cluster_pc.id,
    ip_cidr_range="10.0.0.0/24")
default = gcp.netapp.StoragePool("default",
    name="tf-test-test-pool",
    location="us-west1",
    service_level="PREMIUM",
    capacity_gib="2048",
    network=np_network.id)
# Create a netapp volume with delete protection enabled
### Use ip range of private cloud service subnet in the 'export_policy'
test_volume = gcp.netapp.Volume("test_volume",
    location="us-west1",
    name="tf-test-test-volume",
    capacity_gib="100",
    share_name="tf-test-test-volume",
    storage_pool=default.name,
    protocols=["NFSV3"],
    export_policy={
        "rules": [{
            "access_type": "READ_WRITE",
            "allowed_clients": "10.0.0.0/24",
            "has_root_access": "true",
            "kerberos5_read_only": False,
            "kerberos5_read_write": False,
            "kerberos5i_read_only": False,
            "kerberos5i_read_write": False,
            "kerberos5p_read_only": False,
            "kerberos5p_read_write": False,
            "nfsv3": True,
            "nfsv4": False,
        }],
    },
    restricted_actions=["DELETE"])
test_fs_datastore = gcp.vmwareengine.Datastore("test_fs_datastore",
    name="ext-fs-datastore",
    location="us-west1",
    description="example google_file_service.netapp datastore.",
    nfs_datastore={
        "google_file_service": {
            "netapp_volume": test_volume.id,
        },
    })
# Mount NFS datastore on vSphere cluster
# This code block is required to mount the datastore on ESXi hosts
vmw_ext_cluster = gcp.vmwareengine.Cluster("vmw-ext-cluster",
    name="ext-cluster",
    parent=cluster_pc.id,
    node_type_configs=[{
        "node_type_id": "standard-72",
        "node_count": 3,
    }],
    datastore_mount_configs=[{
        "datastore": test_fs_datastore.id,
        "datastore_network": {
            "subnet": cluster_pc_subnet.id,
            "connection_count": 4,
            "mtu": 1500,
        },
        "nfs_version": "NFS_V3",
        "access_mode": "READ_WRITE",
        "ignore_colocation": True,
    }],
    opts = pulumi.ResourceOptions(depends_on=[gcnv_network_peering]))
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;
using Std = Pulumi.Std;

return await Deployment.RunAsync(() =>
{
    // Use this network for netapp volume
    var npNetwork = Gcp.Compute.GetNetwork.Invoke(new()
    {
        Name = "netapp_nw",
    });

    var cluster_nw = new Gcp.VMwareEngine.Network("cluster-nw", new()
    {
        Name = "pc-nw",
        Type = "STANDARD",
        Location = "global",
        Description = "PC network description.",
    });

    // Read network peering
    //### This peering is created by netapp volume
    var snPeering = Gcp.Compute.GetNetworkPeering.Invoke(new()
    {
        Name = "sn-netapp-prod",
        Network = npNetwork.Apply(getNetworkResult => getNetworkResult.Id),
    });

    // Create vmware engine network peering
    //### vmware network peering is required for netapp mount on cluster
    var gcnvNetworkPeering = new Gcp.VMwareEngine.NetworkPeering("gcnv_network_peering", new()
    {
        Name = "tf-test-gcnv-network-peering",
        Description = "test description",
        VmwareEngineNetwork = cluster_nw.Id,
        PeerNetwork = Std.Trimprefix.Invoke(new()
        {
            Input = snPeering.Apply(getNetworkPeeringResult => getNetworkPeeringResult.PeerNetwork),
            Prefix = "https://www.googleapis.com/compute/v1",
        }).Apply(invoke => invoke.Result),
        PeerNetworkType = "GOOGLE_CLOUD_NETAPP_VOLUMES",
    });

    var cluster_pc = new Gcp.VMwareEngine.PrivateCloud("cluster-pc", new()
    {
        Location = "",
        Name = "sample-pc",
        Description = "Sample test PC.",
        NetworkConfig = new Gcp.VMwareEngine.Inputs.PrivateCloudNetworkConfigArgs
        {
            ManagementCidr = "192.168.30.0/24",
            VmwareEngineNetwork = cluster_nw.Id,
        },
        ManagementCluster = new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterArgs
        {
            ClusterId = "sample-mgmt-cluster",
            NodeTypeConfigs = new[]
            {
                new Gcp.VMwareEngine.Inputs.PrivateCloudManagementClusterNodeTypeConfigArgs
                {
                    NodeTypeId = "standard-72",
                    NodeCount = 3,
                    CustomCoreCount = 32,
                },
            },
        },
    });

    // Update service subnet
    //###  Service subnet is used by nfs datastore mounts
    //### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
    var cluster_pc_subnet = new Gcp.VMwareEngine.Subnet("cluster-pc-subnet", new()
    {
        Name = "service-1",
        Parent = cluster_pc.Id,
        IpCidrRange = "10.0.0.0/24",
    });

    var @default = new Gcp.Netapp.StoragePool("default", new()
    {
        Name = "tf-test-test-pool",
        Location = "us-west1",
        ServiceLevel = "PREMIUM",
        CapacityGib = "2048",
        Network = npNetwork.Apply(getNetworkResult => getNetworkResult.Id),
    });

    // Create a netapp volume with delete protection enabled
    //## Use ip range of private cloud service subnet in the 'export_policy'
    var testVolume = new Gcp.Netapp.Volume("test_volume", new()
    {
        Location = "us-west1",
        Name = "tf-test-test-volume",
        CapacityGib = "100",
        ShareName = "tf-test-test-volume",
        StoragePool = @default.Name,
        Protocols = new[]
        {
            "NFSV3",
        },
        ExportPolicy = new Gcp.Netapp.Inputs.VolumeExportPolicyArgs
        {
            Rules = new[]
            {
                new Gcp.Netapp.Inputs.VolumeExportPolicyRuleArgs
                {
                    AccessType = "READ_WRITE",
                    AllowedClients = "10.0.0.0/24",
                    HasRootAccess = "true",
                    Kerberos5ReadOnly = false,
                    Kerberos5ReadWrite = false,
                    Kerberos5iReadOnly = false,
                    Kerberos5iReadWrite = false,
                    Kerberos5pReadOnly = false,
                    Kerberos5pReadWrite = false,
                    Nfsv3 = true,
                    Nfsv4 = false,
                },
            },
        },
        RestrictedActions = new[]
        {
            "DELETE",
        },
    });

    var testFsDatastore = new Gcp.VMwareEngine.Datastore("test_fs_datastore", new()
    {
        Name = "ext-fs-datastore",
        Location = "us-west1",
        Description = "example google_file_service.netapp datastore.",
        NfsDatastore = new Gcp.VMwareEngine.Inputs.DatastoreNfsDatastoreArgs
        {
            GoogleFileService = new Gcp.VMwareEngine.Inputs.DatastoreNfsDatastoreGoogleFileServiceArgs
            {
                NetappVolume = testVolume.Id,
            },
        },
    });

    // Mount NFS datastore on vSphere cluster
    // This code block is required to mount the datastore on ESXi hosts
    var vmw_ext_cluster = new Gcp.VMwareEngine.Cluster("vmw-ext-cluster", new()
    {
        Name = "ext-cluster",
        Parent = cluster_pc.Id,
        NodeTypeConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterNodeTypeConfigArgs
            {
                NodeTypeId = "standard-72",
                NodeCount = 3,
            },
        },
        DatastoreMountConfigs = new[]
        {
            new Gcp.VMwareEngine.Inputs.ClusterDatastoreMountConfigArgs
            {
                Datastore = testFsDatastore.Id,
                DatastoreNetwork = new Gcp.VMwareEngine.Inputs.ClusterDatastoreMountConfigDatastoreNetworkArgs
                {
                    Subnet = cluster_pc_subnet.Id,
                    ConnectionCount = 4,
                    Mtu = 1500,
                },
                NfsVersion = "NFS_V3",
                AccessMode = "READ_WRITE",
                IgnoreColocation = true,
            },
        },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            gcnvNetworkPeering,
        },
    });

});
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/netapp"
	"github.com/pulumi/pulumi-gcp/sdk/v9/go/gcp/vmwareengine"
	"github.com/pulumi/pulumi-std/sdk/go/std"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		// Use this network for netapp volume
		npNetwork, err := compute.LookupNetwork(ctx, &compute.LookupNetworkArgs{
			Name: pulumi.StringRef("netapp_nw"),
		}, nil)
		if err != nil {
			return err
		}
		cluster_nw, err := vmwareengine.NewNetwork(ctx, "cluster-nw", &vmwareengine.NetworkArgs{
			Name:        pulumi.String("pc-nw"),
			Type:        pulumi.String("STANDARD"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("PC network description."),
		})
		if err != nil {
			return err
		}
		// Read network peering
		// ### This peering is created by netapp volume
		snPeering, err := compute.LookupNetworkPeering(ctx, &compute.LookupNetworkPeeringArgs{
			Name:    "sn-netapp-prod",
			Network: npNetwork.Id,
		}, nil)
		if err != nil {
			return err
		}
		invokeTrimprefix, err := std.Trimprefix(ctx, &std.TrimprefixArgs{
			Input:  snPeering.PeerNetwork,
			Prefix: "https://www.googleapis.com/compute/v1",
		}, nil)
		if err != nil {
			return err
		}
		// Create vmware engine network peering
		// ### vmware network peering is required for netapp mount on cluster
		gcnvNetworkPeering, err := vmwareengine.NewNetworkPeering(ctx, "gcnv_network_peering", &vmwareengine.NetworkPeeringArgs{
			Name:                pulumi.String("tf-test-gcnv-network-peering"),
			Description:         pulumi.String("test description"),
			VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			PeerNetwork:         pulumi.String(invokeTrimprefix.Result),
			PeerNetworkType:     pulumi.String("GOOGLE_CLOUD_NETAPP_VOLUMES"),
		})
		if err != nil {
			return err
		}
		cluster_pc, err := vmwareengine.NewPrivateCloud(ctx, "cluster-pc", &vmwareengine.PrivateCloudArgs{
			Location:    pulumi.String(""),
			Name:        pulumi.String("sample-pc"),
			Description: pulumi.String("Sample test PC."),
			NetworkConfig: &vmwareengine.PrivateCloudNetworkConfigArgs{
				ManagementCidr:      pulumi.String("192.168.30.0/24"),
				VmwareEngineNetwork: cluster_nw.ID().ToIDOutput().ToStringOutput(),
			},
			ManagementCluster: &vmwareengine.PrivateCloudManagementClusterArgs{
				ClusterId: pulumi.String("sample-mgmt-cluster"),
				NodeTypeConfigs: vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArray{
					&vmwareengine.PrivateCloudManagementClusterNodeTypeConfigArgs{
						NodeTypeId:      pulumi.String("standard-72"),
						NodeCount:       pulumi.Int(3),
						CustomCoreCount: pulumi.Int(32),
					},
				},
			},
		})
		if err != nil {
			return err
		}
		// Update service subnet
		// ###  Service subnet is used by nfs datastore mounts
		// ### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
		cluster_pc_subnet, err := vmwareengine.NewSubnet(ctx, "cluster-pc-subnet", &vmwareengine.SubnetArgs{
			Name:        pulumi.String("service-1"),
			Parent:      cluster_pc.ID().ToIDOutput().ToStringOutput(),
			IpCidrRange: pulumi.String("10.0.0.0/24"),
		})
		if err != nil {
			return err
		}
		_default, err := netapp.NewStoragePool(ctx, "default", &netapp.StoragePoolArgs{
			Name:         pulumi.String("tf-test-test-pool"),
			Location:     pulumi.String("us-west1"),
			ServiceLevel: pulumi.String("PREMIUM"),
			CapacityGib:  pulumi.String("2048"),
			Network:      pulumi.String(npNetwork.Id),
		})
		if err != nil {
			return err
		}
		// Create a netapp volume with delete protection enabled
		// ## Use ip range of private cloud service subnet in the 'export_policy'
		testVolume, err := netapp.NewVolume(ctx, "test_volume", &netapp.VolumeArgs{
			Location:    pulumi.String("us-west1"),
			Name:        pulumi.String("tf-test-test-volume"),
			CapacityGib: pulumi.String("100"),
			ShareName:   pulumi.String("tf-test-test-volume"),
			StoragePool: _default.Name,
			Protocols: pulumi.StringArray{
				pulumi.String("NFSV3"),
			},
			ExportPolicy: &netapp.VolumeExportPolicyArgs{
				Rules: netapp.VolumeExportPolicyRuleArray{
					&netapp.VolumeExportPolicyRuleArgs{
						AccessType:          pulumi.String("READ_WRITE"),
						AllowedClients:      pulumi.String("10.0.0.0/24"),
						HasRootAccess:       pulumi.String("true"),
						Kerberos5ReadOnly:   pulumi.Bool(false),
						Kerberos5ReadWrite:  pulumi.Bool(false),
						Kerberos5iReadOnly:  pulumi.Bool(false),
						Kerberos5iReadWrite: pulumi.Bool(false),
						Kerberos5pReadOnly:  pulumi.Bool(false),
						Kerberos5pReadWrite: pulumi.Bool(false),
						Nfsv3:               pulumi.Bool(true),
						Nfsv4:               pulumi.Bool(false),
					},
				},
			},
			RestrictedActions: pulumi.StringArray{
				pulumi.String("DELETE"),
			},
		})
		if err != nil {
			return err
		}
		testFsDatastore, err := vmwareengine.NewDatastore(ctx, "test_fs_datastore", &vmwareengine.DatastoreArgs{
			Name:        pulumi.String("ext-fs-datastore"),
			Location:    pulumi.String("us-west1"),
			Description: pulumi.String("example google_file_service.netapp datastore."),
			NfsDatastore: &vmwareengine.DatastoreNfsDatastoreArgs{
				GoogleFileService: &vmwareengine.DatastoreNfsDatastoreGoogleFileServiceArgs{
					NetappVolume: testVolume.ID().ToIDOutput().ToStringOutput(),
				},
			},
		})
		if err != nil {
			return err
		}
		// Mount NFS datastore on vSphere cluster
		// This code block is required to mount the datastore on ESXi hosts
		_, err = vmwareengine.NewCluster(ctx, "vmw-ext-cluster", &vmwareengine.ClusterArgs{
			Name:   pulumi.String("ext-cluster"),
			Parent: cluster_pc.ID().ToIDOutput().ToStringOutput(),
			NodeTypeConfigs: vmwareengine.ClusterNodeTypeConfigArray{
				&vmwareengine.ClusterNodeTypeConfigArgs{
					NodeTypeId: pulumi.String("standard-72"),
					NodeCount:  pulumi.Int(3),
				},
			},
			DatastoreMountConfigs: vmwareengine.ClusterDatastoreMountConfigArray{
				&vmwareengine.ClusterDatastoreMountConfigArgs{
					Datastore: testFsDatastore.ID().ToIDOutput().ToStringOutput(),
					DatastoreNetwork: &vmwareengine.ClusterDatastoreMountConfigDatastoreNetworkArgs{
						Subnet:          cluster_pc_subnet.ID().ToIDOutput().ToStringOutput(),
						ConnectionCount: pulumi.Int(4),
						Mtu:             pulumi.Int(1500),
					},
					NfsVersion:       pulumi.String("NFS_V3"),
					AccessMode:       pulumi.String("READ_WRITE"),
					IgnoreColocation: pulumi.Bool(true),
				},
			},
		}, pulumi.DependsOn([]pulumi.Resource{
			gcnvNetworkPeering,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
pulumi {
  required_providers {
    gcp = {
      source = "pulumi/gcp"
    }
    std = {
      source = "pulumi/std"
    }
  }
}

data "gcp_compute_getnetwork" "npNetwork" {
  name = "netapp_nw"
}
data "gcp_compute_getnetworkpeering" "snPeering" {
  name    = "sn-netapp-prod"
  network = data.gcp_compute_getnetwork.npNetwork.id
}

resource "gcp_vmwareengine_network" "cluster-nw" {
  name        = "pc-nw"
  type        = "STANDARD"
  location    = "global"
  description = "PC network description."
}
# Create vmware engine network peering
#### vmware network peering is required for netapp mount on cluster
resource "gcp_vmwareengine_networkpeering" "gcnv_network_peering" {
  name                  = "tf-test-gcnv-network-peering"
  description           = "test description"
  vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  peer_network          = trimprefix(data.gcp_compute_getnetworkpeering.snPeering.peer_network, "https://www.googleapis.com/compute/v1")
  peer_network_type     = "GOOGLE_CLOUD_NETAPP_VOLUMES"
}
resource "gcp_vmwareengine_privatecloud" "cluster-pc" {
  location    = ""
  name        = "sample-pc"
  description = "Sample test PC."
  network_config = {
    management_cidr       = "192.168.30.0/24"
    vmware_engine_network = gcp_vmwareengine_network.cluster-nw.id
  }
  management_cluster = {
    cluster_id = "sample-mgmt-cluster"
    node_type_configs = [{
      "nodeTypeId"      = "standard-72"
      "nodeCount"       = 3
      "customCoreCount" = 32
    }]
  }
}
# Update service subnet
####  Service subnet is used by nfs datastore mounts
#### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
resource "gcp_vmwareengine_subnet" "cluster-pc-subnet" {
  name          = "service-1"
  parent        = gcp_vmwareengine_privatecloud.cluster-pc.id
  ip_cidr_range = "10.0.0.0/24"
}
resource "gcp_netapp_storagepool" "default" {
  name          = "tf-test-test-pool"
  location      = "us-west1"
  service_level = "PREMIUM"
  capacity_gib  = "2048"
  network       = data.gcp_compute_getnetwork.npNetwork.id
}
# Create a netapp volume with delete protection enabled
### Use ip range of private cloud service subnet in the 'export_policy'
resource "gcp_netapp_volume" "test_volume" {
  location     = "us-west1"
  name         = "tf-test-test-volume"
  capacity_gib = "100"
  share_name   = "tf-test-test-volume"
  storage_pool = gcp_netapp_storagepool.default.name
  protocols    = ["NFSV3"]
  export_policy = {
    rules = [{
      "accessType"          = "READ_WRITE"
      "allowedClients"      = "10.0.0.0/24"
      "hasRootAccess"       = "true"
      "kerberos5ReadOnly"   = false
      "kerberos5ReadWrite"  = false
      "kerberos5iReadOnly"  = false
      "kerberos5iReadWrite" = false
      "kerberos5pReadOnly"  = false
      "kerberos5pReadWrite" = false
      "nfsv3"               = true
      "nfsv4"               = false
    }]
  }
  restricted_actions = ["DELETE"]
}
resource "gcp_vmwareengine_datastore" "test_fs_datastore" {
  name        = "ext-fs-datastore"
  location    = "us-west1"
  description = "example google_file_service.netapp datastore."
  nfs_datastore = {
    google_file_service = {
      netapp_volume = gcp_netapp_volume.test_volume.id
    }
  }
}
# Mount NFS datastore on vSphere cluster
# This code block is required to mount the datastore on ESXi hosts
resource "gcp_vmwareengine_cluster" "vmw-ext-cluster" {
  depends_on = [gcp_vmwareengine_networkpeering.gcnv_network_peering]
  name       = "ext-cluster"
  parent     = gcp_vmwareengine_privatecloud.cluster-pc.id
  node_type_configs {
    node_type_id = "standard-72"
    node_count   = 3
  }
  datastore_mount_configs {
    datastore = gcp_vmwareengine_datastore.test_fs_datastore.id
    datastore_network = {
      subnet           = gcp_vmwareengine_subnet.cluster-pc-subnet.id
      connection_count = 4
      mtu              = 1500
    }
    nfs_version       = "NFS_V3"
    access_mode       = "READ_WRITE"
    ignore_colocation = true
  }
}
# Use this network for netapp volume
# Read network peering
#### This peering is created by netapp volume
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.ComputeFunctions;
import com.pulumi.gcp.compute.inputs.GetNetworkArgs;
import com.pulumi.gcp.vmwareengine.Network;
import com.pulumi.gcp.vmwareengine.NetworkArgs;
import com.pulumi.gcp.compute.inputs.GetNetworkPeeringArgs;
import com.pulumi.gcp.vmwareengine.NetworkPeering;
import com.pulumi.gcp.vmwareengine.NetworkPeeringArgs;
import com.pulumi.std.StdFunctions;
import com.pulumi.std.inputs.TrimprefixArgs;
import com.pulumi.gcp.vmwareengine.PrivateCloud;
import com.pulumi.gcp.vmwareengine.PrivateCloudArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudNetworkConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.PrivateCloudManagementClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.Subnet;
import com.pulumi.gcp.vmwareengine.SubnetArgs;
import com.pulumi.gcp.netapp.StoragePool;
import com.pulumi.gcp.netapp.StoragePoolArgs;
import com.pulumi.gcp.netapp.Volume;
import com.pulumi.gcp.netapp.VolumeArgs;
import com.pulumi.gcp.netapp.inputs.VolumeExportPolicyArgs;
import com.pulumi.gcp.netapp.inputs.VolumeExportPolicyRuleArgs;
import com.pulumi.gcp.vmwareengine.Datastore;
import com.pulumi.gcp.vmwareengine.DatastoreArgs;
import com.pulumi.gcp.vmwareengine.inputs.DatastoreNfsDatastoreArgs;
import com.pulumi.gcp.vmwareengine.inputs.DatastoreNfsDatastoreGoogleFileServiceArgs;
import com.pulumi.gcp.vmwareengine.Cluster;
import com.pulumi.gcp.vmwareengine.ClusterArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterNodeTypeConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterDatastoreMountConfigArgs;
import com.pulumi.gcp.vmwareengine.inputs.ClusterDatastoreMountConfigDatastoreNetworkArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.ArrayList;
import java.util.Arrays;
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) {
        // Use this network for netapp volume
        final var npNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()
            .name("netapp_nw")
            .build());

        var cluster_nw = new Network("cluster-nw", NetworkArgs.builder()
            .name("pc-nw")
            .type("STANDARD")
            .location("global")
            .description("PC network description.")
            .build());

        // Read network peering
        //### This peering is created by netapp volume
        final var snPeering = ComputeFunctions.getNetworkPeering(GetNetworkPeeringArgs.builder()
            .name("sn-netapp-prod")
            .network(npNetwork.id())
            .build());

        // Create vmware engine network peering
        //### vmware network peering is required for netapp mount on cluster
        var gcnvNetworkPeering = new NetworkPeering("gcnvNetworkPeering", NetworkPeeringArgs.builder()
            .name("tf-test-gcnv-network-peering")
            .description("test description")
            .vmwareEngineNetwork(cluster_nw.id())
            .peerNetwork(StdFunctions.trimprefix(TrimprefixArgs.builder()
                .input(snPeering.peerNetwork())
                .prefix("https://www.googleapis.com/compute/v1")
                .build()).result())
            .peerNetworkType("GOOGLE_CLOUD_NETAPP_VOLUMES")
            .build());

        var cluster_pc = new PrivateCloud("cluster-pc", PrivateCloudArgs.builder()
            .location("")
            .name("sample-pc")
            .description("Sample test PC.")
            .networkConfig(PrivateCloudNetworkConfigArgs.builder()
                .managementCidr("192.168.30.0/24")
                .vmwareEngineNetwork(cluster_nw.id())
                .build())
            .managementCluster(PrivateCloudManagementClusterArgs.builder()
                .clusterId("sample-mgmt-cluster")
                .nodeTypeConfigs(PrivateCloudManagementClusterNodeTypeConfigArgs.builder()
                    .nodeTypeId("standard-72")
                    .nodeCount(3)
                    .customCoreCount(32)
                    .build())
                .build())
            .build());

        // Update service subnet
        //###  Service subnet is used by nfs datastore mounts
        //### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
        var cluster_pc_subnet = new Subnet("cluster-pc-subnet", SubnetArgs.builder()
            .name("service-1")
            .parent(cluster_pc.id())
            .ipCidrRange("10.0.0.0/24")
            .build());

        var default_ = new StoragePool("default", StoragePoolArgs.builder()
            .name("tf-test-test-pool")
            .location("us-west1")
            .serviceLevel("PREMIUM")
            .capacityGib("2048")
            .network(npNetwork.id())
            .build());

        // Create a netapp volume with delete protection enabled
        //## Use ip range of private cloud service subnet in the 'export_policy'
        var testVolume = new Volume("testVolume", VolumeArgs.builder()
            .location("us-west1")
            .name("tf-test-test-volume")
            .capacityGib("100")
            .shareName("tf-test-test-volume")
            .storagePool(default_.name())
            .protocols("NFSV3")
            .exportPolicy(VolumeExportPolicyArgs.builder()
                .rules(VolumeExportPolicyRuleArgs.builder()
                    .accessType("READ_WRITE")
                    .allowedClients("10.0.0.0/24")
                    .hasRootAccess("true")
                    .kerberos5ReadOnly(false)
                    .kerberos5ReadWrite(false)
                    .kerberos5iReadOnly(false)
                    .kerberos5iReadWrite(false)
                    .kerberos5pReadOnly(false)
                    .kerberos5pReadWrite(false)
                    .nfsv3(true)
                    .nfsv4(false)
                    .build())
                .build())
            .restrictedActions("DELETE")
            .build());

        var testFsDatastore = new Datastore("testFsDatastore", DatastoreArgs.builder()
            .name("ext-fs-datastore")
            .location("us-west1")
            .description("example google_file_service.netapp datastore.")
            .nfsDatastore(DatastoreNfsDatastoreArgs.builder()
                .googleFileService(DatastoreNfsDatastoreGoogleFileServiceArgs.builder()
                    .netappVolume(testVolume.id())
                    .build())
                .build())
            .build());

        // Mount NFS datastore on vSphere cluster
        // This code block is required to mount the datastore on ESXi hosts
        var vmw_ext_cluster = new Cluster("vmw-ext-cluster", ClusterArgs.builder()
            .name("ext-cluster")
            .parent(cluster_pc.id())
            .nodeTypeConfigs(ClusterNodeTypeConfigArgs.builder()
                .nodeTypeId("standard-72")
                .nodeCount(3)
                .build())
            .datastoreMountConfigs(ClusterDatastoreMountConfigArgs.builder()
                .datastore(testFsDatastore.id())
                .datastoreNetwork(ClusterDatastoreMountConfigDatastoreNetworkArgs.builder()
                    .subnet(cluster_pc_subnet.id())
                    .connectionCount(4)
                    .mtu(1500)
                    .build())
                .nfsVersion("NFS_V3")
                .accessMode("READ_WRITE")
                .ignoreColocation(true)
                .build())
            .build(), CustomResourceOptions.builder()
                .dependsOn(gcnvNetworkPeering)
                .build());

    }
}
resources:
  cluster-nw:
    type: gcp:vmwareengine:Network
    properties:
      name: pc-nw
      type: STANDARD
      location: global
      description: PC network description.
  # Create vmware engine network peering
  #### vmware network peering is required for netapp mount on cluster
  gcnvNetworkPeering:
    type: gcp:vmwareengine:NetworkPeering
    name: gcnv_network_peering
    properties:
      name: tf-test-gcnv-network-peering
      description: test description
      vmwareEngineNetwork: ${["cluster-nw"].id}
      peerNetwork:
        fn::invoke:
          function: std:trimprefix
          arguments:
            input: ${snPeering.peerNetwork}
            prefix: https://www.googleapis.com/compute/v1
          return: result
      peerNetworkType: GOOGLE_CLOUD_NETAPP_VOLUMES
  cluster-pc:
    type: gcp:vmwareengine:PrivateCloud
    properties:
      location: ""
      name: sample-pc
      description: Sample test PC.
      networkConfig:
        managementCidr: 192.168.30.0/24
        vmwareEngineNetwork: ${["cluster-nw"].id}
      managementCluster:
        clusterId: sample-mgmt-cluster
        nodeTypeConfigs:
          - nodeTypeId: standard-72
            nodeCount: 3
            customCoreCount: 32
  # Update service subnet
  ####  Service subnet is used by nfs datastore mounts
  #### ip_cidr_range configured on subnet must also be allowed in in netapp volumes's 'export_policy'
  cluster-pc-subnet:
    type: gcp:vmwareengine:Subnet
    properties:
      name: service-1
      parent: ${["cluster-pc"].id}
      ipCidrRange: 10.0.0.0/24
  default:
    type: gcp:netapp:StoragePool
    properties:
      name: tf-test-test-pool
      location: us-west1
      serviceLevel: PREMIUM
      capacityGib: '2048'
      network: ${npNetwork.id}
  # Create a netapp volume with delete protection enabled
  ### Use ip range of private cloud service subnet in the 'export_policy'
  testVolume:
    type: gcp:netapp:Volume
    name: test_volume
    properties:
      location: us-west1
      name: tf-test-test-volume
      capacityGib: '100'
      shareName: tf-test-test-volume
      storagePool: ${default.name}
      protocols:
        - NFSV3
      exportPolicy:
        rules:
          - accessType: READ_WRITE
            allowedClients: 10.0.0.0/24
            hasRootAccess: 'true'
            kerberos5ReadOnly: false
            kerberos5ReadWrite: false
            kerberos5iReadOnly: false
            kerberos5iReadWrite: false
            kerberos5pReadOnly: false
            kerberos5pReadWrite: false
            nfsv3: true
            nfsv4: false
      restrictedActions:
        - DELETE
  testFsDatastore:
    type: gcp:vmwareengine:Datastore
    name: test_fs_datastore
    properties:
      name: ext-fs-datastore
      location: us-west1
      description: example google_file_service.netapp datastore.
      nfsDatastore:
        googleFileService:
          netappVolume: ${testVolume.id}
  # Mount NFS datastore on vSphere cluster
  # This code block is required to mount the datastore on ESXi hosts
  vmw-ext-cluster:
    type: gcp:vmwareengine:Cluster
    properties:
      name: ext-cluster
      parent: ${["cluster-pc"].id}
      nodeTypeConfigs:
        - nodeTypeId: standard-72
          nodeCount: 3
      datastoreMountConfigs:
        - datastore: ${testFsDatastore.id}
          datastoreNetwork:
            subnet: ${["cluster-pc-subnet"].id}
            connectionCount: 4
            mtu: 1500
          nfsVersion: NFS_V3
          accessMode: READ_WRITE
          ignoreColocation: true
    options:
      dependsOn:
        - ${gcnvNetworkPeering}
variables:
  # Use this network for netapp volume
  npNetwork:
    fn::invoke:
      function: gcp:compute:getNetwork
      arguments:
        name: netapp_nw
  # Read network peering
  #### This peering is created by netapp volume
  snPeering:
    fn::invoke:
      function: gcp:compute:getNetworkPeering
      arguments:
        name: sn-netapp-prod
        network: ${npNetwork.id}

Import

Cluster can be imported using any of these accepted formats:

  • {{parent}}/clusters/{{name}}

When using the pulumi import command, Cluster can be imported using one of the formats above. For example:

$ pulumi import gcp:vmwareengine/cluster:Cluster default {{parent}}/clusters/{{name}}

Constructors

Cluster(String name, {ClusterArgs? args, CustomResourceOptions? options})
Creates a new Cluster. name The Pulumi resource name. args Arguments used to configure this Cluster. The set of arguments for Cluster. options Resource options controlling this resource's behavior.
Cluster.reference(String urn)
Creates a typed reference to an existing Cluster resource.

Properties

autoscalingSettings ↔ Output<ClusterAutoscalingSettings?>
Configuration of the autoscaling applied to this cluster Structure is documented below.
latefinal
childResources → Set<Resource>
finalinherited
completionSources ↔ Map<String, IOutputCompletionSource>
latefinalinherited
createTime ↔ Output<String>
Creation time of this resource. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
latefinal
datastoreMountConfigs ↔ Output<List<ClusterDatastoreMountConfig>?>
Optional. Configuration to mount a datastore. Mount can be done along with cluster create or during cluster update Since service subnet is not configured with ip range on mgmt cluster creation, mount on management cluster is done as update only for unmount remove 'datastore_mount_config' config from the update of cluster resource Structure is documented below.
latefinal
deletionPolicy ↔ Output<String>
Whether Terraform will be prevented from destroying the resource. Defaults to DELETE. When a 'terraform destroy' or 'pulumi up' would delete the resource, the command will fail if this field is set to "PREVENT" in Terraform state. When set to "ABANDON", the command will remove the resource from Terraform management without updating or deleting the resource in the API. When set to "DELETE", deleting the resource is allowed.
latefinal
hashCode → int
The hash code for this object.
no setterinherited
id ↔ Output<String>
getter/setter pairinherited
isCustom → bool
Returns whether this resource is provider-managed.
no setterinherited
isProtected → bool
Returns whether this resource is protected from deletion.
no setterinherited
isRemote → bool
Whether this resource is registered as remote.
no setterinherited
isResourceReference → bool
Whether this instance represents a resource value returned over RPC.
finalinherited
management ↔ Output<bool>
True if the cluster is a management cluster; false otherwise. There can only be one management cluster in a private cloud and it has to be the first one.
latefinal
name ↔ Output<String>
The ID of the Cluster.
latefinal
nodeTypeConfigs ↔ Output<List<ClusterNodeTypeConfig>?>
The map of cluster node types in this cluster, where the key is canonical identifier of the node type (corresponds to the NodeType). Structure is documented below.
latefinal
parent ↔ Output<String>
The resource name of the private cloud to create a new cluster in. Resource names are schemeless URIs that follow the conventions in https://cloud.google.com/apis/design/resource_names. For example: projects/my-project/locations/us-west1-a/privateClouds/my-cloud
latefinal
resourceTransforms → List<ResourceTransform>
Inherited/explicit async transforms.
no setterinherited
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
state ↔ Output<String>
State of the Cluster.
latefinal
transformations → List<ResourceTransformation>
Inherited/explicit legacy transformations.
no setterinherited
uid ↔ Output<String>
System-generated unique identifier for the resource.
latefinal
updateTime ↔ Output<String>
Last updated time of this resource. A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
latefinal
urn ↔ Output<String>
latefinalinherited

Methods

failId(Object error) → void
Completes this resource ID with an error when registration fails.
inherited
failOutputs(Object error) → void
Completes all output properties with error.
inherited
failUrn(Object error) → void
Completes this resource URN with an error when registration fails.
inherited
getProvider(String moduleMember) → ProviderResource?
Returns provider for moduleMember's package, if configured.
inherited
getResourceName() → String
Returns this resource's logical name.
inherited
getResourceType() → String
Returns this resource's Pulumi type token.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
registerOutput<T>(String propertyName, {Object? decoder(Object?)?, bool isSecret = false}) → Output<T>
Registers a dynamic output property for this resource.
inherited
resolveId(String? value, {required bool isKnown}) → void
Resolves the provider-assigned ID for this resource.
inherited
resolveOutputs(Struct outputs) → void
Resolves all output properties from a monitor response payload.
inherited
resolveUrn(String value) → void
Resolves this resource's URN once assigned by the engine.
inherited
serializeProperties(Map<String, dynamic> properties) → Future<Struct>
Serializes resource properties for RPC transmission.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

get(String name, Input<String> id, {ClusterState? state, CustomResourceOptions? options}) → Cluster
Gets an existing Cluster resource's state with the given name and id.