Packages
livebook
0.15.1
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook/k8s/pvc.ex
defmodule Livebook.K8s.PVC do
use Ecto.Schema
import Ecto.Changeset
@type t :: %__MODULE__{
name: String.t(),
size_gb: integer(),
access_mode: String.t(),
storage_class: String.t()
}
@primary_key false
embedded_schema do
field :name, :string
field :size_gb, :integer
field :access_mode, :string, default: "ReadWriteOnce"
field :storage_class, :string, default: nil
end
@fields ~w(name size_gb access_mode storage_class)a
@required ~w(name size_gb access_mode)a
@doc """
Build a PVC changeset for the given `attrs`.
"""
@spec changeset(map()) :: Ecto.Changeset.t()
def changeset(attrs \\ %{}) do
%__MODULE__{}
|> cast(attrs, @fields)
|> validate_required(@required)
end
@doc """
Build PVC manifest for the given `pvc` and `namespace` to be applied to a
cluster.
"""
@spec manifest(pvc :: t(), namespace: String.t()) :: manifest :: map()
def manifest(pvc, namespace) do
%{
"apiVersion" => "v1",
"kind" => "PersistentVolumeClaim",
"metadata" => %{
"name" => pvc.name,
"namespace" => namespace
},
"spec" => %{
"storageClassName" => pvc.storage_class,
"accessModes" => [pvc.access_mode],
"resources" => %{
"requests" => %{
"storage" => "#{pvc.size_gb}Gi"
}
}
}
}
end
end