/**
  Juju Controller version 13.


  NOTE: This file was generated using the Juju schema
  from Juju 4.0.1 at the git SHA 22e0b6a.
  Do not manually edit this file.
*/
import { ConnectionInfo, Transport } from "../../client.js";
import { Facade } from "../../types.js";
export interface AllWatcherId {
    "watcher-id": string;
}
export interface CloudCredential {
    attrs?: Record<string, string>;
    "auth-type": string;
    redacted?: string[];
}
export interface CloudSpec {
    cacertificates?: string[];
    credential?: CloudCredential;
    endpoint?: string;
    "identity-endpoint"?: string;
    "is-controller-cloud"?: boolean;
    name: string;
    region?: string;
    "skip-tls-verify"?: boolean;
    "storage-endpoint"?: string;
    type: string;
}
export interface ControllerAPIInfoResult {
    addresses: string[];
    cacert: string;
    error?: Error;
}
export interface ControllerAPIInfoResults {
    results: ControllerAPIInfoResult[];
}
export interface ControllerConfigResult {
    config: AdditionalProperties;
}
export interface ControllerConfigSet {
    config: AdditionalProperties;
}
export interface ControllerVersionResults {
    "git-commit": string;
    version: string;
}
export interface DashboardConnectionInfo {
    error?: Error;
    "proxy-connection": Proxy;
    "ssh-connection": DashboardConnectionSSHTunnel;
}
export interface DashboardConnectionSSHTunnel {
    entity?: string;
    host: string;
    model?: string;
    port: string;
}
export interface DestroyControllerArgs {
    "destroy-models": boolean;
    "destroy-storage"?: boolean;
    force?: boolean;
    "max-wait"?: number;
    "model-timeout"?: number;
}
export interface Entities {
    entities: Entity[];
}
export interface Entity {
    tag: string;
}
export interface Error {
    code: string;
    info?: AdditionalProperties;
    message: string;
}
export interface ErrorResult {
    error?: Error;
}
export interface ErrorResults {
    results: ErrorResult[];
}
export interface HostedModelConfig {
    "cloud-spec"?: CloudSpec;
    config?: AdditionalProperties;
    error?: Error;
    name: string;
    qualifier: string;
}
export interface HostedModelConfigsResults {
    models: HostedModelConfig[];
}
export interface InitiateMigrationArgs {
    specs: MigrationSpec[];
}
export interface InitiateMigrationResult {
    error?: Error;
    "migration-id": string;
    "model-tag": string;
}
export interface InitiateMigrationResults {
    results: InitiateMigrationResult[];
}
export interface MachineHardware {
    arch?: string;
    "availability-zone"?: string;
    cores?: number;
    "cpu-power"?: number;
    mem?: number;
    "root-disk"?: number;
    tags?: string[];
    "virt-type"?: string;
}
export interface MigrationSpec {
    "model-tag": string;
    "target-info": MigrationTargetInfo;
}
export interface MigrationTargetInfo {
    addrs: string[];
    "auth-tag": string;
    "ca-cert": string;
    "controller-alias"?: string;
    "controller-tag": string;
    macaroons?: string;
    password?: string;
    "skip-user-checks"?: boolean;
    token?: string;
}
export interface Model {
    name: string;
    qualifier: string;
    type: string;
    uuid: string;
}
export interface ModelApplicationInfo {
    name: string;
}
export interface ModelBlockInfo {
    blocks: string[];
    "model-uuid": string;
    name: string;
    qualifier: string;
}
export interface ModelBlockInfoList {
    models?: ModelBlockInfo[];
}
export interface ModelFilesystemInfo {
    detachable?: boolean;
    id: string;
    message?: string;
    "provider-id"?: string;
    status?: string;
}
export interface ModelMachineInfo {
    "display-name"?: string;
    hardware?: MachineHardware;
    id: string;
    "instance-id"?: string;
    message?: string;
    status?: string;
}
export interface ModelStatus {
    "application-count": number;
    applications?: ModelApplicationInfo[];
    error?: Error;
    filesystems?: ModelFilesystemInfo[];
    "hosted-machine-count": number;
    life: string;
    machines?: ModelMachineInfo[];
    "model-tag": string;
    qualifier: string;
    type: string;
    "unit-count": number;
    volumes?: ModelVolumeInfo[];
}
export interface ModelStatusResults {
    models: ModelStatus[];
}
export interface ModelVolumeInfo {
    detachable?: boolean;
    id: string;
    message?: string;
    "provider-id"?: string;
    status?: string;
}
export interface ModifyControllerAccess {
    access: string;
    action: string;
    "user-tag": string;
}
export interface ModifyControllerAccessRequest {
    changes: ModifyControllerAccess[];
}
export interface Proxy {
    config: AdditionalProperties;
    type: string;
}
export interface RemoveBlocksArgs {
    all: boolean;
}
export interface StringResult {
    error?: Error;
    result: string;
}
export interface SummaryWatcherID {
    "watcher-id": string;
}
export interface UserAccess {
    access: string;
    "user-tag": string;
}
export interface UserAccessResult {
    error?: Error;
    result?: UserAccess;
}
export interface UserAccessResults {
    results?: UserAccessResult[];
}
export interface UserModel {
    "last-connection": string;
    model: Model;
}
export interface UserModelList {
    "user-models": UserModel[];
}
export interface AdditionalProperties {
    [key: string]: any;
}
/**

*/
declare class ControllerV13 implements Facade {
    static NAME: string;
    static VERSION: number;
    NAME: string;
    VERSION: number;
    _transport: Transport;
    _info: ConnectionInfo;
    constructor(transport: Transport, info: ConnectionInfo);
    /**
  
    */
    allModels(params: any): Promise<UserModelList>;
    /**
  
    */
    configSet(params: ControllerConfigSet): Promise<any>;
    /**
  
    */
    controllerAPIInfoForModels(params: Entities): Promise<ControllerAPIInfoResults>;
    /**
  
    */
    controllerConfig(params: any): Promise<ControllerConfigResult>;
    /**
  
    */
    controllerVersion(params: any): Promise<ControllerVersionResults>;
    /**
  
    */
    dashboardConnectionInfo(params: any): Promise<DashboardConnectionInfo>;
    /**
  
    */
    destroyController(params: DestroyControllerArgs): Promise<any>;
    /**
  
    */
    getControllerAccess(params: Entities): Promise<UserAccessResults>;
    /**
  
    */
    hostedModelConfigs(params: any): Promise<HostedModelConfigsResults>;
    /**
  
    */
    identityProviderURL(params: any): Promise<StringResult>;
    /**
  
    */
    initiateMigration(params: InitiateMigrationArgs): Promise<InitiateMigrationResults>;
    /**
  
    */
    listBlockedModels(params: any): Promise<ModelBlockInfoList>;
    /**
  
    */
    modelStatus(params: Entities): Promise<ModelStatusResults>;
    /**
  
    */
    modifyControllerAccess(params: ModifyControllerAccessRequest): Promise<ErrorResults>;
    /**
  
    */
    mongoVersion(params: any): Promise<StringResult>;
    /**
  
    */
    removeBlocks(params: RemoveBlocksArgs): Promise<any>;
    /**
  
    */
    watchAllModelSummaries(params: any): Promise<SummaryWatcherID>;
    /**
  
    */
    watchAllModels(params: any): Promise<AllWatcherId>;
    /**
  
    */
    watchModelSummaries(params: any): Promise<SummaryWatcherID>;
}
export default ControllerV13;
