All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.k8s.api.storage.v1.StorageClass.scala Maven / Gradle / Ivy

package io.k8s.api.storage.v1

import dev.hnaderi.k8s._
import dev.hnaderi.k8s.utils._

/** 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. */
final case class StorageClass(
  provisioner : String,
  mountOptions : Option[Seq[String]] = None,
  reclaimPolicy : Option[String] = None,
  volumeBindingMode : Option[String] = None,
  metadata : Option[io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta] = None,
  allowVolumeExpansion : Option[Boolean] = None,
  allowedTopologies : Option[Seq[io.k8s.api.core.v1.TopologySelectorTerm]] = None,
  parameters : Option[Map[String, String]] = None
) extends KObject {
  protected val _resourceKind = ResourceKind("storage.k8s.io", "StorageClass", "v1")


  /** Returns a new data with provisioner set to new value */
  def withProvisioner(value: String) : StorageClass = copy(provisioner = value)
  /** transforms provisioner to result of function */
  def mapProvisioner(f: String => String) : StorageClass = copy(provisioner = f(provisioner))

  /** Returns a new data with mountOptions set to new value */
  def withMountOptions(value: Seq[String]) : StorageClass = copy(mountOptions = Some(value))
  /** Appends new values to mountOptions */
  def addMountOptions(newValues: String*) : StorageClass = copy(mountOptions = Some(mountOptions.fold(newValues)(_ ++ newValues)))
  /** if mountOptions has a value, transforms to the result of function*/
  def mapMountOptions(f: Seq[String] => Seq[String]) : StorageClass = copy(mountOptions = mountOptions.map(f))

  /** Returns a new data with reclaimPolicy set to new value */
  def withReclaimPolicy(value: String) : StorageClass = copy(reclaimPolicy = Some(value))
  /** if reclaimPolicy has a value, transforms to the result of function*/
  def mapReclaimPolicy(f: String => String) : StorageClass = copy(reclaimPolicy = reclaimPolicy.map(f))

  /** Returns a new data with volumeBindingMode set to new value */
  def withVolumeBindingMode(value: String) : StorageClass = copy(volumeBindingMode = Some(value))
  /** if volumeBindingMode has a value, transforms to the result of function*/
  def mapVolumeBindingMode(f: String => String) : StorageClass = copy(volumeBindingMode = volumeBindingMode.map(f))

  /** Returns a new data with metadata set to new value */
  def withMetadata(value: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta) : StorageClass = copy(metadata = Some(value))
  /** if metadata has a value, transforms to the result of function*/
  def mapMetadata(f: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta => io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta) : StorageClass = copy(metadata = metadata.map(f))

  /** Returns a new data with allowVolumeExpansion set to new value */
  def withAllowVolumeExpansion(value: Boolean) : StorageClass = copy(allowVolumeExpansion = Some(value))
  /** if allowVolumeExpansion has a value, transforms to the result of function*/
  def mapAllowVolumeExpansion(f: Boolean => Boolean) : StorageClass = copy(allowVolumeExpansion = allowVolumeExpansion.map(f))

  /** Returns a new data with allowedTopologies set to new value */
  def withAllowedTopologies(value: Seq[io.k8s.api.core.v1.TopologySelectorTerm]) : StorageClass = copy(allowedTopologies = Some(value))
  /** Appends new values to allowedTopologies */
  def addAllowedTopologies(newValues: io.k8s.api.core.v1.TopologySelectorTerm*) : StorageClass = copy(allowedTopologies = Some(allowedTopologies.fold(newValues)(_ ++ newValues)))
  /** if allowedTopologies has a value, transforms to the result of function*/
  def mapAllowedTopologies(f: Seq[io.k8s.api.core.v1.TopologySelectorTerm] => Seq[io.k8s.api.core.v1.TopologySelectorTerm]) : StorageClass = copy(allowedTopologies = allowedTopologies.map(f))

  /** Returns a new data with parameters set to new value */
  def withParameters(value: Map[String, String]) : StorageClass = copy(parameters = Some(value))
  /** Adds new values to parameters */
  def addParameters(newValues: (String, String)*) : StorageClass = copy(parameters = Some(parameters.fold(newValues.toMap)(_ ++ newValues)))
  /** if parameters has a value, transforms to the result of function*/
  def mapParameters(f: Map[String, String] => Map[String, String]) : StorageClass = copy(parameters = parameters.map(f))

  override def foldTo[T : Builder] : T = StorageClass.encoder.apply(this)
}

object StorageClass {

    implicit val encoder : Encoder[io.k8s.api.storage.v1.StorageClass] = new Encoder[io.k8s.api.storage.v1.StorageClass] {
        def apply[T : Builder](o: io.k8s.api.storage.v1.StorageClass) : T = {
          val obj = ObjectWriter[T]()
          obj
            .write("provisioner", o.provisioner)
            .write("mountOptions", o.mountOptions)
            .write("reclaimPolicy", o.reclaimPolicy)
            .write("volumeBindingMode", o.volumeBindingMode)
            .write("metadata", o.metadata)
            .write("allowVolumeExpansion", o.allowVolumeExpansion)
            .write("allowedTopologies", o.allowedTopologies)
            .write("parameters", o.parameters)
            .write("kind", o.kind)
            .write("apiVersion", o.apiVersion)
            .build
        }
    }

    implicit val decoder: Decoder[StorageClass] = new Decoder[StorageClass] {
      def apply[T : Reader](t: T): Either[String, StorageClass] = for {
          obj <- ObjectReader(t)
          provisioner <- obj.read[String]("provisioner")
          mountOptions <- obj.readOpt[Seq[String]]("mountOptions")
          reclaimPolicy <- obj.readOpt[String]("reclaimPolicy")
          volumeBindingMode <- obj.readOpt[String]("volumeBindingMode")
          metadata <- obj.readOpt[io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta]("metadata")
          allowVolumeExpansion <- obj.readOpt[Boolean]("allowVolumeExpansion")
          allowedTopologies <- obj.readOpt[Seq[io.k8s.api.core.v1.TopologySelectorTerm]]("allowedTopologies")
          parameters <- obj.readOpt[Map[String, String]]("parameters")
      } yield StorageClass (
          provisioner = provisioner,
          mountOptions = mountOptions,
          reclaimPolicy = reclaimPolicy,
          volumeBindingMode = volumeBindingMode,
          metadata = metadata,
          allowVolumeExpansion = allowVolumeExpansion,
          allowedTopologies = allowedTopologies,
          parameters = parameters
        )
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy