All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.gcp.networkservices.kotlin.Gateway.kt Maven / Gradle / Ivy

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 8.10.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gcp.networkservices.kotlin

import com.pulumi.core.Output
import com.pulumi.kotlin.KotlinCustomResource
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.ResourceMapper
import com.pulumi.kotlin.options.CustomResourceOptions
import com.pulumi.kotlin.options.CustomResourceOptionsBuilder
import com.pulumi.resources.Resource
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map

/**
 * Builder for [Gateway].
 */
@PulumiTagMarker
public class GatewayResourceBuilder internal constructor() {
    public var name: String? = null

    public var args: GatewayArgs = GatewayArgs()

    public var opts: CustomResourceOptions = CustomResourceOptions()

    /**
     * @param name The _unique_ name of the resulting resource.
     */
    public fun name(`value`: String) {
        this.name = value
    }

    /**
     * @param block The arguments to use to populate this resource's properties.
     */
    public suspend fun args(block: suspend GatewayArgsBuilder.() -> Unit) {
        val builder = GatewayArgsBuilder()
        block(builder)
        this.args = builder.build()
    }

    /**
     * @param block A bag of options that control this resource's behavior.
     */
    public suspend fun opts(block: suspend CustomResourceOptionsBuilder.() -> Unit) {
        this.opts = com.pulumi.kotlin.options.CustomResourceOptions.opts(block)
    }

    internal fun build(): Gateway {
        val builtJavaResource = com.pulumi.gcp.networkservices.Gateway(
            this.name,
            this.args.toJava(),
            this.opts.toJava(),
        )
        return Gateway(builtJavaResource)
    }
}

/**
 * Gateway represents the configuration for a proxy, typically a load balancer.
 * It captures the ip:port over which the services are exposed by the proxy,
 * along with any policy configurations. Routes have reference to to Gateways
 * to dictate how requests should be routed by this Gateway.
 * To get more information about Gateway, see:
 * * [API documentation](https://cloud.google.com/traffic-director/docs/reference/network-services/rest/v1/projects.locations.gateways)
 * ## Example Usage
 * ### Network Services Gateway Basic
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const _default = new gcp.networkservices.Gateway("default", {
 *     name: "my-gateway",
 *     scope: "default-scope-basic",
 *     type: "OPEN_MESH",
 *     ports: [443],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default = gcp.networkservices.Gateway("default",
 *     name="my-gateway",
 *     scope="default-scope-basic",
 *     type="OPEN_MESH",
 *     ports=[443])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.NetworkServices.Gateway("default", new()
 *     {
 *         Name = "my-gateway",
 *         Scope = "default-scope-basic",
 *         Type = "OPEN_MESH",
 *         Ports = new[]
 *         {
 *             443,
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := networkservices.NewGateway(ctx, "default", &networkservices.GatewayArgs{
 * 			Name:  pulumi.String("my-gateway"),
 * 			Scope: pulumi.String("default-scope-basic"),
 * 			Type:  pulumi.String("OPEN_MESH"),
 * 			Ports: pulumi.IntArray{
 * 				pulumi.Int(443),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.networkservices.Gateway;
 * import com.pulumi.gcp.networkservices.GatewayArgs;
 * 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 default_ = new Gateway("default", GatewayArgs.builder()
 *             .name("my-gateway")
 *             .scope("default-scope-basic")
 *             .type("OPEN_MESH")
 *             .ports(443)
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   default:
 *     type: gcp:networkservices:Gateway
 *     properties:
 *       name: my-gateway
 *       scope: default-scope-basic
 *       type: OPEN_MESH
 *       ports:
 *         - 443
 * ```
 * 
 * ### Network Services Gateway Advanced
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * const _default = new gcp.networkservices.Gateway("default", {
 *     name: "my-gateway",
 *     labels: {
 *         foo: "bar",
 *     },
 *     description: "my description",
 *     type: "OPEN_MESH",
 *     ports: [443],
 *     scope: "default-scope-advance",
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * default = gcp.networkservices.Gateway("default",
 *     name="my-gateway",
 *     labels={
 *         "foo": "bar",
 *     },
 *     description="my description",
 *     type="OPEN_MESH",
 *     ports=[443],
 *     scope="default-scope-advance")
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.NetworkServices.Gateway("default", new()
 *     {
 *         Name = "my-gateway",
 *         Labels =
 *         {
 *             { "foo", "bar" },
 *         },
 *         Description = "my description",
 *         Type = "OPEN_MESH",
 *         Ports = new[]
 *         {
 *             443,
 *         },
 *         Scope = "default-scope-advance",
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		_, err := networkservices.NewGateway(ctx, "default", &networkservices.GatewayArgs{
 * 			Name: pulumi.String("my-gateway"),
 * 			Labels: pulumi.StringMap{
 * 				"foo": pulumi.String("bar"),
 * 			},
 * 			Description: pulumi.String("my description"),
 * 			Type:        pulumi.String("OPEN_MESH"),
 * 			Ports: pulumi.IntArray{
 * 				pulumi.Int(443),
 * 			},
 * 			Scope: pulumi.String("default-scope-advance"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.networkservices.Gateway;
 * import com.pulumi.gcp.networkservices.GatewayArgs;
 * 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 default_ = new Gateway("default", GatewayArgs.builder()
 *             .name("my-gateway")
 *             .labels(Map.of("foo", "bar"))
 *             .description("my description")
 *             .type("OPEN_MESH")
 *             .ports(443)
 *             .scope("default-scope-advance")
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   default:
 *     type: gcp:networkservices:Gateway
 *     properties:
 *       name: my-gateway
 *       labels:
 *         foo: bar
 *       description: my description
 *       type: OPEN_MESH
 *       ports:
 *         - 443
 *       scope: default-scope-advance
 * ```
 * 
 * ### Network Services Gateway Secure Web Proxy
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 * const _default = new gcp.certificatemanager.Certificate("default", {
 *     name: "my-certificate",
 *     location: "us-central1",
 *     selfManaged: {
 *         pemCertificate: std.file({
 *             input: "test-fixtures/cert.pem",
 *         }).then(invoke => invoke.result),
 *         pemPrivateKey: std.file({
 *             input: "test-fixtures/private-key.pem",
 *         }).then(invoke => invoke.result),
 *     },
 * });
 * const defaultNetwork = new gcp.compute.Network("default", {
 *     name: "my-network",
 *     routingMode: "REGIONAL",
 *     autoCreateSubnetworks: false,
 * });
 * const defaultSubnetwork = new gcp.compute.Subnetwork("default", {
 *     name: "my-subnetwork-name",
 *     purpose: "PRIVATE",
 *     ipCidrRange: "10.128.0.0/20",
 *     region: "us-central1",
 *     network: defaultNetwork.id,
 *     role: "ACTIVE",
 * });
 * const proxyonlysubnet = new gcp.compute.Subnetwork("proxyonlysubnet", {
 *     name: "my-proxy-only-subnetwork",
 *     purpose: "REGIONAL_MANAGED_PROXY",
 *     ipCidrRange: "192.168.0.0/23",
 *     region: "us-central1",
 *     network: defaultNetwork.id,
 *     role: "ACTIVE",
 * });
 * const defaultGatewaySecurityPolicy = new gcp.networksecurity.GatewaySecurityPolicy("default", {
 *     name: "my-policy-name",
 *     location: "us-central1",
 * });
 * const defaultGatewaySecurityPolicyRule = new gcp.networksecurity.GatewaySecurityPolicyRule("default", {
 *     name: "my-policyrule-name",
 *     location: "us-central1",
 *     gatewaySecurityPolicy: defaultGatewaySecurityPolicy.name,
 *     enabled: true,
 *     priority: 1,
 *     sessionMatcher: "host() == 'example.com'",
 *     basicProfile: "ALLOW",
 * });
 * const defaultGateway = new gcp.networkservices.Gateway("default", {
 *     name: "my-gateway1",
 *     location: "us-central1",
 *     addresses: ["10.128.0.99"],
 *     type: "SECURE_WEB_GATEWAY",
 *     ports: [443],
 *     scope: "my-default-scope1",
 *     certificateUrls: [_default.id],
 *     gatewaySecurityPolicy: defaultGatewaySecurityPolicy.id,
 *     network: defaultNetwork.id,
 *     subnetwork: defaultSubnetwork.id,
 *     deleteSwgAutogenRouterOnDestroy: true,
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * import pulumi_std as std
 * default = gcp.certificatemanager.Certificate("default",
 *     name="my-certificate",
 *     location="us-central1",
 *     self_managed=gcp.certificatemanager.CertificateSelfManagedArgs(
 *         pem_certificate=std.file(input="test-fixtures/cert.pem").result,
 *         pem_private_key=std.file(input="test-fixtures/private-key.pem").result,
 *     ))
 * default_network = gcp.compute.Network("default",
 *     name="my-network",
 *     routing_mode="REGIONAL",
 *     auto_create_subnetworks=False)
 * default_subnetwork = gcp.compute.Subnetwork("default",
 *     name="my-subnetwork-name",
 *     purpose="PRIVATE",
 *     ip_cidr_range="10.128.0.0/20",
 *     region="us-central1",
 *     network=default_network.id,
 *     role="ACTIVE")
 * proxyonlysubnet = gcp.compute.Subnetwork("proxyonlysubnet",
 *     name="my-proxy-only-subnetwork",
 *     purpose="REGIONAL_MANAGED_PROXY",
 *     ip_cidr_range="192.168.0.0/23",
 *     region="us-central1",
 *     network=default_network.id,
 *     role="ACTIVE")
 * default_gateway_security_policy = gcp.networksecurity.GatewaySecurityPolicy("default",
 *     name="my-policy-name",
 *     location="us-central1")
 * default_gateway_security_policy_rule = gcp.networksecurity.GatewaySecurityPolicyRule("default",
 *     name="my-policyrule-name",
 *     location="us-central1",
 *     gateway_security_policy=default_gateway_security_policy.name,
 *     enabled=True,
 *     priority=1,
 *     session_matcher="host() == 'example.com'",
 *     basic_profile="ALLOW")
 * default_gateway = gcp.networkservices.Gateway("default",
 *     name="my-gateway1",
 *     location="us-central1",
 *     addresses=["10.128.0.99"],
 *     type="SECURE_WEB_GATEWAY",
 *     ports=[443],
 *     scope="my-default-scope1",
 *     certificate_urls=[default.id],
 *     gateway_security_policy=default_gateway_security_policy.id,
 *     network=default_network.id,
 *     subnetwork=default_subnetwork.id,
 *     delete_swg_autogen_router_on_destroy=True)
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * using Std = Pulumi.Std;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.CertificateManager.Certificate("default", new()
 *     {
 *         Name = "my-certificate",
 *         Location = "us-central1",
 *         SelfManaged = new Gcp.CertificateManager.Inputs.CertificateSelfManagedArgs
 *         {
 *             PemCertificate = Std.File.Invoke(new()
 *             {
 *                 Input = "test-fixtures/cert.pem",
 *             }).Apply(invoke => invoke.Result),
 *             PemPrivateKey = Std.File.Invoke(new()
 *             {
 *                 Input = "test-fixtures/private-key.pem",
 *             }).Apply(invoke => invoke.Result),
 *         },
 *     });
 *     var defaultNetwork = new Gcp.Compute.Network("default", new()
 *     {
 *         Name = "my-network",
 *         RoutingMode = "REGIONAL",
 *         AutoCreateSubnetworks = false,
 *     });
 *     var defaultSubnetwork = new Gcp.Compute.Subnetwork("default", new()
 *     {
 *         Name = "my-subnetwork-name",
 *         Purpose = "PRIVATE",
 *         IpCidrRange = "10.128.0.0/20",
 *         Region = "us-central1",
 *         Network = defaultNetwork.Id,
 *         Role = "ACTIVE",
 *     });
 *     var proxyonlysubnet = new Gcp.Compute.Subnetwork("proxyonlysubnet", new()
 *     {
 *         Name = "my-proxy-only-subnetwork",
 *         Purpose = "REGIONAL_MANAGED_PROXY",
 *         IpCidrRange = "192.168.0.0/23",
 *         Region = "us-central1",
 *         Network = defaultNetwork.Id,
 *         Role = "ACTIVE",
 *     });
 *     var defaultGatewaySecurityPolicy = new Gcp.NetworkSecurity.GatewaySecurityPolicy("default", new()
 *     {
 *         Name = "my-policy-name",
 *         Location = "us-central1",
 *     });
 *     var defaultGatewaySecurityPolicyRule = new Gcp.NetworkSecurity.GatewaySecurityPolicyRule("default", new()
 *     {
 *         Name = "my-policyrule-name",
 *         Location = "us-central1",
 *         GatewaySecurityPolicy = defaultGatewaySecurityPolicy.Name,
 *         Enabled = true,
 *         Priority = 1,
 *         SessionMatcher = "host() == 'example.com'",
 *         BasicProfile = "ALLOW",
 *     });
 *     var defaultGateway = new Gcp.NetworkServices.Gateway("default", new()
 *     {
 *         Name = "my-gateway1",
 *         Location = "us-central1",
 *         Addresses = new[]
 *         {
 *             "10.128.0.99",
 *         },
 *         Type = "SECURE_WEB_GATEWAY",
 *         Ports = new[]
 *         {
 *             443,
 *         },
 *         Scope = "my-default-scope1",
 *         CertificateUrls = new[]
 *         {
 *             @default.Id,
 *         },
 *         GatewaySecurityPolicy = defaultGatewaySecurityPolicy.Id,
 *         Network = defaultNetwork.Id,
 *         Subnetwork = defaultSubnetwork.Id,
 *         DeleteSwgAutogenRouterOnDestroy = true,
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/certificatemanager"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networksecurity"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices"
 * 	"github.com/pulumi/pulumi-std/sdk/go/std"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		invokeFile, err := std.File(ctx, &std.FileArgs{
 * 			Input: "test-fixtures/cert.pem",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		invokeFile1, err := std.File(ctx, &std.FileArgs{
 * 			Input: "test-fixtures/private-key.pem",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = certificatemanager.NewCertificate(ctx, "default", &certificatemanager.CertificateArgs{
 * 			Name:     pulumi.String("my-certificate"),
 * 			Location: pulumi.String("us-central1"),
 * 			SelfManaged: &certificatemanager.CertificateSelfManagedArgs{
 * 				PemCertificate: invokeFile.Result,
 * 				PemPrivateKey:  invokeFile1.Result,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultNetwork, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{
 * 			Name:                  pulumi.String("my-network"),
 * 			RoutingMode:           pulumi.String("REGIONAL"),
 * 			AutoCreateSubnetworks: pulumi.Bool(false),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultSubnetwork, err := compute.NewSubnetwork(ctx, "default", &compute.SubnetworkArgs{
 * 			Name:        pulumi.String("my-subnetwork-name"),
 * 			Purpose:     pulumi.String("PRIVATE"),
 * 			IpCidrRange: pulumi.String("10.128.0.0/20"),
 * 			Region:      pulumi.String("us-central1"),
 * 			Network:     defaultNetwork.ID(),
 * 			Role:        pulumi.String("ACTIVE"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewSubnetwork(ctx, "proxyonlysubnet", &compute.SubnetworkArgs{
 * 			Name:        pulumi.String("my-proxy-only-subnetwork"),
 * 			Purpose:     pulumi.String("REGIONAL_MANAGED_PROXY"),
 * 			IpCidrRange: pulumi.String("192.168.0.0/23"),
 * 			Region:      pulumi.String("us-central1"),
 * 			Network:     defaultNetwork.ID(),
 * 			Role:        pulumi.String("ACTIVE"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultGatewaySecurityPolicy, err := networksecurity.NewGatewaySecurityPolicy(ctx, "default", &networksecurity.GatewaySecurityPolicyArgs{
 * 			Name:     pulumi.String("my-policy-name"),
 * 			Location: pulumi.String("us-central1"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = networksecurity.NewGatewaySecurityPolicyRule(ctx, "default", &networksecurity.GatewaySecurityPolicyRuleArgs{
 * 			Name:                  pulumi.String("my-policyrule-name"),
 * 			Location:              pulumi.String("us-central1"),
 * 			GatewaySecurityPolicy: defaultGatewaySecurityPolicy.Name,
 * 			Enabled:               pulumi.Bool(true),
 * 			Priority:              pulumi.Int(1),
 * 			SessionMatcher:        pulumi.String("host() == 'example.com'"),
 * 			BasicProfile:          pulumi.String("ALLOW"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = networkservices.NewGateway(ctx, "default", &networkservices.GatewayArgs{
 * 			Name:     pulumi.String("my-gateway1"),
 * 			Location: pulumi.String("us-central1"),
 * 			Addresses: pulumi.StringArray{
 * 				pulumi.String("10.128.0.99"),
 * 			},
 * 			Type: pulumi.String("SECURE_WEB_GATEWAY"),
 * 			Ports: pulumi.IntArray{
 * 				pulumi.Int(443),
 * 			},
 * 			Scope: pulumi.String("my-default-scope1"),
 * 			CertificateUrls: pulumi.StringArray{
 * 				_default.ID(),
 * 			},
 * 			GatewaySecurityPolicy:           defaultGatewaySecurityPolicy.ID(),
 * 			Network:                         defaultNetwork.ID(),
 * 			Subnetwork:                      defaultSubnetwork.ID(),
 * 			DeleteSwgAutogenRouterOnDestroy: pulumi.Bool(true),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.certificatemanager.Certificate;
 * import com.pulumi.gcp.certificatemanager.CertificateArgs;
 * import com.pulumi.gcp.certificatemanager.inputs.CertificateSelfManagedArgs;
 * 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.networksecurity.GatewaySecurityPolicy;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyArgs;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyRule;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyRuleArgs;
 * import com.pulumi.gcp.networkservices.Gateway;
 * import com.pulumi.gcp.networkservices.GatewayArgs;
 * 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 default_ = new Certificate("default", CertificateArgs.builder()
 *             .name("my-certificate")
 *             .location("us-central1")
 *             .selfManaged(CertificateSelfManagedArgs.builder()
 *                 .pemCertificate(StdFunctions.file(FileArgs.builder()
 *                     .input("test-fixtures/cert.pem")
 *                     .build()).result())
 *                 .pemPrivateKey(StdFunctions.file(FileArgs.builder()
 *                     .input("test-fixtures/private-key.pem")
 *                     .build()).result())
 *                 .build())
 *             .build());
 *         var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
 *             .name("my-network")
 *             .routingMode("REGIONAL")
 *             .autoCreateSubnetworks(false)
 *             .build());
 *         var defaultSubnetwork = new Subnetwork("defaultSubnetwork", SubnetworkArgs.builder()
 *             .name("my-subnetwork-name")
 *             .purpose("PRIVATE")
 *             .ipCidrRange("10.128.0.0/20")
 *             .region("us-central1")
 *             .network(defaultNetwork.id())
 *             .role("ACTIVE")
 *             .build());
 *         var proxyonlysubnet = new Subnetwork("proxyonlysubnet", SubnetworkArgs.builder()
 *             .name("my-proxy-only-subnetwork")
 *             .purpose("REGIONAL_MANAGED_PROXY")
 *             .ipCidrRange("192.168.0.0/23")
 *             .region("us-central1")
 *             .network(defaultNetwork.id())
 *             .role("ACTIVE")
 *             .build());
 *         var defaultGatewaySecurityPolicy = new GatewaySecurityPolicy("defaultGatewaySecurityPolicy", GatewaySecurityPolicyArgs.builder()
 *             .name("my-policy-name")
 *             .location("us-central1")
 *             .build());
 *         var defaultGatewaySecurityPolicyRule = new GatewaySecurityPolicyRule("defaultGatewaySecurityPolicyRule", GatewaySecurityPolicyRuleArgs.builder()
 *             .name("my-policyrule-name")
 *             .location("us-central1")
 *             .gatewaySecurityPolicy(defaultGatewaySecurityPolicy.name())
 *             .enabled(true)
 *             .priority(1)
 *             .sessionMatcher("host() == 'example.com'")
 *             .basicProfile("ALLOW")
 *             .build());
 *         var defaultGateway = new Gateway("defaultGateway", GatewayArgs.builder()
 *             .name("my-gateway1")
 *             .location("us-central1")
 *             .addresses("10.128.0.99")
 *             .type("SECURE_WEB_GATEWAY")
 *             .ports(443)
 *             .scope("my-default-scope1")
 *             .certificateUrls(default_.id())
 *             .gatewaySecurityPolicy(defaultGatewaySecurityPolicy.id())
 *             .network(defaultNetwork.id())
 *             .subnetwork(defaultSubnetwork.id())
 *             .deleteSwgAutogenRouterOnDestroy(true)
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   default:
 *     type: gcp:certificatemanager:Certificate
 *     properties:
 *       name: my-certificate
 *       location: us-central1
 *       selfManaged:
 *         pemCertificate:
 *           fn::invoke:
 *             Function: std:file
 *             Arguments:
 *               input: test-fixtures/cert.pem
 *             Return: result
 *         pemPrivateKey:
 *           fn::invoke:
 *             Function: std:file
 *             Arguments:
 *               input: test-fixtures/private-key.pem
 *             Return: result
 *   defaultNetwork:
 *     type: gcp:compute:Network
 *     name: default
 *     properties:
 *       name: my-network
 *       routingMode: REGIONAL
 *       autoCreateSubnetworks: false
 *   defaultSubnetwork:
 *     type: gcp:compute:Subnetwork
 *     name: default
 *     properties:
 *       name: my-subnetwork-name
 *       purpose: PRIVATE
 *       ipCidrRange: 10.128.0.0/20
 *       region: us-central1
 *       network: ${defaultNetwork.id}
 *       role: ACTIVE
 *   proxyonlysubnet:
 *     type: gcp:compute:Subnetwork
 *     properties:
 *       name: my-proxy-only-subnetwork
 *       purpose: REGIONAL_MANAGED_PROXY
 *       ipCidrRange: 192.168.0.0/23
 *       region: us-central1
 *       network: ${defaultNetwork.id}
 *       role: ACTIVE
 *   defaultGatewaySecurityPolicy:
 *     type: gcp:networksecurity:GatewaySecurityPolicy
 *     name: default
 *     properties:
 *       name: my-policy-name
 *       location: us-central1
 *   defaultGatewaySecurityPolicyRule:
 *     type: gcp:networksecurity:GatewaySecurityPolicyRule
 *     name: default
 *     properties:
 *       name: my-policyrule-name
 *       location: us-central1
 *       gatewaySecurityPolicy: ${defaultGatewaySecurityPolicy.name}
 *       enabled: true
 *       priority: 1
 *       sessionMatcher: host() == 'example.com'
 *       basicProfile: ALLOW
 *   defaultGateway:
 *     type: gcp:networkservices:Gateway
 *     name: default
 *     properties:
 *       name: my-gateway1
 *       location: us-central1
 *       addresses:
 *         - 10.128.0.99
 *       type: SECURE_WEB_GATEWAY
 *       ports:
 *         - 443
 *       scope: my-default-scope1
 *       certificateUrls:
 *         - ${default.id}
 *       gatewaySecurityPolicy: ${defaultGatewaySecurityPolicy.id}
 *       network: ${defaultNetwork.id}
 *       subnetwork: ${defaultSubnetwork.id}
 *       deleteSwgAutogenRouterOnDestroy: true
 * ```
 * 
 * ### Network Services Gateway Multiple Swp Same Network
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 * import * as std from "@pulumi/std";
 * const _default = new gcp.certificatemanager.Certificate("default", {
 *     name: "my-certificate",
 *     location: "us-south1",
 *     selfManaged: {
 *         pemCertificate: std.file({
 *             input: "test-fixtures/cert.pem",
 *         }).then(invoke => invoke.result),
 *         pemPrivateKey: std.file({
 *             input: "test-fixtures/private-key.pem",
 *         }).then(invoke => invoke.result),
 *     },
 * });
 * const defaultNetwork = new gcp.compute.Network("default", {
 *     name: "my-network",
 *     routingMode: "REGIONAL",
 *     autoCreateSubnetworks: false,
 * });
 * const defaultSubnetwork = new gcp.compute.Subnetwork("default", {
 *     name: "my-subnetwork-name",
 *     purpose: "PRIVATE",
 *     ipCidrRange: "10.128.0.0/20",
 *     region: "us-south1",
 *     network: defaultNetwork.id,
 *     role: "ACTIVE",
 * });
 * const proxyonlysubnet = new gcp.compute.Subnetwork("proxyonlysubnet", {
 *     name: "my-proxy-only-subnetwork",
 *     purpose: "REGIONAL_MANAGED_PROXY",
 *     ipCidrRange: "192.168.0.0/23",
 *     region: "us-south1",
 *     network: defaultNetwork.id,
 *     role: "ACTIVE",
 * });
 * const defaultGatewaySecurityPolicy = new gcp.networksecurity.GatewaySecurityPolicy("default", {
 *     name: "my-policy-name",
 *     location: "us-south1",
 * });
 * const defaultGatewaySecurityPolicyRule = new gcp.networksecurity.GatewaySecurityPolicyRule("default", {
 *     name: "my-policyrule-name",
 *     location: "us-south1",
 *     gatewaySecurityPolicy: defaultGatewaySecurityPolicy.name,
 *     enabled: true,
 *     priority: 1,
 *     sessionMatcher: "host() == 'example.com'",
 *     basicProfile: "ALLOW",
 * });
 * const defaultGateway = new gcp.networkservices.Gateway("default", {
 *     name: "my-gateway1",
 *     location: "us-south1",
 *     addresses: ["10.128.0.99"],
 *     type: "SECURE_WEB_GATEWAY",
 *     ports: [443],
 *     scope: "my-default-scope1",
 *     certificateUrls: [_default.id],
 *     gatewaySecurityPolicy: defaultGatewaySecurityPolicy.id,
 *     network: defaultNetwork.id,
 *     subnetwork: defaultSubnetwork.id,
 *     deleteSwgAutogenRouterOnDestroy: true,
 * });
 * const gateway2 = new gcp.networkservices.Gateway("gateway2", {
 *     name: "my-gateway2",
 *     location: "us-south1",
 *     addresses: ["10.128.0.98"],
 *     type: "SECURE_WEB_GATEWAY",
 *     ports: [443],
 *     scope: "my-default-scope2",
 *     certificateUrls: [_default.id],
 *     gatewaySecurityPolicy: defaultGatewaySecurityPolicy.id,
 *     network: defaultNetwork.id,
 *     subnetwork: defaultSubnetwork.id,
 *     deleteSwgAutogenRouterOnDestroy: true,
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_gcp as gcp
 * import pulumi_std as std
 * default = gcp.certificatemanager.Certificate("default",
 *     name="my-certificate",
 *     location="us-south1",
 *     self_managed=gcp.certificatemanager.CertificateSelfManagedArgs(
 *         pem_certificate=std.file(input="test-fixtures/cert.pem").result,
 *         pem_private_key=std.file(input="test-fixtures/private-key.pem").result,
 *     ))
 * default_network = gcp.compute.Network("default",
 *     name="my-network",
 *     routing_mode="REGIONAL",
 *     auto_create_subnetworks=False)
 * default_subnetwork = gcp.compute.Subnetwork("default",
 *     name="my-subnetwork-name",
 *     purpose="PRIVATE",
 *     ip_cidr_range="10.128.0.0/20",
 *     region="us-south1",
 *     network=default_network.id,
 *     role="ACTIVE")
 * proxyonlysubnet = gcp.compute.Subnetwork("proxyonlysubnet",
 *     name="my-proxy-only-subnetwork",
 *     purpose="REGIONAL_MANAGED_PROXY",
 *     ip_cidr_range="192.168.0.0/23",
 *     region="us-south1",
 *     network=default_network.id,
 *     role="ACTIVE")
 * default_gateway_security_policy = gcp.networksecurity.GatewaySecurityPolicy("default",
 *     name="my-policy-name",
 *     location="us-south1")
 * default_gateway_security_policy_rule = gcp.networksecurity.GatewaySecurityPolicyRule("default",
 *     name="my-policyrule-name",
 *     location="us-south1",
 *     gateway_security_policy=default_gateway_security_policy.name,
 *     enabled=True,
 *     priority=1,
 *     session_matcher="host() == 'example.com'",
 *     basic_profile="ALLOW")
 * default_gateway = gcp.networkservices.Gateway("default",
 *     name="my-gateway1",
 *     location="us-south1",
 *     addresses=["10.128.0.99"],
 *     type="SECURE_WEB_GATEWAY",
 *     ports=[443],
 *     scope="my-default-scope1",
 *     certificate_urls=[default.id],
 *     gateway_security_policy=default_gateway_security_policy.id,
 *     network=default_network.id,
 *     subnetwork=default_subnetwork.id,
 *     delete_swg_autogen_router_on_destroy=True)
 * gateway2 = gcp.networkservices.Gateway("gateway2",
 *     name="my-gateway2",
 *     location="us-south1",
 *     addresses=["10.128.0.98"],
 *     type="SECURE_WEB_GATEWAY",
 *     ports=[443],
 *     scope="my-default-scope2",
 *     certificate_urls=[default.id],
 *     gateway_security_policy=default_gateway_security_policy.id,
 *     network=default_network.id,
 *     subnetwork=default_subnetwork.id,
 *     delete_swg_autogen_router_on_destroy=True)
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Gcp = Pulumi.Gcp;
 * using Std = Pulumi.Std;
 * return await Deployment.RunAsync(() =>
 * {
 *     var @default = new Gcp.CertificateManager.Certificate("default", new()
 *     {
 *         Name = "my-certificate",
 *         Location = "us-south1",
 *         SelfManaged = new Gcp.CertificateManager.Inputs.CertificateSelfManagedArgs
 *         {
 *             PemCertificate = Std.File.Invoke(new()
 *             {
 *                 Input = "test-fixtures/cert.pem",
 *             }).Apply(invoke => invoke.Result),
 *             PemPrivateKey = Std.File.Invoke(new()
 *             {
 *                 Input = "test-fixtures/private-key.pem",
 *             }).Apply(invoke => invoke.Result),
 *         },
 *     });
 *     var defaultNetwork = new Gcp.Compute.Network("default", new()
 *     {
 *         Name = "my-network",
 *         RoutingMode = "REGIONAL",
 *         AutoCreateSubnetworks = false,
 *     });
 *     var defaultSubnetwork = new Gcp.Compute.Subnetwork("default", new()
 *     {
 *         Name = "my-subnetwork-name",
 *         Purpose = "PRIVATE",
 *         IpCidrRange = "10.128.0.0/20",
 *         Region = "us-south1",
 *         Network = defaultNetwork.Id,
 *         Role = "ACTIVE",
 *     });
 *     var proxyonlysubnet = new Gcp.Compute.Subnetwork("proxyonlysubnet", new()
 *     {
 *         Name = "my-proxy-only-subnetwork",
 *         Purpose = "REGIONAL_MANAGED_PROXY",
 *         IpCidrRange = "192.168.0.0/23",
 *         Region = "us-south1",
 *         Network = defaultNetwork.Id,
 *         Role = "ACTIVE",
 *     });
 *     var defaultGatewaySecurityPolicy = new Gcp.NetworkSecurity.GatewaySecurityPolicy("default", new()
 *     {
 *         Name = "my-policy-name",
 *         Location = "us-south1",
 *     });
 *     var defaultGatewaySecurityPolicyRule = new Gcp.NetworkSecurity.GatewaySecurityPolicyRule("default", new()
 *     {
 *         Name = "my-policyrule-name",
 *         Location = "us-south1",
 *         GatewaySecurityPolicy = defaultGatewaySecurityPolicy.Name,
 *         Enabled = true,
 *         Priority = 1,
 *         SessionMatcher = "host() == 'example.com'",
 *         BasicProfile = "ALLOW",
 *     });
 *     var defaultGateway = new Gcp.NetworkServices.Gateway("default", new()
 *     {
 *         Name = "my-gateway1",
 *         Location = "us-south1",
 *         Addresses = new[]
 *         {
 *             "10.128.0.99",
 *         },
 *         Type = "SECURE_WEB_GATEWAY",
 *         Ports = new[]
 *         {
 *             443,
 *         },
 *         Scope = "my-default-scope1",
 *         CertificateUrls = new[]
 *         {
 *             @default.Id,
 *         },
 *         GatewaySecurityPolicy = defaultGatewaySecurityPolicy.Id,
 *         Network = defaultNetwork.Id,
 *         Subnetwork = defaultSubnetwork.Id,
 *         DeleteSwgAutogenRouterOnDestroy = true,
 *     });
 *     var gateway2 = new Gcp.NetworkServices.Gateway("gateway2", new()
 *     {
 *         Name = "my-gateway2",
 *         Location = "us-south1",
 *         Addresses = new[]
 *         {
 *             "10.128.0.98",
 *         },
 *         Type = "SECURE_WEB_GATEWAY",
 *         Ports = new[]
 *         {
 *             443,
 *         },
 *         Scope = "my-default-scope2",
 *         CertificateUrls = new[]
 *         {
 *             @default.Id,
 *         },
 *         GatewaySecurityPolicy = defaultGatewaySecurityPolicy.Id,
 *         Network = defaultNetwork.Id,
 *         Subnetwork = defaultSubnetwork.Id,
 *         DeleteSwgAutogenRouterOnDestroy = true,
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/certificatemanager"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/compute"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networksecurity"
 * 	"github.com/pulumi/pulumi-gcp/sdk/v7/go/gcp/networkservices"
 * 	"github.com/pulumi/pulumi-std/sdk/go/std"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		invokeFile, err := std.File(ctx, &std.FileArgs{
 * 			Input: "test-fixtures/cert.pem",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		invokeFile1, err := std.File(ctx, &std.FileArgs{
 * 			Input: "test-fixtures/private-key.pem",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = certificatemanager.NewCertificate(ctx, "default", &certificatemanager.CertificateArgs{
 * 			Name:     pulumi.String("my-certificate"),
 * 			Location: pulumi.String("us-south1"),
 * 			SelfManaged: &certificatemanager.CertificateSelfManagedArgs{
 * 				PemCertificate: invokeFile.Result,
 * 				PemPrivateKey:  invokeFile1.Result,
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultNetwork, err := compute.NewNetwork(ctx, "default", &compute.NetworkArgs{
 * 			Name:                  pulumi.String("my-network"),
 * 			RoutingMode:           pulumi.String("REGIONAL"),
 * 			AutoCreateSubnetworks: pulumi.Bool(false),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultSubnetwork, err := compute.NewSubnetwork(ctx, "default", &compute.SubnetworkArgs{
 * 			Name:        pulumi.String("my-subnetwork-name"),
 * 			Purpose:     pulumi.String("PRIVATE"),
 * 			IpCidrRange: pulumi.String("10.128.0.0/20"),
 * 			Region:      pulumi.String("us-south1"),
 * 			Network:     defaultNetwork.ID(),
 * 			Role:        pulumi.String("ACTIVE"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewSubnetwork(ctx, "proxyonlysubnet", &compute.SubnetworkArgs{
 * 			Name:        pulumi.String("my-proxy-only-subnetwork"),
 * 			Purpose:     pulumi.String("REGIONAL_MANAGED_PROXY"),
 * 			IpCidrRange: pulumi.String("192.168.0.0/23"),
 * 			Region:      pulumi.String("us-south1"),
 * 			Network:     defaultNetwork.ID(),
 * 			Role:        pulumi.String("ACTIVE"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		defaultGatewaySecurityPolicy, err := networksecurity.NewGatewaySecurityPolicy(ctx, "default", &networksecurity.GatewaySecurityPolicyArgs{
 * 			Name:     pulumi.String("my-policy-name"),
 * 			Location: pulumi.String("us-south1"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = networksecurity.NewGatewaySecurityPolicyRule(ctx, "default", &networksecurity.GatewaySecurityPolicyRuleArgs{
 * 			Name:                  pulumi.String("my-policyrule-name"),
 * 			Location:              pulumi.String("us-south1"),
 * 			GatewaySecurityPolicy: defaultGatewaySecurityPolicy.Name,
 * 			Enabled:               pulumi.Bool(true),
 * 			Priority:              pulumi.Int(1),
 * 			SessionMatcher:        pulumi.String("host() == 'example.com'"),
 * 			BasicProfile:          pulumi.String("ALLOW"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = networkservices.NewGateway(ctx, "default", &networkservices.GatewayArgs{
 * 			Name:     pulumi.String("my-gateway1"),
 * 			Location: pulumi.String("us-south1"),
 * 			Addresses: pulumi.StringArray{
 * 				pulumi.String("10.128.0.99"),
 * 			},
 * 			Type: pulumi.String("SECURE_WEB_GATEWAY"),
 * 			Ports: pulumi.IntArray{
 * 				pulumi.Int(443),
 * 			},
 * 			Scope: pulumi.String("my-default-scope1"),
 * 			CertificateUrls: pulumi.StringArray{
 * 				_default.ID(),
 * 			},
 * 			GatewaySecurityPolicy:           defaultGatewaySecurityPolicy.ID(),
 * 			Network:                         defaultNetwork.ID(),
 * 			Subnetwork:                      defaultSubnetwork.ID(),
 * 			DeleteSwgAutogenRouterOnDestroy: pulumi.Bool(true),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = networkservices.NewGateway(ctx, "gateway2", &networkservices.GatewayArgs{
 * 			Name:     pulumi.String("my-gateway2"),
 * 			Location: pulumi.String("us-south1"),
 * 			Addresses: pulumi.StringArray{
 * 				pulumi.String("10.128.0.98"),
 * 			},
 * 			Type: pulumi.String("SECURE_WEB_GATEWAY"),
 * 			Ports: pulumi.IntArray{
 * 				pulumi.Int(443),
 * 			},
 * 			Scope: pulumi.String("my-default-scope2"),
 * 			CertificateUrls: pulumi.StringArray{
 * 				_default.ID(),
 * 			},
 * 			GatewaySecurityPolicy:           defaultGatewaySecurityPolicy.ID(),
 * 			Network:                         defaultNetwork.ID(),
 * 			Subnetwork:                      defaultSubnetwork.ID(),
 * 			DeleteSwgAutogenRouterOnDestroy: pulumi.Bool(true),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.gcp.certificatemanager.Certificate;
 * import com.pulumi.gcp.certificatemanager.CertificateArgs;
 * import com.pulumi.gcp.certificatemanager.inputs.CertificateSelfManagedArgs;
 * 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.networksecurity.GatewaySecurityPolicy;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyArgs;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyRule;
 * import com.pulumi.gcp.networksecurity.GatewaySecurityPolicyRuleArgs;
 * import com.pulumi.gcp.networkservices.Gateway;
 * import com.pulumi.gcp.networkservices.GatewayArgs;
 * 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 default_ = new Certificate("default", CertificateArgs.builder()
 *             .name("my-certificate")
 *             .location("us-south1")
 *             .selfManaged(CertificateSelfManagedArgs.builder()
 *                 .pemCertificate(StdFunctions.file(FileArgs.builder()
 *                     .input("test-fixtures/cert.pem")
 *                     .build()).result())
 *                 .pemPrivateKey(StdFunctions.file(FileArgs.builder()
 *                     .input("test-fixtures/private-key.pem")
 *                     .build()).result())
 *                 .build())
 *             .build());
 *         var defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder()
 *             .name("my-network")
 *             .routingMode("REGIONAL")
 *             .autoCreateSubnetworks(false)
 *             .build());
 *         var defaultSubnetwork = new Subnetwork("defaultSubnetwork", SubnetworkArgs.builder()
 *             .name("my-subnetwork-name")
 *             .purpose("PRIVATE")
 *             .ipCidrRange("10.128.0.0/20")
 *             .region("us-south1")
 *             .network(defaultNetwork.id())
 *             .role("ACTIVE")
 *             .build());
 *         var proxyonlysubnet = new Subnetwork("proxyonlysubnet", SubnetworkArgs.builder()
 *             .name("my-proxy-only-subnetwork")
 *             .purpose("REGIONAL_MANAGED_PROXY")
 *             .ipCidrRange("192.168.0.0/23")
 *             .region("us-south1")
 *             .network(defaultNetwork.id())
 *             .role("ACTIVE")
 *             .build());
 *         var defaultGatewaySecurityPolicy = new GatewaySecurityPolicy("defaultGatewaySecurityPolicy", GatewaySecurityPolicyArgs.builder()
 *             .name("my-policy-name")
 *             .location("us-south1")
 *             .build());
 *         var defaultGatewaySecurityPolicyRule = new GatewaySecurityPolicyRule("defaultGatewaySecurityPolicyRule", GatewaySecurityPolicyRuleArgs.builder()
 *             .name("my-policyrule-name")
 *             .location("us-south1")
 *             .gatewaySecurityPolicy(defaultGatewaySecurityPolicy.name())
 *             .enabled(true)
 *             .priority(1)
 *             .sessionMatcher("host() == 'example.com'")
 *             .basicProfile("ALLOW")
 *             .build());
 *         var defaultGateway = new Gateway("defaultGateway", GatewayArgs.builder()
 *             .name("my-gateway1")
 *             .location("us-south1")
 *             .addresses("10.128.0.99")
 *             .type("SECURE_WEB_GATEWAY")
 *             .ports(443)
 *             .scope("my-default-scope1")
 *             .certificateUrls(default_.id())
 *             .gatewaySecurityPolicy(defaultGatewaySecurityPolicy.id())
 *             .network(defaultNetwork.id())
 *             .subnetwork(defaultSubnetwork.id())
 *             .deleteSwgAutogenRouterOnDestroy(true)
 *             .build());
 *         var gateway2 = new Gateway("gateway2", GatewayArgs.builder()
 *             .name("my-gateway2")
 *             .location("us-south1")
 *             .addresses("10.128.0.98")
 *             .type("SECURE_WEB_GATEWAY")
 *             .ports(443)
 *             .scope("my-default-scope2")
 *             .certificateUrls(default_.id())
 *             .gatewaySecurityPolicy(defaultGatewaySecurityPolicy.id())
 *             .network(defaultNetwork.id())
 *             .subnetwork(defaultSubnetwork.id())
 *             .deleteSwgAutogenRouterOnDestroy(true)
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   default:
 *     type: gcp:certificatemanager:Certificate
 *     properties:
 *       name: my-certificate
 *       location: us-south1
 *       selfManaged:
 *         pemCertificate:
 *           fn::invoke:
 *             Function: std:file
 *             Arguments:
 *               input: test-fixtures/cert.pem
 *             Return: result
 *         pemPrivateKey:
 *           fn::invoke:
 *             Function: std:file
 *             Arguments:
 *               input: test-fixtures/private-key.pem
 *             Return: result
 *   defaultNetwork:
 *     type: gcp:compute:Network
 *     name: default
 *     properties:
 *       name: my-network
 *       routingMode: REGIONAL
 *       autoCreateSubnetworks: false
 *   defaultSubnetwork:
 *     type: gcp:compute:Subnetwork
 *     name: default
 *     properties:
 *       name: my-subnetwork-name
 *       purpose: PRIVATE
 *       ipCidrRange: 10.128.0.0/20
 *       region: us-south1
 *       network: ${defaultNetwork.id}
 *       role: ACTIVE
 *   proxyonlysubnet:
 *     type: gcp:compute:Subnetwork
 *     properties:
 *       name: my-proxy-only-subnetwork
 *       purpose: REGIONAL_MANAGED_PROXY
 *       ipCidrRange: 192.168.0.0/23
 *       region: us-south1
 *       network: ${defaultNetwork.id}
 *       role: ACTIVE
 *   defaultGatewaySecurityPolicy:
 *     type: gcp:networksecurity:GatewaySecurityPolicy
 *     name: default
 *     properties:
 *       name: my-policy-name
 *       location: us-south1
 *   defaultGatewaySecurityPolicyRule:
 *     type: gcp:networksecurity:GatewaySecurityPolicyRule
 *     name: default
 *     properties:
 *       name: my-policyrule-name
 *       location: us-south1
 *       gatewaySecurityPolicy: ${defaultGatewaySecurityPolicy.name}
 *       enabled: true
 *       priority: 1
 *       sessionMatcher: host() == 'example.com'
 *       basicProfile: ALLOW
 *   defaultGateway:
 *     type: gcp:networkservices:Gateway
 *     name: default
 *     properties:
 *       name: my-gateway1
 *       location: us-south1
 *       addresses:
 *         - 10.128.0.99
 *       type: SECURE_WEB_GATEWAY
 *       ports:
 *         - 443
 *       scope: my-default-scope1
 *       certificateUrls:
 *         - ${default.id}
 *       gatewaySecurityPolicy: ${defaultGatewaySecurityPolicy.id}
 *       network: ${defaultNetwork.id}
 *       subnetwork: ${defaultSubnetwork.id}
 *       deleteSwgAutogenRouterOnDestroy: true
 *   gateway2:
 *     type: gcp:networkservices:Gateway
 *     properties:
 *       name: my-gateway2
 *       location: us-south1
 *       addresses:
 *         - 10.128.0.98
 *       type: SECURE_WEB_GATEWAY
 *       ports:
 *         - 443
 *       scope: my-default-scope2
 *       certificateUrls:
 *         - ${default.id}
 *       gatewaySecurityPolicy: ${defaultGatewaySecurityPolicy.id}
 *       network: ${defaultNetwork.id}
 *       subnetwork: ${defaultSubnetwork.id}
 *       deleteSwgAutogenRouterOnDestroy: true
 * ```
 * 
 * ## Import
 * Gateway can be imported using any of these accepted formats:
 * * `projects/{{project}}/locations/{{location}}/gateways/{{name}}`
 * * `{{project}}/{{location}}/{{name}}`
 * * `{{location}}/{{name}}`
 * When using the `pulumi import` command, Gateway can be imported using one of the formats above. For example:
 * ```sh
 * $ pulumi import gcp:networkservices/gateway:Gateway default projects/{{project}}/locations/{{location}}/gateways/{{name}}
 * ```
 * ```sh
 * $ pulumi import gcp:networkservices/gateway:Gateway default {{project}}/{{location}}/{{name}}
 * ```
 * ```sh
 * $ pulumi import gcp:networkservices/gateway:Gateway default {{location}}/{{name}}
 * ```
 */
public class Gateway internal constructor(
    override val javaResource: com.pulumi.gcp.networkservices.Gateway,
) : KotlinCustomResource(javaResource, GatewayMapper) {
    /**
     * Zero or one IPv4-address on which the Gateway will receive the traffic. When no address is provided,
     * an IP from the subnetwork is allocated This field only applies to gateways of type 'SECURE_WEB_GATEWAY'.
     * Gateways of type 'OPEN_MESH' listen on 0.0.0.0.
     */
    public val addresses: Output>
        get() = javaResource.addresses().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * A fully-qualified Certificates URL reference. The proxy presents a Certificate (selected based on SNI) when establishing a TLS connection.
     * This feature only applies to gateways of type 'SECURE_WEB_GATEWAY'.
     */
    public val certificateUrls: Output>?
        get() = javaResource.certificateUrls().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 -> args0 })
            }).orElse(null)
        })

    /**
     * Time the AccessPolicy was created in UTC.
     */
    public val createTime: Output
        get() = javaResource.createTime().applyValue({ args0 -> args0 })

    /**
     * When deleting a gateway of type 'SECURE_WEB_GATEWAY', this boolean option will also delete auto generated router by the gateway creation.
     * If there is no other gateway of type 'SECURE_WEB_GATEWAY' remaining for that region and network it will be deleted.
     */
    public val deleteSwgAutogenRouterOnDestroy: Output?
        get() = javaResource.deleteSwgAutogenRouterOnDestroy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * A free-text description of the resource. Max length 1024 characters.
     */
    public val description: Output?
        get() = javaResource.description().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    public val effectiveLabels: Output>
        get() = javaResource.effectiveLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * A fully-qualified GatewaySecurityPolicy URL reference. Defines how a server should apply security policy to inbound (VM to Proxy) initiated connections.
     * For example: `projects/*/locations/*/gatewaySecurityPolicies/swg-policy`.
     * This policy is specific to gateways of type 'SECURE_WEB_GATEWAY'.
     * */*/
     */
    public val gatewaySecurityPolicy: Output?
        get() = javaResource.gatewaySecurityPolicy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Set of label tags associated with the Gateway resource.
     * **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.
     */
    public val labels: Output>?
        get() = javaResource.labels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.map({ args0 ->
                    args0.key.to(args0.value)
                }).toMap()
            }).orElse(null)
        })

    /**
     * The location of the gateway.
     * The default value is `global`.
     */
    public val location: Output?
        get() = javaResource.location().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Short name of the Gateway resource to be created.
     * - - -
     */
    public val name: Output
        get() = javaResource.name().applyValue({ args0 -> args0 })

    /**
     * The relative resource name identifying the VPC network that is using this configuration.
     * For example: `projects/*/global/networks/network-1`.
     * Currently, this field is specific to gateways of type 'SECURE_WEB_GATEWAY'.
     * */
     */
    public val network: Output?
        get() = javaResource.network().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * One or more port numbers (1-65535), on which the Gateway will receive traffic.
     * The proxy binds to the specified ports. Gateways of type 'SECURE_WEB_GATEWAY' are
     * limited to 1 port. Gateways of type 'OPEN_MESH' listen on 0.0.0.0 and support multiple ports.
     */
    public val ports: Output>
        get() = javaResource.ports().applyValue({ args0 -> args0.map({ args0 -> args0 }) })

    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    public val project: Output
        get() = javaResource.project().applyValue({ args0 -> args0 })

    /**
     * The combination of labels configured directly on the resource
     * and default labels configured on the provider.
     */
    public val pulumiLabels: Output>
        get() = javaResource.pulumiLabels().applyValue({ args0 ->
            args0.map({ args0 ->
                args0.key.to(args0.value)
            }).toMap()
        })

    /**
     * Immutable. Scope determines how configuration across multiple Gateway instances are merged.
     * The configuration for multiple Gateway instances with the same scope will be merged as presented as
     * a single coniguration to the proxy/load balancer.
     * Max length 64 characters. Scope should start with a letter and can only have letters, numbers, hyphens.
     */
    public val scope: Output?
        get() = javaResource.scope().applyValue({ args0 -> args0.map({ args0 -> args0 }).orElse(null) })

    /**
     * Server-defined URL of this resource.
     */
    public val selfLink: Output
        get() = javaResource.selfLink().applyValue({ args0 -> args0 })

    /**
     * A fully-qualified ServerTLSPolicy URL reference. Specifies how TLS traffic is terminated.
     * If empty, TLS termination is disabled.
     */
    public val serverTlsPolicy: Output?
        get() = javaResource.serverTlsPolicy().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * The relative resource name identifying the subnetwork in which this SWG is allocated.
     * For example: `projects/*/regions/us-central1/subnetworks/network-1`.
     * Currently, this field is specific to gateways of type 'SECURE_WEB_GATEWAY.
     * */
     */
    public val subnetwork: Output?
        get() = javaResource.subnetwork().applyValue({ args0 ->
            args0.map({ args0 ->
                args0
            }).orElse(null)
        })

    /**
     * Immutable. The type of the customer-managed gateway. Possible values are: * OPEN_MESH * SECURE_WEB_GATEWAY.
     * Possible values are: `TYPE_UNSPECIFIED`, `OPEN_MESH`, `SECURE_WEB_GATEWAY`.
     */
    public val type: Output
        get() = javaResource.type().applyValue({ args0 -> args0 })

    /**
     * Time the AccessPolicy was updated in UTC.
     */
    public val updateTime: Output
        get() = javaResource.updateTime().applyValue({ args0 -> args0 })
}

public object GatewayMapper : ResourceMapper {
    override fun supportsMappingOfType(javaResource: Resource): Boolean =
        com.pulumi.gcp.networkservices.Gateway::class == javaResource::class

    override fun map(javaResource: Resource): Gateway = Gateway(
        javaResource as
            com.pulumi.gcp.networkservices.Gateway,
    )
}

/**
 * @see [Gateway].
 * @param name The _unique_ name of the resulting resource.
 * @param block Builder for [Gateway].
 */
public suspend fun gateway(name: String, block: suspend GatewayResourceBuilder.() -> Unit): Gateway {
    val builder = GatewayResourceBuilder()
    builder.name(name)
    block(builder)
    return builder.build()
}

/**
 * @see [Gateway].
 * @param name The _unique_ name of the resulting resource.
 */
public fun gateway(name: String): Gateway {
    val builder = GatewayResourceBuilder()
    builder.name(name)
    return builder.build()
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy