Packages
nerves
1.0.0
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
alias Nerves.Artifact
alias Nerves.Artifact.BuildRunners.Docker
import Docker.Utils
def name(pkg) do
if id = id(pkg) do
"#{pkg.app}-#{id}"
end
end
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
def id_file(pkg) do
Artifact.build_path(pkg)
|> Path.join(".docker_id")
end
def 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
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
def exists?(volume_name) do
cmd = "docker"
args = ["volume", "ls", "-f", "name=#{volume_name}", "-q"]
case System.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
def create(volume_name) do
cmd = "docker"
args = ["volume", "create", "--name", volume_name]
case System.cmd(cmd, args) do
{_, 0} -> :noop
_ -> Mix.raise("Nerves Docker build_runner could not create docker volume #{volume_name}")
end
end
end