/*
Copyright The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/


// This file was autogenerated by go-to-protobuf. Do not edit it manually!

syntax = 'proto2';

package k8s.io.api.storage.v1;

import "k8s.io/api/core/v1/generated.proto";
import "k8s.io/api/storage/v1beta1/generated.proto";
import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/generated.proto";
import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto";
import "k8s.io/apimachinery/pkg/util/intstr/generated.proto";

// Package-wide variables from generator "generated".
option go_package = "v1";

// StorageClass describes the parameters for a class of storage for
// which PersistentVolumes can be dynamically provisioned.
// 
// StorageClasses are non-namespaced; the name of the storage class
// according to etcd is in ObjectMeta.Name.
message StorageClass {
  // Standard object's metadata.
  // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1;

  // Provisioner indicates the type of the provisioner.
  optional string provisioner = 2;

  // Parameters holds the parameters for the provisioner that should
  // create volumes of this storage class.
  // +optional
  map<string, string> parameters = 3;

  // Dynamically provisioned PersistentVolumes of this storage class are
  // created with this reclaimPolicy. Defaults to Delete.
  // +optional
  optional string reclaimPolicy = 4;

  // Dynamically provisioned PersistentVolumes of this storage class are
  // created with these mountOptions, e.g. ["ro", "soft"]. Not validated -
  // mount of the PVs will simply fail if one is invalid.
  // +optional
  repeated string mountOptions = 5;

  // AllowVolumeExpansion shows whether the storage class allow volume expand
  // +optional
  optional bool allowVolumeExpansion = 6;

  // VolumeBindingMode indicates how PersistentVolumeClaims should be
  // provisioned and bound.  When unset, VolumeBindingImmediate is used.
  // This field is alpha-level and is only honored by servers that enable
  // the VolumeScheduling feature.
  // +optional
  optional string volumeBindingMode = 7;

  // Restrict the node topologies where volumes can be dynamically provisioned.
  // Each volume plugin defines its own supported topology specifications.
  // An empty TopologySelectorTerm list means there is no topology restriction.
  // This field is alpha-level and is only honored by servers that enable
  // the DynamicProvisioningScheduling feature.
  // +optional
  repeated k8s.io.api.core.v1.TopologySelectorTerm allowedTopologies = 8;
}

// StorageClassList is a collection of storage classes.
message StorageClassList {
  // Standard list metadata
  // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
  // +optional
  optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1;

  // Items is the list of StorageClasses
  repeated StorageClass items = 2;
}

