Dagger (dagger v0.19.4)
View SourceThe Dagger SDK for Elixir.
Prerequisite
The SDK depends on docker and dagger commands, please make sure those
commands are presents on your PATH.
Getting Started
Let's try this script below
Mix.install([:dagger])
# 1
Application.ensure_all_started(:inets)
# 2
{:ok, client} = Dagger.connect()
# 3
{:ok, output} =
client
|> Dagger.Client.container()
|> Dagger.Container.from("hexpm/elixir:1.14.4-erlang-25.3-debian-buster-20230227-slim")
|> Dagger.Container.with_exec(["elixir", "--version"])
|> Dagger.Container.stdout()
IO.puts(output)
# 4
Dagger.close(client)Here's what script do:
- Start
:inetsapplication in order to use:httpcas a HTTP client. - Connecting to the Dagger Engine with
Dagger.connect/1. - Create a new container from
hexpm/elixir:1.14.4-erlang-25.3-debian-buster-20230227-slimand calling a commandelixirwith flag--version, get the standard output from latest command and printing it to standard output. - Close the connection.
Accessing GraphQL API
In case you want to execute GraphQL directly, the SDK provides Dagger.Core.Client,
the client interface to the Dagger engine. The module provides 2 APIs for you:
Dagger.Core.Client.query/2- to execute a GraphQL query to the Dagger engine.Dagger.Core.Client.execute/2- to execute a GraphQL query that produces byDagger.Core.QueryBuilder.
By default, every object types (Dagger.Container, Dagger.Directory, etc.) has
a field client which is an instance of Dagger.Core.Client, you can use that instance
from the object type without initialize connection by yourself.
Please note that this API is an internal API, it may break from version to version. So please use with cautions.
GraphQL Client adapter
The SDK ship using Erlang :httpc as a backend by default. You can switch to Req by
add :req as a dependency and configure HTTP client by adding this line below to your
config/config.exs:
config :dagger, client: Dagger.Core.GraphQLClient.ReqModule support
The SDK also support Dagger Module, please see Dagger.Mod.Object for more
details.
Summary
Functions
Disconnecting the client from Dagger Engine session.
Connecting to Dagger.
When calling this function, it try to connect in order:
- Use session from
DAGGER_SESSION_PORTandDAGGER_SESSION_TOKENshell environment variables. - If (1) doesn't specified, it will lookup a binary defined in
_EXPERIMENTAL_DAGGER_CLI_BINand start a session. - Download the latest binary from Dagger and start a session.
Options
:workdir(String.t/0) - Sets the engine workdir.:log_output- The log device to write the progress. The default value is:stderr.:connect_timeout(timeout/0) - Sets timeout when connect to the engine. The default value is10000.:query_timeout(timeout/0) - Sets timeout when executing a query. The default value is:infinity.
Similar to connect/1 but raise exception when found an error.
Connect to Dagger Engine and close connection automatically after fun executed.
See connect/1 for available options.