{
  "description": "PersistentVolumeSpec is the specification of a persistent volume.",
  "properties": {
    "accessModes": {
      "description": "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "awsElasticBlockStore": {
      "description": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource"
    },
    "azureDisk": {
      "description": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.AzureDiskVolumeSource"
    },
    "azureFile": {
      "description": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.AzureFilePersistentVolumeSource"
    },
    "capacity": {
      "description": "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity",
      "type": "object",
      "additionalProperties": {
        "$ref": "_definitions.json#/definitions/io.k8s.apimachinery.pkg.api.resource.Quantity"
      }
    },
    "cephfs": {
      "description": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.CephFSPersistentVolumeSource"
    },
    "cinder": {
      "description": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.CinderVolumeSource"
    },
    "claimRef": {
      "description": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.ObjectReference"
    },
    "fc": {
      "description": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.FCVolumeSource"
    },
    "flexVolume": {
      "description": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.FlexVolumeSource"
    },
    "flocker": {
      "description": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.FlockerVolumeSource"
    },
    "gcePersistentDisk": {
      "description": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.GCEPersistentDiskVolumeSource"
    },
    "glusterfs": {
      "description": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.GlusterfsVolumeSource"
    },
    "hostPath": {
      "description": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.HostPathVolumeSource"
    },
    "iscsi": {
      "description": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.ISCSIVolumeSource"
    },
    "local": {
      "description": "Local represents directly-attached storage with node affinity",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.LocalVolumeSource"
    },
    "mountOptions": {
      "description": "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "nfs": {
      "description": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.NFSVolumeSource"
    },
    "persistentVolumeReclaimPolicy": {
      "description": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming",
      "type": [
        "string",
        "null"
      ]
    },
    "photonPersistentDisk": {
      "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource"
    },
    "portworxVolume": {
      "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.PortworxVolumeSource"
    },
    "quobyte": {
      "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.QuobyteVolumeSource"
    },
    "rbd": {
      "description": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.RBDVolumeSource"
    },
    "scaleIO": {
      "description": "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.ScaleIOVolumeSource"
    },
    "storageClassName": {
      "description": "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.",
      "type": [
        "string",
        "null"
      ]
    },
    "storageos": {
      "description": "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.StorageOSPersistentVolumeSource"
    },
    "vsphereVolume": {
      "description": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine",
      "$ref": "_definitions.json#/definitions/io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource"
    }
  },
  "$schema": "http://json-schema.org/schema#",
  "type": "object"
}