Files
homelab/scripts/deploy_containers.py
Alex Frantz 27c2e1df02
All checks were successful
Deploy Containers / Prepare (push) Successful in 40s
add success logging
2025-08-01 00:38:15 -04:00

80 lines
2.2 KiB
Python

import re
import sys
import subprocess
bracket_regex = r'\[([^\]]*)\]'
quote_regex = r'"([^"]*)"'
def git_diff():
args = sys.argv
res = subprocess.run(f"git diff --name-only {args[1]} {args[2]}", capture_output=True, shell=True, text=True)
return res.stdout.strip().split("\n")
def construct_ansible_command(server_name = None, tag = None):
command = "ANSIBLE_CONFIG=ansible.cfg /usr/bin/ansible-playbook main.yml --vault-password-file ~/.vault_pass.txt"
if server_name:
command += f" -l {server_name}"
if tag:
command += f" --tags {tag}"
return command
def run_deployment(server_name = None, tag = None):
if tag:
print(f"Deploying task '{tag}'..")
command = construct_ansible_command(tag=tag)
elif server_name:
print(f"Deploying caddy on server '{server_name}'..")
command = construct_ansible_command(server_name, "caddy_server")
res = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
lines = res.stdout.decode(encoding='utf-8').split("\n")
success = True
for ind, line in enumerate(lines):
if "fatal:" in line:
host = re.findall(bracket_regex, line)[0]
task_failed = re.findall(bracket_regex, lines[ind - 1])[0]
reason_failed = re.findall(quote_regex, line)
print("\n---------------------")
print(" Deployment failed!")
print(f" Task: {task_failed}")
print(f" Host: {host}")
print(f" Reason: {reason_failed[2].split(":")[1].strip()}")
print("---------------------\n")
success = False
break
return success
def main():
diff = git_diff()
success = True
for file in diff:
if "host_vars" in file:
server_name = file.split("/")[1].split(".")[0]
state = run_deployment(server_name=server_name)
if not state:
success = False
break
if "tasks" in file:
task_name = file.split("/")[1].split(".")[0] + "_deploy"
state = run_deployment(tag=task_name)
if not state:
success = False
break
if success:
print("\n---------------------")
print(" Deployment succeeded!")
print(f" Tasks: {", ".join(diff)}")
print("---------------------\n")
if __name__ == "__main__":
main()