1. Packages
  2. Google Cloud (GCP) Classic
  3. API Docs
  4. networkconnectivity
  5. Spoke
Google Cloud v8.26.0 published on Thursday, Apr 10, 2025 by Pulumi

gcp.networkconnectivity.Spoke

Explore with Pulumi AI

The NetworkConnectivity Spoke resource

To get more information about Spoke, see:

Example Usage

Network Connectivity Spoke Linked Vpc Network Basic

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

const network = new gcp.compute.Network("network", {
    name: "net",
    autoCreateSubnetworks: false,
});
const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "hub1",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "spoke1",
    location: "global",
    description: "A sample spoke with a linked router appliance instance",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedVpcNetwork: {
        excludeExportRanges: [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
        includeExportRanges: [
            "198.51.100.0/23",
            "10.0.0.0/8",
        ],
        uri: network.selfLink,
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="net",
    auto_create_subnetworks=False)
basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="hub1",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
primary = gcp.networkconnectivity.Spoke("primary",
    name="spoke1",
    location="global",
    description="A sample spoke with a linked router appliance instance",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_vpc_network={
        "exclude_export_ranges": [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
        "include_export_ranges": [
            "198.51.100.0/23",
            "10.0.0.0/8",
        ],
        "uri": network.self_link,
    })
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("net"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("hub1"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("spoke1"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("A sample spoke with a linked router appliance instance"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
				ExcludeExportRanges: pulumi.StringArray{
					pulumi.String("198.51.100.0/24"),
					pulumi.String("10.10.0.0/16"),
				},
				IncludeExportRanges: pulumi.StringArray{
					pulumi.String("198.51.100.0/23"),
					pulumi.String("10.0.0.0/8"),
				},
				Uri: network.SelfLink,
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "net",
        AutoCreateSubnetworks = false,
    });

    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "hub1",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "spoke1",
        Location = "global",
        Description = "A sample spoke with a linked router appliance instance",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
        {
            ExcludeExportRanges = new[]
            {
                "198.51.100.0/24",
                "10.10.0.0/16",
            },
            IncludeExportRanges = new[]
            {
                "198.51.100.0/23",
                "10.0.0.0/8",
            },
            Uri = network.SelfLink,
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("net")
            .autoCreateSubnetworks(false)
            .build());

        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("hub1")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("spoke1")
            .location("global")
            .description("A sample spoke with a linked router appliance instance")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
                .excludeExportRanges(                
                    "198.51.100.0/24",
                    "10.10.0.0/16")
                .includeExportRanges(                
                    "198.51.100.0/23",
                    "10.0.0.0/8")
                .uri(network.selfLink())
                .build())
            .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: net
      autoCreateSubnetworks: false
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: hub1
      description: A sample hub
      labels:
        label-two: value-one
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: spoke1
      location: global
      description: A sample spoke with a linked router appliance instance
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedVpcNetwork:
        excludeExportRanges:
          - 198.51.100.0/24
          - 10.10.0.0/16
        includeExportRanges:
          - 198.51.100.0/23
          - 10.0.0.0/8
        uri: ${network.selfLink}
Copy

Network Connectivity Spoke Linked Vpc Network Group

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

const network = new gcp.compute.Network("network", {
    name: "net-spoke",
    autoCreateSubnetworks: false,
});
const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "hub1-spoke",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const defaultGroup = new gcp.networkconnectivity.Group("default_group", {
    hub: basicHub.id,
    name: "default",
    description: "A sample hub group",
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "group-spoke1",
    location: "global",
    description: "A sample spoke with a linked VPC",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedVpcNetwork: {
        excludeExportRanges: [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
        includeExportRanges: [
            "198.51.100.0/23",
            "10.0.0.0/8",
        ],
        uri: network.selfLink,
    },
    group: defaultGroup.id,
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="net-spoke",
    auto_create_subnetworks=False)
basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="hub1-spoke",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
default_group = gcp.networkconnectivity.Group("default_group",
    hub=basic_hub.id,
    name="default",
    description="A sample hub group")
primary = gcp.networkconnectivity.Spoke("primary",
    name="group-spoke1",
    location="global",
    description="A sample spoke with a linked VPC",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_vpc_network={
        "exclude_export_ranges": [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
        "include_export_ranges": [
            "198.51.100.0/23",
            "10.0.0.0/8",
        ],
        "uri": network.self_link,
    },
    group=default_group.id)
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("net-spoke"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("hub1-spoke"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		defaultGroup, err := networkconnectivity.NewGroup(ctx, "default_group", &networkconnectivity.GroupArgs{
			Hub:         basicHub.ID(),
			Name:        pulumi.String("default"),
			Description: pulumi.String("A sample hub group"),
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("group-spoke1"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("A sample spoke with a linked VPC"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
				ExcludeExportRanges: pulumi.StringArray{
					pulumi.String("198.51.100.0/24"),
					pulumi.String("10.10.0.0/16"),
				},
				IncludeExportRanges: pulumi.StringArray{
					pulumi.String("198.51.100.0/23"),
					pulumi.String("10.0.0.0/8"),
				},
				Uri: network.SelfLink,
			},
			Group: defaultGroup.ID(),
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "net-spoke",
        AutoCreateSubnetworks = false,
    });

    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "hub1-spoke",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var defaultGroup = new Gcp.NetworkConnectivity.Group("default_group", new()
    {
        Hub = basicHub.Id,
        Name = "default",
        Description = "A sample hub group",
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "group-spoke1",
        Location = "global",
        Description = "A sample spoke with a linked VPC",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
        {
            ExcludeExportRanges = new[]
            {
                "198.51.100.0/24",
                "10.10.0.0/16",
            },
            IncludeExportRanges = new[]
            {
                "198.51.100.0/23",
                "10.0.0.0/8",
            },
            Uri = network.SelfLink,
        },
        Group = defaultGroup.Id,
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Group;
import com.pulumi.gcp.networkconnectivity.GroupArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("net-spoke")
            .autoCreateSubnetworks(false)
            .build());

        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("hub1-spoke")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var defaultGroup = new Group("defaultGroup", GroupArgs.builder()
            .hub(basicHub.id())
            .name("default")
            .description("A sample hub group")
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("group-spoke1")
            .location("global")
            .description("A sample spoke with a linked VPC")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
                .excludeExportRanges(                
                    "198.51.100.0/24",
                    "10.10.0.0/16")
                .includeExportRanges(                
                    "198.51.100.0/23",
                    "10.0.0.0/8")
                .uri(network.selfLink())
                .build())
            .group(defaultGroup.id())
            .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: net-spoke
      autoCreateSubnetworks: false
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: hub1-spoke
      description: A sample hub
      labels:
        label-two: value-one
  defaultGroup:
    type: gcp:networkconnectivity:Group
    name: default_group
    properties:
      hub: ${basicHub.id}
      name: default
      description: A sample hub group
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: group-spoke1
      location: global
      description: A sample spoke with a linked VPC
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedVpcNetwork:
        excludeExportRanges:
          - 198.51.100.0/24
          - 10.10.0.0/16
        includeExportRanges:
          - 198.51.100.0/23
          - 10.0.0.0/8
        uri: ${network.selfLink}
      group: ${defaultGroup.id}
Copy

Network Connectivity Spoke Router Appliance Basic

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

const network = new gcp.compute.Network("network", {
    name: "tf-test-network_91980",
    autoCreateSubnetworks: false,
});
const subnetwork = new gcp.compute.Subnetwork("subnetwork", {
    name: "tf-test-subnet_37118",
    ipCidrRange: "10.0.0.0/28",
    region: "us-central1",
    network: network.selfLink,
});
const instance = new gcp.compute.Instance("instance", {
    name: "tf-test-instance_80332",
    machineType: "e2-medium",
    canIpForward: true,
    zone: "us-central1-a",
    bootDisk: {
        initializeParams: {
            image: "projects/debian-cloud/global/images/debian-10-buster-v20210817",
        },
    },
    networkInterfaces: [{
        subnetwork: subnetwork.name,
        networkIp: "10.0.0.2",
        accessConfigs: [{
            networkTier: "PREMIUM",
        }],
    }],
});
const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "tf-test-hub_13293",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "tf-test-name_40289",
    location: "us-central1",
    description: "A sample spoke with a linked routher appliance instance",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedRouterApplianceInstances: {
        instances: [{
            virtualMachine: instance.selfLink,
            ipAddress: "10.0.0.2",
        }],
        siteToSiteDataTransfer: true,
        includeImportRanges: ["ALL_IPV4_RANGES"],
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="tf-test-network_91980",
    auto_create_subnetworks=False)
subnetwork = gcp.compute.Subnetwork("subnetwork",
    name="tf-test-subnet_37118",
    ip_cidr_range="10.0.0.0/28",
    region="us-central1",
    network=network.self_link)
instance = gcp.compute.Instance("instance",
    name="tf-test-instance_80332",
    machine_type="e2-medium",
    can_ip_forward=True,
    zone="us-central1-a",
    boot_disk={
        "initialize_params": {
            "image": "projects/debian-cloud/global/images/debian-10-buster-v20210817",
        },
    },
    network_interfaces=[{
        "subnetwork": subnetwork.name,
        "network_ip": "10.0.0.2",
        "access_configs": [{
            "network_tier": "PREMIUM",
        }],
    }])
basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="tf-test-hub_13293",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
primary = gcp.networkconnectivity.Spoke("primary",
    name="tf-test-name_40289",
    location="us-central1",
    description="A sample spoke with a linked routher appliance instance",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_router_appliance_instances={
        "instances": [{
            "virtual_machine": instance.self_link,
            "ip_address": "10.0.0.2",
        }],
        "site_to_site_data_transfer": True,
        "include_import_ranges": ["ALL_IPV4_RANGES"],
    })
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("tf-test-network_91980"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		subnetwork, err := compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{
			Name:        pulumi.String("tf-test-subnet_37118"),
			IpCidrRange: pulumi.String("10.0.0.0/28"),
			Region:      pulumi.String("us-central1"),
			Network:     network.SelfLink,
		})
		if err != nil {
			return err
		}
		instance, err := compute.NewInstance(ctx, "instance", &compute.InstanceArgs{
			Name:         pulumi.String("tf-test-instance_80332"),
			MachineType:  pulumi.String("e2-medium"),
			CanIpForward: pulumi.Bool(true),
			Zone:         pulumi.String("us-central1-a"),
			BootDisk: &compute.InstanceBootDiskArgs{
				InitializeParams: &compute.InstanceBootDiskInitializeParamsArgs{
					Image: pulumi.String("projects/debian-cloud/global/images/debian-10-buster-v20210817"),
				},
			},
			NetworkInterfaces: compute.InstanceNetworkInterfaceArray{
				&compute.InstanceNetworkInterfaceArgs{
					Subnetwork: subnetwork.Name,
					NetworkIp:  pulumi.String("10.0.0.2"),
					AccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{
						&compute.InstanceNetworkInterfaceAccessConfigArgs{
							NetworkTier: pulumi.String("PREMIUM"),
						},
					},
				},
			},
		})
		if err != nil {
			return err
		}
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("tf-test-hub_13293"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("tf-test-name_40289"),
			Location:    pulumi.String("us-central1"),
			Description: pulumi.String("A sample spoke with a linked routher appliance instance"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedRouterApplianceInstances: &networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{
				Instances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{
					&networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{
						VirtualMachine: instance.SelfLink,
						IpAddress:      pulumi.String("10.0.0.2"),
					},
				},
				SiteToSiteDataTransfer: pulumi.Bool(true),
				IncludeImportRanges: pulumi.StringArray{
					pulumi.String("ALL_IPV4_RANGES"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "tf-test-network_91980",
        AutoCreateSubnetworks = false,
    });

    var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new()
    {
        Name = "tf-test-subnet_37118",
        IpCidrRange = "10.0.0.0/28",
        Region = "us-central1",
        Network = network.SelfLink,
    });

    var instance = new Gcp.Compute.Instance("instance", new()
    {
        Name = "tf-test-instance_80332",
        MachineType = "e2-medium",
        CanIpForward = true,
        Zone = "us-central1-a",
        BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs
        {
            InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs
            {
                Image = "projects/debian-cloud/global/images/debian-10-buster-v20210817",
            },
        },
        NetworkInterfaces = new[]
        {
            new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs
            {
                Subnetwork = subnetwork.Name,
                NetworkIp = "10.0.0.2",
                AccessConfigs = new[]
                {
                    new Gcp.Compute.Inputs.InstanceNetworkInterfaceAccessConfigArgs
                    {
                        NetworkTier = "PREMIUM",
                    },
                },
            },
        },
    });

    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "tf-test-hub_13293",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "tf-test-name_40289",
        Location = "us-central1",
        Description = "A sample spoke with a linked routher appliance instance",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs
        {
            Instances = new[]
            {
                new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs
                {
                    VirtualMachine = instance.SelfLink,
                    IpAddress = "10.0.0.2",
                },
            },
            SiteToSiteDataTransfer = true,
            IncludeImportRanges = new[]
            {
                "ALL_IPV4_RANGES",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.Instance;
import com.pulumi.gcp.compute.InstanceArgs;
import com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs;
import com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs;
import com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedRouterApplianceInstancesArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("tf-test-network_91980")
            .autoCreateSubnetworks(false)
            .build());

        var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder()
            .name("tf-test-subnet_37118")
            .ipCidrRange("10.0.0.0/28")
            .region("us-central1")
            .network(network.selfLink())
            .build());

        var instance = new Instance("instance", InstanceArgs.builder()
            .name("tf-test-instance_80332")
            .machineType("e2-medium")
            .canIpForward(true)
            .zone("us-central1-a")
            .bootDisk(InstanceBootDiskArgs.builder()
                .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()
                    .image("projects/debian-cloud/global/images/debian-10-buster-v20210817")
                    .build())
                .build())
            .networkInterfaces(InstanceNetworkInterfaceArgs.builder()
                .subnetwork(subnetwork.name())
                .networkIp("10.0.0.2")
                .accessConfigs(InstanceNetworkInterfaceAccessConfigArgs.builder()
                    .networkTier("PREMIUM")
                    .build())
                .build())
            .build());

        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("tf-test-hub_13293")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("tf-test-name_40289")
            .location("us-central1")
            .description("A sample spoke with a linked routher appliance instance")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()
                .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()
                    .virtualMachine(instance.selfLink())
                    .ipAddress("10.0.0.2")
                    .build())
                .siteToSiteDataTransfer(true)
                .includeImportRanges("ALL_IPV4_RANGES")
                .build())
            .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: tf-test-network_91980
      autoCreateSubnetworks: false
  subnetwork:
    type: gcp:compute:Subnetwork
    properties:
      name: tf-test-subnet_37118
      ipCidrRange: 10.0.0.0/28
      region: us-central1
      network: ${network.selfLink}
  instance:
    type: gcp:compute:Instance
    properties:
      name: tf-test-instance_80332
      machineType: e2-medium
      canIpForward: true
      zone: us-central1-a
      bootDisk:
        initializeParams:
          image: projects/debian-cloud/global/images/debian-10-buster-v20210817
      networkInterfaces:
        - subnetwork: ${subnetwork.name}
          networkIp: 10.0.0.2
          accessConfigs:
            - networkTier: PREMIUM
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: tf-test-hub_13293
      description: A sample hub
      labels:
        label-two: value-one
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: tf-test-name_40289
      location: us-central1
      description: A sample spoke with a linked routher appliance instance
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedRouterApplianceInstances:
        instances:
          - virtualMachine: ${instance.selfLink}
            ipAddress: 10.0.0.2
        siteToSiteDataTransfer: true
        includeImportRanges:
          - ALL_IPV4_RANGES
Copy

Network Connectivity Spoke Vpn Tunnel Basic

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

const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "basic-hub1",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const network = new gcp.compute.Network("network", {
    name: "basic-network",
    autoCreateSubnetworks: false,
});
const subnetwork = new gcp.compute.Subnetwork("subnetwork", {
    name: "basic-subnetwork",
    ipCidrRange: "10.0.0.0/28",
    region: "us-central1",
    network: network.selfLink,
});
const gateway = new gcp.compute.HaVpnGateway("gateway", {
    name: "vpn-gateway",
    network: network.id,
});
const externalVpnGw = new gcp.compute.ExternalVpnGateway("external_vpn_gw", {
    name: "external-vpn-gateway",
    redundancyType: "SINGLE_IP_INTERNALLY_REDUNDANT",
    description: "An externally managed VPN gateway",
    interfaces: [{
        id: 0,
        ipAddress: "8.8.8.8",
    }],
});
const router = new gcp.compute.Router("router", {
    name: "external-vpn-gateway",
    region: "us-central1",
    network: network.name,
    bgp: {
        asn: 64514,
    },
});
const tunnel1 = new gcp.compute.VPNTunnel("tunnel1", {
    name: "tunnel1",
    region: "us-central1",
    vpnGateway: gateway.id,
    peerExternalGateway: externalVpnGw.id,
    peerExternalGatewayInterface: 0,
    sharedSecret: "a secret message",
    router: router.id,
    vpnGatewayInterface: 0,
});
const tunnel2 = new gcp.compute.VPNTunnel("tunnel2", {
    name: "tunnel2",
    region: "us-central1",
    vpnGateway: gateway.id,
    peerExternalGateway: externalVpnGw.id,
    peerExternalGatewayInterface: 0,
    sharedSecret: "a secret message",
    router: pulumi.interpolate` ${router.id}`,
    vpnGatewayInterface: 1,
});
const routerInterface1 = new gcp.compute.RouterInterface("router_interface1", {
    name: "router-interface1",
    router: router.name,
    region: "us-central1",
    ipRange: "169.254.0.1/30",
    vpnTunnel: tunnel1.name,
});
const routerPeer1 = new gcp.compute.RouterPeer("router_peer1", {
    name: "router-peer1",
    router: router.name,
    region: "us-central1",
    peerIpAddress: "169.254.0.2",
    peerAsn: 64515,
    advertisedRoutePriority: 100,
    "interface": routerInterface1.name,
});
const routerInterface2 = new gcp.compute.RouterInterface("router_interface2", {
    name: "router-interface2",
    router: router.name,
    region: "us-central1",
    ipRange: "169.254.1.1/30",
    vpnTunnel: tunnel2.name,
});
const routerPeer2 = new gcp.compute.RouterPeer("router_peer2", {
    name: "router-peer2",
    router: router.name,
    region: "us-central1",
    peerIpAddress: "169.254.1.2",
    peerAsn: 64515,
    advertisedRoutePriority: 100,
    "interface": routerInterface2.name,
});
const tunnel1Spoke = new gcp.networkconnectivity.Spoke("tunnel1", {
    name: "vpn-tunnel-1-spoke",
    location: "us-central1",
    description: "A sample spoke with a linked VPN Tunnel",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedVpnTunnels: {
        uris: [tunnel1.selfLink],
        siteToSiteDataTransfer: true,
        includeImportRanges: ["ALL_IPV4_RANGES"],
    },
});
const tunnel2Spoke = new gcp.networkconnectivity.Spoke("tunnel2", {
    name: "vpn-tunnel-2-spoke",
    location: "us-central1",
    description: "A sample spoke with a linked VPN Tunnel",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedVpnTunnels: {
        uris: [tunnel2.selfLink],
        siteToSiteDataTransfer: true,
        includeImportRanges: ["ALL_IPV4_RANGES"],
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="basic-hub1",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
network = gcp.compute.Network("network",
    name="basic-network",
    auto_create_subnetworks=False)
subnetwork = gcp.compute.Subnetwork("subnetwork",
    name="basic-subnetwork",
    ip_cidr_range="10.0.0.0/28",
    region="us-central1",
    network=network.self_link)
gateway = gcp.compute.HaVpnGateway("gateway",
    name="vpn-gateway",
    network=network.id)
external_vpn_gw = gcp.compute.ExternalVpnGateway("external_vpn_gw",
    name="external-vpn-gateway",
    redundancy_type="SINGLE_IP_INTERNALLY_REDUNDANT",
    description="An externally managed VPN gateway",
    interfaces=[{
        "id": 0,
        "ip_address": "8.8.8.8",
    }])
router = gcp.compute.Router("router",
    name="external-vpn-gateway",
    region="us-central1",
    network=network.name,
    bgp={
        "asn": 64514,
    })
tunnel1 = gcp.compute.VPNTunnel("tunnel1",
    name="tunnel1",
    region="us-central1",
    vpn_gateway=gateway.id,
    peer_external_gateway=external_vpn_gw.id,
    peer_external_gateway_interface=0,
    shared_secret="a secret message",
    router=router.id,
    vpn_gateway_interface=0)
tunnel2 = gcp.compute.VPNTunnel("tunnel2",
    name="tunnel2",
    region="us-central1",
    vpn_gateway=gateway.id,
    peer_external_gateway=external_vpn_gw.id,
    peer_external_gateway_interface=0,
    shared_secret="a secret message",
    router=router.id.apply(lambda id: f" {id}"),
    vpn_gateway_interface=1)
router_interface1 = gcp.compute.RouterInterface("router_interface1",
    name="router-interface1",
    router=router.name,
    region="us-central1",
    ip_range="169.254.0.1/30",
    vpn_tunnel=tunnel1.name)
router_peer1 = gcp.compute.RouterPeer("router_peer1",
    name="router-peer1",
    router=router.name,
    region="us-central1",
    peer_ip_address="169.254.0.2",
    peer_asn=64515,
    advertised_route_priority=100,
    interface=router_interface1.name)
router_interface2 = gcp.compute.RouterInterface("router_interface2",
    name="router-interface2",
    router=router.name,
    region="us-central1",
    ip_range="169.254.1.1/30",
    vpn_tunnel=tunnel2.name)
router_peer2 = gcp.compute.RouterPeer("router_peer2",
    name="router-peer2",
    router=router.name,
    region="us-central1",
    peer_ip_address="169.254.1.2",
    peer_asn=64515,
    advertised_route_priority=100,
    interface=router_interface2.name)
tunnel1_spoke = gcp.networkconnectivity.Spoke("tunnel1",
    name="vpn-tunnel-1-spoke",
    location="us-central1",
    description="A sample spoke with a linked VPN Tunnel",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_vpn_tunnels={
        "uris": [tunnel1.self_link],
        "site_to_site_data_transfer": True,
        "include_import_ranges": ["ALL_IPV4_RANGES"],
    })
tunnel2_spoke = gcp.networkconnectivity.Spoke("tunnel2",
    name="vpn-tunnel-2-spoke",
    location="us-central1",
    description="A sample spoke with a linked VPN Tunnel",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_vpn_tunnels={
        "uris": [tunnel2.self_link],
        "site_to_site_data_transfer": True,
        "include_import_ranges": ["ALL_IPV4_RANGES"],
    })
Copy
package main

import (
	"fmt"

	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("basic-hub1"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("basic-network"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		_, err = compute.NewSubnetwork(ctx, "subnetwork", &compute.SubnetworkArgs{
			Name:        pulumi.String("basic-subnetwork"),
			IpCidrRange: pulumi.String("10.0.0.0/28"),
			Region:      pulumi.String("us-central1"),
			Network:     network.SelfLink,
		})
		if err != nil {
			return err
		}
		gateway, err := compute.NewHaVpnGateway(ctx, "gateway", &compute.HaVpnGatewayArgs{
			Name:    pulumi.String("vpn-gateway"),
			Network: network.ID(),
		})
		if err != nil {
			return err
		}
		externalVpnGw, err := compute.NewExternalVpnGateway(ctx, "external_vpn_gw", &compute.ExternalVpnGatewayArgs{
			Name:           pulumi.String("external-vpn-gateway"),
			RedundancyType: pulumi.String("SINGLE_IP_INTERNALLY_REDUNDANT"),
			Description:    pulumi.String("An externally managed VPN gateway"),
			Interfaces: compute.ExternalVpnGatewayInterfaceArray{
				&compute.ExternalVpnGatewayInterfaceArgs{
					Id:        pulumi.Int(0),
					IpAddress: pulumi.String("8.8.8.8"),
				},
			},
		})
		if err != nil {
			return err
		}
		router, err := compute.NewRouter(ctx, "router", &compute.RouterArgs{
			Name:    pulumi.String("external-vpn-gateway"),
			Region:  pulumi.String("us-central1"),
			Network: network.Name,
			Bgp: &compute.RouterBgpArgs{
				Asn: pulumi.Int(64514),
			},
		})
		if err != nil {
			return err
		}
		tunnel1, err := compute.NewVPNTunnel(ctx, "tunnel1", &compute.VPNTunnelArgs{
			Name:                         pulumi.String("tunnel1"),
			Region:                       pulumi.String("us-central1"),
			VpnGateway:                   gateway.ID(),
			PeerExternalGateway:          externalVpnGw.ID(),
			PeerExternalGatewayInterface: pulumi.Int(0),
			SharedSecret:                 pulumi.String("a secret message"),
			Router:                       router.ID(),
			VpnGatewayInterface:          pulumi.Int(0),
		})
		if err != nil {
			return err
		}
		tunnel2, err := compute.NewVPNTunnel(ctx, "tunnel2", &compute.VPNTunnelArgs{
			Name:                         pulumi.String("tunnel2"),
			Region:                       pulumi.String("us-central1"),
			VpnGateway:                   gateway.ID(),
			PeerExternalGateway:          externalVpnGw.ID(),
			PeerExternalGatewayInterface: pulumi.Int(0),
			SharedSecret:                 pulumi.String("a secret message"),
			Router: router.ID().ApplyT(func(id string) (string, error) {
				return fmt.Sprintf(" %v", id), nil
			}).(pulumi.StringOutput),
			VpnGatewayInterface: pulumi.Int(1),
		})
		if err != nil {
			return err
		}
		routerInterface1, err := compute.NewRouterInterface(ctx, "router_interface1", &compute.RouterInterfaceArgs{
			Name:      pulumi.String("router-interface1"),
			Router:    router.Name,
			Region:    pulumi.String("us-central1"),
			IpRange:   pulumi.String("169.254.0.1/30"),
			VpnTunnel: tunnel1.Name,
		})
		if err != nil {
			return err
		}
		_, err = compute.NewRouterPeer(ctx, "router_peer1", &compute.RouterPeerArgs{
			Name:                    pulumi.String("router-peer1"),
			Router:                  router.Name,
			Region:                  pulumi.String("us-central1"),
			PeerIpAddress:           pulumi.String("169.254.0.2"),
			PeerAsn:                 pulumi.Int(64515),
			AdvertisedRoutePriority: pulumi.Int(100),
			Interface:               routerInterface1.Name,
		})
		if err != nil {
			return err
		}
		routerInterface2, err := compute.NewRouterInterface(ctx, "router_interface2", &compute.RouterInterfaceArgs{
			Name:      pulumi.String("router-interface2"),
			Router:    router.Name,
			Region:    pulumi.String("us-central1"),
			IpRange:   pulumi.String("169.254.1.1/30"),
			VpnTunnel: tunnel2.Name,
		})
		if err != nil {
			return err
		}
		_, err = compute.NewRouterPeer(ctx, "router_peer2", &compute.RouterPeerArgs{
			Name:                    pulumi.String("router-peer2"),
			Router:                  router.Name,
			Region:                  pulumi.String("us-central1"),
			PeerIpAddress:           pulumi.String("169.254.1.2"),
			PeerAsn:                 pulumi.Int(64515),
			AdvertisedRoutePriority: pulumi.Int(100),
			Interface:               routerInterface2.Name,
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "tunnel1", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("vpn-tunnel-1-spoke"),
			Location:    pulumi.String("us-central1"),
			Description: pulumi.String("A sample spoke with a linked VPN Tunnel"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedVpnTunnels: &networkconnectivity.SpokeLinkedVpnTunnelsArgs{
				Uris: pulumi.StringArray{
					tunnel1.SelfLink,
				},
				SiteToSiteDataTransfer: pulumi.Bool(true),
				IncludeImportRanges: pulumi.StringArray{
					pulumi.String("ALL_IPV4_RANGES"),
				},
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "tunnel2", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("vpn-tunnel-2-spoke"),
			Location:    pulumi.String("us-central1"),
			Description: pulumi.String("A sample spoke with a linked VPN Tunnel"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedVpnTunnels: &networkconnectivity.SpokeLinkedVpnTunnelsArgs{
				Uris: pulumi.StringArray{
					tunnel2.SelfLink,
				},
				SiteToSiteDataTransfer: pulumi.Bool(true),
				IncludeImportRanges: pulumi.StringArray{
					pulumi.String("ALL_IPV4_RANGES"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "basic-hub1",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "basic-network",
        AutoCreateSubnetworks = false,
    });

    var subnetwork = new Gcp.Compute.Subnetwork("subnetwork", new()
    {
        Name = "basic-subnetwork",
        IpCidrRange = "10.0.0.0/28",
        Region = "us-central1",
        Network = network.SelfLink,
    });

    var gateway = new Gcp.Compute.HaVpnGateway("gateway", new()
    {
        Name = "vpn-gateway",
        Network = network.Id,
    });

    var externalVpnGw = new Gcp.Compute.ExternalVpnGateway("external_vpn_gw", new()
    {
        Name = "external-vpn-gateway",
        RedundancyType = "SINGLE_IP_INTERNALLY_REDUNDANT",
        Description = "An externally managed VPN gateway",
        Interfaces = new[]
        {
            new Gcp.Compute.Inputs.ExternalVpnGatewayInterfaceArgs
            {
                Id = 0,
                IpAddress = "8.8.8.8",
            },
        },
    });

    var router = new Gcp.Compute.Router("router", new()
    {
        Name = "external-vpn-gateway",
        Region = "us-central1",
        Network = network.Name,
        Bgp = new Gcp.Compute.Inputs.RouterBgpArgs
        {
            Asn = 64514,
        },
    });

    var tunnel1 = new Gcp.Compute.VPNTunnel("tunnel1", new()
    {
        Name = "tunnel1",
        Region = "us-central1",
        VpnGateway = gateway.Id,
        PeerExternalGateway = externalVpnGw.Id,
        PeerExternalGatewayInterface = 0,
        SharedSecret = "a secret message",
        Router = router.Id,
        VpnGatewayInterface = 0,
    });

    var tunnel2 = new Gcp.Compute.VPNTunnel("tunnel2", new()
    {
        Name = "tunnel2",
        Region = "us-central1",
        VpnGateway = gateway.Id,
        PeerExternalGateway = externalVpnGw.Id,
        PeerExternalGatewayInterface = 0,
        SharedSecret = "a secret message",
        Router = router.Id.Apply(id => $" {id}"),
        VpnGatewayInterface = 1,
    });

    var routerInterface1 = new Gcp.Compute.RouterInterface("router_interface1", new()
    {
        Name = "router-interface1",
        Router = router.Name,
        Region = "us-central1",
        IpRange = "169.254.0.1/30",
        VpnTunnel = tunnel1.Name,
    });

    var routerPeer1 = new Gcp.Compute.RouterPeer("router_peer1", new()
    {
        Name = "router-peer1",
        Router = router.Name,
        Region = "us-central1",
        PeerIpAddress = "169.254.0.2",
        PeerAsn = 64515,
        AdvertisedRoutePriority = 100,
        Interface = routerInterface1.Name,
    });

    var routerInterface2 = new Gcp.Compute.RouterInterface("router_interface2", new()
    {
        Name = "router-interface2",
        Router = router.Name,
        Region = "us-central1",
        IpRange = "169.254.1.1/30",
        VpnTunnel = tunnel2.Name,
    });

    var routerPeer2 = new Gcp.Compute.RouterPeer("router_peer2", new()
    {
        Name = "router-peer2",
        Router = router.Name,
        Region = "us-central1",
        PeerIpAddress = "169.254.1.2",
        PeerAsn = 64515,
        AdvertisedRoutePriority = 100,
        Interface = routerInterface2.Name,
    });

    var tunnel1Spoke = new Gcp.NetworkConnectivity.Spoke("tunnel1", new()
    {
        Name = "vpn-tunnel-1-spoke",
        Location = "us-central1",
        Description = "A sample spoke with a linked VPN Tunnel",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs
        {
            Uris = new[]
            {
                tunnel1.SelfLink,
            },
            SiteToSiteDataTransfer = true,
            IncludeImportRanges = new[]
            {
                "ALL_IPV4_RANGES",
            },
        },
    });

    var tunnel2Spoke = new Gcp.NetworkConnectivity.Spoke("tunnel2", new()
    {
        Name = "vpn-tunnel-2-spoke",
        Location = "us-central1",
        Description = "A sample spoke with a linked VPN Tunnel",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs
        {
            Uris = new[]
            {
                tunnel2.SelfLink,
            },
            SiteToSiteDataTransfer = true,
            IncludeImportRanges = new[]
            {
                "ALL_IPV4_RANGES",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Subnetwork;
import com.pulumi.gcp.compute.SubnetworkArgs;
import com.pulumi.gcp.compute.HaVpnGateway;
import com.pulumi.gcp.compute.HaVpnGatewayArgs;
import com.pulumi.gcp.compute.ExternalVpnGateway;
import com.pulumi.gcp.compute.ExternalVpnGatewayArgs;
import com.pulumi.gcp.compute.inputs.ExternalVpnGatewayInterfaceArgs;
import com.pulumi.gcp.compute.Router;
import com.pulumi.gcp.compute.RouterArgs;
import com.pulumi.gcp.compute.inputs.RouterBgpArgs;
import com.pulumi.gcp.compute.VPNTunnel;
import com.pulumi.gcp.compute.VPNTunnelArgs;
import com.pulumi.gcp.compute.RouterInterface;
import com.pulumi.gcp.compute.RouterInterfaceArgs;
import com.pulumi.gcp.compute.RouterPeer;
import com.pulumi.gcp.compute.RouterPeerArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpnTunnelsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("basic-hub1")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var network = new Network("network", NetworkArgs.builder()
            .name("basic-network")
            .autoCreateSubnetworks(false)
            .build());

        var subnetwork = new Subnetwork("subnetwork", SubnetworkArgs.builder()
            .name("basic-subnetwork")
            .ipCidrRange("10.0.0.0/28")
            .region("us-central1")
            .network(network.selfLink())
            .build());

        var gateway = new HaVpnGateway("gateway", HaVpnGatewayArgs.builder()
            .name("vpn-gateway")
            .network(network.id())
            .build());

        var externalVpnGw = new ExternalVpnGateway("externalVpnGw", ExternalVpnGatewayArgs.builder()
            .name("external-vpn-gateway")
            .redundancyType("SINGLE_IP_INTERNALLY_REDUNDANT")
            .description("An externally managed VPN gateway")
            .interfaces(ExternalVpnGatewayInterfaceArgs.builder()
                .id(0)
                .ipAddress("8.8.8.8")
                .build())
            .build());

        var router = new Router("router", RouterArgs.builder()
            .name("external-vpn-gateway")
            .region("us-central1")
            .network(network.name())
            .bgp(RouterBgpArgs.builder()
                .asn(64514)
                .build())
            .build());

        var tunnel1 = new VPNTunnel("tunnel1", VPNTunnelArgs.builder()
            .name("tunnel1")
            .region("us-central1")
            .vpnGateway(gateway.id())
            .peerExternalGateway(externalVpnGw.id())
            .peerExternalGatewayInterface(0)
            .sharedSecret("a secret message")
            .router(router.id())
            .vpnGatewayInterface(0)
            .build());

        var tunnel2 = new VPNTunnel("tunnel2", VPNTunnelArgs.builder()
            .name("tunnel2")
            .region("us-central1")
            .vpnGateway(gateway.id())
            .peerExternalGateway(externalVpnGw.id())
            .peerExternalGatewayInterface(0)
            .sharedSecret("a secret message")
            .router(router.id().applyValue(_id -> String.format(" %s", _id)))
            .vpnGatewayInterface(1)
            .build());

        var routerInterface1 = new RouterInterface("routerInterface1", RouterInterfaceArgs.builder()
            .name("router-interface1")
            .router(router.name())
            .region("us-central1")
            .ipRange("169.254.0.1/30")
            .vpnTunnel(tunnel1.name())
            .build());

        var routerPeer1 = new RouterPeer("routerPeer1", RouterPeerArgs.builder()
            .name("router-peer1")
            .router(router.name())
            .region("us-central1")
            .peerIpAddress("169.254.0.2")
            .peerAsn(64515)
            .advertisedRoutePriority(100)
            .interface_(routerInterface1.name())
            .build());

        var routerInterface2 = new RouterInterface("routerInterface2", RouterInterfaceArgs.builder()
            .name("router-interface2")
            .router(router.name())
            .region("us-central1")
            .ipRange("169.254.1.1/30")
            .vpnTunnel(tunnel2.name())
            .build());

        var routerPeer2 = new RouterPeer("routerPeer2", RouterPeerArgs.builder()
            .name("router-peer2")
            .router(router.name())
            .region("us-central1")
            .peerIpAddress("169.254.1.2")
            .peerAsn(64515)
            .advertisedRoutePriority(100)
            .interface_(routerInterface2.name())
            .build());

        var tunnel1Spoke = new Spoke("tunnel1Spoke", SpokeArgs.builder()
            .name("vpn-tunnel-1-spoke")
            .location("us-central1")
            .description("A sample spoke with a linked VPN Tunnel")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()
                .uris(tunnel1.selfLink())
                .siteToSiteDataTransfer(true)
                .includeImportRanges("ALL_IPV4_RANGES")
                .build())
            .build());

        var tunnel2Spoke = new Spoke("tunnel2Spoke", SpokeArgs.builder()
            .name("vpn-tunnel-2-spoke")
            .location("us-central1")
            .description("A sample spoke with a linked VPN Tunnel")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()
                .uris(tunnel2.selfLink())
                .siteToSiteDataTransfer(true)
                .includeImportRanges("ALL_IPV4_RANGES")
                .build())
            .build());

    }
}
Copy
resources:
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: basic-hub1
      description: A sample hub
      labels:
        label-two: value-one
  network:
    type: gcp:compute:Network
    properties:
      name: basic-network
      autoCreateSubnetworks: false
  subnetwork:
    type: gcp:compute:Subnetwork
    properties:
      name: basic-subnetwork
      ipCidrRange: 10.0.0.0/28
      region: us-central1
      network: ${network.selfLink}
  gateway:
    type: gcp:compute:HaVpnGateway
    properties:
      name: vpn-gateway
      network: ${network.id}
  externalVpnGw:
    type: gcp:compute:ExternalVpnGateway
    name: external_vpn_gw
    properties:
      name: external-vpn-gateway
      redundancyType: SINGLE_IP_INTERNALLY_REDUNDANT
      description: An externally managed VPN gateway
      interfaces:
        - id: 0
          ipAddress: 8.8.8.8
  router:
    type: gcp:compute:Router
    properties:
      name: external-vpn-gateway
      region: us-central1
      network: ${network.name}
      bgp:
        asn: 64514
  tunnel1:
    type: gcp:compute:VPNTunnel
    properties:
      name: tunnel1
      region: us-central1
      vpnGateway: ${gateway.id}
      peerExternalGateway: ${externalVpnGw.id}
      peerExternalGatewayInterface: 0
      sharedSecret: a secret message
      router: ${router.id}
      vpnGatewayInterface: 0
  tunnel2:
    type: gcp:compute:VPNTunnel
    properties:
      name: tunnel2
      region: us-central1
      vpnGateway: ${gateway.id}
      peerExternalGateway: ${externalVpnGw.id}
      peerExternalGatewayInterface: 0
      sharedSecret: a secret message
      router: ' ${router.id}'
      vpnGatewayInterface: 1
  routerInterface1:
    type: gcp:compute:RouterInterface
    name: router_interface1
    properties:
      name: router-interface1
      router: ${router.name}
      region: us-central1
      ipRange: 169.254.0.1/30
      vpnTunnel: ${tunnel1.name}
  routerPeer1:
    type: gcp:compute:RouterPeer
    name: router_peer1
    properties:
      name: router-peer1
      router: ${router.name}
      region: us-central1
      peerIpAddress: 169.254.0.2
      peerAsn: 64515
      advertisedRoutePriority: 100
      interface: ${routerInterface1.name}
  routerInterface2:
    type: gcp:compute:RouterInterface
    name: router_interface2
    properties:
      name: router-interface2
      router: ${router.name}
      region: us-central1
      ipRange: 169.254.1.1/30
      vpnTunnel: ${tunnel2.name}
  routerPeer2:
    type: gcp:compute:RouterPeer
    name: router_peer2
    properties:
      name: router-peer2
      router: ${router.name}
      region: us-central1
      peerIpAddress: 169.254.1.2
      peerAsn: 64515
      advertisedRoutePriority: 100
      interface: ${routerInterface2.name}
  tunnel1Spoke:
    type: gcp:networkconnectivity:Spoke
    name: tunnel1
    properties:
      name: vpn-tunnel-1-spoke
      location: us-central1
      description: A sample spoke with a linked VPN Tunnel
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedVpnTunnels:
        uris:
          - ${tunnel1.selfLink}
        siteToSiteDataTransfer: true
        includeImportRanges:
          - ALL_IPV4_RANGES
  tunnel2Spoke:
    type: gcp:networkconnectivity:Spoke
    name: tunnel2
    properties:
      name: vpn-tunnel-2-spoke
      location: us-central1
      description: A sample spoke with a linked VPN Tunnel
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedVpnTunnels:
        uris:
          - ${tunnel2.selfLink}
        siteToSiteDataTransfer: true
        includeImportRanges:
          - ALL_IPV4_RANGES
Copy

Network Connectivity Spoke Interconnect Attachment Basic

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

const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "basic-hub1",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const network = new gcp.compute.Network("network", {
    name: "basic-network",
    autoCreateSubnetworks: false,
});
const router = new gcp.compute.Router("router", {
    name: "external-vpn-gateway",
    region: "us-central1",
    network: network.name,
    bgp: {
        asn: 16550,
    },
});
const interconnect_attachment = new gcp.compute.InterconnectAttachment("interconnect-attachment", {
    name: "partner-interconnect1",
    edgeAvailabilityDomain: "AVAILABILITY_DOMAIN_1",
    type: "PARTNER",
    router: router.id,
    mtu: "1500",
    region: "us-central1",
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "interconnect-attachment-spoke",
    location: "us-central1",
    description: "A sample spoke with a linked Interconnect Attachment",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedInterconnectAttachments: {
        uris: [interconnect_attachment.selfLink],
        siteToSiteDataTransfer: true,
        includeImportRanges: ["ALL_IPV4_RANGES"],
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="basic-hub1",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
network = gcp.compute.Network("network",
    name="basic-network",
    auto_create_subnetworks=False)
router = gcp.compute.Router("router",
    name="external-vpn-gateway",
    region="us-central1",
    network=network.name,
    bgp={
        "asn": 16550,
    })
interconnect_attachment = gcp.compute.InterconnectAttachment("interconnect-attachment",
    name="partner-interconnect1",
    edge_availability_domain="AVAILABILITY_DOMAIN_1",
    type="PARTNER",
    router=router.id,
    mtu="1500",
    region="us-central1")
primary = gcp.networkconnectivity.Spoke("primary",
    name="interconnect-attachment-spoke",
    location="us-central1",
    description="A sample spoke with a linked Interconnect Attachment",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_interconnect_attachments={
        "uris": [interconnect_attachment.self_link],
        "site_to_site_data_transfer": True,
        "include_import_ranges": ["ALL_IPV4_RANGES"],
    })
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("basic-hub1"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("basic-network"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		router, err := compute.NewRouter(ctx, "router", &compute.RouterArgs{
			Name:    pulumi.String("external-vpn-gateway"),
			Region:  pulumi.String("us-central1"),
			Network: network.Name,
			Bgp: &compute.RouterBgpArgs{
				Asn: pulumi.Int(16550),
			},
		})
		if err != nil {
			return err
		}
		interconnect_attachment, err := compute.NewInterconnectAttachment(ctx, "interconnect-attachment", &compute.InterconnectAttachmentArgs{
			Name:                   pulumi.String("partner-interconnect1"),
			EdgeAvailabilityDomain: pulumi.String("AVAILABILITY_DOMAIN_1"),
			Type:                   pulumi.String("PARTNER"),
			Router:                 router.ID(),
			Mtu:                    pulumi.String("1500"),
			Region:                 pulumi.String("us-central1"),
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("interconnect-attachment-spoke"),
			Location:    pulumi.String("us-central1"),
			Description: pulumi.String("A sample spoke with a linked Interconnect Attachment"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedInterconnectAttachments: &networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{
				Uris: pulumi.StringArray{
					interconnect_attachment.SelfLink,
				},
				SiteToSiteDataTransfer: pulumi.Bool(true),
				IncludeImportRanges: pulumi.StringArray{
					pulumi.String("ALL_IPV4_RANGES"),
				},
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "basic-hub1",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "basic-network",
        AutoCreateSubnetworks = false,
    });

    var router = new Gcp.Compute.Router("router", new()
    {
        Name = "external-vpn-gateway",
        Region = "us-central1",
        Network = network.Name,
        Bgp = new Gcp.Compute.Inputs.RouterBgpArgs
        {
            Asn = 16550,
        },
    });

    var interconnect_attachment = new Gcp.Compute.InterconnectAttachment("interconnect-attachment", new()
    {
        Name = "partner-interconnect1",
        EdgeAvailabilityDomain = "AVAILABILITY_DOMAIN_1",
        Type = "PARTNER",
        Router = router.Id,
        Mtu = "1500",
        Region = "us-central1",
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "interconnect-attachment-spoke",
        Location = "us-central1",
        Description = "A sample spoke with a linked Interconnect Attachment",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs
        {
            Uris = new[]
            {
                interconnect_attachment.SelfLink,
            },
            SiteToSiteDataTransfer = true,
            IncludeImportRanges = new[]
            {
                "ALL_IPV4_RANGES",
            },
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.Router;
import com.pulumi.gcp.compute.RouterArgs;
import com.pulumi.gcp.compute.inputs.RouterBgpArgs;
import com.pulumi.gcp.compute.InterconnectAttachment;
import com.pulumi.gcp.compute.InterconnectAttachmentArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedInterconnectAttachmentsArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("basic-hub1")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var network = new Network("network", NetworkArgs.builder()
            .name("basic-network")
            .autoCreateSubnetworks(false)
            .build());

        var router = new Router("router", RouterArgs.builder()
            .name("external-vpn-gateway")
            .region("us-central1")
            .network(network.name())
            .bgp(RouterBgpArgs.builder()
                .asn(16550)
                .build())
            .build());

        var interconnect_attachment = new InterconnectAttachment("interconnect-attachment", InterconnectAttachmentArgs.builder()
            .name("partner-interconnect1")
            .edgeAvailabilityDomain("AVAILABILITY_DOMAIN_1")
            .type("PARTNER")
            .router(router.id())
            .mtu("1500")
            .region("us-central1")
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("interconnect-attachment-spoke")
            .location("us-central1")
            .description("A sample spoke with a linked Interconnect Attachment")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()
                .uris(interconnect_attachment.selfLink())
                .siteToSiteDataTransfer(true)
                .includeImportRanges("ALL_IPV4_RANGES")
                .build())
            .build());

    }
}
Copy
resources:
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: basic-hub1
      description: A sample hub
      labels:
        label-two: value-one
  network:
    type: gcp:compute:Network
    properties:
      name: basic-network
      autoCreateSubnetworks: false
  router:
    type: gcp:compute:Router
    properties:
      name: external-vpn-gateway
      region: us-central1
      network: ${network.name}
      bgp:
        asn: 16550
  interconnect-attachment:
    type: gcp:compute:InterconnectAttachment
    properties:
      name: partner-interconnect1
      edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1
      type: PARTNER
      router: ${router.id}
      mtu: 1500
      region: us-central1
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: interconnect-attachment-spoke
      location: us-central1
      description: A sample spoke with a linked Interconnect Attachment
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedInterconnectAttachments:
        uris:
          - ${["interconnect-attachment"].selfLink}
        siteToSiteDataTransfer: true
        includeImportRanges:
          - ALL_IPV4_RANGES
Copy

Network Connectivity Spoke Linked Producer Vpc Network Basic

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

const network = new gcp.compute.Network("network", {
    name: "net-spoke",
    autoCreateSubnetworks: false,
});
const address = new gcp.compute.GlobalAddress("address", {
    name: "test-address",
    purpose: "VPC_PEERING",
    addressType: "INTERNAL",
    prefixLength: 16,
    network: network.id,
});
const peering = new gcp.servicenetworking.Connection("peering", {
    network: network.id,
    service: "servicenetworking.googleapis.com",
    reservedPeeringRanges: [address.name],
});
const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {name: "hub-basic"});
const linkedVpcSpoke = new gcp.networkconnectivity.Spoke("linked_vpc_spoke", {
    name: "vpc-spoke",
    location: "global",
    hub: basicHub.id,
    linkedVpcNetwork: {
        uri: network.selfLink,
    },
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "producer-spoke",
    location: "global",
    description: "A sample spoke with a linked router appliance instance",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedProducerVpcNetwork: {
        network: network.name,
        peering: peering.peering,
        excludeExportRanges: [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
    },
}, {
    dependsOn: [linkedVpcSpoke],
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="net-spoke",
    auto_create_subnetworks=False)
address = gcp.compute.GlobalAddress("address",
    name="test-address",
    purpose="VPC_PEERING",
    address_type="INTERNAL",
    prefix_length=16,
    network=network.id)
peering = gcp.servicenetworking.Connection("peering",
    network=network.id,
    service="servicenetworking.googleapis.com",
    reserved_peering_ranges=[address.name])
basic_hub = gcp.networkconnectivity.Hub("basic_hub", name="hub-basic")
linked_vpc_spoke = gcp.networkconnectivity.Spoke("linked_vpc_spoke",
    name="vpc-spoke",
    location="global",
    hub=basic_hub.id,
    linked_vpc_network={
        "uri": network.self_link,
    })
primary = gcp.networkconnectivity.Spoke("primary",
    name="producer-spoke",
    location="global",
    description="A sample spoke with a linked router appliance instance",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_producer_vpc_network={
        "network": network.name,
        "peering": peering.peering,
        "exclude_export_ranges": [
            "198.51.100.0/24",
            "10.10.0.0/16",
        ],
    },
    opts = pulumi.ResourceOptions(depends_on=[linked_vpc_spoke]))
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/servicenetworking"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("net-spoke"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		address, err := compute.NewGlobalAddress(ctx, "address", &compute.GlobalAddressArgs{
			Name:         pulumi.String("test-address"),
			Purpose:      pulumi.String("VPC_PEERING"),
			AddressType:  pulumi.String("INTERNAL"),
			PrefixLength: pulumi.Int(16),
			Network:      network.ID(),
		})
		if err != nil {
			return err
		}
		peering, err := servicenetworking.NewConnection(ctx, "peering", &servicenetworking.ConnectionArgs{
			Network: network.ID(),
			Service: pulumi.String("servicenetworking.googleapis.com"),
			ReservedPeeringRanges: pulumi.StringArray{
				address.Name,
			},
		})
		if err != nil {
			return err
		}
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name: pulumi.String("hub-basic"),
		})
		if err != nil {
			return err
		}
		linkedVpcSpoke, err := networkconnectivity.NewSpoke(ctx, "linked_vpc_spoke", &networkconnectivity.SpokeArgs{
			Name:     pulumi.String("vpc-spoke"),
			Location: pulumi.String("global"),
			Hub:      basicHub.ID(),
			LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
				Uri: network.SelfLink,
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("producer-spoke"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("A sample spoke with a linked router appliance instance"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedProducerVpcNetwork: &networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{
				Network: network.Name,
				Peering: peering.Peering,
				ExcludeExportRanges: pulumi.StringArray{
					pulumi.String("198.51.100.0/24"),
					pulumi.String("10.10.0.0/16"),
				},
			},
		}, pulumi.DependsOn([]pulumi.Resource{
			linkedVpcSpoke,
		}))
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "net-spoke",
        AutoCreateSubnetworks = false,
    });

    var address = new Gcp.Compute.GlobalAddress("address", new()
    {
        Name = "test-address",
        Purpose = "VPC_PEERING",
        AddressType = "INTERNAL",
        PrefixLength = 16,
        Network = network.Id,
    });

    var peering = new Gcp.ServiceNetworking.Connection("peering", new()
    {
        Network = network.Id,
        Service = "servicenetworking.googleapis.com",
        ReservedPeeringRanges = new[]
        {
            address.Name,
        },
    });

    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "hub-basic",
    });

    var linkedVpcSpoke = new Gcp.NetworkConnectivity.Spoke("linked_vpc_spoke", new()
    {
        Name = "vpc-spoke",
        Location = "global",
        Hub = basicHub.Id,
        LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
        {
            Uri = network.SelfLink,
        },
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "producer-spoke",
        Location = "global",
        Description = "A sample spoke with a linked router appliance instance",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs
        {
            Network = network.Name,
            Peering = peering.Peering,
            ExcludeExportRanges = new[]
            {
                "198.51.100.0/24",
                "10.10.0.0/16",
            },
        },
    }, new CustomResourceOptions
    {
        DependsOn =
        {
            linkedVpcSpoke,
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.compute.GlobalAddress;
import com.pulumi.gcp.compute.GlobalAddressArgs;
import com.pulumi.gcp.servicenetworking.Connection;
import com.pulumi.gcp.servicenetworking.ConnectionArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedProducerVpcNetworkArgs;
import com.pulumi.resources.CustomResourceOptions;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("net-spoke")
            .autoCreateSubnetworks(false)
            .build());

        var address = new GlobalAddress("address", GlobalAddressArgs.builder()
            .name("test-address")
            .purpose("VPC_PEERING")
            .addressType("INTERNAL")
            .prefixLength(16)
            .network(network.id())
            .build());

        var peering = new Connection("peering", ConnectionArgs.builder()
            .network(network.id())
            .service("servicenetworking.googleapis.com")
            .reservedPeeringRanges(address.name())
            .build());

        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("hub-basic")
            .build());

        var linkedVpcSpoke = new Spoke("linkedVpcSpoke", SpokeArgs.builder()
            .name("vpc-spoke")
            .location("global")
            .hub(basicHub.id())
            .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
                .uri(network.selfLink())
                .build())
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("producer-spoke")
            .location("global")
            .description("A sample spoke with a linked router appliance instance")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()
                .network(network.name())
                .peering(peering.peering())
                .excludeExportRanges(                
                    "198.51.100.0/24",
                    "10.10.0.0/16")
                .build())
            .build(), CustomResourceOptions.builder()
                .dependsOn(linkedVpcSpoke)
                .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: net-spoke
      autoCreateSubnetworks: false
  address:
    type: gcp:compute:GlobalAddress
    properties:
      name: test-address
      purpose: VPC_PEERING
      addressType: INTERNAL
      prefixLength: 16
      network: ${network.id}
  peering:
    type: gcp:servicenetworking:Connection
    properties:
      network: ${network.id}
      service: servicenetworking.googleapis.com
      reservedPeeringRanges:
        - ${address.name}
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: hub-basic
  linkedVpcSpoke:
    type: gcp:networkconnectivity:Spoke
    name: linked_vpc_spoke
    properties:
      name: vpc-spoke
      location: global
      hub: ${basicHub.id}
      linkedVpcNetwork:
        uri: ${network.selfLink}
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: producer-spoke
      location: global
      description: A sample spoke with a linked router appliance instance
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedProducerVpcNetwork:
        network: ${network.name}
        peering: ${peering.peering}
        excludeExportRanges:
          - 198.51.100.0/24
          - 10.10.0.0/16
    options:
      dependsOn:
        - ${linkedVpcSpoke}
Copy

Network Connectivity Spoke Center Group

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

const network = new gcp.compute.Network("network", {
    name: "tf-net",
    autoCreateSubnetworks: false,
});
const starHub = new gcp.networkconnectivity.Hub("star_hub", {
    name: "hub-basic",
    presetTopology: "STAR",
});
const centerGroup = new gcp.networkconnectivity.Group("center_group", {
    name: "center",
    hub: starHub.id,
    autoAccept: {
        autoAcceptProjects: [
            "foo_33395",
            "bar_76044",
        ],
    },
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "vpc-spoke",
    location: "global",
    description: "A sample spoke",
    labels: {
        "label-one": "value-one",
    },
    hub: starHub.id,
    group: centerGroup.id,
    linkedVpcNetwork: {
        uri: network.selfLink,
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="tf-net",
    auto_create_subnetworks=False)
star_hub = gcp.networkconnectivity.Hub("star_hub",
    name="hub-basic",
    preset_topology="STAR")
center_group = gcp.networkconnectivity.Group("center_group",
    name="center",
    hub=star_hub.id,
    auto_accept={
        "auto_accept_projects": [
            "foo_33395",
            "bar_76044",
        ],
    })
primary = gcp.networkconnectivity.Spoke("primary",
    name="vpc-spoke",
    location="global",
    description="A sample spoke",
    labels={
        "label-one": "value-one",
    },
    hub=star_hub.id,
    group=center_group.id,
    linked_vpc_network={
        "uri": network.self_link,
    })
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("tf-net"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		starHub, err := networkconnectivity.NewHub(ctx, "star_hub", &networkconnectivity.HubArgs{
			Name:           pulumi.String("hub-basic"),
			PresetTopology: pulumi.String("STAR"),
		})
		if err != nil {
			return err
		}
		centerGroup, err := networkconnectivity.NewGroup(ctx, "center_group", &networkconnectivity.GroupArgs{
			Name: pulumi.String("center"),
			Hub:  starHub.ID(),
			AutoAccept: &networkconnectivity.GroupAutoAcceptArgs{
				AutoAcceptProjects: pulumi.StringArray{
					pulumi.String("foo_33395"),
					pulumi.String("bar_76044"),
				},
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("vpc-spoke"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("A sample spoke"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub:   starHub.ID(),
			Group: centerGroup.ID(),
			LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
				Uri: network.SelfLink,
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "tf-net",
        AutoCreateSubnetworks = false,
    });

    var starHub = new Gcp.NetworkConnectivity.Hub("star_hub", new()
    {
        Name = "hub-basic",
        PresetTopology = "STAR",
    });

    var centerGroup = new Gcp.NetworkConnectivity.Group("center_group", new()
    {
        Name = "center",
        Hub = starHub.Id,
        AutoAccept = new Gcp.NetworkConnectivity.Inputs.GroupAutoAcceptArgs
        {
            AutoAcceptProjects = new[]
            {
                "foo_33395",
                "bar_76044",
            },
        },
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "vpc-spoke",
        Location = "global",
        Description = "A sample spoke",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = starHub.Id,
        Group = centerGroup.Id,
        LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
        {
            Uri = network.SelfLink,
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Group;
import com.pulumi.gcp.networkconnectivity.GroupArgs;
import com.pulumi.gcp.networkconnectivity.inputs.GroupAutoAcceptArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("tf-net")
            .autoCreateSubnetworks(false)
            .build());

        var starHub = new Hub("starHub", HubArgs.builder()
            .name("hub-basic")
            .presetTopology("STAR")
            .build());

        var centerGroup = new Group("centerGroup", GroupArgs.builder()
            .name("center")
            .hub(starHub.id())
            .autoAccept(GroupAutoAcceptArgs.builder()
                .autoAcceptProjects(                
                    "foo_33395",
                    "bar_76044")
                .build())
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("vpc-spoke")
            .location("global")
            .description("A sample spoke")
            .labels(Map.of("label-one", "value-one"))
            .hub(starHub.id())
            .group(centerGroup.id())
            .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
                .uri(network.selfLink())
                .build())
            .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: tf-net
      autoCreateSubnetworks: false
  starHub:
    type: gcp:networkconnectivity:Hub
    name: star_hub
    properties:
      name: hub-basic
      presetTopology: STAR
  centerGroup:
    type: gcp:networkconnectivity:Group
    name: center_group
    properties:
      name: center
      hub: ${starHub.id}
      autoAccept:
        autoAcceptProjects:
          - foo_33395
          - bar_76044
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: vpc-spoke
      location: global
      description: A sample spoke
      labels:
        label-one: value-one
      hub: ${starHub.id}
      group: ${centerGroup.id}
      linkedVpcNetwork:
        uri: ${network.selfLink}
Copy

Network Connectivity Spoke Linked Vpc Network Ipv6 Support

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

const network = new gcp.compute.Network("network", {
    name: "net",
    autoCreateSubnetworks: false,
});
const basicHub = new gcp.networkconnectivity.Hub("basic_hub", {
    name: "hub1",
    description: "A sample hub",
    labels: {
        "label-two": "value-one",
    },
});
const primary = new gcp.networkconnectivity.Spoke("primary", {
    name: "spoke1-ipv6",
    location: "global",
    description: "A sample spoke with a linked VPC that include export ranges of all IPv6",
    labels: {
        "label-one": "value-one",
    },
    hub: basicHub.id,
    linkedVpcNetwork: {
        includeExportRanges: [
            "ALL_IPV6_RANGES",
            "ALL_PRIVATE_IPV4_RANGES",
        ],
        uri: network.selfLink,
    },
});
Copy
import pulumi
import pulumi_gcp as gcp

network = gcp.compute.Network("network",
    name="net",
    auto_create_subnetworks=False)
basic_hub = gcp.networkconnectivity.Hub("basic_hub",
    name="hub1",
    description="A sample hub",
    labels={
        "label-two": "value-one",
    })
primary = gcp.networkconnectivity.Spoke("primary",
    name="spoke1-ipv6",
    location="global",
    description="A sample spoke with a linked VPC that include export ranges of all IPv6",
    labels={
        "label-one": "value-one",
    },
    hub=basic_hub.id,
    linked_vpc_network={
        "include_export_ranges": [
            "ALL_IPV6_RANGES",
            "ALL_PRIVATE_IPV4_RANGES",
        ],
        "uri": network.self_link,
    })
Copy
package main

import (
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/compute"
	"github.com/pulumi/pulumi-gcp/sdk/v8/go/gcp/networkconnectivity"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func main() {
	pulumi.Run(func(ctx *pulumi.Context) error {
		network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{
			Name:                  pulumi.String("net"),
			AutoCreateSubnetworks: pulumi.Bool(false),
		})
		if err != nil {
			return err
		}
		basicHub, err := networkconnectivity.NewHub(ctx, "basic_hub", &networkconnectivity.HubArgs{
			Name:        pulumi.String("hub1"),
			Description: pulumi.String("A sample hub"),
			Labels: pulumi.StringMap{
				"label-two": pulumi.String("value-one"),
			},
		})
		if err != nil {
			return err
		}
		_, err = networkconnectivity.NewSpoke(ctx, "primary", &networkconnectivity.SpokeArgs{
			Name:        pulumi.String("spoke1-ipv6"),
			Location:    pulumi.String("global"),
			Description: pulumi.String("A sample spoke with a linked VPC that include export ranges of all IPv6"),
			Labels: pulumi.StringMap{
				"label-one": pulumi.String("value-one"),
			},
			Hub: basicHub.ID(),
			LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
				IncludeExportRanges: pulumi.StringArray{
					pulumi.String("ALL_IPV6_RANGES"),
					pulumi.String("ALL_PRIVATE_IPV4_RANGES"),
				},
				Uri: network.SelfLink,
			},
		})
		if err != nil {
			return err
		}
		return nil
	})
}
Copy
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using Gcp = Pulumi.Gcp;

return await Deployment.RunAsync(() => 
{
    var network = new Gcp.Compute.Network("network", new()
    {
        Name = "net",
        AutoCreateSubnetworks = false,
    });

    var basicHub = new Gcp.NetworkConnectivity.Hub("basic_hub", new()
    {
        Name = "hub1",
        Description = "A sample hub",
        Labels = 
        {
            { "label-two", "value-one" },
        },
    });

    var primary = new Gcp.NetworkConnectivity.Spoke("primary", new()
    {
        Name = "spoke1-ipv6",
        Location = "global",
        Description = "A sample spoke with a linked VPC that include export ranges of all IPv6",
        Labels = 
        {
            { "label-one", "value-one" },
        },
        Hub = basicHub.Id,
        LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
        {
            IncludeExportRanges = new[]
            {
                "ALL_IPV6_RANGES",
                "ALL_PRIVATE_IPV4_RANGES",
            },
            Uri = network.SelfLink,
        },
    });

});
Copy
package generated_program;

import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.compute.Network;
import com.pulumi.gcp.compute.NetworkArgs;
import com.pulumi.gcp.networkconnectivity.Hub;
import com.pulumi.gcp.networkconnectivity.HubArgs;
import com.pulumi.gcp.networkconnectivity.Spoke;
import com.pulumi.gcp.networkconnectivity.SpokeArgs;
import com.pulumi.gcp.networkconnectivity.inputs.SpokeLinkedVpcNetworkArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;

public class App {
    public static void main(String[] args) {
        Pulumi.run(App::stack);
    }

    public static void stack(Context ctx) {
        var network = new Network("network", NetworkArgs.builder()
            .name("net")
            .autoCreateSubnetworks(false)
            .build());

        var basicHub = new Hub("basicHub", HubArgs.builder()
            .name("hub1")
            .description("A sample hub")
            .labels(Map.of("label-two", "value-one"))
            .build());

        var primary = new Spoke("primary", SpokeArgs.builder()
            .name("spoke1-ipv6")
            .location("global")
            .description("A sample spoke with a linked VPC that include export ranges of all IPv6")
            .labels(Map.of("label-one", "value-one"))
            .hub(basicHub.id())
            .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
                .includeExportRanges(                
                    "ALL_IPV6_RANGES",
                    "ALL_PRIVATE_IPV4_RANGES")
                .uri(network.selfLink())
                .build())
            .build());

    }
}
Copy
resources:
  network:
    type: gcp:compute:Network
    properties:
      name: net
      autoCreateSubnetworks: false
  basicHub:
    type: gcp:networkconnectivity:Hub
    name: basic_hub
    properties:
      name: hub1
      description: A sample hub
      labels:
        label-two: value-one
  primary:
    type: gcp:networkconnectivity:Spoke
    properties:
      name: spoke1-ipv6
      location: global
      description: A sample spoke with a linked VPC that include export ranges of all IPv6
      labels:
        label-one: value-one
      hub: ${basicHub.id}
      linkedVpcNetwork:
        includeExportRanges:
          - ALL_IPV6_RANGES
          - ALL_PRIVATE_IPV4_RANGES
        uri: ${network.selfLink}
Copy

Create Spoke Resource

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

Constructor syntax

new Spoke(name: string, args: SpokeArgs, opts?: CustomResourceOptions);
@overload
def Spoke(resource_name: str,
          args: SpokeArgs,
          opts: Optional[ResourceOptions] = None)

@overload
def Spoke(resource_name: str,
          opts: Optional[ResourceOptions] = None,
          hub: Optional[str] = None,
          location: Optional[str] = None,
          description: Optional[str] = None,
          group: Optional[str] = None,
          labels: Optional[Mapping[str, str]] = None,
          linked_interconnect_attachments: Optional[SpokeLinkedInterconnectAttachmentsArgs] = None,
          linked_producer_vpc_network: Optional[SpokeLinkedProducerVpcNetworkArgs] = None,
          linked_router_appliance_instances: Optional[SpokeLinkedRouterApplianceInstancesArgs] = None,
          linked_vpc_network: Optional[SpokeLinkedVpcNetworkArgs] = None,
          linked_vpn_tunnels: Optional[SpokeLinkedVpnTunnelsArgs] = None,
          name: Optional[str] = None,
          project: Optional[str] = None)
func NewSpoke(ctx *Context, name string, args SpokeArgs, opts ...ResourceOption) (*Spoke, error)
public Spoke(string name, SpokeArgs args, CustomResourceOptions? opts = null)
public Spoke(String name, SpokeArgs args)
public Spoke(String name, SpokeArgs args, CustomResourceOptions options)
type: gcp:networkconnectivity:Spoke
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.

Parameters

name This property is required. string
The unique name of the resource.
args This property is required. SpokeArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
resource_name This property is required. str
The unique name of the resource.
args This property is required. SpokeArgs
The arguments to resource properties.
opts ResourceOptions
Bag of options to control resource's behavior.
ctx Context
Context object for the current deployment.
name This property is required. string
The unique name of the resource.
args This property is required. SpokeArgs
The arguments to resource properties.
opts ResourceOption
Bag of options to control resource's behavior.
name This property is required. string
The unique name of the resource.
args This property is required. SpokeArgs
The arguments to resource properties.
opts CustomResourceOptions
Bag of options to control resource's behavior.
name This property is required. String
The unique name of the resource.
args This property is required. SpokeArgs
The arguments to resource properties.
options CustomResourceOptions
Bag of options to control resource's behavior.

Constructor example

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

var spokeResource = new Gcp.NetworkConnectivity.Spoke("spokeResource", new()
{
    Hub = "string",
    Location = "string",
    Description = "string",
    Group = "string",
    Labels = 
    {
        { "string", "string" },
    },
    LinkedInterconnectAttachments = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedInterconnectAttachmentsArgs
    {
        SiteToSiteDataTransfer = false,
        Uris = new[]
        {
            "string",
        },
        IncludeImportRanges = new[]
        {
            "string",
        },
    },
    LinkedProducerVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedProducerVpcNetworkArgs
    {
        Network = "string",
        Peering = "string",
        ExcludeExportRanges = new[]
        {
            "string",
        },
        IncludeExportRanges = new[]
        {
            "string",
        },
        ProducerNetwork = "string",
    },
    LinkedRouterApplianceInstances = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesArgs
    {
        Instances = new[]
        {
            new Gcp.NetworkConnectivity.Inputs.SpokeLinkedRouterApplianceInstancesInstanceArgs
            {
                IpAddress = "string",
                VirtualMachine = "string",
            },
        },
        SiteToSiteDataTransfer = false,
        IncludeImportRanges = new[]
        {
            "string",
        },
    },
    LinkedVpcNetwork = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpcNetworkArgs
    {
        Uri = "string",
        ExcludeExportRanges = new[]
        {
            "string",
        },
        IncludeExportRanges = new[]
        {
            "string",
        },
    },
    LinkedVpnTunnels = new Gcp.NetworkConnectivity.Inputs.SpokeLinkedVpnTunnelsArgs
    {
        SiteToSiteDataTransfer = false,
        Uris = new[]
        {
            "string",
        },
        IncludeImportRanges = new[]
        {
            "string",
        },
    },
    Name = "string",
    Project = "string",
});
Copy
example, err := networkconnectivity.NewSpoke(ctx, "spokeResource", &networkconnectivity.SpokeArgs{
	Hub:         pulumi.String("string"),
	Location:    pulumi.String("string"),
	Description: pulumi.String("string"),
	Group:       pulumi.String("string"),
	Labels: pulumi.StringMap{
		"string": pulumi.String("string"),
	},
	LinkedInterconnectAttachments: &networkconnectivity.SpokeLinkedInterconnectAttachmentsArgs{
		SiteToSiteDataTransfer: pulumi.Bool(false),
		Uris: pulumi.StringArray{
			pulumi.String("string"),
		},
		IncludeImportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
	},
	LinkedProducerVpcNetwork: &networkconnectivity.SpokeLinkedProducerVpcNetworkArgs{
		Network: pulumi.String("string"),
		Peering: pulumi.String("string"),
		ExcludeExportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
		IncludeExportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
		ProducerNetwork: pulumi.String("string"),
	},
	LinkedRouterApplianceInstances: &networkconnectivity.SpokeLinkedRouterApplianceInstancesArgs{
		Instances: networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArray{
			&networkconnectivity.SpokeLinkedRouterApplianceInstancesInstanceArgs{
				IpAddress:      pulumi.String("string"),
				VirtualMachine: pulumi.String("string"),
			},
		},
		SiteToSiteDataTransfer: pulumi.Bool(false),
		IncludeImportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
	},
	LinkedVpcNetwork: &networkconnectivity.SpokeLinkedVpcNetworkArgs{
		Uri: pulumi.String("string"),
		ExcludeExportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
		IncludeExportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
	},
	LinkedVpnTunnels: &networkconnectivity.SpokeLinkedVpnTunnelsArgs{
		SiteToSiteDataTransfer: pulumi.Bool(false),
		Uris: pulumi.StringArray{
			pulumi.String("string"),
		},
		IncludeImportRanges: pulumi.StringArray{
			pulumi.String("string"),
		},
	},
	Name:    pulumi.String("string"),
	Project: pulumi.String("string"),
})
Copy
var spokeResource = new Spoke("spokeResource", SpokeArgs.builder()
    .hub("string")
    .location("string")
    .description("string")
    .group("string")
    .labels(Map.of("string", "string"))
    .linkedInterconnectAttachments(SpokeLinkedInterconnectAttachmentsArgs.builder()
        .siteToSiteDataTransfer(false)
        .uris("string")
        .includeImportRanges("string")
        .build())
    .linkedProducerVpcNetwork(SpokeLinkedProducerVpcNetworkArgs.builder()
        .network("string")
        .peering("string")
        .excludeExportRanges("string")
        .includeExportRanges("string")
        .producerNetwork("string")
        .build())
    .linkedRouterApplianceInstances(SpokeLinkedRouterApplianceInstancesArgs.builder()
        .instances(SpokeLinkedRouterApplianceInstancesInstanceArgs.builder()
            .ipAddress("string")
            .virtualMachine("string")
            .build())
        .siteToSiteDataTransfer(false)
        .includeImportRanges("string")
        .build())
    .linkedVpcNetwork(SpokeLinkedVpcNetworkArgs.builder()
        .uri("string")
        .excludeExportRanges("string")
        .includeExportRanges("string")
        .build())
    .linkedVpnTunnels(SpokeLinkedVpnTunnelsArgs.builder()
        .siteToSiteDataTransfer(false)
        .uris("string")
        .includeImportRanges("string")
        .build())
    .name("string")
    .project("string")
    .build());
Copy
spoke_resource = gcp.networkconnectivity.Spoke("spokeResource",
    hub="string",
    location="string",
    description="string",
    group="string",
    labels={
        "string": "string",
    },
    linked_interconnect_attachments={
        "site_to_site_data_transfer": False,
        "uris": ["string"],
        "include_import_ranges": ["string"],
    },
    linked_producer_vpc_network={
        "network": "string",
        "peering": "string",
        "exclude_export_ranges": ["string"],
        "include_export_ranges": ["string"],
        "producer_network": "string",
    },
    linked_router_appliance_instances={
        "instances": [{
            "ip_address": "string",
            "virtual_machine": "string",
        }],
        "site_to_site_data_transfer": False,
        "include_import_ranges": ["string"],
    },
    linked_vpc_network={
        "uri": "string",
        "exclude_export_ranges": ["string"],
        "include_export_ranges": ["string"],
    },
    linked_vpn_tunnels={
        "site_to_site_data_transfer": False,
        "uris": ["string"],
        "include_import_ranges": ["string"],
    },
    name="string",
    project="string")
Copy
const spokeResource = new gcp.networkconnectivity.Spoke("spokeResource", {
    hub: "string",
    location: "string",
    description: "string",
    group: "string",
    labels: {
        string: "string",
    },
    linkedInterconnectAttachments: {
        siteToSiteDataTransfer: false,
        uris: ["string"],
        includeImportRanges: ["string"],
    },
    linkedProducerVpcNetwork: {
        network: "string",
        peering: "string",
        excludeExportRanges: ["string"],
        includeExportRanges: ["string"],
        producerNetwork: "string",
    },
    linkedRouterApplianceInstances: {
        instances: [{
            ipAddress: "string",
            virtualMachine: "string",
        }],
        siteToSiteDataTransfer: false,
        includeImportRanges: ["string"],
    },
    linkedVpcNetwork: {
        uri: "string",
        excludeExportRanges: ["string"],
        includeExportRanges: ["string"],
    },
    linkedVpnTunnels: {
        siteToSiteDataTransfer: false,
        uris: ["string"],
        includeImportRanges: ["string"],
    },
    name: "string",
    project: "string",
});
Copy
type: gcp:networkconnectivity:Spoke
properties:
    description: string
    group: string
    hub: string
    labels:
        string: string
    linkedInterconnectAttachments:
        includeImportRanges:
            - string
        siteToSiteDataTransfer: false
        uris:
            - string
    linkedProducerVpcNetwork:
        excludeExportRanges:
            - string
        includeExportRanges:
            - string
        network: string
        peering: string
        producerNetwork: string
    linkedRouterApplianceInstances:
        includeImportRanges:
            - string
        instances:
            - ipAddress: string
              virtualMachine: string
        siteToSiteDataTransfer: false
    linkedVpcNetwork:
        excludeExportRanges:
            - string
        includeExportRanges:
            - string
        uri: string
    linkedVpnTunnels:
        includeImportRanges:
            - string
        siteToSiteDataTransfer: false
        uris:
            - string
    location: string
    name: string
    project: string
Copy

Spoke Resource Properties

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

Inputs

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

The Spoke resource accepts the following input properties:

Hub
This property is required.
Changes to this property will trigger replacement.
string
Immutable. The URI of the hub that this spoke is attached to.
Location
This property is required.
Changes to this property will trigger replacement.
string
The location for the resource


Description string
An optional description of the spoke.
Group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
Labels Dictionary<string, string>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
LinkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
LinkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
LinkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
LinkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
LinkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
Name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
Project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
Hub
This property is required.
Changes to this property will trigger replacement.
string
Immutable. The URI of the hub that this spoke is attached to.
Location
This property is required.
Changes to this property will trigger replacement.
string
The location for the resource


Description string
An optional description of the spoke.
Group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
Labels map[string]string
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
LinkedInterconnectAttachments SpokeLinkedInterconnectAttachmentsArgs
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
LinkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetworkArgs
Producer VPC network that is associated with the spoke. Structure is documented below.
LinkedRouterApplianceInstances SpokeLinkedRouterApplianceInstancesArgs
The URIs of linked Router appliance resources Structure is documented below.
LinkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetworkArgs
VPC network that is associated with the spoke. Structure is documented below.
LinkedVpnTunnels SpokeLinkedVpnTunnelsArgs
The URIs of linked VPN tunnel resources Structure is documented below.
Name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
Project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
hub
This property is required.
Changes to this property will trigger replacement.
String
Immutable. The URI of the hub that this spoke is attached to.
location
This property is required.
Changes to this property will trigger replacement.
String
The location for the resource


description String
An optional description of the spoke.
group Changes to this property will trigger replacement. String
The name of the group that this spoke is associated with.
labels Map<String,String>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
name Changes to this property will trigger replacement. String
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. String
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
hub
This property is required.
Changes to this property will trigger replacement.
string
Immutable. The URI of the hub that this spoke is attached to.
location
This property is required.
Changes to this property will trigger replacement.
string
The location for the resource


description string
An optional description of the spoke.
group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
labels {[key: string]: string}
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
hub
This property is required.
Changes to this property will trigger replacement.
str
Immutable. The URI of the hub that this spoke is attached to.
location
This property is required.
Changes to this property will trigger replacement.
str
The location for the resource


description str
An optional description of the spoke.
group Changes to this property will trigger replacement. str
The name of the group that this spoke is associated with.
labels Mapping[str, str]
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linked_interconnect_attachments SpokeLinkedInterconnectAttachmentsArgs
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linked_producer_vpc_network Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetworkArgs
Producer VPC network that is associated with the spoke. Structure is documented below.
linked_router_appliance_instances SpokeLinkedRouterApplianceInstancesArgs
The URIs of linked Router appliance resources Structure is documented below.
linked_vpc_network Changes to this property will trigger replacement. SpokeLinkedVpcNetworkArgs
VPC network that is associated with the spoke. Structure is documented below.
linked_vpn_tunnels SpokeLinkedVpnTunnelsArgs
The URIs of linked VPN tunnel resources Structure is documented below.
name Changes to this property will trigger replacement. str
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. str
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
hub
This property is required.
Changes to this property will trigger replacement.
String
Immutable. The URI of the hub that this spoke is attached to.
location
This property is required.
Changes to this property will trigger replacement.
String
The location for the resource


description String
An optional description of the spoke.
group Changes to this property will trigger replacement. String
The name of the group that this spoke is associated with.
labels Map<String>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments Property Map
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. Property Map
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances Property Map
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. Property Map
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels Property Map
The URIs of linked VPN tunnel resources Structure is documented below.
name Changes to this property will trigger replacement. String
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. String
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.

Outputs

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

CreateTime string
Output only. The time the spoke was created.
EffectiveLabels Dictionary<string, string>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
Id string
The provider-assigned unique ID for this managed resource.
PulumiLabels Dictionary<string, string>
The combination of labels configured directly on the resource and default labels configured on the provider.
State string
Output only. The current lifecycle state of this spoke.
UniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
UpdateTime string
Output only. The time the spoke was last updated.
CreateTime string
Output only. The time the spoke was created.
EffectiveLabels map[string]string
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
Id string
The provider-assigned unique ID for this managed resource.
PulumiLabels map[string]string
The combination of labels configured directly on the resource and default labels configured on the provider.
State string
Output only. The current lifecycle state of this spoke.
UniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
UpdateTime string
Output only. The time the spoke was last updated.
createTime String
Output only. The time the spoke was created.
effectiveLabels Map<String,String>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
id String
The provider-assigned unique ID for this managed resource.
pulumiLabels Map<String,String>
The combination of labels configured directly on the resource and default labels configured on the provider.
state String
Output only. The current lifecycle state of this spoke.
uniqueId String
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime String
Output only. The time the spoke was last updated.
createTime string
Output only. The time the spoke was created.
effectiveLabels {[key: string]: string}
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
id string
The provider-assigned unique ID for this managed resource.
pulumiLabels {[key: string]: string}
The combination of labels configured directly on the resource and default labels configured on the provider.
state string
Output only. The current lifecycle state of this spoke.
uniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime string
Output only. The time the spoke was last updated.
create_time str
Output only. The time the spoke was created.
effective_labels Mapping[str, str]
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
id str
The provider-assigned unique ID for this managed resource.
pulumi_labels Mapping[str, str]
The combination of labels configured directly on the resource and default labels configured on the provider.
state str
Output only. The current lifecycle state of this spoke.
unique_id str
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
update_time str
Output only. The time the spoke was last updated.
createTime String
Output only. The time the spoke was created.
effectiveLabels Map<String>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
id String
The provider-assigned unique ID for this managed resource.
pulumiLabels Map<String>
The combination of labels configured directly on the resource and default labels configured on the provider.
state String
Output only. The current lifecycle state of this spoke.
uniqueId String
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime String
Output only. The time the spoke was last updated.

Look up Existing Spoke Resource

Get an existing Spoke resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.

public static get(name: string, id: Input<ID>, state?: SpokeState, opts?: CustomResourceOptions): Spoke
@staticmethod
def get(resource_name: str,
        id: str,
        opts: Optional[ResourceOptions] = None,
        create_time: Optional[str] = None,
        description: Optional[str] = None,
        effective_labels: Optional[Mapping[str, str]] = None,
        group: Optional[str] = None,
        hub: Optional[str] = None,
        labels: Optional[Mapping[str, str]] = None,
        linked_interconnect_attachments: Optional[SpokeLinkedInterconnectAttachmentsArgs] = None,
        linked_producer_vpc_network: Optional[SpokeLinkedProducerVpcNetworkArgs] = None,
        linked_router_appliance_instances: Optional[SpokeLinkedRouterApplianceInstancesArgs] = None,
        linked_vpc_network: Optional[SpokeLinkedVpcNetworkArgs] = None,
        linked_vpn_tunnels: Optional[SpokeLinkedVpnTunnelsArgs] = None,
        location: Optional[str] = None,
        name: Optional[str] = None,
        project: Optional[str] = None,
        pulumi_labels: Optional[Mapping[str, str]] = None,
        state: Optional[str] = None,
        unique_id: Optional[str] = None,
        update_time: Optional[str] = None) -> Spoke
func GetSpoke(ctx *Context, name string, id IDInput, state *SpokeState, opts ...ResourceOption) (*Spoke, error)
public static Spoke Get(string name, Input<string> id, SpokeState? state, CustomResourceOptions? opts = null)
public static Spoke get(String name, Output<String> id, SpokeState state, CustomResourceOptions options)
resources:  _:    type: gcp:networkconnectivity:Spoke    get:      id: ${id}
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
resource_name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
name This property is required.
The unique name of the resulting resource.
id This property is required.
The unique provider ID of the resource to lookup.
state
Any extra arguments used during the lookup.
opts
A bag of options that control this resource's behavior.
The following state arguments are supported:
CreateTime string
Output only. The time the spoke was created.
Description string
An optional description of the spoke.
EffectiveLabels Dictionary<string, string>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
Group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
Hub Changes to this property will trigger replacement. string
Immutable. The URI of the hub that this spoke is attached to.
Labels Dictionary<string, string>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
LinkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
LinkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
LinkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
LinkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
LinkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
Location Changes to this property will trigger replacement. string
The location for the resource


Name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
Project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
PulumiLabels Dictionary<string, string>
The combination of labels configured directly on the resource and default labels configured on the provider.
State string
Output only. The current lifecycle state of this spoke.
UniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
UpdateTime string
Output only. The time the spoke was last updated.
CreateTime string
Output only. The time the spoke was created.
Description string
An optional description of the spoke.
EffectiveLabels map[string]string
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
Group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
Hub Changes to this property will trigger replacement. string
Immutable. The URI of the hub that this spoke is attached to.
Labels map[string]string
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
LinkedInterconnectAttachments SpokeLinkedInterconnectAttachmentsArgs
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
LinkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetworkArgs
Producer VPC network that is associated with the spoke. Structure is documented below.
LinkedRouterApplianceInstances SpokeLinkedRouterApplianceInstancesArgs
The URIs of linked Router appliance resources Structure is documented below.
LinkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetworkArgs
VPC network that is associated with the spoke. Structure is documented below.
LinkedVpnTunnels SpokeLinkedVpnTunnelsArgs
The URIs of linked VPN tunnel resources Structure is documented below.
Location Changes to this property will trigger replacement. string
The location for the resource


Name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
Project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
PulumiLabels map[string]string
The combination of labels configured directly on the resource and default labels configured on the provider.
State string
Output only. The current lifecycle state of this spoke.
UniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
UpdateTime string
Output only. The time the spoke was last updated.
createTime String
Output only. The time the spoke was created.
description String
An optional description of the spoke.
effectiveLabels Map<String,String>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
group Changes to this property will trigger replacement. String
The name of the group that this spoke is associated with.
hub Changes to this property will trigger replacement. String
Immutable. The URI of the hub that this spoke is attached to.
labels Map<String,String>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
location Changes to this property will trigger replacement. String
The location for the resource


name Changes to this property will trigger replacement. String
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. String
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
pulumiLabels Map<String,String>
The combination of labels configured directly on the resource and default labels configured on the provider.
state String
Output only. The current lifecycle state of this spoke.
uniqueId String
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime String
Output only. The time the spoke was last updated.
createTime string
Output only. The time the spoke was created.
description string
An optional description of the spoke.
effectiveLabels {[key: string]: string}
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
group Changes to this property will trigger replacement. string
The name of the group that this spoke is associated with.
hub Changes to this property will trigger replacement. string
Immutable. The URI of the hub that this spoke is attached to.
labels {[key: string]: string}
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments SpokeLinkedInterconnectAttachments
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetwork
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances SpokeLinkedRouterApplianceInstances
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. SpokeLinkedVpcNetwork
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels SpokeLinkedVpnTunnels
The URIs of linked VPN tunnel resources Structure is documented below.
location Changes to this property will trigger replacement. string
The location for the resource


name Changes to this property will trigger replacement. string
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. string
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
pulumiLabels {[key: string]: string}
The combination of labels configured directly on the resource and default labels configured on the provider.
state string
Output only. The current lifecycle state of this spoke.
uniqueId string
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime string
Output only. The time the spoke was last updated.
create_time str
Output only. The time the spoke was created.
description str
An optional description of the spoke.
effective_labels Mapping[str, str]
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
group Changes to this property will trigger replacement. str
The name of the group that this spoke is associated with.
hub Changes to this property will trigger replacement. str
Immutable. The URI of the hub that this spoke is attached to.
labels Mapping[str, str]
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linked_interconnect_attachments SpokeLinkedInterconnectAttachmentsArgs
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linked_producer_vpc_network Changes to this property will trigger replacement. SpokeLinkedProducerVpcNetworkArgs
Producer VPC network that is associated with the spoke. Structure is documented below.
linked_router_appliance_instances SpokeLinkedRouterApplianceInstancesArgs
The URIs of linked Router appliance resources Structure is documented below.
linked_vpc_network Changes to this property will trigger replacement. SpokeLinkedVpcNetworkArgs
VPC network that is associated with the spoke. Structure is documented below.
linked_vpn_tunnels SpokeLinkedVpnTunnelsArgs
The URIs of linked VPN tunnel resources Structure is documented below.
location Changes to this property will trigger replacement. str
The location for the resource


name Changes to this property will trigger replacement. str
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. str
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
pulumi_labels Mapping[str, str]
The combination of labels configured directly on the resource and default labels configured on the provider.
state str
Output only. The current lifecycle state of this spoke.
unique_id str
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
update_time str
Output only. The time the spoke was last updated.
createTime String
Output only. The time the spoke was created.
description String
An optional description of the spoke.
effectiveLabels Map<String>
All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
group Changes to this property will trigger replacement. String
The name of the group that this spoke is associated with.
hub Changes to this property will trigger replacement. String
Immutable. The URI of the hub that this spoke is attached to.
labels Map<String>
Optional labels in key:value format. For more information about labels, see Requirements for labels. Note: This field is non-authoritative, and will only manage the labels present in your configuration. Please refer to the field effective_labels for all of the labels present on the resource.
linkedInterconnectAttachments Property Map
A collection of VLAN attachment resources. These resources should be redundant attachments that all advertise the same prefixes to Google Cloud. Alternatively, in active/passive configurations, all attachments should be capable of advertising the same prefixes. Structure is documented below.
linkedProducerVpcNetwork Changes to this property will trigger replacement. Property Map
Producer VPC network that is associated with the spoke. Structure is documented below.
linkedRouterApplianceInstances Property Map
The URIs of linked Router appliance resources Structure is documented below.
linkedVpcNetwork Changes to this property will trigger replacement. Property Map
VPC network that is associated with the spoke. Structure is documented below.
linkedVpnTunnels Property Map
The URIs of linked VPN tunnel resources Structure is documented below.
location Changes to this property will trigger replacement. String
The location for the resource


name Changes to this property will trigger replacement. String
Immutable. The name of the spoke. Spoke names must be unique.
project Changes to this property will trigger replacement. String
The ID of the project in which the resource belongs. If it is not provided, the provider project is used.
pulumiLabels Map<String>
The combination of labels configured directly on the resource and default labels configured on the provider.
state String
Output only. The current lifecycle state of this spoke.
uniqueId String
Output only. The Google-generated UUID for the spoke. This value is unique across all spoke resources. If a spoke is deleted and another with the same name is created, the new spoke is assigned a different unique_id.
updateTime String
Output only. The time the spoke was last updated.

Supporting Types

SpokeLinkedInterconnectAttachments
, SpokeLinkedInterconnectAttachmentsArgs

SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
Uris
This property is required.
Changes to this property will trigger replacement.
List<string>
The URIs of linked interconnect attachment resources
IncludeImportRanges List<string>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
Uris
This property is required.
Changes to this property will trigger replacement.
[]string
The URIs of linked interconnect attachment resources
IncludeImportRanges []string
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
List<String>
The URIs of linked interconnect attachment resources
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
string[]
The URIs of linked interconnect attachment resources
includeImportRanges string[]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
site_to_site_data_transfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
Sequence[str]
The URIs of linked interconnect attachment resources
include_import_ranges Sequence[str]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
List<String>
The URIs of linked interconnect attachment resources
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".

SpokeLinkedProducerVpcNetwork
, SpokeLinkedProducerVpcNetworkArgs

Network
This property is required.
Changes to this property will trigger replacement.
string
The URI of the Service Consumer VPC that the Producer VPC is peered with.
Peering
This property is required.
Changes to this property will trigger replacement.
string
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
ExcludeExportRanges List<string>
IP ranges encompassing the subnets to be excluded from peering.
IncludeExportRanges List<string>
IP ranges allowed to be included from peering.
ProducerNetwork string
(Output) The URI of the Producer VPC.
Network
This property is required.
Changes to this property will trigger replacement.
string
The URI of the Service Consumer VPC that the Producer VPC is peered with.
Peering
This property is required.
Changes to this property will trigger replacement.
string
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
ExcludeExportRanges []string
IP ranges encompassing the subnets to be excluded from peering.
IncludeExportRanges []string
IP ranges allowed to be included from peering.
ProducerNetwork string
(Output) The URI of the Producer VPC.
network
This property is required.
Changes to this property will trigger replacement.
String
The URI of the Service Consumer VPC that the Producer VPC is peered with.
peering
This property is required.
Changes to this property will trigger replacement.
String
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
excludeExportRanges List<String>
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges List<String>
IP ranges allowed to be included from peering.
producerNetwork String
(Output) The URI of the Producer VPC.
network
This property is required.
Changes to this property will trigger replacement.
string
The URI of the Service Consumer VPC that the Producer VPC is peered with.
peering
This property is required.
Changes to this property will trigger replacement.
string
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
excludeExportRanges string[]
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges string[]
IP ranges allowed to be included from peering.
producerNetwork string
(Output) The URI of the Producer VPC.
network
This property is required.
Changes to this property will trigger replacement.
str
The URI of the Service Consumer VPC that the Producer VPC is peered with.
peering
This property is required.
Changes to this property will trigger replacement.
str
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
exclude_export_ranges Sequence[str]
IP ranges encompassing the subnets to be excluded from peering.
include_export_ranges Sequence[str]
IP ranges allowed to be included from peering.
producer_network str
(Output) The URI of the Producer VPC.
network
This property is required.
Changes to this property will trigger replacement.
String
The URI of the Service Consumer VPC that the Producer VPC is peered with.
peering
This property is required.
Changes to this property will trigger replacement.
String
The name of the VPC peering between the Service Consumer VPC and the Producer VPC (defined in the Tenant project) which is added to the NCC hub. This peering must be in ACTIVE state.
excludeExportRanges List<String>
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges List<String>
IP ranges allowed to be included from peering.
producerNetwork String
(Output) The URI of the Producer VPC.

SpokeLinkedRouterApplianceInstances
, SpokeLinkedRouterApplianceInstancesArgs

Instances
This property is required.
Changes to this property will trigger replacement.
List<SpokeLinkedRouterApplianceInstancesInstance>
The list of router appliance instances Structure is documented below.
SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
IncludeImportRanges List<string>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
Instances
This property is required.
Changes to this property will trigger replacement.
[]SpokeLinkedRouterApplianceInstancesInstance
The list of router appliance instances Structure is documented below.
SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
IncludeImportRanges []string
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
instances
This property is required.
Changes to this property will trigger replacement.
List<SpokeLinkedRouterApplianceInstancesInstance>
The list of router appliance instances Structure is documented below.
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
instances
This property is required.
Changes to this property will trigger replacement.
SpokeLinkedRouterApplianceInstancesInstance[]
The list of router appliance instances Structure is documented below.
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
includeImportRanges string[]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
instances
This property is required.
Changes to this property will trigger replacement.
Sequence[SpokeLinkedRouterApplianceInstancesInstance]
The list of router appliance instances Structure is documented below.
site_to_site_data_transfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
include_import_ranges Sequence[str]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
instances
This property is required.
Changes to this property will trigger replacement.
List<Property Map>
The list of router appliance instances Structure is documented below.
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".

SpokeLinkedRouterApplianceInstancesInstance
, SpokeLinkedRouterApplianceInstancesInstanceArgs

IpAddress
This property is required.
Changes to this property will trigger replacement.
string
The IP address on the VM to use for peering.
VirtualMachine
This property is required.
Changes to this property will trigger replacement.
string
The URI of the virtual machine resource
IpAddress
This property is required.
Changes to this property will trigger replacement.
string
The IP address on the VM to use for peering.
VirtualMachine
This property is required.
Changes to this property will trigger replacement.
string
The URI of the virtual machine resource
ipAddress
This property is required.
Changes to this property will trigger replacement.
String
The IP address on the VM to use for peering.
virtualMachine
This property is required.
Changes to this property will trigger replacement.
String
The URI of the virtual machine resource
ipAddress
This property is required.
Changes to this property will trigger replacement.
string
The IP address on the VM to use for peering.
virtualMachine
This property is required.
Changes to this property will trigger replacement.
string
The URI of the virtual machine resource
ip_address
This property is required.
Changes to this property will trigger replacement.
str
The IP address on the VM to use for peering.
virtual_machine
This property is required.
Changes to this property will trigger replacement.
str
The URI of the virtual machine resource
ipAddress
This property is required.
Changes to this property will trigger replacement.
String
The IP address on the VM to use for peering.
virtualMachine
This property is required.
Changes to this property will trigger replacement.
String
The URI of the virtual machine resource

SpokeLinkedVpcNetwork
, SpokeLinkedVpcNetworkArgs

Uri
This property is required.
Changes to this property will trigger replacement.
string
The URI of the VPC network resource.
ExcludeExportRanges List<string>
IP ranges encompassing the subnets to be excluded from peering.
IncludeExportRanges List<string>
IP ranges allowed to be included from peering.
Uri
This property is required.
Changes to this property will trigger replacement.
string
The URI of the VPC network resource.
ExcludeExportRanges []string
IP ranges encompassing the subnets to be excluded from peering.
IncludeExportRanges []string
IP ranges allowed to be included from peering.
uri
This property is required.
Changes to this property will trigger replacement.
String
The URI of the VPC network resource.
excludeExportRanges List<String>
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges List<String>
IP ranges allowed to be included from peering.
uri
This property is required.
Changes to this property will trigger replacement.
string
The URI of the VPC network resource.
excludeExportRanges string[]
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges string[]
IP ranges allowed to be included from peering.
uri
This property is required.
Changes to this property will trigger replacement.
str
The URI of the VPC network resource.
exclude_export_ranges Sequence[str]
IP ranges encompassing the subnets to be excluded from peering.
include_export_ranges Sequence[str]
IP ranges allowed to be included from peering.
uri
This property is required.
Changes to this property will trigger replacement.
String
The URI of the VPC network resource.
excludeExportRanges List<String>
IP ranges encompassing the subnets to be excluded from peering.
includeExportRanges List<String>
IP ranges allowed to be included from peering.

SpokeLinkedVpnTunnels
, SpokeLinkedVpnTunnelsArgs

SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
Uris
This property is required.
Changes to this property will trigger replacement.
List<string>
The URIs of linked VPN tunnel resources.
IncludeImportRanges List<string>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
SiteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
Uris
This property is required.
Changes to this property will trigger replacement.
[]string
The URIs of linked VPN tunnel resources.
IncludeImportRanges []string
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
List<String>
The URIs of linked VPN tunnel resources.
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
string[]
The URIs of linked VPN tunnel resources.
includeImportRanges string[]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
site_to_site_data_transfer
This property is required.
Changes to this property will trigger replacement.
bool
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
Sequence[str]
The URIs of linked VPN tunnel resources.
include_import_ranges Sequence[str]
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".
siteToSiteDataTransfer
This property is required.
Changes to this property will trigger replacement.
Boolean
A value that controls whether site-to-site data transfer is enabled for these resources. Note that data transfer is available only in supported locations.
uris
This property is required.
Changes to this property will trigger replacement.
List<String>
The URIs of linked VPN tunnel resources.
includeImportRanges List<String>
IP ranges allowed to be included during import from hub (does not control transit connectivity). The only allowed value for now is "ALL_IPV4_RANGES".

Import

Spoke can be imported using any of these accepted formats:

  • projects/{{project}}/locations/{{location}}/spokes/{{name}}

  • {{project}}/{{location}}/{{name}}

  • {{location}}/{{name}}

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

$ pulumi import gcp:networkconnectivity/spoke:Spoke default projects/{{project}}/locations/{{location}}/spokes/{{name}}
Copy
$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{project}}/{{location}}/{{name}}
Copy
$ pulumi import gcp:networkconnectivity/spoke:Spoke default {{location}}/{{name}}
Copy

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

Package Details

Repository
Google Cloud (GCP) Classic pulumi/pulumi-gcp
License
Apache-2.0
Notes
This Pulumi package is based on the google-beta Terraform Provider.