import { Argument, Attribute, Map } from '../arguments';
import { Block } from '.';
interface ProvisionerArgs {
    when?: Argument<'create' | 'destroy'>;
    on_failure?: Argument<'continue' | 'fail'>;
}
/**
 * @category Block
 */
export interface FileProvisionerArgs extends ProvisionerArgs {
    source?: string;
    content?: string;
    destination?: string;
}
/**
 * @category Block
 */
export interface LocalExecProvisionerArgs extends ProvisionerArgs {
    command: string;
    working_dir?: string;
    interpreter?: string[];
    environment?: Map;
    quiet?: boolean;
}
/**
 * @category Block
 */
export interface RemoteExecProvisionerArgs extends ProvisionerArgs {
    inline?: string[];
    script?: string;
    scripts?: string[];
}
/**
 * @category Block
 */
export declare class Provisioner extends Block<FileProvisionerArgs | LocalExecProvisionerArgs | RemoteExecProvisionerArgs> {
    readonly type: 'file' | 'local-exec' | 'remote-exec';
    /**
     * Construct provisioner.
     *
     * Refer to Terraform documentation on what can be put as type & arguments.
     *
     * @param type type
     * @param args arguments
     */
    constructor(type: 'file', args: FileProvisionerArgs);
    constructor(type: 'local-exec', args: LocalExecProvisionerArgs);
    constructor(type: 'remote-exec', args: RemoteExecProvisionerArgs);
    asArgument(): Argument;
    attr(_name: string): Attribute;
}
export {};
