/// <summary>
 /// Initializes a new instance of the
 /// Iok8sapicorev1PersistentVolumeSpec class.
 /// </summary>
 /// <param name="accessModes">AccessModes contains all ways the volume
 /// can be mounted. More info:
 /// https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes</param>
 /// <param name="awsElasticBlockStore">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</param>
 /// <param name="azureDisk">AzureDisk represents an Azure Data Disk
 /// mount on the host and bind mount to the pod.</param>
 /// <param name="azureFile">AzureFile represents an Azure File Service
 /// mount on the host and bind mount to the pod.</param>
 /// <param name="capacity">A description of the persistent volume's
 /// resources and capacity. More info:
 /// https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity</param>
 /// <param name="cephfs">CephFS represents a Ceph FS mount on the host
 /// that shares a pod's lifetime</param>
 /// <param name="cinder">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</param>
 /// <param name="claimRef">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</param>
 /// <param name="fc">FC represents a Fibre Channel resource that is
 /// attached to a kubelet's host machine and then exposed to the
 /// pod.</param>
 /// <param name="flexVolume">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.</param>
 /// <param name="flocker">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</param>
 /// <param name="gcePersistentDisk">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</param>
 /// <param name="glusterfs">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</param>
 /// <param name="hostPath">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</param>
 /// <param name="iscsi">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.</param>
 /// <param name="local">Local represents directly-attached storage with
 /// node affinity</param>
 /// <param name="mountOptions">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</param>
 /// <param name="nfs">NFS represents an NFS mount on the host.
 /// Provisioned by an admin. More info:
 /// https://kubernetes.io/docs/concepts/storage/volumes#nfs</param>
 /// <param name="persistentVolumeReclaimPolicy">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</param>
 /// <param name="photonPersistentDisk">PhotonPersistentDisk represents
 /// a PhotonController persistent disk attached and mounted on kubelets
 /// host machine</param>
 /// <param name="portworxVolume">PortworxVolume represents a portworx
 /// volume attached and mounted on kubelets host machine</param>
 /// <param name="quobyte">Quobyte represents a Quobyte mount on the
 /// host that shares a pod's lifetime</param>
 /// <param name="rbd">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</param>
 /// <param name="scaleIO">ScaleIO represents a ScaleIO persistent
 /// volume attached and mounted on Kubernetes nodes.</param>
 /// <param name="storageClassName">Name of StorageClass to which this
 /// persistent volume belongs. Empty value means that this volume does
 /// not belong to any StorageClass.</param>
 /// <param name="storageos">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</param>
 /// <param name="vsphereVolume">VsphereVolume represents a vSphere
 /// volume attached and mounted on kubelets host machine</param>
 public Iok8sapicorev1PersistentVolumeSpec(IList <string> accessModes = default(IList <string>), Iok8sapicorev1AWSElasticBlockStoreVolumeSource awsElasticBlockStore = default(Iok8sapicorev1AWSElasticBlockStoreVolumeSource), Iok8sapicorev1AzureDiskVolumeSource azureDisk = default(Iok8sapicorev1AzureDiskVolumeSource), Iok8sapicorev1AzureFilePersistentVolumeSource azureFile = default(Iok8sapicorev1AzureFilePersistentVolumeSource), IDictionary <string, string> capacity = default(IDictionary <string, string>), Iok8sapicorev1CephFSPersistentVolumeSource cephfs = default(Iok8sapicorev1CephFSPersistentVolumeSource), Iok8sapicorev1CinderVolumeSource cinder = default(Iok8sapicorev1CinderVolumeSource), Iok8sapicorev1ObjectReference claimRef = default(Iok8sapicorev1ObjectReference), Iok8sapicorev1FCVolumeSource fc = default(Iok8sapicorev1FCVolumeSource), Iok8sapicorev1FlexVolumeSource flexVolume = default(Iok8sapicorev1FlexVolumeSource), Iok8sapicorev1FlockerVolumeSource flocker = default(Iok8sapicorev1FlockerVolumeSource), Iok8sapicorev1GCEPersistentDiskVolumeSource gcePersistentDisk = default(Iok8sapicorev1GCEPersistentDiskVolumeSource), Iok8sapicorev1GlusterfsVolumeSource glusterfs = default(Iok8sapicorev1GlusterfsVolumeSource), Iok8sapicorev1HostPathVolumeSource hostPath = default(Iok8sapicorev1HostPathVolumeSource), Iok8sapicorev1ISCSIVolumeSource iscsi = default(Iok8sapicorev1ISCSIVolumeSource), Iok8sapicorev1LocalVolumeSource local = default(Iok8sapicorev1LocalVolumeSource), IList <string> mountOptions = default(IList <string>), Iok8sapicorev1NFSVolumeSource nfs = default(Iok8sapicorev1NFSVolumeSource), string persistentVolumeReclaimPolicy = default(string), Iok8sapicorev1PhotonPersistentDiskVolumeSource photonPersistentDisk = default(Iok8sapicorev1PhotonPersistentDiskVolumeSource), Iok8sapicorev1PortworxVolumeSource portworxVolume = default(Iok8sapicorev1PortworxVolumeSource), Iok8sapicorev1QuobyteVolumeSource quobyte = default(Iok8sapicorev1QuobyteVolumeSource), Iok8sapicorev1RBDPersistentVolumeSource rbd = default(Iok8sapicorev1RBDPersistentVolumeSource), Iok8sapicorev1ScaleIOPersistentVolumeSource scaleIO = default(Iok8sapicorev1ScaleIOPersistentVolumeSource), string storageClassName = default(string), Iok8sapicorev1StorageOSPersistentVolumeSource storageos = default(Iok8sapicorev1StorageOSPersistentVolumeSource), Iok8sapicorev1VsphereVirtualDiskVolumeSource vsphereVolume = default(Iok8sapicorev1VsphereVirtualDiskVolumeSource))
 {
     AccessModes          = accessModes;
     AwsElasticBlockStore = awsElasticBlockStore;
     AzureDisk            = azureDisk;
     AzureFile            = azureFile;
     Capacity             = capacity;
     Cephfs                        = cephfs;
     Cinder                        = cinder;
     ClaimRef                      = claimRef;
     Fc                            = fc;
     FlexVolume                    = flexVolume;
     Flocker                       = flocker;
     GcePersistentDisk             = gcePersistentDisk;
     Glusterfs                     = glusterfs;
     HostPath                      = hostPath;
     Iscsi                         = iscsi;
     Local                         = local;
     MountOptions                  = mountOptions;
     Nfs                           = nfs;
     PersistentVolumeReclaimPolicy = persistentVolumeReclaimPolicy;
     PhotonPersistentDisk          = photonPersistentDisk;
     PortworxVolume                = portworxVolume;
     Quobyte                       = quobyte;
     Rbd                           = rbd;
     ScaleIO                       = scaleIO;
     StorageClassName              = storageClassName;
     Storageos                     = storageos;
     VsphereVolume                 = vsphereVolume;
     CustomInit();
 }
 /// <summary>
 /// Initializes a new instance of the Iok8sapicorev1Volume class.
 /// </summary>
 /// <param name="name">Volume's name. Must be a DNS_LABEL and unique
 /// within the pod. More info:
 /// https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names</param>
 /// <param name="awsElasticBlockStore">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</param>
 /// <param name="azureDisk">AzureDisk represents an Azure Data Disk
 /// mount on the host and bind mount to the pod.</param>
 /// <param name="azureFile">AzureFile represents an Azure File Service
 /// mount on the host and bind mount to the pod.</param>
 /// <param name="cephfs">CephFS represents a Ceph FS mount on the host
 /// that shares a pod's lifetime</param>
 /// <param name="cinder">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</param>
 /// <param name="configMap">ConfigMap represents a configMap that
 /// should populate this volume</param>
 /// <param name="downwardAPI">DownwardAPI represents downward API about
 /// the pod that should populate this volume</param>
 /// <param name="emptyDir">EmptyDir represents a temporary directory
 /// that shares a pod's lifetime. More info:
 /// https://kubernetes.io/docs/concepts/storage/volumes#emptydir</param>
 /// <param name="fc">FC represents a Fibre Channel resource that is
 /// attached to a kubelet's host machine and then exposed to the
 /// pod.</param>
 /// <param name="flexVolume">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.</param>
 /// <param name="flocker">Flocker represents a Flocker volume attached
 /// to a kubelet's host machine. This depends on the Flocker control
 /// service being running</param>
 /// <param name="gcePersistentDisk">GCEPersistentDisk represents a GCE
 /// 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#gcepersistentdisk</param>
 /// <param name="gitRepo">GitRepo represents a git repository at a
 /// particular revision.</param>
 /// <param name="glusterfs">Glusterfs represents a Glusterfs mount on
 /// the host that shares a pod's lifetime. More info:
 /// https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md</param>
 /// <param name="hostPath">HostPath represents a pre-existing file or
 /// directory on the host machine that is directly exposed to the
 /// container. This is generally used for system agents or other
 /// privileged things that are allowed to see the host machine. Most
 /// containers will NOT need this. More info:
 /// https://kubernetes.io/docs/concepts/storage/volumes#hostpath</param>
 /// <param name="iscsi">ISCSI represents an ISCSI Disk resource that is
 /// attached to a kubelet's host machine and then exposed to the pod.
 /// More info:
 /// https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md</param>
 /// <param name="nfs">NFS represents an NFS mount on the host that
 /// shares a pod's lifetime More info:
 /// https://kubernetes.io/docs/concepts/storage/volumes#nfs</param>
 /// <param
 /// name="persistentVolumeClaim">PersistentVolumeClaimVolumeSource
 /// represents a reference to a PersistentVolumeClaim in the same
 /// namespace. More info:
 /// https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims</param>
 /// <param name="photonPersistentDisk">PhotonPersistentDisk represents
 /// a PhotonController persistent disk attached and mounted on kubelets
 /// host machine</param>
 /// <param name="portworxVolume">PortworxVolume represents a portworx
 /// volume attached and mounted on kubelets host machine</param>
 /// <param name="projected">Items for all in one resources secrets,
 /// configmaps, and downward API</param>
 /// <param name="quobyte">Quobyte represents a Quobyte mount on the
 /// host that shares a pod's lifetime</param>
 /// <param name="rbd">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</param>
 /// <param name="scaleIO">ScaleIO represents a ScaleIO persistent
 /// volume attached and mounted on Kubernetes nodes.</param>
 /// <param name="secret">Secret represents a secret that should
 /// populate this volume. More info:
 /// https://kubernetes.io/docs/concepts/storage/volumes#secret</param>
 /// <param name="storageos">StorageOS represents a StorageOS volume
 /// attached and mounted on Kubernetes nodes.</param>
 /// <param name="vsphereVolume">VsphereVolume represents a vSphere
 /// volume attached and mounted on kubelets host machine</param>
 public Iok8sapicorev1Volume(string name, Iok8sapicorev1AWSElasticBlockStoreVolumeSource awsElasticBlockStore = default(Iok8sapicorev1AWSElasticBlockStoreVolumeSource), Iok8sapicorev1AzureDiskVolumeSource azureDisk = default(Iok8sapicorev1AzureDiskVolumeSource), Iok8sapicorev1AzureFileVolumeSource azureFile = default(Iok8sapicorev1AzureFileVolumeSource), Iok8sapicorev1CephFSVolumeSource cephfs = default(Iok8sapicorev1CephFSVolumeSource), Iok8sapicorev1CinderVolumeSource cinder = default(Iok8sapicorev1CinderVolumeSource), Iok8sapicorev1ConfigMapVolumeSource configMap = default(Iok8sapicorev1ConfigMapVolumeSource), Iok8sapicorev1DownwardAPIVolumeSource downwardAPI = default(Iok8sapicorev1DownwardAPIVolumeSource), Iok8sapicorev1EmptyDirVolumeSource emptyDir = default(Iok8sapicorev1EmptyDirVolumeSource), Iok8sapicorev1FCVolumeSource fc = default(Iok8sapicorev1FCVolumeSource), Iok8sapicorev1FlexVolumeSource flexVolume = default(Iok8sapicorev1FlexVolumeSource), Iok8sapicorev1FlockerVolumeSource flocker = default(Iok8sapicorev1FlockerVolumeSource), Iok8sapicorev1GCEPersistentDiskVolumeSource gcePersistentDisk = default(Iok8sapicorev1GCEPersistentDiskVolumeSource), Iok8sapicorev1GitRepoVolumeSource gitRepo = default(Iok8sapicorev1GitRepoVolumeSource), Iok8sapicorev1GlusterfsVolumeSource glusterfs = default(Iok8sapicorev1GlusterfsVolumeSource), Iok8sapicorev1HostPathVolumeSource hostPath = default(Iok8sapicorev1HostPathVolumeSource), Iok8sapicorev1ISCSIVolumeSource iscsi = default(Iok8sapicorev1ISCSIVolumeSource), Iok8sapicorev1NFSVolumeSource nfs = default(Iok8sapicorev1NFSVolumeSource), Iok8sapicorev1PersistentVolumeClaimVolumeSource persistentVolumeClaim = default(Iok8sapicorev1PersistentVolumeClaimVolumeSource), Iok8sapicorev1PhotonPersistentDiskVolumeSource photonPersistentDisk = default(Iok8sapicorev1PhotonPersistentDiskVolumeSource), Iok8sapicorev1PortworxVolumeSource portworxVolume = default(Iok8sapicorev1PortworxVolumeSource), Iok8sapicorev1ProjectedVolumeSource projected = default(Iok8sapicorev1ProjectedVolumeSource), Iok8sapicorev1QuobyteVolumeSource quobyte = default(Iok8sapicorev1QuobyteVolumeSource), Iok8sapicorev1RBDVolumeSource rbd = default(Iok8sapicorev1RBDVolumeSource), Iok8sapicorev1ScaleIOVolumeSource scaleIO = default(Iok8sapicorev1ScaleIOVolumeSource), Iok8sapicorev1SecretVolumeSource secret = default(Iok8sapicorev1SecretVolumeSource), Iok8sapicorev1StorageOSVolumeSource storageos = default(Iok8sapicorev1StorageOSVolumeSource), Iok8sapicorev1VsphereVirtualDiskVolumeSource vsphereVolume = default(Iok8sapicorev1VsphereVirtualDiskVolumeSource))
 {
     AwsElasticBlockStore = awsElasticBlockStore;
     AzureDisk            = azureDisk;
     AzureFile            = azureFile;
     Cephfs                = cephfs;
     Cinder                = cinder;
     ConfigMap             = configMap;
     DownwardAPI           = downwardAPI;
     EmptyDir              = emptyDir;
     Fc                    = fc;
     FlexVolume            = flexVolume;
     Flocker               = flocker;
     GcePersistentDisk     = gcePersistentDisk;
     GitRepo               = gitRepo;
     Glusterfs             = glusterfs;
     HostPath              = hostPath;
     Iscsi                 = iscsi;
     Name                  = name;
     Nfs                   = nfs;
     PersistentVolumeClaim = persistentVolumeClaim;
     PhotonPersistentDisk  = photonPersistentDisk;
     PortworxVolume        = portworxVolume;
     Projected             = projected;
     Quobyte               = quobyte;
     Rbd                   = rbd;
     ScaleIO               = scaleIO;
     Secret                = secret;
     Storageos             = storageos;
     VsphereVolume         = vsphereVolume;
     CustomInit();
 }