import type { Construct } from 'constructs';
import type { MinimumHealthyHosts, MinimumHealthyHostsPerZone } from './host-health-config';
import type { TrafficRouting } from './traffic-routing-config';
import type { Duration } from '../../core';
import { Resource } from '../../core';
import type { DeploymentConfigReference, IDeploymentConfigRef, IDeploymentGroupRef } from '../../interfaces/generated/aws-codedeploy-interfaces.generated';
/**
 * The base class for ServerDeploymentConfig, EcsDeploymentConfig,
 * and LambdaDeploymentConfig deployment configurations.
 */
export interface IBaseDeploymentConfig extends IDeploymentConfigRef {
    /**
     * The physical, human-readable name of the Deployment Configuration.
     * @attribute
     */
    readonly deploymentConfigName: string;
    /**
     * The ARN of the Deployment Configuration.
     * @attribute
     */
    readonly deploymentConfigArn: string;
}
/**
 * Construction properties of `BaseDeploymentConfig`.
 */
export interface BaseDeploymentConfigOptions {
    /**
     * The physical, human-readable name of the Deployment Configuration.
     * @default - automatically generated name
     */
    readonly deploymentConfigName?: string;
}
/**
 * The compute platform of a deployment configuration
 */
export declare enum ComputePlatform {
    /**
     * The deployment will target EC2 instances or on-premise servers
     */
    SERVER = "Server",
    /**
     * The deployment will target a Lambda function
     */
    LAMBDA = "Lambda",
    /**
     * The deployment will target an ECS server
     */
    ECS = "ECS"
}
/**
 * Configuration for CodeDeploy to deploy your application to one Availability Zone at a time within an AWS Region.
 */
export interface ZonalConfig {
    /**
     * The period of time that CodeDeploy must wait after completing a deployment to an Availability Zone.
     *
     * Accepted Values:
     *  * 0
     *  * Greater than or equal to 1
     *
     * @default - CodeDeploy starts deploying to the next Availability Zone immediately
     */
    readonly monitorDuration?: Duration;
    /**
     * The period of time that CodeDeploy must wait after completing a deployment to the first Availability Zone.
     *
     * Accepted Values:
     *  * 0
     *  * Greater than or equal to 1
     *
     * @default - the same value as `monitorDuration`
     */
    readonly firstZoneMonitorDuration?: Duration;
    /**
     * The number or percentage of instances that must remain available per Availability Zone during a deployment.
     * This option works in conjunction with the `minimumHealthyHosts` option.
     *
     * @see https://docs.aws.amazon.com/codedeploy/latest/userguide/instances-health.html#minimum-healthy-hosts-az
     *
     * @default - 0 percent
     */
    readonly minimumHealthyHostsPerZone?: MinimumHealthyHostsPerZone;
}
/**
 * Complete base deployment config properties that are required to be supplied by the implementation
 * of the BaseDeploymentConfig class.
 */
export interface BaseDeploymentConfigProps extends BaseDeploymentConfigOptions {
    /**
     * The destination compute platform for the deployment.
     *
     * @default ComputePlatform.Server
     */
    readonly computePlatform?: ComputePlatform;
    /**
     * The configuration that specifies how traffic is shifted during a deployment.
     * Only applicable to ECS and Lambda deployments, and must not be specified for Server deployments.
     * @default None
     */
    readonly trafficRouting?: TrafficRouting;
    /**
     * Minimum number of healthy hosts.
     * @default None
     */
    readonly minimumHealthyHosts?: MinimumHealthyHosts;
    /**
     * Configure CodeDeploy to deploy your application to one Availability Zone at a time within an AWS Region.
     *
     * @see https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations-create.html#zonal-config
     *
     * @default - deploy your application to a random selection of hosts across a Region
     */
    readonly zonalConfig?: ZonalConfig;
}
/**
 * The base class for ServerDeploymentConfig, EcsDeploymentConfig,
 * and LambdaDeploymentConfig deployment configurations.
 *
 * @resource AWS::CodeDeploy::DeploymentConfig
 */
export declare abstract class BaseDeploymentConfig extends Resource implements IBaseDeploymentConfig {
    /**
     * Import a custom Deployment Configuration for a Deployment Group defined outside the CDK.
     *
     * @param scope the parent Construct for this new Construct
     * @param id the logical ID of this new Construct
     * @param deploymentConfigName the name of the referenced custom Deployment Configuration
     * @returns a Construct representing a reference to an existing custom Deployment Configuration
     */
    protected static fromDeploymentConfigName(scope: Construct, id: string, deploymentConfigName: string): IBaseDeploymentConfig;
    private readonly resource;
    get deploymentConfigName(): string;
    get deploymentConfigArn(): string;
    get deploymentConfigRef(): DeploymentConfigReference;
    constructor(scope: Construct, id: string, props?: BaseDeploymentConfigProps);
    private validateMinimumDuration;
}
/**
 * A DeploymentConfig that can specialize itself based on the target group it will be used for
 *
 * For example, this is used for AWS-managed deployment configs: these are already
 * present in every region, but we need a region-specific ARN to reference them.
 * Since we might use them in conjunction with cross-region DeploymentGroups, we
 * need to specialize the account and region to the DeploymentGroup before
 * using.
 *
 * A DeploymentGroup must call `bindEnvironment()` first if it detects this type,
 * before reading the DeploymentConfig ARN.
 */
export interface IBindableDeploymentConfig extends IDeploymentConfigRef {
    /**
     * Bind the predefined deployment config to the environment of the given resource
     */
    bindEnvironment(deploymentGroup: IDeploymentGroupRef): IDeploymentConfigRef;
}
