import type { Application } from '../application/application.model';
import type { IInstance, ITask } from '../domain';
import type { IJob } from '../task/taskExecutor';
export interface IMultiInstanceGroup {
    account: string;
    cloudProvider: string;
    region: string;
    serverGroup: string;
    instanceIds: string[];
    loadBalancers?: string[];
    instances: IInstance[];
    selectAll?: boolean;
}
export interface IMultiInstanceJob {
    type: string;
    cloudProvider: string;
    instanceIds: string[];
    credentials: string;
    region: string;
    serverGroupName: string;
    asgName?: string;
    loadBalancerNames?: string[];
}
export declare class InstanceWriter {
    static terminateInstance(instance: IInstance, application: Application, params?: IJob): PromiseLike<ITask>;
    static terminateInstances(instanceGroups: IMultiInstanceGroup[], application: Application): PromiseLike<ITask>;
    private static executeMultiInstanceTask;
    static rebootInstances(instanceGroups: IMultiInstanceGroup[], application: Application): PromiseLike<ITask>;
    static rebootInstance(instance: IInstance, application: Application, params?: any): PromiseLike<ITask>;
    static deregisterInstancesFromLoadBalancer(instanceGroups: IMultiInstanceGroup[], application: Application, loadBalancerNames: string[]): PromiseLike<ITask>;
    static deregisterInstanceFromLoadBalancer(instance: IInstance, application: Application, params?: any): PromiseLike<ITask>;
    static registerInstancesWithLoadBalancer(instanceGroups: IMultiInstanceGroup[], application: Application, loadBalancerNames: string[]): PromiseLike<ITask>;
    static registerInstanceWithLoadBalancer(instance: IInstance, application: Application, params?: any): PromiseLike<ITask>;
    static enableInstancesInDiscovery(instanceGroups: IMultiInstanceGroup[], application: Application): PromiseLike<ITask>;
    static enableInstanceInDiscovery(instance: IInstance, application: Application): PromiseLike<ITask>;
    static disableInstancesInDiscovery(instanceGroups: IMultiInstanceGroup[], application: Application): PromiseLike<ITask>;
    static disableInstanceInDiscovery(instance: IInstance, application: Application): PromiseLike<ITask>;
    static terminateInstancesAndShrinkServerGroups(instanceGroups: IMultiInstanceGroup[], application: Application): PromiseLike<ITask>;
    static terminateInstanceAndShrinkServerGroup(instance: IInstance, application: Application, params?: any): PromiseLike<ITask>;
    protected static buildMultiInstanceJob(instanceGroups: IMultiInstanceGroup[], type: string, additionalJobProperties?: {}): IMultiInstanceJob[];
    protected static buildMultiInstanceDescriptor(jobs: IMultiInstanceJob[], base: string, suffix: string): string;
    private static convertGroupToJob;
    private static transform;
}
