Packages
nerves
1.10.1
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.0
1.11.3
1.11.2
1.11.1
1.11.0
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.3
1.9.2
retired
1.9.1
1.9.0
1.8.0
1.7.17
1.7.16
1.7.15
1.7.14
retired
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
retired
1.7.1
retired
1.7.0
retired
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.11.0
0.10.1
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-rc.0
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
Craft and deploy bulletproof embedded software
Current section
Files
Jump to
Current section
Files
lib/nerves/artifact/build_runners/docker/volume.ex
defmodule Nerves.Artifact.BuildRunners.Docker.Volume do
@moduledoc false
import Nerves.Artifact.BuildRunners.Docker.Utils
alias Nerves.Artifact
@spec name(Nerves.Package.t()) :: String.t()
def name(pkg) do
"#{pkg.app}-#{id(pkg)}"
end
@spec id(Nerves.Package.t()) :: String.t()
def id(pkg) do
id_file = id_file(pkg)
if File.exists?(id_file) do
File.read!(id_file)
else
create_id(pkg)
id(pkg)
end
end
defp id_file(pkg) do
Artifact.build_path(pkg)
|> Path.join(".docker_id")
end
defp create_id(pkg) do
id_file = id_file(pkg)
id = Nerves.Utils.random_alpha_num(16)
Path.dirname(id_file)
|> File.mkdir_p!()
File.write!(id_file, id)
end
@spec delete(String.t()) :: :ok
def delete(volume_name) do
shell_info("Deleting build volume #{volume_name}")
args = ["volume", "rm", volume_name]
case Mix.Nerves.Utils.shell("docker", args) do
{_result, 0} ->
:ok
{_result, _} ->
Mix.raise("""
Nerves Docker build_runner encountered an error while deleting volume #{volume_name}
""")
end
end
@spec exists?(String.t()) :: boolean()
def exists?(volume_name) do
cmd = "docker"
args = ["volume", "ls", "-f", "name=#{volume_name}", "-q"]
case Nerves.Port.cmd(cmd, args, stderr_to_stdout: true) do
{<<^volume_name, _tail::binary>>, 0} ->
true
{<<"Cannot connect to the Docker daemon", _tail::binary>>, _} ->
Mix.raise("Nerves Docker build_runner is unable to connect to docker daemon")
_ ->
false
end
end
@spec create(String.t()) :: :noop
def create(volume_name) do
cmd = "docker"
args = ["volume", "create", "--name", volume_name]
case Nerves.Port.cmd(cmd, args) do
{_, 0} -> :noop
_ -> Mix.raise("Nerves Docker build_runner could not create docker volume #{volume_name}")
end
end
end