import * as cloudmap from "../../aws-servicediscovery";
import { Construct } from 'constructs';
import { CfnVirtualNode } from './appmesh.generated';
/**
 * (experimental) Properties for VirtualNode Service Discovery.
 *
 * @experimental
 */
export interface ServiceDiscoveryConfig {
    /**
     * (experimental) DNS based Service Discovery.
     *
     * @default - no DNS based service discovery
     * @experimental
     */
    readonly dns?: CfnVirtualNode.DnsServiceDiscoveryProperty;
    /**
     * (experimental) Cloud Map based Service Discovery.
     *
     * @default - no Cloud Map based service discovery
     * @experimental
     */
    readonly cloudmap?: CfnVirtualNode.AwsCloudMapServiceDiscoveryProperty;
}
/**
 * (experimental) Enum of DNS service discovery response type.
 *
 * @experimental
 */
export declare enum DnsResponseType {
    /**
     * (experimental) DNS resolver returns a loadbalanced set of endpoints and the traffic would be sent to the given endpoints.
     *
     * It would not drain existing connections to other endpoints that are not part of this list.
     *
     * @experimental
     */
    LOAD_BALANCER = "LOADBALANCER",
    /**
     * (experimental) DNS resolver is returning all the endpoints.
     *
     * This also means that if an endpoint is missing, it would drain the current connections to the missing endpoint.
     *
     * @experimental
     */
    ENDPOINTS = "ENDPOINTS"
}
/**
 * (experimental) Provides the Service Discovery method a VirtualNode uses.
 *
 * @experimental
 */
export declare abstract class ServiceDiscovery {
    /**
     * (experimental) Returns DNS based service discovery.
     *
     * @param responseType Specifies the DNS response type for the virtual node.
     * @experimental
     */
    static dns(hostname: string, responseType?: DnsResponseType): ServiceDiscovery;
    /**
     * (experimental) Returns Cloud Map based service discovery.
     *
     * @param service The AWS Cloud Map Service to use for service discovery.
     * @param instanceAttributes A string map that contains attributes with values that you can use to filter instances by any custom attribute that you specified when you registered the instance.
     * @experimental
     */
    static cloudMap(service: cloudmap.IService, instanceAttributes?: {
        [key: string]: string;
    }): ServiceDiscovery;
    /**
     * (experimental) Binds the current object when adding Service Discovery to a VirtualNode.
     *
     * @experimental
     */
    abstract bind(scope: Construct): ServiceDiscoveryConfig;
}
