64 lines
1.7 KiB
Python
64 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,
|
||
|
)
|