pyinfra/tasks/docker.py

64 lines
1.7 KiB
Python
Raw Normal View History

2025-02-08 14:19:45 +01:00
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,
)