Skip to content

Commit

Permalink
Add instance wait times to cluster
Browse files Browse the repository at this point in the history
  • Loading branch information
zacksiri committed Jul 4, 2024
1 parent dd67e35 commit c932de3
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 4 deletions.
4 changes: 4 additions & 0 deletions lib/polar/machines/cluster.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ defmodule Polar.Machines.Cluster do
field :credential_password_confirmation, :string, virtual: true
field :credential, Polar.Encrypted.Map

embeds_many :instance_wait_times, __MODULE__.WaitTime, on_replace: :delete

timestamps(type: :utc_datetime_usec)
end

Expand All @@ -51,12 +53,14 @@ defmodule Polar.Machines.Cluster do
|> validate_required(@required_attrs)
|> validate_inclusion(:type, ["lxd", "incus"])
|> validate_inclusion(:arch, ["amd64", "arm64"])
|> cast_embed(:instance_wait_times)
|> process_credential()
end

def update_changeset(cluster, attrs) do
cluster
|> cast(attrs, [:credential_endpoint])
|> cast_embed(:instance_wait_times)
|> maybe_update_credential()
end

Expand Down
18 changes: 18 additions & 0 deletions lib/polar/machines/cluster/wait_time.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
defmodule Polar.Machines.Cluster.WaitTime do
use Ecto.Schema
import Ecto.Changeset

@derive Jason.Encoder

@primary_key false
embedded_schema do
field :type, :string
field :duration, :integer
end

def changeset(wait_time, params) do
wait_time
|> cast(params, [:type, :duration])
|> validate_inclusion(:type, ["container", "vm"])
end
end
3 changes: 2 additions & 1 deletion lib/polar_web/controllers/publish/testing/cluster_json.ex
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ defmodule PolarWeb.Publish.Testing.ClusterJSON do
type: cluster.type,
arch: cluster.arch,
credential: cluster.credential,
current_state: cluster.current_state
current_state: cluster.current_state,
instance_wait_times: cluster.instance_wait_times
}
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule Polar.Repo.Migrations.AddInstanceWaitTimeToClusters do
use Ecto.Migration

def change do
alter table(:clusters) do
add :instance_wait_times, {:array, :map}, default: []
end
end
end
8 changes: 7 additions & 1 deletion test/polar/machines/cluster/manager_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@ defmodule Polar.Machines.Cluster.ManagerTest do
arch: "amd64",
credential_endpoint: "some.cluster.com:8443",
credential_password: "sometoken",
credential_password_confirmation: "sometoken"
credential_password_confirmation: "sometoken",
instance_wait_times: [
%{type: "vm", duration: 10_000},
%{type: "container", duration: 5_000}
]
})

assert %Machines.Cluster.Credential{private_key: _private_key, certificate: _certificate} =
cluster.credential

assert Enum.count(cluster.instance_wait_times) == 2
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ defmodule PolarWeb.Publish.Testing.ClusterControllerTest do
arch: "amd64",
credential_endpoint: "some.cluster.com:8443",
credential_password: "sometoken",
credential_password_confirmation: "sometoken"
credential_password_confirmation: "sometoken",
instance_wait_times: [
%{type: "vm", duration: 10_000},
%{type: "container", duration: 5_000}
]
})

{:ok, _created_cluster} =
Expand All @@ -38,7 +42,11 @@ defmodule PolarWeb.Publish.Testing.ClusterControllerTest do
arch: "amd64",
credential_endpoint: "some.cluster.com:8443",
credential_password: "sometoken",
credential_password_confirmation: "sometoken"
credential_password_confirmation: "sometoken",
instance_wait_times: [
%{type: "vm", duration: 10_000},
%{type: "container", duration: 5_000}
]
})

{:ok, conn: conn, cluster: cluster, user: user}
Expand All @@ -62,6 +70,12 @@ defmodule PolarWeb.Publish.Testing.ClusterControllerTest do
assert %{"data" => data} = json_response(conn, 200)

assert cluster.id in Enum.map(data, & &1["id"])

cluster = List.first(data)

assert %{"instance_wait_times" => instance_wait_times} = cluster

assert Enum.count(instance_wait_times) == 2
end
end
end

0 comments on commit c932de3

Please sign in to comment.