looks like everything is working
This commit is contained in:
parent
75cb543ded
commit
ba61a1e3ed
9 changed files with 100 additions and 39 deletions
20
inventory.py
20
inventory.py
|
@ -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": [
|
||||
|
|
25
provision.py
25
provision.py
|
@ -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()
|
||||
|
|
|
@ -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
63
tasks/docker.py
Normal 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,
|
||||
)
|
|
@ -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:
|
||||
|
|
|
@ -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"):
|
||||
|
|
|
@ -38,7 +38,7 @@ def reconfigure_ssh():
|
|||
)
|
||||
|
||||
|
||||
@deploy
|
||||
@deploy("Setup SSH")
|
||||
def setup_ssh():
|
||||
deploy_ssh_keys()
|
||||
reconfigure_ssh()
|
||||
|
|
|
@ -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
14
uv.lock
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue