This commit is contained in:
Luna 2023-08-20 16:53:16 -03:00
parent 52fbc871b2
commit da5a86620e
3 changed files with 20 additions and 9 deletions

View File

@ -1,3 +1,4 @@
from pathlib import Path
from packaging import version from packaging import version
from pyinfra.operations import apk, server, files from pyinfra.operations import apk, server, files
from pyinfra.facts.server import LinuxName from pyinfra.facts.server import LinuxName
@ -7,9 +8,14 @@ from pyinfra import host
CROC_ALPINE_VERSION = version.parse("3.14") 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(): def install_croc():
# alpine provides croc in-repo as of 3.14 # alpine provides croc in-repo as of 3.14
if host.get_fact(LinuxName) == "Alpine": if host.get_fact(LinuxName) == "Alpine":
host_alpine_version = version.parse(host.data.alpine_version) host_alpine_version = version.parse(host.data.alpine_version)
@ -18,11 +24,15 @@ def install_croc():
return return
# for everyone else, install manually # for everyone else, install manually
files.directory("/opt/croc") croc_dir = Path(host.data.croc_install_directory)
files.download( 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", "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", md5sum="5550b0bfb50d0541cba790562c180bd7",
) )
server.shell("tar xvf /opt/croc/croc.tar.gz", _chdir="/opt/croc") if result.changed:
server.shell("mv /opt/croc/croc /usr/bin/croc", _chdir="/opt/croc") 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): class GitRevListComparison(FactBase):
def command(self, repo: str, branch: str): def command(self, repo: str, branch: str):
assert branch
return f"git -C {repo} rev-list HEAD..origin/{branch} | wc -l" return f"git -C {repo} rev-list HEAD..origin/{branch} | wc -l"
def process(self, output): def process(self, output):
@ -122,7 +123,7 @@ def repo(
# always fetch upstream branches (that way we can compare if the latest # always fetch upstream branches (that way we can compare if the latest
# commit has changed, and then we don't need to execute anything!) # commit has changed, and then we don't need to execute anything!)
host.get_fact(GitFetch, repo=dest) 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" repository_has_updates = stdout[0] != "0"
# since we immediately always fetch, we will always be modifying the # since we immediately always fetch, we will always be modifying the

View File

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