# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'VPNConnectionIkeConfig',
    'VPNConnectionIpsecConfig',
    'GetVPNConnectionVpnConnectionResult',
    'GetVPNConnectionVpnConnectionIkeConfigResult',
    'GetVPNConnectionVpnConnectionIpsecConfigResult',
    'GetVPNCustomerGatewayVpnCustomerGatewayResult',
    'GetVPNGatewayVpnGatewayResult',
    'GetVPNGatewayVpnGatewayIpSetResult',
]

@pulumi.output_type
class VPNConnectionIkeConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "preSharedKey":
            suggest = "pre_shared_key"
        elif key == "authenticationAlgorithm":
            suggest = "authentication_algorithm"
        elif key == "dhGroup":
            suggest = "dh_group"
        elif key == "encryptionAlgorithm":
            suggest = "encryption_algorithm"
        elif key == "exchangeMode":
            suggest = "exchange_mode"
        elif key == "ikeVersion":
            suggest = "ike_version"
        elif key == "localId":
            suggest = "local_id"
        elif key == "remoteId":
            suggest = "remote_id"
        elif key == "saLifeTime":
            suggest = "sa_life_time"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in VPNConnectionIkeConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        VPNConnectionIkeConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        VPNConnectionIkeConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 pre_shared_key: str,
                 authentication_algorithm: Optional[str] = None,
                 dh_group: Optional[str] = None,
                 encryption_algorithm: Optional[str] = None,
                 exchange_mode: Optional[str] = None,
                 ike_version: Optional[str] = None,
                 local_id: Optional[str] = None,
                 remote_id: Optional[str] = None,
                 sa_life_time: Optional[int] = None):
        """
        :param str pre_shared_key: The key used for authentication between the VPN gateway and the Customer gateway which contains 1-128 characters and only support English, numbers and special characters: `!@#$%^&*()_+-=[]:,./'~`.
        :param str authentication_algorithm: The authentication algorithm of IPSec negotiation. Possible values: `sha1`, `md5`. (Default: `sha1`)
        :param str dh_group: The Diffie-Hellman group used by IKE negotiation. Possible values: `1`, `2`, `5`, `14`, `15`, `16`. (Default:`15`)
        :param str encryption_algorithm: The encryption algorithm of IPSec negotiation. Possible values: `aes128`, `aes192`, `aes256`, `aes512`, `3des`. (Default: `aes128`).
        :param str exchange_mode: The negotiation exchange mode of IKE V1 of VPN gateway. Possible values: `main` (main mode), `aggressive` (aggressive mode). (Default: `main`)
        :param str ike_version: The version of the IKE protocol which only be supported IKE V1 protocol at present. Possible values: ikev1. (Default: ikev1)
        :param str local_id: The identification of the VPN gateway.
        :param str remote_id: The identification of the Customer gateway.
        :param int sa_life_time: The Security Association lifecycle as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        """
        pulumi.set(__self__, "pre_shared_key", pre_shared_key)
        if authentication_algorithm is not None:
            pulumi.set(__self__, "authentication_algorithm", authentication_algorithm)
        if dh_group is not None:
            pulumi.set(__self__, "dh_group", dh_group)
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if exchange_mode is not None:
            pulumi.set(__self__, "exchange_mode", exchange_mode)
        if ike_version is not None:
            pulumi.set(__self__, "ike_version", ike_version)
        if local_id is not None:
            pulumi.set(__self__, "local_id", local_id)
        if remote_id is not None:
            pulumi.set(__self__, "remote_id", remote_id)
        if sa_life_time is not None:
            pulumi.set(__self__, "sa_life_time", sa_life_time)

    @property
    @pulumi.getter(name="preSharedKey")
    def pre_shared_key(self) -> str:
        """
        The key used for authentication between the VPN gateway and the Customer gateway which contains 1-128 characters and only support English, numbers and special characters: `!@#$%^&*()_+-=[]:,./'~`.
        """
        return pulumi.get(self, "pre_shared_key")

    @property
    @pulumi.getter(name="authenticationAlgorithm")
    def authentication_algorithm(self) -> Optional[str]:
        """
        The authentication algorithm of IPSec negotiation. Possible values: `sha1`, `md5`. (Default: `sha1`)
        """
        return pulumi.get(self, "authentication_algorithm")

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> Optional[str]:
        """
        The Diffie-Hellman group used by IKE negotiation. Possible values: `1`, `2`, `5`, `14`, `15`, `16`. (Default:`15`)
        """
        return pulumi.get(self, "dh_group")

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[str]:
        """
        The encryption algorithm of IPSec negotiation. Possible values: `aes128`, `aes192`, `aes256`, `aes512`, `3des`. (Default: `aes128`).
        """
        return pulumi.get(self, "encryption_algorithm")

    @property
    @pulumi.getter(name="exchangeMode")
    def exchange_mode(self) -> Optional[str]:
        """
        The negotiation exchange mode of IKE V1 of VPN gateway. Possible values: `main` (main mode), `aggressive` (aggressive mode). (Default: `main`)
        """
        return pulumi.get(self, "exchange_mode")

    @property
    @pulumi.getter(name="ikeVersion")
    def ike_version(self) -> Optional[str]:
        """
        The version of the IKE protocol which only be supported IKE V1 protocol at present. Possible values: ikev1. (Default: ikev1)
        """
        return pulumi.get(self, "ike_version")

    @property
    @pulumi.getter(name="localId")
    def local_id(self) -> Optional[str]:
        """
        The identification of the VPN gateway.
        """
        return pulumi.get(self, "local_id")

    @property
    @pulumi.getter(name="remoteId")
    def remote_id(self) -> Optional[str]:
        """
        The identification of the Customer gateway.
        """
        return pulumi.get(self, "remote_id")

    @property
    @pulumi.getter(name="saLifeTime")
    def sa_life_time(self) -> Optional[int]:
        """
        The Security Association lifecycle as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        """
        return pulumi.get(self, "sa_life_time")


@pulumi.output_type
class VPNConnectionIpsecConfig(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "localSubnetIds":
            suggest = "local_subnet_ids"
        elif key == "remoteSubnets":
            suggest = "remote_subnets"
        elif key == "authenticationAlgorithm":
            suggest = "authentication_algorithm"
        elif key == "encryptionAlgorithm":
            suggest = "encryption_algorithm"
        elif key == "pfsDhGroup":
            suggest = "pfs_dh_group"
        elif key == "saLifeTime":
            suggest = "sa_life_time"
        elif key == "saLifeTimeBytes":
            suggest = "sa_life_time_bytes"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in VPNConnectionIpsecConfig. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        VPNConnectionIpsecConfig.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        VPNConnectionIpsecConfig.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 local_subnet_ids: Sequence[str],
                 remote_subnets: Sequence[str],
                 authentication_algorithm: Optional[str] = None,
                 encryption_algorithm: Optional[str] = None,
                 pfs_dh_group: Optional[str] = None,
                 protocol: Optional[str] = None,
                 sa_life_time: Optional[int] = None,
                 sa_life_time_bytes: Optional[int] = None):
        """
        :param Sequence[str] local_subnet_ids: The id list of Local subnet.
        :param Sequence[str] remote_subnets: The ip address list of remote subnet.
        :param str authentication_algorithm: The authentication algorithm of IPSec negotiation. Possible values: `sha1`, `md5`. (Default: `sha1`)
        :param str encryption_algorithm: The encryption algorithm of IPSec negotiation. Possible values: `aes128`, `aes192`, `aes256`, `aes512`, `3des`. (Default: `aes128`).
        :param str pfs_dh_group: Whether the PFS of IPSec negotiation is on or off, `disable` as off, The Diffie-Hellman group as open.  Possible values: `disable`, `1`, `2`, `5`, `14`, `15`, `16`. (Default:`disable`)
        :param str protocol: The security protocol of IPSec negotiation. Possible values: `esp`, `ah`. (Default:`esp`)
        :param int sa_life_time: The Security Association lifecycle as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        :param int sa_life_time_bytes: The Security Association lifecycle in bytes as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        """
        pulumi.set(__self__, "local_subnet_ids", local_subnet_ids)
        pulumi.set(__self__, "remote_subnets", remote_subnets)
        if authentication_algorithm is not None:
            pulumi.set(__self__, "authentication_algorithm", authentication_algorithm)
        if encryption_algorithm is not None:
            pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        if pfs_dh_group is not None:
            pulumi.set(__self__, "pfs_dh_group", pfs_dh_group)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if sa_life_time is not None:
            pulumi.set(__self__, "sa_life_time", sa_life_time)
        if sa_life_time_bytes is not None:
            pulumi.set(__self__, "sa_life_time_bytes", sa_life_time_bytes)

    @property
    @pulumi.getter(name="localSubnetIds")
    def local_subnet_ids(self) -> Sequence[str]:
        """
        The id list of Local subnet.
        """
        return pulumi.get(self, "local_subnet_ids")

    @property
    @pulumi.getter(name="remoteSubnets")
    def remote_subnets(self) -> Sequence[str]:
        """
        The ip address list of remote subnet.
        """
        return pulumi.get(self, "remote_subnets")

    @property
    @pulumi.getter(name="authenticationAlgorithm")
    def authentication_algorithm(self) -> Optional[str]:
        """
        The authentication algorithm of IPSec negotiation. Possible values: `sha1`, `md5`. (Default: `sha1`)
        """
        return pulumi.get(self, "authentication_algorithm")

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> Optional[str]:
        """
        The encryption algorithm of IPSec negotiation. Possible values: `aes128`, `aes192`, `aes256`, `aes512`, `3des`. (Default: `aes128`).
        """
        return pulumi.get(self, "encryption_algorithm")

    @property
    @pulumi.getter(name="pfsDhGroup")
    def pfs_dh_group(self) -> Optional[str]:
        """
        Whether the PFS of IPSec negotiation is on or off, `disable` as off, The Diffie-Hellman group as open.  Possible values: `disable`, `1`, `2`, `5`, `14`, `15`, `16`. (Default:`disable`)
        """
        return pulumi.get(self, "pfs_dh_group")

    @property
    @pulumi.getter
    def protocol(self) -> Optional[str]:
        """
        The security protocol of IPSec negotiation. Possible values: `esp`, `ah`. (Default:`esp`)
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="saLifeTime")
    def sa_life_time(self) -> Optional[int]:
        """
        The Security Association lifecycle as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        """
        return pulumi.get(self, "sa_life_time")

    @property
    @pulumi.getter(name="saLifeTimeBytes")
    def sa_life_time_bytes(self) -> Optional[int]:
        """
        The Security Association lifecycle in bytes as the result of IPSec negotiation. Unit: second. Range: 1200-604800. (Default: `3600`)
        """
        return pulumi.get(self, "sa_life_time_bytes")


@pulumi.output_type
class GetVPNConnectionVpnConnectionResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 customer_gateway_id: str,
                 id: str,
                 ike_configs: Sequence['outputs.GetVPNConnectionVpnConnectionIkeConfigResult'],
                 ipsec_configs: Sequence['outputs.GetVPNConnectionVpnConnectionIpsecConfigResult'],
                 name: str,
                 remark: str,
                 tag: str,
                 vpc_id: str,
                 vpn_gateway_id: str):
        """
        :param str create_time: The time of creation for VPN Connection, formatted in RFC3339 time string.
        :param str customer_gateway_id: The ID of VPN Customer Gateway.
        :param str id: The ID of VPN Connection.
        :param Sequence['GetVPNConnectionVpnConnectionIkeConfigArgs'] ike_configs: It is a nested type which documented below.
        :param Sequence['GetVPNConnectionVpnConnectionIpsecConfigArgs'] ipsec_configs: It is a nested type which documented below.
        :param str name: The name of the VPN Connection.
        :param str remark: The remarks of VPN Connection.
        :param str tag: A tag assigned to VPN Connection.
        :param str vpc_id: The ID of VPC linked to the VPN Connection.
        :param str vpn_gateway_id: The ID of VPN Gateway.
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "customer_gateway_id", customer_gateway_id)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ike_configs", ike_configs)
        pulumi.set(__self__, "ipsec_configs", ipsec_configs)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "remark", remark)
        pulumi.set(__self__, "tag", tag)
        pulumi.set(__self__, "vpc_id", vpc_id)
        pulumi.set(__self__, "vpn_gateway_id", vpn_gateway_id)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The time of creation for VPN Connection, formatted in RFC3339 time string.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter(name="customerGatewayId")
    def customer_gateway_id(self) -> str:
        """
        The ID of VPN Customer Gateway.
        """
        return pulumi.get(self, "customer_gateway_id")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID of VPN Connection.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ikeConfigs")
    def ike_configs(self) -> Sequence['outputs.GetVPNConnectionVpnConnectionIkeConfigResult']:
        """
        It is a nested type which documented below.
        """
        return pulumi.get(self, "ike_configs")

    @property
    @pulumi.getter(name="ipsecConfigs")
    def ipsec_configs(self) -> Sequence['outputs.GetVPNConnectionVpnConnectionIpsecConfigResult']:
        """
        It is a nested type which documented below.
        """
        return pulumi.get(self, "ipsec_configs")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the VPN Connection.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def remark(self) -> str:
        """
        The remarks of VPN Connection.
        """
        return pulumi.get(self, "remark")

    @property
    @pulumi.getter
    def tag(self) -> str:
        """
        A tag assigned to VPN Connection.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> str:
        """
        The ID of VPC linked to the VPN Connection.
        """
        return pulumi.get(self, "vpc_id")

    @property
    @pulumi.getter(name="vpnGatewayId")
    def vpn_gateway_id(self) -> str:
        """
        The ID of VPN Gateway.
        """
        return pulumi.get(self, "vpn_gateway_id")


@pulumi.output_type
class GetVPNConnectionVpnConnectionIkeConfigResult(dict):
    def __init__(__self__, *,
                 authentication_algorithm: str,
                 dh_group: str,
                 encryption_algorithm: str,
                 exchange_mode: str,
                 ike_version: str,
                 local_id: str,
                 pre_shared_key: str,
                 remote_id: str,
                 sa_life_time: int):
        """
        :param str authentication_algorithm: The authentication algorithm of IPSec negotiation.
        :param str dh_group: The Diffie-Hellman group used by IKE negotiation.
        :param str encryption_algorithm: The encryption algorithm of IPSec negotiation.
        :param str exchange_mode: The negotiation exchange mode of IKE V1 of VPN gateway.
        :param str ike_version: The version of the IKE protocol.
        :param str local_id: The identification of the VPN gateway.
        :param str pre_shared_key: The key used for authentication between the VPN gateway and the Customer gateway.
        :param str remote_id: The identification of the Customer gateway.
        :param int sa_life_time: The Security Association lifecycle as the result of IPSec negotiation.
        """
        pulumi.set(__self__, "authentication_algorithm", authentication_algorithm)
        pulumi.set(__self__, "dh_group", dh_group)
        pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        pulumi.set(__self__, "exchange_mode", exchange_mode)
        pulumi.set(__self__, "ike_version", ike_version)
        pulumi.set(__self__, "local_id", local_id)
        pulumi.set(__self__, "pre_shared_key", pre_shared_key)
        pulumi.set(__self__, "remote_id", remote_id)
        pulumi.set(__self__, "sa_life_time", sa_life_time)

    @property
    @pulumi.getter(name="authenticationAlgorithm")
    def authentication_algorithm(self) -> str:
        """
        The authentication algorithm of IPSec negotiation.
        """
        return pulumi.get(self, "authentication_algorithm")

    @property
    @pulumi.getter(name="dhGroup")
    def dh_group(self) -> str:
        """
        The Diffie-Hellman group used by IKE negotiation.
        """
        return pulumi.get(self, "dh_group")

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> str:
        """
        The encryption algorithm of IPSec negotiation.
        """
        return pulumi.get(self, "encryption_algorithm")

    @property
    @pulumi.getter(name="exchangeMode")
    def exchange_mode(self) -> str:
        """
        The negotiation exchange mode of IKE V1 of VPN gateway.
        """
        return pulumi.get(self, "exchange_mode")

    @property
    @pulumi.getter(name="ikeVersion")
    def ike_version(self) -> str:
        """
        The version of the IKE protocol.
        """
        return pulumi.get(self, "ike_version")

    @property
    @pulumi.getter(name="localId")
    def local_id(self) -> str:
        """
        The identification of the VPN gateway.
        """
        return pulumi.get(self, "local_id")

    @property
    @pulumi.getter(name="preSharedKey")
    def pre_shared_key(self) -> str:
        """
        The key used for authentication between the VPN gateway and the Customer gateway.
        """
        return pulumi.get(self, "pre_shared_key")

    @property
    @pulumi.getter(name="remoteId")
    def remote_id(self) -> str:
        """
        The identification of the Customer gateway.
        """
        return pulumi.get(self, "remote_id")

    @property
    @pulumi.getter(name="saLifeTime")
    def sa_life_time(self) -> int:
        """
        The Security Association lifecycle as the result of IPSec negotiation.
        """
        return pulumi.get(self, "sa_life_time")


@pulumi.output_type
class GetVPNConnectionVpnConnectionIpsecConfigResult(dict):
    def __init__(__self__, *,
                 authentication_algorithm: str,
                 encryption_algorithm: str,
                 local_subnet_ids: Sequence[str],
                 pfs_dh_group: str,
                 protocol: str,
                 remote_subnets: Sequence[str],
                 sa_life_time: int,
                 sa_life_time_bytes: int):
        """
        :param str authentication_algorithm: The authentication algorithm of IPSec negotiation.
        :param str encryption_algorithm: The encryption algorithm of IPSec negotiation.
        :param Sequence[str] local_subnet_ids: The id list of Local subnet.
        :param str pfs_dh_group: Whether the PFS of IPSec negotiation is on or off, `disable` as off, The Diffie-Hellman group as open.
        :param str protocol: The security protocol of IPSec negotiation.
        :param Sequence[str] remote_subnets: The ip address list of remote subnet.
        :param int sa_life_time: The Security Association lifecycle as the result of IPSec negotiation.
        :param int sa_life_time_bytes: The Security Association lifecycle in bytes as the result of IPSec negotiation.
        """
        pulumi.set(__self__, "authentication_algorithm", authentication_algorithm)
        pulumi.set(__self__, "encryption_algorithm", encryption_algorithm)
        pulumi.set(__self__, "local_subnet_ids", local_subnet_ids)
        pulumi.set(__self__, "pfs_dh_group", pfs_dh_group)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "remote_subnets", remote_subnets)
        pulumi.set(__self__, "sa_life_time", sa_life_time)
        pulumi.set(__self__, "sa_life_time_bytes", sa_life_time_bytes)

    @property
    @pulumi.getter(name="authenticationAlgorithm")
    def authentication_algorithm(self) -> str:
        """
        The authentication algorithm of IPSec negotiation.
        """
        return pulumi.get(self, "authentication_algorithm")

    @property
    @pulumi.getter(name="encryptionAlgorithm")
    def encryption_algorithm(self) -> str:
        """
        The encryption algorithm of IPSec negotiation.
        """
        return pulumi.get(self, "encryption_algorithm")

    @property
    @pulumi.getter(name="localSubnetIds")
    def local_subnet_ids(self) -> Sequence[str]:
        """
        The id list of Local subnet.
        """
        return pulumi.get(self, "local_subnet_ids")

    @property
    @pulumi.getter(name="pfsDhGroup")
    def pfs_dh_group(self) -> str:
        """
        Whether the PFS of IPSec negotiation is on or off, `disable` as off, The Diffie-Hellman group as open.
        """
        return pulumi.get(self, "pfs_dh_group")

    @property
    @pulumi.getter
    def protocol(self) -> str:
        """
        The security protocol of IPSec negotiation.
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="remoteSubnets")
    def remote_subnets(self) -> Sequence[str]:
        """
        The ip address list of remote subnet.
        """
        return pulumi.get(self, "remote_subnets")

    @property
    @pulumi.getter(name="saLifeTime")
    def sa_life_time(self) -> int:
        """
        The Security Association lifecycle as the result of IPSec negotiation.
        """
        return pulumi.get(self, "sa_life_time")

    @property
    @pulumi.getter(name="saLifeTimeBytes")
    def sa_life_time_bytes(self) -> int:
        """
        The Security Association lifecycle in bytes as the result of IPSec negotiation.
        """
        return pulumi.get(self, "sa_life_time_bytes")


@pulumi.output_type
class GetVPNCustomerGatewayVpnCustomerGatewayResult(dict):
    def __init__(__self__, *,
                 create_time: str,
                 id: str,
                 ip_address: str,
                 name: str,
                 remark: str,
                 tag: str):
        """
        :param str create_time: The time of creation for VPN Customer Gateway, formatted in RFC3339 time string.
        :param str id: The ID of VPN Customer Gateway.
        :param str ip_address: The ip address of the VPN Customer Gateway.
        :param str name: The name of the VPN Customer Gateway.
        :param str remark: The remarks of VPN Customer Gateway.
        :param str tag: A tag assigned to VPN Customer Gateway.
        """
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_address", ip_address)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "remark", remark)
        pulumi.set(__self__, "tag", tag)

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The time of creation for VPN Customer Gateway, formatted in RFC3339 time string.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID of VPN Customer Gateway.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipAddress")
    def ip_address(self) -> str:
        """
        The ip address of the VPN Customer Gateway.
        """
        return pulumi.get(self, "ip_address")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the VPN Customer Gateway.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def remark(self) -> str:
        """
        The remarks of VPN Customer Gateway.
        """
        return pulumi.get(self, "remark")

    @property
    @pulumi.getter
    def tag(self) -> str:
        """
        A tag assigned to VPN Customer Gateway.
        """
        return pulumi.get(self, "tag")


@pulumi.output_type
class GetVPNGatewayVpnGatewayResult(dict):
    def __init__(__self__, *,
                 auto_renew: bool,
                 charge_type: str,
                 create_time: str,
                 expire_time: str,
                 grade: str,
                 id: str,
                 ip_sets: Sequence['outputs.GetVPNGatewayVpnGatewayIpSetResult'],
                 name: str,
                 remark: str,
                 tag: str,
                 vpc_id: str):
        """
        :param bool auto_renew: Whether to renew an VPN Gateway automatically or not.
        :param str charge_type: The charge type of VPN Gateway.
        :param str create_time: The time of creation for VPN Gateway, formatted in RFC3339 time string.
        :param str expire_time: The expiration time for VPN Gateway, formatted in RFC3339 time string.
        :param str grade: The type of the VPN Gateway.
        :param str id: The ID of VPN Gateway.
        :param Sequence['GetVPNGatewayVpnGatewayIpSetArgs'] ip_sets: It is a nested type which documented below.
        :param str name: The name of the VPN Gateway.
        :param str remark: The remarks of VPN Gateway.
        :param str tag: A tag assigned to VPN Gateway.
        :param str vpc_id: The ID of VPC linked to the VPN Gateway.
        """
        pulumi.set(__self__, "auto_renew", auto_renew)
        pulumi.set(__self__, "charge_type", charge_type)
        pulumi.set(__self__, "create_time", create_time)
        pulumi.set(__self__, "expire_time", expire_time)
        pulumi.set(__self__, "grade", grade)
        pulumi.set(__self__, "id", id)
        pulumi.set(__self__, "ip_sets", ip_sets)
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "remark", remark)
        pulumi.set(__self__, "tag", tag)
        pulumi.set(__self__, "vpc_id", vpc_id)

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> bool:
        """
        Whether to renew an VPN Gateway automatically or not.
        """
        return pulumi.get(self, "auto_renew")

    @property
    @pulumi.getter(name="chargeType")
    def charge_type(self) -> str:
        """
        The charge type of VPN Gateway.
        """
        return pulumi.get(self, "charge_type")

    @property
    @pulumi.getter(name="createTime")
    def create_time(self) -> str:
        """
        The time of creation for VPN Gateway, formatted in RFC3339 time string.
        """
        return pulumi.get(self, "create_time")

    @property
    @pulumi.getter(name="expireTime")
    def expire_time(self) -> str:
        """
        The expiration time for VPN Gateway, formatted in RFC3339 time string.
        """
        return pulumi.get(self, "expire_time")

    @property
    @pulumi.getter
    def grade(self) -> str:
        """
        The type of the VPN Gateway.
        """
        return pulumi.get(self, "grade")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID of VPN Gateway.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="ipSets")
    def ip_sets(self) -> Sequence['outputs.GetVPNGatewayVpnGatewayIpSetResult']:
        """
        It is a nested type which documented below.
        """
        return pulumi.get(self, "ip_sets")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the VPN Gateway.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def remark(self) -> str:
        """
        The remarks of VPN Gateway.
        """
        return pulumi.get(self, "remark")

    @property
    @pulumi.getter
    def tag(self) -> str:
        """
        A tag assigned to VPN Gateway.
        """
        return pulumi.get(self, "tag")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> str:
        """
        The ID of VPC linked to the VPN Gateway.
        """
        return pulumi.get(self, "vpc_id")


@pulumi.output_type
class GetVPNGatewayVpnGatewayIpSetResult(dict):
    def __init__(__self__, *,
                 internet_type: str,
                 ip: str):
        """
        :param str internet_type: Type of Elastic IP routes.
        :param str ip: Elastic IP address.
        """
        pulumi.set(__self__, "internet_type", internet_type)
        pulumi.set(__self__, "ip", ip)

    @property
    @pulumi.getter(name="internetType")
    def internet_type(self) -> str:
        """
        Type of Elastic IP routes.
        """
        return pulumi.get(self, "internet_type")

    @property
    @pulumi.getter
    def ip(self) -> str:
        """
        Elastic IP address.
        """
        return pulumi.get(self, "ip")


