Add vmmgr init method and all files managed by vmmgr

This commit is contained in:
Disassembler 2020-04-04 22:05:54 +02:00
parent 3b9cbe61b3
commit c2207195cc
No known key found for this signature in database
GPG Key ID: 524BD33A0EE29499
8 changed files with 60 additions and 39 deletions

View File

@ -1,6 +1,16 @@
#!/sbin/openrc-run #!/sbin/openrc-run
command=/usr/share/vmmgr/wsgi.py command="/usr/share/vmmgr/wsgi.py"
description="VM manager" description="VM manager"
pidfile=/var/run/vmmgr.pid pidfile="/var/run/vmmgr.pid"
start_stop_daemon_args="--background --make-pidfile --stdout /var/log/vmmgr.log --stderr /var/log/vmmgr.log" start_stop_daemon_args="--background --make-pidfile --stdout /var/log/vmmgr.log --stderr /var/log/vmmgr.log"
depend() {
before nginx
}
start_pre() {
if [ ! -f /etc/ssl/services.pem ]; then
/usr/bin/vmmgr init
fi
}

14
etc/nginx/vmmgr_common Normal file
View File

@ -0,0 +1,14 @@
error_page 502 /502.html;
location = /502.html {
root /usr/share/vmmgr/templates;
}
error_page 503 /503.html;
location = /503.html {
root /usr/share/vmmgr/templates;
}
location = /vm-ping {
add_header Content-Type text/plain;
return 200 "vm-pong";
}

View File

@ -0,0 +1,5 @@
#!/bin/sh
# Sleep randomly up to 1hr to avoid peak on ACME server
/bin/sleep $(/usr/bin/shuf -i 60-3600 -n 1)
/usr/bin/acme.sh --home /etc/acme.sh.d --cron >/dev/null

View File

@ -0,0 +1,4 @@
[Interface]
ListenPort = 51820
PrivateKey = None

8
sbin/vmtty Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
# Rebuild /etc/issue
/usr/bin/vmmgr rebuild-issue
# Print /etc/issue
/bin/cat /etc/issue
# Wait for key press
read a

View File

@ -17,6 +17,12 @@ def rebuild_issue():
# Used by inittab on VM startup # Used by inittab on VM startup
vmmgr.rebuild_issue() vmmgr.rebuild_issue()
def init()
# Used during the very first vmmgr service startup
vmmgr.create_selfsigned_cert()
host = config.get_host()
vmmgr.update_host(host['domain'], host['port'])
parser = argparse.ArgumentParser(description='VM application manager') parser = argparse.ArgumentParser(description='VM application manager')
parser.set_defaults(action=None) parser.set_defaults(action=None)
subparsers = parser.add_subparsers() subparsers = parser.add_subparsers()
@ -35,6 +41,9 @@ parser_unregister_app.add_argument('app', help='Application name')
parser_rebuild_issue = subparsers.add_parser('rebuild-issue') parser_rebuild_issue = subparsers.add_parser('rebuild-issue')
parser_rebuild_issue.set_defaults(action=rebuild_issue) parser_rebuild_issue.set_defaults(action=rebuild_issue)
parser_init = subparsers.add_parser('init')
parser_init.set_defaults(action=init)
args = parser.parse_args() args = parser.parse_args()
if args.action is register_app: if args.action is register_app:
register_app(args.app, args.host, args.login, args.password) register_app(args.app, args.host, args.login, args.password)
@ -42,5 +51,7 @@ elif args.action is unregister_app:
unregister_app(args.app) unregister_app(args.app)
elif args.action is rebuild_issue: elif args.action is rebuild_issue:
rebuild_issue() rebuild_issue()
elif args.action is init:
init()
else: else:
parser.print_usage() parser.print_usage()

View File

@ -11,15 +11,7 @@ NGINX = '''server {{
proxy_pass http://{ip}:8080; proxy_pass http://{ip}:8080;
}} }}
error_page 502 /502.html; include vmmgr_common;
location = /502.html {{
root /usr/share/vmmgr/templates;
}}
location = /vm-ping {{
add_header Content-Type text/plain;
return 200 "vm-pong";
}}
}} }}
''' '''
@ -34,10 +26,7 @@ NGINX_DEFAULT = '''server {{
root /etc/acme.sh.d; root /etc/acme.sh.d;
}} }}
location = /vm-ping {{ include vmmgr_common;
add_header Content-Type text/plain;
return 200 "vm-pong";
}}
}} }}
server {{ server {{
@ -51,38 +40,18 @@ server {{
root /usr/share/vmmgr; root /usr/share/vmmgr;
}} }}
error_page 502 /502.html; include vmmgr_common;
location = /502.html {{
root /usr/share/vmmgr/templates;
}}
location = /vm-ping {{
add_header Content-Type text/plain;
return 200 "vm-pong";
}}
}} }}
server {{ server {{
listen [::]:{port} ssl http2; listen [::]:{port} ssl http2;
server_name ~^(.*)\\.{domain_esc}$; server_name *.{domain};
location / {{ location / {{
return 503; return 503;
}} }}
location /static {{ include vmmgr_common;
root /usr/share/vmmgr;
}}
error_page 503 /503.html;
location = /503.html {{
root /usr/share/vmmgr/templates;
}}
location = /vm-ping {{
add_header Content-Type text/plain;
return 200 "vm-pong";
}}
}} }}
''' '''

View File

@ -51,7 +51,7 @@ def update_host(domain, port):
config.set_host('port', port) config.set_host('port', port)
# Rebuild nginx config for the portal and existing apps. Web interface calls restart_nginx() in WSGI close handler # Rebuild nginx config for the portal and existing apps. Web interface calls restart_nginx() in WSGI close handler
with open(os.path.join(paths.NGINX_DIR, 'default.conf'), 'w') as f: with open(os.path.join(paths.NGINX_DIR, 'default.conf'), 'w') as f:
f.write(templates.NGINX_DEFAULT.format(port=port, domain_esc=domain.replace('.', '\\.'))) f.write(templates.NGINX_DEFAULT.format(port=port, domain=domain))
for app in config.get_apps().keys(): for app in config.get_apps().keys():
register_proxy(app) register_proxy(app)