mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-05-18 18:50:32 +02:00
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import subprocess
|
|
import os
|
|
import datetime
|
|
|
|
def run_ansible_playbook(inventory, playbook, modes, limit=None, password_file=None, verbose=0, skip_tests=False):
|
|
start_time = datetime.datetime.now().isoformat()
|
|
print(f"\n▶️ Script started at: {start_time}\n")
|
|
print("\n🛠️ Building project (make build)...\n")
|
|
subprocess.run(["make", "build"], check=True)
|
|
|
|
if not skip_tests:
|
|
print("\n🧪 Running tests (make test)...\n")
|
|
subprocess.run(["make", "test"], check=True)
|
|
|
|
cmd = ["ansible-playbook", "-i", inventory, playbook]
|
|
|
|
if limit:
|
|
cmd.extend(["--limit", limit])
|
|
|
|
for key, value in modes.items():
|
|
val = str(value).lower() if isinstance(value, bool) else str(value)
|
|
cmd.extend(["-e", f"{key}={val}"])
|
|
|
|
if password_file:
|
|
cmd.extend(["--vault-password-file", password_file])
|
|
else:
|
|
cmd.extend(["--ask-vault-pass"])
|
|
|
|
if verbose:
|
|
cmd.append("-" + "v" * verbose)
|
|
|
|
print("\n🚀 Launching Ansible Playbook...\n")
|
|
subprocess.run(cmd, check=True)
|
|
|
|
end_time = datetime.datetime.now().isoformat()
|
|
print(f"\n✅ Script ended at: {end_time}\n")
|
|
|
|
def main():
|
|
script_dir = os.path.dirname(os.path.realpath(__file__))
|
|
parser = argparse.ArgumentParser(description="Run Ansible Playbooks")
|
|
|
|
parser.add_argument("inventory", help="Path to the inventory file")
|
|
parser.add_argument("--limit", help="Limit execution to a specific server")
|
|
parser.add_argument("--host-type", choices=["server", "personal-computer"], default="server")
|
|
parser.add_argument("--reset", action="store_true")
|
|
parser.add_argument("--test", action="store_true")
|
|
parser.add_argument("--update", action="store_true")
|
|
parser.add_argument("--backup", action="store_true")
|
|
parser.add_argument("--cleanup", action="store_true")
|
|
parser.add_argument("--debug", action="store_true")
|
|
parser.add_argument("--password-file")
|
|
parser.add_argument("--skip-tests", action="store_true")
|
|
parser.add_argument("-v", "--verbose", action="count", default=0)
|
|
|
|
args = parser.parse_args()
|
|
|
|
modes = {
|
|
"mode_reset": args.reset,
|
|
"mode_test": args.test,
|
|
"mode_update": args.update,
|
|
"mode_backup": args.backup,
|
|
"mode_cleanup": args.cleanup,
|
|
"enable_debug": args.debug,
|
|
"host_type": args.host_type
|
|
}
|
|
|
|
playbook_file = os.path.join(os.path.dirname(script_dir), "playbook.yml")
|
|
|
|
run_ansible_playbook(
|
|
inventory=args.inventory,
|
|
playbook=playbook_file,
|
|
modes=modes,
|
|
limit=args.limit,
|
|
password_file=args.password_file,
|
|
verbose=args.verbose,
|
|
skip_tests=args.skip_tests
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|