import * as cdk from "../../../core";
import { IConstruct } from 'constructs';
/**
 * Properties for `RequireImdsv2Aspect`.
 */
interface RequireImdsv2AspectProps {
    /**
     * (experimental) Whether warning annotations from this Aspect should be suppressed or not.
     *
     * @default - false
     * @experimental
     */
    readonly suppressWarnings?: boolean;
}
/**
 * Base class for Aspect that makes IMDSv2 required.
 */
declare abstract class RequireImdsv2Aspect implements cdk.IAspect {
    /**
     * @experimental
     */
    protected readonly suppressWarnings: boolean;
    constructor(props?: RequireImdsv2AspectProps);
    abstract visit(node: IConstruct): void;
    /**
     * (experimental) Adds a warning annotation to a node, unless `suppressWarnings` is true.
     *
     * @param node The scope to add the warning to.
     * @param message The warning message.
     * @experimental
     */
    protected warn(node: IConstruct, message: string): void;
}
/**
 * (experimental) Properties for `InstanceRequireImdsv2Aspect`.
 *
 * @experimental
 */
export interface InstanceRequireImdsv2AspectProps extends RequireImdsv2AspectProps {
    /**
     * (experimental) Whether warnings that would be raised when an Instance is associated with an existing Launch Template should be suppressed or not.
     *
     * You can set this to `true` if `LaunchTemplateImdsAspect` is being used alongside this Aspect to
     * suppress false-positive warnings because any Launch Templates associated with Instances will still be covered.
     *
     * @default - false
     * @experimental
     */
    readonly suppressLaunchTemplateWarning?: boolean;
}
/**
 * (experimental) Aspect that applies IMDS configuration on EC2 Instance constructs.
 *
 * This aspect configures IMDS on an EC2 instance by creating a Launch Template with the
 * IMDS configuration and associating that Launch Template with the instance. If an Instance
 * is already associated with a Launch Template, a warning will (optionally) be added to the
 * construct node and it will be skipped.
 *
 * To cover Instances already associated with Launch Templates, use `LaunchTemplateImdsAspect`.
 *
 * @experimental
 */
export declare class InstanceRequireImdsv2Aspect extends RequireImdsv2Aspect {
    private readonly suppressLaunchTemplateWarning;
    /**
     * @experimental
     */
    constructor(props?: InstanceRequireImdsv2AspectProps);
    /**
     * (experimental) All aspects can visit an IConstruct.
     *
     * @experimental
     */
    visit(node: IConstruct): void;
    /**
     * (experimental) Adds a warning annotation to a node, unless `suppressWarnings` is true.
     *
     * @experimental
     */
    protected warn(node: IConstruct, message: string): void;
}
/**
 * (experimental) Properties for `LaunchTemplateRequireImdsv2Aspect`.
 *
 * @experimental
 */
export interface LaunchTemplateRequireImdsv2AspectProps extends RequireImdsv2AspectProps {
}
/**
 * (experimental) Aspect that applies IMDS configuration on EC2 Launch Template constructs.
 *
 * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-launchtemplate-launchtemplatedata-metadataoptions.html
 * @experimental
 */
export declare class LaunchTemplateRequireImdsv2Aspect extends RequireImdsv2Aspect {
    /**
     * @experimental
     */
    constructor(props?: LaunchTemplateRequireImdsv2AspectProps);
    /**
     * (experimental) All aspects can visit an IConstruct.
     *
     * @experimental
     */
    visit(node: IConstruct): void;
}
export {};
