easyctf-iv-platform/deploy/deploy.py

55 lines
1.9 KiB
Python
Raw Permalink Normal View History

2018-02-21 04:37:10 +00:00
import paramiko
import yaml
import os
import sys
def read_config():
with open(os.path.join(os.path.dirname(__file__), "config.yml")) as f:
data = yaml.load(f)
return data
def get_client():
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
return client
def update_web_server(client, host, pkey):
client.connect(host, username="root", pkey=pkey)
(sin, sout, serr) = client.exec_command("/bin/bash -c 'cd /root/easyctf-platform && git reset --hard && git pull origin master && systemctl restart easyctf'")
print(sout.read(), serr.read())
client.close()
def reimport_problems(client, host, pkey):
client.connect(host, username="root", pkey=pkey)
(sin, sout, serr) = client.exec_command("/bin/bash -c 'cd /root/problems && git reset --hard && git pull origin master && cd /root/easyctf-platform/server && dotenv /var/easyctf/env python3 manage.py import /root/problems'")
print(sout.read(), serr.read())
client.close()
def update_judge(client, host, pkey):
client.connect(host, username="root", pkey=pkey)
(sin, sout, serr) = client.exec_command("/bin/bash -c 'cd /root/easyctf-platform && git reset --hard && git pull origin master && systemctl restart judge'")
print(sout.read(), serr.read())
client.close()
if __name__ == "__main__":
service = None
if len(sys.argv) > 1:
service = sys.argv[1]
config = read_config()
key_path = os.path.expanduser(config.get("private_key"))
pkey = paramiko.RSAKey.from_private_key_file(key_path)
client = get_client()
if not service or service == "web":
for host in config.get("web"):
update_web_server(client, host, pkey)
reimport_problems(client, host, pkey)
if not service or service == "judge":
for host in config.get("judge"):
update_judge(client, host, pkey)