pyinfra/tasks/docker.py

63 lines
1.7 KiB
Python

from pyinfra import host
from pyinfra.api import deploy
from pyinfra.facts.files import File
from pyinfra.facts.server import Command
from pyinfra.facts.server import LsbRelease
from pyinfra.operations import apt
from pyinfra.operations import server
DOCKER_REPO_KEY_PATH = "/usr/share/keyrings/docker-official-repo.gpg"
@deploy("Setup docker repository")
def setup_repository():
lsb = host.get_fact(LsbRelease)
dpkg_arch = host.get_fact(Command, command="dpkg --print-architecture")
if not host.get_fact(File, path=DOCKER_REPO_KEY_PATH):
server.shell(
name="Download docker repository gpg key",
commands=[
"curl -fsSL https://download.docker.com/linux/debian/gpg "
f"| gpg --dearmor | tee {DOCKER_REPO_KEY_PATH} >/dev/null 2>&1",
],
)
repo_changed = apt.repo(
name="Add official docker repository",
src=f"deb [arch={dpkg_arch} signed-by={
DOCKER_REPO_KEY_PATH
}] https://download.docker.com/linux/debian {lsb["codename"]} stable",
filename="docker",
).changed
if repo_changed:
apt.update(
name="Update repositories after adding docker",
)
@deploy("Deploy Docker")
def deploy_docker():
apt.packages(
name="Install packages required by Docker",
packages=[
"apt-transport-https",
"ca-certificates",
"curl",
"gnupg-agent",
"software-properties-common",
],
)
setup_repository()
apt.packages(
name="Install docker packages",
packages=[
"docker-ce",
"docker-ce-cli",
"docker-ce-rootless-extras",
],
update=True,
)