# 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, Dict, List, Mapping, Optional, Tuple, Union
from .. import _utilities, _tables

__all__ = [
    'GetRouteResult',
    'AwaitableGetRouteResult',
    'get_route',
]

@pulumi.output_type
class GetRouteResult:
    """
    A collection of values returned by getRoute.
    """
    def __init__(__self__, destination_cidr_block=None, destination_ipv6_cidr_block=None, egress_only_gateway_id=None, gateway_id=None, id=None, instance_id=None, nat_gateway_id=None, network_interface_id=None, route_table_id=None, transit_gateway_id=None, vpc_peering_connection_id=None):
        if destination_cidr_block and not isinstance(destination_cidr_block, str):
            raise TypeError("Expected argument 'destination_cidr_block' to be a str")
        pulumi.set(__self__, "destination_cidr_block", destination_cidr_block)
        if destination_ipv6_cidr_block and not isinstance(destination_ipv6_cidr_block, str):
            raise TypeError("Expected argument 'destination_ipv6_cidr_block' to be a str")
        pulumi.set(__self__, "destination_ipv6_cidr_block", destination_ipv6_cidr_block)
        if egress_only_gateway_id and not isinstance(egress_only_gateway_id, str):
            raise TypeError("Expected argument 'egress_only_gateway_id' to be a str")
        pulumi.set(__self__, "egress_only_gateway_id", egress_only_gateway_id)
        if gateway_id and not isinstance(gateway_id, str):
            raise TypeError("Expected argument 'gateway_id' to be a str")
        pulumi.set(__self__, "gateway_id", gateway_id)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if instance_id and not isinstance(instance_id, str):
            raise TypeError("Expected argument 'instance_id' to be a str")
        pulumi.set(__self__, "instance_id", instance_id)
        if nat_gateway_id and not isinstance(nat_gateway_id, str):
            raise TypeError("Expected argument 'nat_gateway_id' to be a str")
        pulumi.set(__self__, "nat_gateway_id", nat_gateway_id)
        if network_interface_id and not isinstance(network_interface_id, str):
            raise TypeError("Expected argument 'network_interface_id' to be a str")
        pulumi.set(__self__, "network_interface_id", network_interface_id)
        if route_table_id and not isinstance(route_table_id, str):
            raise TypeError("Expected argument 'route_table_id' to be a str")
        pulumi.set(__self__, "route_table_id", route_table_id)
        if transit_gateway_id and not isinstance(transit_gateway_id, str):
            raise TypeError("Expected argument 'transit_gateway_id' to be a str")
        pulumi.set(__self__, "transit_gateway_id", transit_gateway_id)
        if vpc_peering_connection_id and not isinstance(vpc_peering_connection_id, str):
            raise TypeError("Expected argument 'vpc_peering_connection_id' to be a str")
        pulumi.set(__self__, "vpc_peering_connection_id", vpc_peering_connection_id)

    @property
    @pulumi.getter(name="destinationCidrBlock")
    def destination_cidr_block(self) -> str:
        return pulumi.get(self, "destination_cidr_block")

    @property
    @pulumi.getter(name="destinationIpv6CidrBlock")
    def destination_ipv6_cidr_block(self) -> str:
        return pulumi.get(self, "destination_ipv6_cidr_block")

    @property
    @pulumi.getter(name="egressOnlyGatewayId")
    def egress_only_gateway_id(self) -> str:
        return pulumi.get(self, "egress_only_gateway_id")

    @property
    @pulumi.getter(name="gatewayId")
    def gateway_id(self) -> str:
        return pulumi.get(self, "gateway_id")

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The provider-assigned unique ID for this managed resource.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> str:
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="natGatewayId")
    def nat_gateway_id(self) -> str:
        return pulumi.get(self, "nat_gateway_id")

    @property
    @pulumi.getter(name="networkInterfaceId")
    def network_interface_id(self) -> str:
        return pulumi.get(self, "network_interface_id")

    @property
    @pulumi.getter(name="routeTableId")
    def route_table_id(self) -> str:
        return pulumi.get(self, "route_table_id")

    @property
    @pulumi.getter(name="transitGatewayId")
    def transit_gateway_id(self) -> str:
        return pulumi.get(self, "transit_gateway_id")

    @property
    @pulumi.getter(name="vpcPeeringConnectionId")
    def vpc_peering_connection_id(self) -> str:
        return pulumi.get(self, "vpc_peering_connection_id")


class AwaitableGetRouteResult(GetRouteResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetRouteResult(
            destination_cidr_block=self.destination_cidr_block,
            destination_ipv6_cidr_block=self.destination_ipv6_cidr_block,
            egress_only_gateway_id=self.egress_only_gateway_id,
            gateway_id=self.gateway_id,
            id=self.id,
            instance_id=self.instance_id,
            nat_gateway_id=self.nat_gateway_id,
            network_interface_id=self.network_interface_id,
            route_table_id=self.route_table_id,
            transit_gateway_id=self.transit_gateway_id,
            vpc_peering_connection_id=self.vpc_peering_connection_id)


def get_route(destination_cidr_block: Optional[str] = None,
              destination_ipv6_cidr_block: Optional[str] = None,
              egress_only_gateway_id: Optional[str] = None,
              gateway_id: Optional[str] = None,
              instance_id: Optional[str] = None,
              nat_gateway_id: Optional[str] = None,
              network_interface_id: Optional[str] = None,
              route_table_id: Optional[str] = None,
              transit_gateway_id: Optional[str] = None,
              vpc_peering_connection_id: Optional[str] = None,
              opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetRouteResult:
    """
    `ec2.Route` provides details about a specific Route.

    This resource can prove useful when finding the resource
    associated with a CIDR. For example, finding the peering
    connection associated with a CIDR value.

    ## Example Usage

    The following example shows how one might use a CIDR value to find a network interface id
    and use this to create a data source of that network interface.

    ```python
    import pulumi
    import pulumi_aws as aws

    config = pulumi.Config()
    subnet_id = config.require_object("subnetId")
    selected = aws.ec2.get_route_table(subnet_id=subnet_id)
    route = aws.ec2.get_route(route_table_id=aws_route_table["selected"]["id"],
        destination_cidr_block="10.0.1.0/24")
    interface = aws.ec2.get_network_interface(id=route.network_interface_id)
    ```


    :param str destination_cidr_block: The CIDR block of the Route belonging to the Route Table.
    :param str destination_ipv6_cidr_block: The IPv6 CIDR block of the Route belonging to the Route Table.
    :param str egress_only_gateway_id: The Egress Only Gateway ID of the Route belonging to the Route Table.
    :param str gateway_id: The Gateway ID of the Route belonging to the Route Table.
    :param str instance_id: The Instance ID of the Route belonging to the Route Table.
    :param str nat_gateway_id: The NAT Gateway ID of the Route belonging to the Route Table.
    :param str network_interface_id: The Network Interface ID of the Route belonging to the Route Table.
    :param str route_table_id: The id of the specific Route Table containing the Route entry.
    :param str transit_gateway_id: The EC2 Transit Gateway ID of the Route belonging to the Route Table.
    :param str vpc_peering_connection_id: The VPC Peering Connection ID of the Route belonging to the Route Table.
    """
    __args__ = dict()
    __args__['destinationCidrBlock'] = destination_cidr_block
    __args__['destinationIpv6CidrBlock'] = destination_ipv6_cidr_block
    __args__['egressOnlyGatewayId'] = egress_only_gateway_id
    __args__['gatewayId'] = gateway_id
    __args__['instanceId'] = instance_id
    __args__['natGatewayId'] = nat_gateway_id
    __args__['networkInterfaceId'] = network_interface_id
    __args__['routeTableId'] = route_table_id
    __args__['transitGatewayId'] = transit_gateway_id
    __args__['vpcPeeringConnectionId'] = vpc_peering_connection_id
    if opts is None:
        opts = pulumi.InvokeOptions()
    if opts.version is None:
        opts.version = _utilities.get_version()
    __ret__ = pulumi.runtime.invoke('aws:ec2/getRoute:getRoute', __args__, opts=opts, typ=GetRouteResult).value

    return AwaitableGetRouteResult(
        destination_cidr_block=__ret__.destination_cidr_block,
        destination_ipv6_cidr_block=__ret__.destination_ipv6_cidr_block,
        egress_only_gateway_id=__ret__.egress_only_gateway_id,
        gateway_id=__ret__.gateway_id,
        id=__ret__.id,
        instance_id=__ret__.instance_id,
        nat_gateway_id=__ret__.nat_gateway_id,
        network_interface_id=__ret__.network_interface_id,
        route_table_id=__ret__.route_table_id,
        transit_gateway_id=__ret__.transit_gateway_id,
        vpc_peering_connection_id=__ret__.vpc_peering_connection_id)
