Packages

Elixir client for the Docker Remote API.

Current section

Files

Jump to
docker lib names.ex
Raw

lib/names.ex

defmodule Docker.Names do
@default_registry "index.docker.io"
@doc """
Sanitizes a name for use with Docker.
Docker doesn't support / in names, so convert them to underscores.
## Examples
iex> Docker.Names.container_safe("foo")
"foo"
iex> Docker.Names.container_safe("foo/bar/bacon")
"foo_bar_bacon"
iex> Docker.Names.container_safe("foo_bar")
"foo_bar"
"""
def container_safe("/" <> name), do: "/" <> String.replace(name, "/", "_")
def container_safe(name), do: String.replace(name, "/", "_")
@doc """
Ensures a name is prefixed with a "/" for matching against Docker's API.
"""
def api(name = "/" <> _), do: name
def api(name), do: "/" <> name
@doc """
Returns the tag of a Docker image given its name.
## Examples
iex> Docker.Names.extract_tag("foo")
"latest"
iex > Docker.Names.extract_tag("foo:bar")
"bar"
iex > Docker.Names.extract_tag("foo/bar:bacon")
"bacon"
"""
def extract_tag([_image | []]), do: "latest"
def extract_tag([_image | [tag]]), do: tag
def extract_tag(image), do: image |> String.split(":") |> extract_tag
@doc """
Divides an image name into a tuple of {registry, repo, image}.
## Examples
iex> Docker.Names.split_image("quay.io/wildcard/rabbitmq")
{"quay.io", "wildcard", "rabbitmq"}
iex> Docker.Names.split_image("dockerfile/rabbitmq")
{"index.docker.io", "dockerfile", "rabbitmq"}
iex> Docker.Names.split_image("ubuntu")
{"index.docker.io", "_", "ubuntu"}
"""
def split_image([name]), do: {@default_registry, "_", name}
def split_image([repo, name]), do: {@default_registry, repo, name}
def split_image([registry, repo, name]), do: {registry, repo, name}
def split_image(image), do: image |> String.split("/") |> split_image
end