# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['ConnectionArgs', 'Connection']

@pulumi.input_type
class ConnectionArgs:
    def __init__(__self__, *,
                 bgp_config_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]] = None,
                 bgp_config_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]] = None,
                 customer_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 enable_route_propagation: Optional[pulumi.Input[_builtins.bool]] = None,
                 esp_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]] = None,
                 ikev2_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]] = None,
                 initiation_policy: Optional[pulumi.Input[_builtins.str]] = None,
                 is_ipv6: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 vpn_gateway_id: Optional[pulumi.Input[_builtins.str]] = None):
        """
        The set of arguments for constructing a Connection resource.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]] bgp_config_ipv4s: BGP configuration for IPv4. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]] bgp_config_ipv6s: BGP configuration for IPv6. See BGP Config below.
        :param pulumi.Input[_builtins.str] customer_gateway_id: The ID of the customer gateway to attach to the connection.
        :param pulumi.Input[_builtins.bool] enable_route_propagation: Defines whether route propagation is enabled or not.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]] esp_ciphers: ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]] ikev2_ciphers: IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        :param pulumi.Input[_builtins.str] initiation_policy: Defines who initiates the IPSec tunnel.
        :param pulumi.Input[_builtins.bool] is_ipv6: Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        :param pulumi.Input[_builtins.str] name: The name of the connection.
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the connection is associated with.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the connection should be created.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The list of tags to apply to the connection.
        :param pulumi.Input[_builtins.str] vpn_gateway_id: The ID of the VPN gateway to attach to the connection.
        """
        if bgp_config_ipv4s is not None:
            pulumi.set(__self__, "bgp_config_ipv4s", bgp_config_ipv4s)
        if bgp_config_ipv6s is not None:
            pulumi.set(__self__, "bgp_config_ipv6s", bgp_config_ipv6s)
        if customer_gateway_id is not None:
            pulumi.set(__self__, "customer_gateway_id", customer_gateway_id)
        if enable_route_propagation is not None:
            pulumi.set(__self__, "enable_route_propagation", enable_route_propagation)
        if esp_ciphers is not None:
            pulumi.set(__self__, "esp_ciphers", esp_ciphers)
        if ikev2_ciphers is not None:
            pulumi.set(__self__, "ikev2_ciphers", ikev2_ciphers)
        if initiation_policy is not None:
            pulumi.set(__self__, "initiation_policy", initiation_policy)
        if is_ipv6 is not None:
            pulumi.set(__self__, "is_ipv6", is_ipv6)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if project_id is not None:
            pulumi.set(__self__, "project_id", project_id)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if vpn_gateway_id is not None:
            pulumi.set(__self__, "vpn_gateway_id", vpn_gateway_id)

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv4s")
    def bgp_config_ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]]:
        """
        BGP configuration for IPv4. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv4s")

    @bgp_config_ipv4s.setter
    def bgp_config_ipv4s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]]):
        pulumi.set(self, "bgp_config_ipv4s", value)

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv6s")
    def bgp_config_ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]]:
        """
        BGP configuration for IPv6. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv6s")

    @bgp_config_ipv6s.setter
    def bgp_config_ipv6s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]]):
        pulumi.set(self, "bgp_config_ipv6s", value)

    @_builtins.property
    @pulumi.getter(name="customerGatewayId")
    def customer_gateway_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of the customer gateway to attach to the connection.
        """
        return pulumi.get(self, "customer_gateway_id")

    @customer_gateway_id.setter
    def customer_gateway_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "customer_gateway_id", value)

    @_builtins.property
    @pulumi.getter(name="enableRoutePropagation")
    def enable_route_propagation(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Defines whether route propagation is enabled or not.
        """
        return pulumi.get(self, "enable_route_propagation")

    @enable_route_propagation.setter
    def enable_route_propagation(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enable_route_propagation", value)

    @_builtins.property
    @pulumi.getter(name="espCiphers")
    def esp_ciphers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]]:
        """
        ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        """
        return pulumi.get(self, "esp_ciphers")

    @esp_ciphers.setter
    def esp_ciphers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]]):
        pulumi.set(self, "esp_ciphers", value)

    @_builtins.property
    @pulumi.getter(name="ikev2Ciphers")
    def ikev2_ciphers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]]:
        """
        IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        """
        return pulumi.get(self, "ikev2_ciphers")

    @ikev2_ciphers.setter
    def ikev2_ciphers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]]):
        pulumi.set(self, "ikev2_ciphers", value)

    @_builtins.property
    @pulumi.getter(name="initiationPolicy")
    def initiation_policy(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Defines who initiates the IPSec tunnel.
        """
        return pulumi.get(self, "initiation_policy")

    @initiation_policy.setter
    def initiation_policy(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "initiation_policy", value)

    @_builtins.property
    @pulumi.getter(name="isIpv6")
    def is_ipv6(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        """
        return pulumi.get(self, "is_ipv6")

    @is_ipv6.setter
    def is_ipv6(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "is_ipv6", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the connection.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `project_id`) The ID of the project the connection is associated with.
        """
        return pulumi.get(self, "project_id")

    @project_id.setter
    def project_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "project_id", value)

    @_builtins.property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `region`) The region in which the connection should be created.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "region", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        The list of tags to apply to the connection.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "tags", value)

    @_builtins.property
    @pulumi.getter(name="vpnGatewayId")
    def vpn_gateway_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of the VPN gateway to attach to the connection.
        """
        return pulumi.get(self, "vpn_gateway_id")

    @vpn_gateway_id.setter
    def vpn_gateway_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "vpn_gateway_id", value)


@pulumi.input_type
class _ConnectionState:
    def __init__(__self__, *,
                 bgp_config_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]] = None,
                 bgp_config_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]] = None,
                 bgp_session_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv4Args']]]] = None,
                 bgp_session_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv6Args']]]] = None,
                 bgp_status_ipv4: Optional[pulumi.Input[_builtins.str]] = None,
                 bgp_status_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
                 created_at: Optional[pulumi.Input[_builtins.str]] = None,
                 customer_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 enable_route_propagation: Optional[pulumi.Input[_builtins.bool]] = None,
                 esp_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]] = None,
                 ikev2_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]] = None,
                 initiation_policy: Optional[pulumi.Input[_builtins.str]] = None,
                 is_ipv6: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 organization_id: Optional[pulumi.Input[_builtins.str]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 route_propagation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
                 secret_id: Optional[pulumi.Input[_builtins.str]] = None,
                 secret_version: Optional[pulumi.Input[_builtins.int]] = None,
                 status: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 tunnel_status: Optional[pulumi.Input[_builtins.str]] = None,
                 updated_at: Optional[pulumi.Input[_builtins.str]] = None,
                 vpn_gateway_id: Optional[pulumi.Input[_builtins.str]] = None):
        """
        Input properties used for looking up and filtering Connection resources.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]] bgp_config_ipv4s: BGP configuration for IPv4. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]] bgp_config_ipv6s: BGP configuration for IPv6. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv4Args']]] bgp_session_ipv4s: The BGP IPv4 session information. See BGP Session below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv6Args']]] bgp_session_ipv6s: The BGP IPv6 session information. See BGP Session below.
        :param pulumi.Input[_builtins.str] bgp_status_ipv4: The status of the BGP IPv4 session.
        :param pulumi.Input[_builtins.str] bgp_status_ipv6: The status of the BGP IPv6 session.
        :param pulumi.Input[_builtins.str] created_at: The date and time of the creation of the connection (RFC 3339 format).
        :param pulumi.Input[_builtins.str] customer_gateway_id: The ID of the customer gateway to attach to the connection.
        :param pulumi.Input[_builtins.bool] enable_route_propagation: Defines whether route propagation is enabled or not.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]] esp_ciphers: ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        :param pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]] ikev2_ciphers: IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        :param pulumi.Input[_builtins.str] initiation_policy: Defines who initiates the IPSec tunnel.
        :param pulumi.Input[_builtins.bool] is_ipv6: Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        :param pulumi.Input[_builtins.str] name: The name of the connection.
        :param pulumi.Input[_builtins.str] organization_id: The Organization ID the connection is associated with.
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the connection is associated with.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the connection should be created.
        :param pulumi.Input[_builtins.bool] route_propagation_enabled: Whether route propagation is enabled.
        :param pulumi.Input[_builtins.str] secret_id: The ID of the secret containing the pre-shared key (PSK) for the connection.
        :param pulumi.Input[_builtins.int] secret_version: The version of the secret containing the PSK.
        :param pulumi.Input[_builtins.str] status: The status of the connection.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The list of tags to apply to the connection.
        :param pulumi.Input[_builtins.str] tunnel_status: The status of the IPSec tunnel.
        :param pulumi.Input[_builtins.str] updated_at: The date and time of the last update of the connection (RFC 3339 format).
        :param pulumi.Input[_builtins.str] vpn_gateway_id: The ID of the VPN gateway to attach to the connection.
        """
        if bgp_config_ipv4s is not None:
            pulumi.set(__self__, "bgp_config_ipv4s", bgp_config_ipv4s)
        if bgp_config_ipv6s is not None:
            pulumi.set(__self__, "bgp_config_ipv6s", bgp_config_ipv6s)
        if bgp_session_ipv4s is not None:
            pulumi.set(__self__, "bgp_session_ipv4s", bgp_session_ipv4s)
        if bgp_session_ipv6s is not None:
            pulumi.set(__self__, "bgp_session_ipv6s", bgp_session_ipv6s)
        if bgp_status_ipv4 is not None:
            pulumi.set(__self__, "bgp_status_ipv4", bgp_status_ipv4)
        if bgp_status_ipv6 is not None:
            pulumi.set(__self__, "bgp_status_ipv6", bgp_status_ipv6)
        if created_at is not None:
            pulumi.set(__self__, "created_at", created_at)
        if customer_gateway_id is not None:
            pulumi.set(__self__, "customer_gateway_id", customer_gateway_id)
        if enable_route_propagation is not None:
            pulumi.set(__self__, "enable_route_propagation", enable_route_propagation)
        if esp_ciphers is not None:
            pulumi.set(__self__, "esp_ciphers", esp_ciphers)
        if ikev2_ciphers is not None:
            pulumi.set(__self__, "ikev2_ciphers", ikev2_ciphers)
        if initiation_policy is not None:
            pulumi.set(__self__, "initiation_policy", initiation_policy)
        if is_ipv6 is not None:
            pulumi.set(__self__, "is_ipv6", is_ipv6)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if organization_id is not None:
            pulumi.set(__self__, "organization_id", organization_id)
        if project_id is not None:
            pulumi.set(__self__, "project_id", project_id)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if route_propagation_enabled is not None:
            pulumi.set(__self__, "route_propagation_enabled", route_propagation_enabled)
        if secret_id is not None:
            pulumi.set(__self__, "secret_id", secret_id)
        if secret_version is not None:
            pulumi.set(__self__, "secret_version", secret_version)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if tunnel_status is not None:
            pulumi.set(__self__, "tunnel_status", tunnel_status)
        if updated_at is not None:
            pulumi.set(__self__, "updated_at", updated_at)
        if vpn_gateway_id is not None:
            pulumi.set(__self__, "vpn_gateway_id", vpn_gateway_id)

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv4s")
    def bgp_config_ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]]:
        """
        BGP configuration for IPv4. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv4s")

    @bgp_config_ipv4s.setter
    def bgp_config_ipv4s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv4Args']]]]):
        pulumi.set(self, "bgp_config_ipv4s", value)

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv6s")
    def bgp_config_ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]]:
        """
        BGP configuration for IPv6. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv6s")

    @bgp_config_ipv6s.setter
    def bgp_config_ipv6s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpConfigIpv6Args']]]]):
        pulumi.set(self, "bgp_config_ipv6s", value)

    @_builtins.property
    @pulumi.getter(name="bgpSessionIpv4s")
    def bgp_session_ipv4s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv4Args']]]]:
        """
        The BGP IPv4 session information. See BGP Session below.
        """
        return pulumi.get(self, "bgp_session_ipv4s")

    @bgp_session_ipv4s.setter
    def bgp_session_ipv4s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv4Args']]]]):
        pulumi.set(self, "bgp_session_ipv4s", value)

    @_builtins.property
    @pulumi.getter(name="bgpSessionIpv6s")
    def bgp_session_ipv6s(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv6Args']]]]:
        """
        The BGP IPv6 session information. See BGP Session below.
        """
        return pulumi.get(self, "bgp_session_ipv6s")

    @bgp_session_ipv6s.setter
    def bgp_session_ipv6s(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionBgpSessionIpv6Args']]]]):
        pulumi.set(self, "bgp_session_ipv6s", value)

    @_builtins.property
    @pulumi.getter(name="bgpStatusIpv4")
    def bgp_status_ipv4(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The status of the BGP IPv4 session.
        """
        return pulumi.get(self, "bgp_status_ipv4")

    @bgp_status_ipv4.setter
    def bgp_status_ipv4(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "bgp_status_ipv4", value)

    @_builtins.property
    @pulumi.getter(name="bgpStatusIpv6")
    def bgp_status_ipv6(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The status of the BGP IPv6 session.
        """
        return pulumi.get(self, "bgp_status_ipv6")

    @bgp_status_ipv6.setter
    def bgp_status_ipv6(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "bgp_status_ipv6", value)

    @_builtins.property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The date and time of the creation of the connection (RFC 3339 format).
        """
        return pulumi.get(self, "created_at")

    @created_at.setter
    def created_at(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "created_at", value)

    @_builtins.property
    @pulumi.getter(name="customerGatewayId")
    def customer_gateway_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of the customer gateway to attach to the connection.
        """
        return pulumi.get(self, "customer_gateway_id")

    @customer_gateway_id.setter
    def customer_gateway_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "customer_gateway_id", value)

    @_builtins.property
    @pulumi.getter(name="enableRoutePropagation")
    def enable_route_propagation(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Defines whether route propagation is enabled or not.
        """
        return pulumi.get(self, "enable_route_propagation")

    @enable_route_propagation.setter
    def enable_route_propagation(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "enable_route_propagation", value)

    @_builtins.property
    @pulumi.getter(name="espCiphers")
    def esp_ciphers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]]:
        """
        ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        """
        return pulumi.get(self, "esp_ciphers")

    @esp_ciphers.setter
    def esp_ciphers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionEspCipherArgs']]]]):
        pulumi.set(self, "esp_ciphers", value)

    @_builtins.property
    @pulumi.getter(name="ikev2Ciphers")
    def ikev2_ciphers(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]]:
        """
        IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        """
        return pulumi.get(self, "ikev2_ciphers")

    @ikev2_ciphers.setter
    def ikev2_ciphers(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionIkev2CipherArgs']]]]):
        pulumi.set(self, "ikev2_ciphers", value)

    @_builtins.property
    @pulumi.getter(name="initiationPolicy")
    def initiation_policy(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Defines who initiates the IPSec tunnel.
        """
        return pulumi.get(self, "initiation_policy")

    @initiation_policy.setter
    def initiation_policy(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "initiation_policy", value)

    @_builtins.property
    @pulumi.getter(name="isIpv6")
    def is_ipv6(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        """
        return pulumi.get(self, "is_ipv6")

    @is_ipv6.setter
    def is_ipv6(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "is_ipv6", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the connection.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The Organization ID the connection is associated with.
        """
        return pulumi.get(self, "organization_id")

    @organization_id.setter
    def organization_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "organization_id", value)

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `project_id`) The ID of the project the connection is associated with.
        """
        return pulumi.get(self, "project_id")

    @project_id.setter
    def project_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "project_id", value)

    @_builtins.property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        `region`) The region in which the connection should be created.
        """
        return pulumi.get(self, "region")

    @region.setter
    def region(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "region", value)

    @_builtins.property
    @pulumi.getter(name="routePropagationEnabled")
    def route_propagation_enabled(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        Whether route propagation is enabled.
        """
        return pulumi.get(self, "route_propagation_enabled")

    @route_propagation_enabled.setter
    def route_propagation_enabled(self, value: Optional[pulumi.Input[_builtins.bool]]):
        pulumi.set(self, "route_propagation_enabled", value)

    @_builtins.property
    @pulumi.getter(name="secretId")
    def secret_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of the secret containing the pre-shared key (PSK) for the connection.
        """
        return pulumi.get(self, "secret_id")

    @secret_id.setter
    def secret_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "secret_id", value)

    @_builtins.property
    @pulumi.getter(name="secretVersion")
    def secret_version(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The version of the secret containing the PSK.
        """
        return pulumi.get(self, "secret_version")

    @secret_version.setter
    def secret_version(self, value: Optional[pulumi.Input[_builtins.int]]):
        pulumi.set(self, "secret_version", value)

    @_builtins.property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The status of the connection.
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "status", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        The list of tags to apply to the connection.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "tags", value)

    @_builtins.property
    @pulumi.getter(name="tunnelStatus")
    def tunnel_status(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The status of the IPSec tunnel.
        """
        return pulumi.get(self, "tunnel_status")

    @tunnel_status.setter
    def tunnel_status(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "tunnel_status", value)

    @_builtins.property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The date and time of the last update of the connection (RFC 3339 format).
        """
        return pulumi.get(self, "updated_at")

    @updated_at.setter
    def updated_at(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "updated_at", value)

    @_builtins.property
    @pulumi.getter(name="vpnGatewayId")
    def vpn_gateway_id(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The ID of the VPN gateway to attach to the connection.
        """
        return pulumi.get(self, "vpn_gateway_id")

    @vpn_gateway_id.setter
    def vpn_gateway_id(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "vpn_gateway_id", value)


@pulumi.type_token("scaleway:s2svpn/connection:Connection")
class Connection(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 bgp_config_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv4Args', 'ConnectionBgpConfigIpv4ArgsDict']]]]] = None,
                 bgp_config_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv6Args', 'ConnectionBgpConfigIpv6ArgsDict']]]]] = None,
                 customer_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 enable_route_propagation: Optional[pulumi.Input[_builtins.bool]] = None,
                 esp_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionEspCipherArgs', 'ConnectionEspCipherArgsDict']]]]] = None,
                 ikev2_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionIkev2CipherArgs', 'ConnectionIkev2CipherArgsDict']]]]] = None,
                 initiation_policy: Optional[pulumi.Input[_builtins.str]] = None,
                 is_ipv6: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 vpn_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        """
        Creates and manages Scaleway Site-to-Site VPN Connections.
        A connection links a Scaleway VPN Gateway to a Customer Gateway and establishes an IPSec tunnel with BGP routing.

        For more information, see [the main documentation](https://www.scaleway.com/en/docs/site-to-site-vpn/reference-content/understanding-s2svpn/).

        ## Example Usage

        ### Basic Connection

        ```python
        import pulumi
        import pulumiverse_scaleway as scaleway

        vpc = scaleway.network.Vpc("vpc", name="my-vpc")
        pn = scaleway.network.PrivateNetwork("pn",
            name="my-private-network",
            vpc_id=vpc.id,
            ipv4_subnet={
                "subnet": "10.0.1.0/24",
            })
        gateway = scaleway.s2svpn.Gateway("gateway",
            name="my-vpn-gateway",
            gateway_type="VGW-S",
            private_network_id=pn.id)
        customer_gw = scaleway.s2svpn.CustomerGateway("customer_gw",
            name="my-customer-gateway",
            ipv4_public="203.0.113.1",
            asn=65000)
        policy = scaleway.s2svpn.RoutingPolicy("policy",
            name="my-routing-policy",
            prefix_filter_ins=["10.0.2.0/24"],
            prefix_filter_outs=["10.0.1.0/24"])
        main = scaleway.s2svpn.Connection("main",
            name="my-vpn-connection",
            vpn_gateway_id=gateway.id,
            customer_gateway_id=customer_gw.id,
            initiation_policy="customer_gateway",
            enable_route_propagation=True,
            bgp_config_ipv4s=[{
                "routing_policy_id": policy.id,
                "private_ip": "169.254.0.1/30",
                "peer_private_ip": "169.254.0.2/30",
            }],
            ikev2_ciphers=[{
                "encryption": "aes256",
                "integrity": "sha256",
                "dh_group": "modp2048",
            }],
            esp_ciphers=[{
                "encryption": "aes256",
                "integrity": "sha256",
                "dh_group": "modp2048",
            }])
        ```

        ## Import

        Connections can be imported using `{region}/{id}`, e.g.

        bash

        ```sh
        $ pulumi import scaleway:s2svpn/connection:Connection main fr-par/11111111-1111-1111-1111-111111111111
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv4Args', 'ConnectionBgpConfigIpv4ArgsDict']]]] bgp_config_ipv4s: BGP configuration for IPv4. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv6Args', 'ConnectionBgpConfigIpv6ArgsDict']]]] bgp_config_ipv6s: BGP configuration for IPv6. See BGP Config below.
        :param pulumi.Input[_builtins.str] customer_gateway_id: The ID of the customer gateway to attach to the connection.
        :param pulumi.Input[_builtins.bool] enable_route_propagation: Defines whether route propagation is enabled or not.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionEspCipherArgs', 'ConnectionEspCipherArgsDict']]]] esp_ciphers: ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionIkev2CipherArgs', 'ConnectionIkev2CipherArgsDict']]]] ikev2_ciphers: IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        :param pulumi.Input[_builtins.str] initiation_policy: Defines who initiates the IPSec tunnel.
        :param pulumi.Input[_builtins.bool] is_ipv6: Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        :param pulumi.Input[_builtins.str] name: The name of the connection.
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the connection is associated with.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the connection should be created.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The list of tags to apply to the connection.
        :param pulumi.Input[_builtins.str] vpn_gateway_id: The ID of the VPN gateway to attach to the connection.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: Optional[ConnectionArgs] = None,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Creates and manages Scaleway Site-to-Site VPN Connections.
        A connection links a Scaleway VPN Gateway to a Customer Gateway and establishes an IPSec tunnel with BGP routing.

        For more information, see [the main documentation](https://www.scaleway.com/en/docs/site-to-site-vpn/reference-content/understanding-s2svpn/).

        ## Example Usage

        ### Basic Connection

        ```python
        import pulumi
        import pulumiverse_scaleway as scaleway

        vpc = scaleway.network.Vpc("vpc", name="my-vpc")
        pn = scaleway.network.PrivateNetwork("pn",
            name="my-private-network",
            vpc_id=vpc.id,
            ipv4_subnet={
                "subnet": "10.0.1.0/24",
            })
        gateway = scaleway.s2svpn.Gateway("gateway",
            name="my-vpn-gateway",
            gateway_type="VGW-S",
            private_network_id=pn.id)
        customer_gw = scaleway.s2svpn.CustomerGateway("customer_gw",
            name="my-customer-gateway",
            ipv4_public="203.0.113.1",
            asn=65000)
        policy = scaleway.s2svpn.RoutingPolicy("policy",
            name="my-routing-policy",
            prefix_filter_ins=["10.0.2.0/24"],
            prefix_filter_outs=["10.0.1.0/24"])
        main = scaleway.s2svpn.Connection("main",
            name="my-vpn-connection",
            vpn_gateway_id=gateway.id,
            customer_gateway_id=customer_gw.id,
            initiation_policy="customer_gateway",
            enable_route_propagation=True,
            bgp_config_ipv4s=[{
                "routing_policy_id": policy.id,
                "private_ip": "169.254.0.1/30",
                "peer_private_ip": "169.254.0.2/30",
            }],
            ikev2_ciphers=[{
                "encryption": "aes256",
                "integrity": "sha256",
                "dh_group": "modp2048",
            }],
            esp_ciphers=[{
                "encryption": "aes256",
                "integrity": "sha256",
                "dh_group": "modp2048",
            }])
        ```

        ## Import

        Connections can be imported using `{region}/{id}`, e.g.

        bash

        ```sh
        $ pulumi import scaleway:s2svpn/connection:Connection main fr-par/11111111-1111-1111-1111-111111111111
        ```

        :param str resource_name: The name of the resource.
        :param ConnectionArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(ConnectionArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 bgp_config_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv4Args', 'ConnectionBgpConfigIpv4ArgsDict']]]]] = None,
                 bgp_config_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv6Args', 'ConnectionBgpConfigIpv6ArgsDict']]]]] = None,
                 customer_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 enable_route_propagation: Optional[pulumi.Input[_builtins.bool]] = None,
                 esp_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionEspCipherArgs', 'ConnectionEspCipherArgsDict']]]]] = None,
                 ikev2_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionIkev2CipherArgs', 'ConnectionIkev2CipherArgsDict']]]]] = None,
                 initiation_policy: Optional[pulumi.Input[_builtins.str]] = None,
                 is_ipv6: Optional[pulumi.Input[_builtins.bool]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 project_id: Optional[pulumi.Input[_builtins.str]] = None,
                 region: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 vpn_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = ConnectionArgs.__new__(ConnectionArgs)

            __props__.__dict__["bgp_config_ipv4s"] = bgp_config_ipv4s
            __props__.__dict__["bgp_config_ipv6s"] = bgp_config_ipv6s
            __props__.__dict__["customer_gateway_id"] = customer_gateway_id
            __props__.__dict__["enable_route_propagation"] = enable_route_propagation
            __props__.__dict__["esp_ciphers"] = esp_ciphers
            __props__.__dict__["ikev2_ciphers"] = ikev2_ciphers
            __props__.__dict__["initiation_policy"] = initiation_policy
            __props__.__dict__["is_ipv6"] = is_ipv6
            __props__.__dict__["name"] = name
            __props__.__dict__["project_id"] = project_id
            __props__.__dict__["region"] = region
            __props__.__dict__["tags"] = tags
            __props__.__dict__["vpn_gateway_id"] = vpn_gateway_id
            __props__.__dict__["bgp_session_ipv4s"] = None
            __props__.__dict__["bgp_session_ipv6s"] = None
            __props__.__dict__["bgp_status_ipv4"] = None
            __props__.__dict__["bgp_status_ipv6"] = None
            __props__.__dict__["created_at"] = None
            __props__.__dict__["organization_id"] = None
            __props__.__dict__["route_propagation_enabled"] = None
            __props__.__dict__["secret_id"] = None
            __props__.__dict__["secret_version"] = None
            __props__.__dict__["status"] = None
            __props__.__dict__["tunnel_status"] = None
            __props__.__dict__["updated_at"] = None
        super(Connection, __self__).__init__(
            'scaleway:s2svpn/connection:Connection',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            bgp_config_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv4Args', 'ConnectionBgpConfigIpv4ArgsDict']]]]] = None,
            bgp_config_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv6Args', 'ConnectionBgpConfigIpv6ArgsDict']]]]] = None,
            bgp_session_ipv4s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpSessionIpv4Args', 'ConnectionBgpSessionIpv4ArgsDict']]]]] = None,
            bgp_session_ipv6s: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpSessionIpv6Args', 'ConnectionBgpSessionIpv6ArgsDict']]]]] = None,
            bgp_status_ipv4: Optional[pulumi.Input[_builtins.str]] = None,
            bgp_status_ipv6: Optional[pulumi.Input[_builtins.str]] = None,
            created_at: Optional[pulumi.Input[_builtins.str]] = None,
            customer_gateway_id: Optional[pulumi.Input[_builtins.str]] = None,
            enable_route_propagation: Optional[pulumi.Input[_builtins.bool]] = None,
            esp_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionEspCipherArgs', 'ConnectionEspCipherArgsDict']]]]] = None,
            ikev2_ciphers: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ConnectionIkev2CipherArgs', 'ConnectionIkev2CipherArgsDict']]]]] = None,
            initiation_policy: Optional[pulumi.Input[_builtins.str]] = None,
            is_ipv6: Optional[pulumi.Input[_builtins.bool]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            organization_id: Optional[pulumi.Input[_builtins.str]] = None,
            project_id: Optional[pulumi.Input[_builtins.str]] = None,
            region: Optional[pulumi.Input[_builtins.str]] = None,
            route_propagation_enabled: Optional[pulumi.Input[_builtins.bool]] = None,
            secret_id: Optional[pulumi.Input[_builtins.str]] = None,
            secret_version: Optional[pulumi.Input[_builtins.int]] = None,
            status: Optional[pulumi.Input[_builtins.str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            tunnel_status: Optional[pulumi.Input[_builtins.str]] = None,
            updated_at: Optional[pulumi.Input[_builtins.str]] = None,
            vpn_gateway_id: Optional[pulumi.Input[_builtins.str]] = None) -> 'Connection':
        """
        Get an existing Connection resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv4Args', 'ConnectionBgpConfigIpv4ArgsDict']]]] bgp_config_ipv4s: BGP configuration for IPv4. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpConfigIpv6Args', 'ConnectionBgpConfigIpv6ArgsDict']]]] bgp_config_ipv6s: BGP configuration for IPv6. See BGP Config below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpSessionIpv4Args', 'ConnectionBgpSessionIpv4ArgsDict']]]] bgp_session_ipv4s: The BGP IPv4 session information. See BGP Session below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionBgpSessionIpv6Args', 'ConnectionBgpSessionIpv6ArgsDict']]]] bgp_session_ipv6s: The BGP IPv6 session information. See BGP Session below.
        :param pulumi.Input[_builtins.str] bgp_status_ipv4: The status of the BGP IPv4 session.
        :param pulumi.Input[_builtins.str] bgp_status_ipv6: The status of the BGP IPv6 session.
        :param pulumi.Input[_builtins.str] created_at: The date and time of the creation of the connection (RFC 3339 format).
        :param pulumi.Input[_builtins.str] customer_gateway_id: The ID of the customer gateway to attach to the connection.
        :param pulumi.Input[_builtins.bool] enable_route_propagation: Defines whether route propagation is enabled or not.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionEspCipherArgs', 'ConnectionEspCipherArgsDict']]]] esp_ciphers: ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        :param pulumi.Input[Sequence[pulumi.Input[Union['ConnectionIkev2CipherArgs', 'ConnectionIkev2CipherArgsDict']]]] ikev2_ciphers: IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        :param pulumi.Input[_builtins.str] initiation_policy: Defines who initiates the IPSec tunnel.
        :param pulumi.Input[_builtins.bool] is_ipv6: Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        :param pulumi.Input[_builtins.str] name: The name of the connection.
        :param pulumi.Input[_builtins.str] organization_id: The Organization ID the connection is associated with.
        :param pulumi.Input[_builtins.str] project_id: `project_id`) The ID of the project the connection is associated with.
        :param pulumi.Input[_builtins.str] region: `region`) The region in which the connection should be created.
        :param pulumi.Input[_builtins.bool] route_propagation_enabled: Whether route propagation is enabled.
        :param pulumi.Input[_builtins.str] secret_id: The ID of the secret containing the pre-shared key (PSK) for the connection.
        :param pulumi.Input[_builtins.int] secret_version: The version of the secret containing the PSK.
        :param pulumi.Input[_builtins.str] status: The status of the connection.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] tags: The list of tags to apply to the connection.
        :param pulumi.Input[_builtins.str] tunnel_status: The status of the IPSec tunnel.
        :param pulumi.Input[_builtins.str] updated_at: The date and time of the last update of the connection (RFC 3339 format).
        :param pulumi.Input[_builtins.str] vpn_gateway_id: The ID of the VPN gateway to attach to the connection.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ConnectionState.__new__(_ConnectionState)

        __props__.__dict__["bgp_config_ipv4s"] = bgp_config_ipv4s
        __props__.__dict__["bgp_config_ipv6s"] = bgp_config_ipv6s
        __props__.__dict__["bgp_session_ipv4s"] = bgp_session_ipv4s
        __props__.__dict__["bgp_session_ipv6s"] = bgp_session_ipv6s
        __props__.__dict__["bgp_status_ipv4"] = bgp_status_ipv4
        __props__.__dict__["bgp_status_ipv6"] = bgp_status_ipv6
        __props__.__dict__["created_at"] = created_at
        __props__.__dict__["customer_gateway_id"] = customer_gateway_id
        __props__.__dict__["enable_route_propagation"] = enable_route_propagation
        __props__.__dict__["esp_ciphers"] = esp_ciphers
        __props__.__dict__["ikev2_ciphers"] = ikev2_ciphers
        __props__.__dict__["initiation_policy"] = initiation_policy
        __props__.__dict__["is_ipv6"] = is_ipv6
        __props__.__dict__["name"] = name
        __props__.__dict__["organization_id"] = organization_id
        __props__.__dict__["project_id"] = project_id
        __props__.__dict__["region"] = region
        __props__.__dict__["route_propagation_enabled"] = route_propagation_enabled
        __props__.__dict__["secret_id"] = secret_id
        __props__.__dict__["secret_version"] = secret_version
        __props__.__dict__["status"] = status
        __props__.__dict__["tags"] = tags
        __props__.__dict__["tunnel_status"] = tunnel_status
        __props__.__dict__["updated_at"] = updated_at
        __props__.__dict__["vpn_gateway_id"] = vpn_gateway_id
        return Connection(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv4s")
    def bgp_config_ipv4s(self) -> pulumi.Output[Sequence['outputs.ConnectionBgpConfigIpv4']]:
        """
        BGP configuration for IPv4. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv4s")

    @_builtins.property
    @pulumi.getter(name="bgpConfigIpv6s")
    def bgp_config_ipv6s(self) -> pulumi.Output[Sequence['outputs.ConnectionBgpConfigIpv6']]:
        """
        BGP configuration for IPv6. See BGP Config below.
        """
        return pulumi.get(self, "bgp_config_ipv6s")

    @_builtins.property
    @pulumi.getter(name="bgpSessionIpv4s")
    def bgp_session_ipv4s(self) -> pulumi.Output[Sequence['outputs.ConnectionBgpSessionIpv4']]:
        """
        The BGP IPv4 session information. See BGP Session below.
        """
        return pulumi.get(self, "bgp_session_ipv4s")

    @_builtins.property
    @pulumi.getter(name="bgpSessionIpv6s")
    def bgp_session_ipv6s(self) -> pulumi.Output[Sequence['outputs.ConnectionBgpSessionIpv6']]:
        """
        The BGP IPv6 session information. See BGP Session below.
        """
        return pulumi.get(self, "bgp_session_ipv6s")

    @_builtins.property
    @pulumi.getter(name="bgpStatusIpv4")
    def bgp_status_ipv4(self) -> pulumi.Output[_builtins.str]:
        """
        The status of the BGP IPv4 session.
        """
        return pulumi.get(self, "bgp_status_ipv4")

    @_builtins.property
    @pulumi.getter(name="bgpStatusIpv6")
    def bgp_status_ipv6(self) -> pulumi.Output[_builtins.str]:
        """
        The status of the BGP IPv6 session.
        """
        return pulumi.get(self, "bgp_status_ipv6")

    @_builtins.property
    @pulumi.getter(name="createdAt")
    def created_at(self) -> pulumi.Output[_builtins.str]:
        """
        The date and time of the creation of the connection (RFC 3339 format).
        """
        return pulumi.get(self, "created_at")

    @_builtins.property
    @pulumi.getter(name="customerGatewayId")
    def customer_gateway_id(self) -> pulumi.Output[_builtins.str]:
        """
        The ID of the customer gateway to attach to the connection.
        """
        return pulumi.get(self, "customer_gateway_id")

    @_builtins.property
    @pulumi.getter(name="enableRoutePropagation")
    def enable_route_propagation(self) -> pulumi.Output[_builtins.bool]:
        """
        Defines whether route propagation is enabled or not.
        """
        return pulumi.get(self, "enable_route_propagation")

    @_builtins.property
    @pulumi.getter(name="espCiphers")
    def esp_ciphers(self) -> pulumi.Output[Sequence['outputs.ConnectionEspCipher']]:
        """
        ESP cipher configuration for Phase 2 (data encryption). See Cipher Config below.
        """
        return pulumi.get(self, "esp_ciphers")

    @_builtins.property
    @pulumi.getter(name="ikev2Ciphers")
    def ikev2_ciphers(self) -> pulumi.Output[Sequence['outputs.ConnectionIkev2Cipher']]:
        """
        IKEv2 cipher configuration for Phase 1 (tunnel establishment). See Cipher Config below.
        """
        return pulumi.get(self, "ikev2_ciphers")

    @_builtins.property
    @pulumi.getter(name="initiationPolicy")
    def initiation_policy(self) -> pulumi.Output[_builtins.str]:
        """
        Defines who initiates the IPSec tunnel.
        """
        return pulumi.get(self, "initiation_policy")

    @_builtins.property
    @pulumi.getter(name="isIpv6")
    def is_ipv6(self) -> pulumi.Output[_builtins.bool]:
        """
        Defines IP version of the IPSec Tunnel. Defaults to `false` (IPv4).
        """
        return pulumi.get(self, "is_ipv6")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the connection.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter(name="organizationId")
    def organization_id(self) -> pulumi.Output[_builtins.str]:
        """
        The Organization ID the connection is associated with.
        """
        return pulumi.get(self, "organization_id")

    @_builtins.property
    @pulumi.getter(name="projectId")
    def project_id(self) -> pulumi.Output[_builtins.str]:
        """
        `project_id`) The ID of the project the connection is associated with.
        """
        return pulumi.get(self, "project_id")

    @_builtins.property
    @pulumi.getter
    def region(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        `region`) The region in which the connection should be created.
        """
        return pulumi.get(self, "region")

    @_builtins.property
    @pulumi.getter(name="routePropagationEnabled")
    def route_propagation_enabled(self) -> pulumi.Output[_builtins.bool]:
        """
        Whether route propagation is enabled.
        """
        return pulumi.get(self, "route_propagation_enabled")

    @_builtins.property
    @pulumi.getter(name="secretId")
    def secret_id(self) -> pulumi.Output[_builtins.str]:
        """
        The ID of the secret containing the pre-shared key (PSK) for the connection.
        """
        return pulumi.get(self, "secret_id")

    @_builtins.property
    @pulumi.getter(name="secretVersion")
    def secret_version(self) -> pulumi.Output[_builtins.int]:
        """
        The version of the secret containing the PSK.
        """
        return pulumi.get(self, "secret_version")

    @_builtins.property
    @pulumi.getter
    def status(self) -> pulumi.Output[_builtins.str]:
        """
        The status of the connection.
        """
        return pulumi.get(self, "status")

    @_builtins.property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        The list of tags to apply to the connection.
        """
        return pulumi.get(self, "tags")

    @_builtins.property
    @pulumi.getter(name="tunnelStatus")
    def tunnel_status(self) -> pulumi.Output[_builtins.str]:
        """
        The status of the IPSec tunnel.
        """
        return pulumi.get(self, "tunnel_status")

    @_builtins.property
    @pulumi.getter(name="updatedAt")
    def updated_at(self) -> pulumi.Output[_builtins.str]:
        """
        The date and time of the last update of the connection (RFC 3339 format).
        """
        return pulumi.get(self, "updated_at")

    @_builtins.property
    @pulumi.getter(name="vpnGatewayId")
    def vpn_gateway_id(self) -> pulumi.Output[_builtins.str]:
        """
        The ID of the VPN gateway to attach to the connection.
        """
        return pulumi.get(self, "vpn_gateway_id")

