lib/lexdee.ex

defmodule Lexdee do
  @moduledoc """
  Documentation for Lexdee.
  """

  @doc """
  Hello world.

  ## Examples

      iex> Lexdee.hello()
      :world

  """
  alias Lexdee.Client

  defdelegate create_client(base_url, cert \\ nil, key \\ nil, options \\ []),
    to: Client,
    as: :new

  alias Lexdee.Resources

  defdelegate show_resources(client, node \\ nil), to: Resources, as: :show

  alias Lexdee.Metrics

  defdelegate list_metrics(client, options \\ []), to: Metrics, as: :index

  alias Lexdee.Projects

  defdelegate list_projects(client, opts \\ []), to: Projects, as: :index
  defdelegate get_project(client, id), to: Projects, as: :show
  defdelegate create_project(client, params), to: Projects, as: :create

  defdelegate update_project(client, id, params, opts \\ []),
    to: Projects,
    as: :update

  alias Lexdee.Profiles

  defdelegate list_profiles(client, opts \\ []), to: Profiles, as: :index
  defdelegate get_profile(client, id), to: Profiles, as: :show
  defdelegate update_profile(client, id, params), to: Profiles, as: :update
  defdelegate create_profile(client, params), to: Profiles, as: :create

  alias Lexdee.Certificates

  defdelegate list_certificates(client), to: Certificates, as: :index
  defdelegate get_certificate(client, id), to: Certificates, as: :show
  defdelegate create_certificate(client, params), to: Certificates, as: :create

  defdelegate update_certificate(client, id, params),
    to: Certificates,
    as: :update

  alias Lexdee.Cluster

  defdelegate get_cluster(client), to: Cluster, as: :show

  alias Cluster.Members

  defdelegate list_cluster_members(client, opts \\ []), to: Members, as: :index
  defdelegate get_cluster_member(client, id), to: Members, as: :show

  alias Lexdee.Instances

  defdelegate execute_command(client, id, commands, opts \\ []),
    to: Instances.Exec,
    as: :perform

  defdelegate list_instances(client, options \\ []), to: Instances, as: :index
  defdelegate get_instance(client, id, options \\ []), to: Instances, as: :show

  defdelegate delete_instance(client, id, opts \\ []),
    to: Instances,
    as: :remove

  defdelegate create_instance(client, params, opts \\ []),
    to: Instances,
    as: :create

  defdelegate update_instance(client, id, params, opts \\ []),
    to: Instances,
    as: :update

  defdelegate show_instance_log(client, instance, file_name, opts \\ []),
    to: Instances.Logs,
    as: :show

  defdelegate get_state(client, id, options \\ []),
    to: Instances.State,
    as: :show

  defdelegate start_instance(client, id, options \\ []),
    to: Instances.State,
    as: :start

  defdelegate stop_instance(client, id, options \\ []),
    to: Instances.State,
    as: :stop

  defdelegate restart_instance(client, id, options \\ []),
    to: Instances.State,
    as: :restart

  defdelegate create_file(client, id, path, content, options \\ []),
    to: Instances.Files,
    as: :create

  alias Lexdee.Operations

  defdelegate get_operation(client, id), to: Operations, as: :show

  defdelegate wait_for_operation(client, id, options \\ []),
    to: Operations,
    as: :wait

  alias Lexdee.Networks

  defdelegate list_networks(client, options \\ []),
    to: Networks,
    as: :index

  defdelegate list_network_leases(client, id, options \\ []),
    to: Networks.Leases,
    as: :index

  alias Lexdee.Images

  defdelegate delete_image(client, fingerprint, options \\ []),
    to: Images,
    as: :remove
end