Current section
Files
Jump to
Current section
Files
lib/ex_incus/projects.ex
defmodule ExIncus.Projects do
@moduledoc """
Manage projects.
Projects partition instances, images, networks etc. Scope a client to a
project with `ExIncus.Client.new(project: "myproject")` or per call with
the `project:` option.
"""
alias ExIncus.{Client, Error, Resource}
@base "/1.0/projects"
@type result :: {:ok, term()} | {:error, Error.t()}
@doc "Lists projects (full objects by default)."
@spec list(Client.t(), keyword()) :: result()
def list(client, opts \\ []), do: Resource.list(client, @base, opts)
@doc "Fetches a single project."
@spec get(Client.t(), String.t(), keyword()) :: result()
def get(client, name, opts \\ []), do: Resource.get(client, @base, name, opts)
@doc "Creates a project from a `ProjectsPost` params map (needs `\"name\"`)."
@spec create(Client.t(), map(), keyword()) :: result()
def create(client, params, opts \\ []), do: Resource.create(client, @base, params, opts)
@doc "Replaces the project configuration (`PUT`)."
@spec update(Client.t(), String.t(), map(), keyword()) :: result()
def update(client, name, params, opts \\ []),
do: Resource.update(client, @base, name, params, opts)
@doc "Partially updates the project configuration (`PATCH`)."
@spec patch(Client.t(), String.t(), map(), keyword()) :: result()
def patch(client, name, params, opts \\ []),
do: Resource.patch(client, @base, name, params, opts)
@doc "Renames a project."
@spec rename(Client.t(), String.t(), String.t(), keyword()) :: result()
def rename(client, name, new_name, opts \\ []),
do: Resource.rename(client, @base, name, new_name, opts)
@doc "Deletes a project."
@spec delete(Client.t(), String.t(), keyword()) :: result()
def delete(client, name, opts \\ []), do: Resource.delete(client, @base, name, opts)
end