looks like everything is working

This commit is contained in:
Jakub Kropáček 2025-02-08 14:19:45 +01:00
parent 75cb543ded
commit ba61a1e3ed
9 changed files with 100 additions and 39 deletions

View file

@ -4,6 +4,7 @@ servers = [
"ssh_user": "root",
"web_server": True,
"tailscale": True,
"docker": True,
},
),
@ -12,6 +13,7 @@ servers = [
"ssh_user": "root",
"web_server": True,
"tailscale": True,
"docker": True,
},
),
]
@ -19,6 +21,8 @@ servers = [
kropcloud = [
(
"k3s-node0", {
"ssh_user": "root",
"ssh_hostname": "192.168.1.190",
"tailscale": False,
"k3s": {
"role": "master",
@ -28,6 +32,20 @@ kropcloud = [
),
(
"k3s-node1", {
"ssh_user": "root",
"ssh_hostname": "192.168.1.191",
"tailscale": False,
"k3s": {
"role": "worker",
"master": "192.168.1.190",
"token": "1mN0tv3r1!s3cur3Bu1?T3s0Nl#",
},
},
),
(
"k3s-node2", {
"ssh_user": "root",
"ssh_hostname": "192.168.1.192",
"tailscale": False,
"k3s": {
"role": "worker",
@ -38,6 +56,8 @@ kropcloud = [
),
(
"k3s-nfs", {
"ssh_user": "root",
"ssh_hostname": "192.168.1.195",
"tailscale": False,
"nfs": {
"exports": [

View file

@ -1,10 +1,11 @@
from pyinfra import host
from pyinfra.operations import apt
from pyinfra_docker import deploy_docker
from tasks.k3s import setup_k3s
from tasks.docker import deploy_docker
from tasks.k3s import deploy_k3s
from tasks.nfs import deploy_nfs
from tasks.ssh import setup_ssh
from tasks.tailscale import deploy_tailscale
from tasks.tailscale import setup_tailscale
apt.packages(
name="Update and upgrade server",
@ -20,21 +21,13 @@ apt.packages(
setup_ssh()
if host.data.get("docker"):
apt.packages(
name="Install packages required by Docker",
packages=[
"apt-transport-https",
"ca-certificates",
"curl",
"gnupg-agent",
"software-properties-common",
],
)
deploy_docker()
if host.data.get("tailscale"):
deploy_tailscale()
setup_tailscale()
if host.data.get("k3s"):
setup_k3s()
deploy_k3s()
if host.data.get("nfs"):
deploy_nfs()

View file

@ -6,7 +6,6 @@ readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"pyinfra>=3.2",
"pyinfra-docker>=1.0",
"python-on-whales>=0.75.1",
]

63
tasks/docker.py Normal file
View file

@ -0,0 +1,63 @@
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,
)

View file

@ -5,8 +5,8 @@ from pyinfra.operations import files as files_op
from pyinfra.operations import server
IS_CREATED_FILE = "/pyinfra/.k3s-init-completed"
@deploy
def setup_k3s():
@deploy("Deploy K3S")
def deploy_k3s():
k3s_config = host.data.get("k3s")
if not k3s_config:

View file

@ -6,10 +6,10 @@ from pyinfra.operations import files as files_op
from pyinfra.operations import server
def generate_line(config: dict[str, str]) -> str:
return f"{config.get('directory')} {config.get('ip')}{','.join(config.get('flags'))}"
return f"{config.get('directory')} {config.get('ip')}({','.join(config.get('flags'))})"
@deploy
def setup_nfs():
@deploy("Deploy NFS")
def deploy_nfs():
nfs_config = host.data.get("nfs")
for export in nfs_config.get("exports"):

View file

@ -38,7 +38,7 @@ def reconfigure_ssh():
)
@deploy
@deploy("Setup SSH")
def setup_ssh():
deploy_ssh_keys()
reconfigure_ssh()

View file

@ -5,8 +5,8 @@ from pyinfra.operations import apt
from pyinfra.operations import server
@deploy
def deploy_tailscale():
@deploy("Setup Tailscale")
def setup_tailscale():
if not host.get_fact(File, "/usr/share/keyrings/tailscale-archive-keyring.gpg"):
server.shell(
name="Install tailscale signing key",

14
uv.lock
View file

@ -304,7 +304,6 @@ version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "pyinfra" },
{ name = "pyinfra-docker" },
{ name = "python-on-whales" },
]
@ -316,7 +315,6 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "pyinfra", specifier = ">=3.2" },
{ name = "pyinfra-docker", specifier = ">=1.0" },
{ name = "python-on-whales", specifier = ">=0.75.1" },
]
@ -501,18 +499,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/83/b0/a27ce89ec525e71180b0afa1069fb83886381c834c009d07802616af9b6e/pyinfra-3.2-py2.py3-none-any.whl", hash = "sha256:ca8e6f4b51031b3b56b4ab6e7ce4cb749530ec92d6ba22f1f2657e2d20231416", size = 269680 },
]
[[package]]
name = "pyinfra-docker"
version = "1.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pyinfra" },
]
sdist = { url = "https://files.pythonhosted.org/packages/40/89/ccb7dc101941aec9e0f782a501a56383f575dec906467283960a77fed3de/pyinfra-docker-1.0.tar.gz", hash = "sha256:0debd945ee8a234b458253bc03a63ca54ad10b57271e6d65836a853ee637c72f", size = 2562 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e4/35/24d6699120454080afaf79cbb11afd7d50321e4d25f29a61fad2ea17f11d/pyinfra_docker-1.0-py2.py3-none-any.whl", hash = "sha256:1b9d97a63a1cf3875ca831914d0a70ff53d8dc9591f5278e06b2114276ab71df", size = 3825 },
]
[[package]]
name = "pynacl"
version = "1.5.0"