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

pt.tecnico.dsi.openstack.nova.models.Quota.scala Maven / Gradle / Ivy

package pt.tecnico.dsi.openstack.nova.models

import cats.derived.derived
import cats.derived.ShowPretty
import io.circe.derivation.{ConfiguredCodec, ConfiguredEncoder}
import io.circe.{Codec, Encoder}
import squants.information.Information
import squants.information.InformationConversions.*

object Quota:
  final case class Create(
    instances: Option[Int] = None,
    cores: Option[Int] = None,
    ram: Option[Information] = None,
    keyPairs: Option[Int] = None,
    metadataItems: Option[Int] = None,
    serverGroups: Option[Int] = None,
    serverGroupMembers: Option[Int] = None,
  ) derives ConfiguredEncoder, ShowPretty
  
  object Update:
    val zero: Update = Update(
      instances = Some(0),
      cores = Some(0),
      ram = Some(0.bytes),
      keyPairs = Some(0),
      metadataItems = Some(0),
      serverGroups = Some(0),
      serverGroupMembers = Some(0),
    )
  final case class Update(
    instances: Option[Int] = None,
    cores: Option[Int] = None,
    ram: Option[Information] = None,
    keyPairs: Option[Int] = None,
    metadataItems: Option[Int] = None,
    serverGroups: Option[Int] = None,
    serverGroupMembers: Option[Int] = None,
  ) derives ConfiguredEncoder, ShowPretty:
    lazy val needsUpdate: Boolean =
      // We could implement this with the next line, but that implementation is less reliable if the fields of this class change
      //  productIterator.asInstanceOf[Iterator[Option[Any]]].exists(_.isDefined)
      List(instances, cores, ram, keyPairs, metadataItems, serverGroups, serverGroupMembers).exists(_.isDefined)
  
  val zero: Quota = Quota(0, 0, 0.gibibytes, 0, 0, 0, 0)
/**
 * A value of -1 means no limit.
 * @param cores number of allowed server cores for each project.
 * @param instances number of allowed servers for each project.
 * @param keyPairs number of allowed key pairs for each user.
 * @param metadataItems number of allowed metadata items for each server.
 * @param ram amount of allowed server RAM, in MiB, for each project.
 * @param serverGroups number of server groups that are allowed for each project.
 * @param serverGroupMembers number of allowed members for each server group.
 */
final case class Quota(
  instances: Int,
  cores: Int,
  ram: Information,
  keyPairs: Int,
  metadataItems: Int,
  serverGroups: Int,
  serverGroupMembers: Int,
) derives ConfiguredCodec, ShowPretty




© 2015 - 2025 Weber Informatics LLC | Privacy Policy