Packages
livebook
0.18.2
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/teams/deployment_group.ex
defmodule Livebook.Teams.DeploymentGroup do
use Ecto.Schema
import Ecto.Changeset
alias Livebook.Secrets
alias Livebook.Teams
@type t :: %__MODULE__{
id: String.t() | nil,
name: String.t() | nil,
url: String.t() | nil,
mode: :online | :offline,
clustering: :auto | :dns | nil,
hub_id: String.t() | nil,
teams_auth: boolean(),
groups_auth: boolean(),
authorization_groups: Ecto.Schema.embeds_many(Teams.AuthorizationGroup.t()),
deployment_users: Ecto.Schema.embeds_many(Teams.DeploymentUser.t()),
secrets: Ecto.Schema.has_many(Secrets.Secret.t()),
agent_keys: Ecto.Schema.has_many(Teams.AgentKey.t()),
environment_variables: Ecto.Schema.has_many(Teams.EnvironmentVariable.t())
}
@primary_key {:id, :string, autogenerate: false}
embedded_schema do
field :name, :string
field :mode, Ecto.Enum, values: [:online, :offline], default: :online
field :hub_id, :string
field :clustering, Ecto.Enum, values: [:auto, :dns]
field :url, :string
field :teams_auth, :boolean, default: true
field :groups_auth, :boolean, default: false
field :deploy_auth, :boolean, default: false
has_many :secrets, Secrets.Secret
has_many :agent_keys, Teams.AgentKey
has_many :environment_variables, Teams.EnvironmentVariable
embeds_many :authorization_groups, Teams.AuthorizationGroup
embeds_many :deployment_users, Teams.DeploymentUser
end
def changeset(deployment_group, attrs \\ %{}) do
deployment_group
|> cast(attrs, [:id, :name, :mode, :hub_id, :clustering, :url])
|> validate_required([:name, :mode])
|> update_change(:url, fn url ->
if url do
String.trim_trailing(url, "/")
end
end)
|> validate_change(:url, fn :url, url ->
case URI.new(url) do
{:ok, uri} ->
cond do
uri.scheme not in ["http", "https"] ->
[url: ~s(must start with "http://" or "https://")]
uri.host in ["", nil] ->
[url: "must be a well-formed URL"]
true ->
[]
end
{:error, _} ->
[url: "must be a well-formed URL"]
end
end)
end
def url_without_scheme(%__MODULE__{url: url} = _deployment_group) do
case url do
"http://" <> url -> url
"https://" <> url -> url
url -> url
end
end
end