import { KubernetesResource, StringMap } from '../../core';
import { Translation } from '../../translate/types';
import { AccessMode } from './constants';
export declare enum StorageProvisioner {
    CEPH_FS_INTERNAL = "rook-ceph.cephfs.csi.ceph.com",
    CEPH_FS_RBD = "rook-ceph.rbd.csi.ceph.com",
    CEPH_OBJECT = "rook-ceph.ceph.rook.io/bucket",
    CEPH_COSI = "ceph.objectstorage.k8s.io",
    CEPH_FS = "ceph.com/cephfs",
    NFS = "cpaas.io/nfs-client",
    TOPOLVM = "topolvm.cybozu.com",
    HUAWEI_CSI = "csi.huawei.com",
    NFS_CSI = "nfs.csi.k8s.io"
}
export declare enum StorageProvider {
    PLATFORM = "platform",
    THIRD_PARTY = "third_party"
}
export declare enum StorageType {
    FILE_STORAGE = "file_storage",
    OBJECT_STORAGE = "object_storage",
    BLOCK_STORAGE = "block_storage"
}
export declare enum VolumeMode {
    FILE_SYSTEM = "Filesystem",
    BLOCK_DEVICE = "Block"
}
export declare enum StorageclassFeature {
    SNAPSHOT = "snapshot",
    EXPANSION = "expansion"
}
export interface StorageOption {
    provisioner: StorageProvisioner;
    gate?: string;
    clusterGate?: string;
    module?: string;
    provider: StorageProvider;
    type?: StorageType;
    display?: Translation;
    accessModes: AccessMode[];
    /** features字段中有StorageclassFeature.SNAPSHOT才有这个 */
    snapshotAccessModes?: AccessMode[];
    features: StorageclassFeature[];
    volumeModes: VolumeMode[];
    supportTypes?: StorageType[];
    disabled?: boolean;
}
export declare enum VolumeBindingMode {
    Immediate = "Immediate",
    WaitForFirstConsumer = "WaitForFirstConsumer"
}
export declare enum ReclaimPolicy {
    Retain = "Retain",
    Delete = "Delete"
}
export interface StorageClass extends KubernetesResource {
    mountOptions?: string[];
    parameters?: StringMap;
    provisioner?: StorageProvisioner;
    reclaimPolicy?: ReclaimPolicy;
    volumeBindingMode?: VolumeBindingMode;
    allowVolumeExpansion?: boolean;
}
export interface BucketClass extends KubernetesResource {
    provisioner: StorageProvisioner;
    deletionPolicy: ReclaimPolicy;
    isDefaultBucketClass: boolean;
    parameters: StringMap;
    protocol: {
        s3: {
            region: string;
            signatureVersion: string;
        };
    };
}
export declare type CommonStorageClass = StorageClass | BucketClass;
