Compare commits

...

2 Commits

Author SHA1 Message Date
Luna 93e11c515f add tasks/piped.py 2023-08-20 16:53:22 -03:00
Luna da5a86620e update 2023-08-20 16:53:16 -03:00
4 changed files with 120 additions and 9 deletions

View File

@ -1,3 +1,4 @@
from pathlib import Path
from packaging import version
from pyinfra.operations import apk, server, files
from pyinfra.facts.server import LinuxName
@ -7,9 +8,14 @@ from pyinfra import host
CROC_ALPINE_VERSION = version.parse("3.14")
@deploy("install croc")
@deploy(
"install croc",
data_defaults={
"croc_install_directory": "/opt/croc",
"croc_bin_directory": "/usr/bin",
},
)
def install_croc():
# alpine provides croc in-repo as of 3.14
if host.get_fact(LinuxName) == "Alpine":
host_alpine_version = version.parse(host.data.alpine_version)
@ -18,11 +24,15 @@ def install_croc():
return
# for everyone else, install manually
files.directory("/opt/croc")
files.download(
croc_dir = Path(host.data.croc_install_directory)
target_dir = host.data.croc_bin_directory
files.directory(str(croc_dir))
files.directory(target_dir)
result = files.download(
"https://github.com/schollz/croc/releases/download/v9.6.3/croc_9.6.3_Linux-64bit.tar.gz",
"/opt/croc/croc.tar.gz",
str(croc_dir / "croc.tar.gz"),
md5sum="5550b0bfb50d0541cba790562c180bd7",
)
server.shell("tar xvf /opt/croc/croc.tar.gz", _chdir="/opt/croc")
server.shell("mv /opt/croc/croc /usr/bin/croc", _chdir="/opt/croc")
if result.changed:
server.shell(f"tar xvf {croc_dir}/croc.tar.gz", _chdir=str(croc_dir))
server.shell(f"mv {croc_dir}/croc {target_dir}/croc", _chdir=str(croc_dir))

View File

@ -29,6 +29,7 @@ class GitFetch(FactBase):
class GitRevListComparison(FactBase):
def command(self, repo: str, branch: str):
assert branch
return f"git -C {repo} rev-list HEAD..origin/{branch} | wc -l"
def process(self, output):
@ -122,7 +123,7 @@ def repo(
# always fetch upstream branches (that way we can compare if the latest
# commit has changed, and then we don't need to execute anything!)
host.get_fact(GitFetch, repo=dest)
stdout = host.get_fact(GitRevListComparison, repo=dest, branch=branch)
stdout = host.get_fact(GitRevListComparison, repo=dest, branch=current_branch)
repository_has_updates = stdout[0] != "0"
# since we immediately always fetch, we will always be modifying the

100
tasks/piped.py Normal file
View File

@ -0,0 +1,100 @@
from pyinfra import host
from pyinfra.api import deploy
from pyinfra.operations import files, server, dnf, postgresql, lxd
from pyinfra.facts.server import Which
from pyinfra.facts.lxd import LxdContainers
from .operations.git import repo
from .postgresql import install as install_postgresql
from .pleroma import WithSecrets
from .install_consul_server import template_and_install_systemd
from .yts import lxc_shell
@deploy(
"create lxc container that'll run piped",
data_defaults={"piped_container_name": "piped"},
)
def install_lxc_container():
containers = host.get_fact(LxdContainers)
ct_name = host.data.piped_container_name
found_piped_container = False
for container in containers:
if container["name"] == ct_name:
found_piped_container = True
if not found_piped_container:
lxd.container(
name="create piped container",
id=ct_name,
image="images:fedora/38",
)
# validate the ct is good
lxc_shell(ct_name, "env")
@deploy("install piped backend")
def install():
install_postgresql()
dnf.packages(
[
"java-17-openjdk-headless",
]
)
with_secrets = WithSecrets(("piped_db_password",))
# TODO remove copypaste of this between piped and pleroma
has_postgres = host.get_fact(Which, command="psql")
postgres_kwargs = {}
if has_postgres:
postgres_kwargs = {"_sudo": True, "_sudo_user": "postgres"}
postgresql.role(
role=host.data.piped_db_user,
password=with_secrets.piped_db_password,
login=True,
**postgres_kwargs,
)
postgresql.database(
database=host.data.piped_db_name,
owner=host.data.piped_db_user,
encoding="UTF8",
**postgres_kwargs,
)
runner_user = "piped"
remote_main_home_path = f"/opt/piped"
# we really dont need to build the whole thing
# just croc the jar file manually
server.group(runner_user)
server.user(
user=runner_user,
present=True,
home=remote_main_home_path,
shell="/bin/false",
group=runner_user,
ensure_home=True,
)
config_output = files.template(
"./files/piped/config.properties",
dest=f"{remote_main_home_path}/config.properties",
user=runner_user,
group=runner_user,
mode=500,
env_dict=with_secrets,
)
template_and_install_systemd(
"./files/piped/piped.service.j2",
env_dict={
"user": runner_user,
"remote_main_home_path": remote_main_home_path,
},
)

View File

@ -5,7 +5,7 @@ from pyinfra.operations import dnf, systemd, server
from pyinfra.facts.server import LinuxName, LinuxDistribution
@deploy("Install PostgreSQL")
@deploy("Install PostgreSQL", data_defaults={"postgresql_version": 15})
def install():
linux_name = host.get_fact(LinuxName)
version = host.data.postgresql_version