Files
msa-django-ansible/ansible/services.py

49 lines
1.6 KiB
Python

# services.py
import os
import tempfile
import subprocess
from .models import AnsibleTask
from django.conf import settings
def run_ansible_job(task: AnsibleTask, ssh_key: str):
task.status = "running"
task.save()
try:
with tempfile.NamedTemporaryFile(delete=False, mode="w") as playbook_file, \
tempfile.NamedTemporaryFile(delete=False, mode="w") as inventory_file, \
tempfile.NamedTemporaryFile(delete=False, mode="w") as private_key_file:
playbook_file.write(task.playbook_content.strip())
playbook_file.close()
inventory_file.write(task.inventory_content.strip())
inventory_file.close()
private_key_file.write(ssh_key.strip() + "\n")
private_key_file.close()
os.chmod(private_key_file.name, 0o600)
command = [
"ansible-playbook",
playbook_file.name,
"-i", inventory_file.name,
"--private-key", private_key_file.name,
"-u", "ubuntu",
]
result = subprocess.run(command, capture_output=True, text=True)
task.status = "success" if result.returncode == 0 else "failed"
task.output = result.stdout + "\n" + result.stderr
except Exception as e:
task.status = "error"
task.output = f"\u274c 실행 중 예외 발생: {str(e)}"
finally:
for f in [playbook_file.name, inventory_file.name, private_key_file.name]:
if os.path.exists(f):
os.remove(f)
task.save()