more fixes!

This commit is contained in:
Jordan Rodgers 2019-02-19 23:36:43 -05:00
parent daa994ba32
commit d19522cab5
12 changed files with 100 additions and 60 deletions

View file

@ -1,20 +1,26 @@
import logging
import os
import time
import requests
import paramiko
import psycopg2
import requests
from flask import Flask
from rq import get_current_job
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from proxstar.db import *
from proxstar.util import *
from proxstar.mail import *
from proxstar.starrs import *
from proxstar.vnc import send_stop_ssh_tunnel
from proxstar.vm import VM, create_vm, clone_vm
from proxstar.user import User, get_vms_for_rtp
from proxstar.proxmox import connect_proxmox, get_pools
from proxstar.starrs import *
from proxstar.user import User, get_vms_for_rtp
from proxstar.util import *
from proxstar.vm import VM, clone_vm, create_vm
from proxstar.vnc import send_stop_ssh_tunnel
logging.basicConfig(
format='%(asctime)s %(levelname)s %(message)s', level=logging.INFO)
app = Flask(__name__)
if os.path.exists(
@ -54,10 +60,11 @@ def create_vm_task(user, name, cores, memory, disk, iso):
proxmox = connect_proxmox()
db = connect_db()
starrs = connect_starrs()
print("[{}] Creating VM.".format(name))
logging.info("[{}] Creating VM.".format(name))
set_job_status(job, 'creating VM')
vmid = create_vm(proxmox, user, name, cores, memory, disk, iso)
print("[{}] Waiting until Proxmox is done provisioning.".format(name))
logging.info(
"[{}] Waiting until Proxmox is done provisioning.".format(name))
set_job_status(job, 'waiting for Proxmox')
timeout = 20
retry = 0
@ -68,11 +75,11 @@ def create_vm_task(user, name, cores, memory, disk, iso):
continue
break
if retry == timeout:
print("[{}] Failed to provision, deleting.".format(name))
logging.info("[{}] Failed to provision, deleting.".format(name))
set_job_status(job, 'failed to provision')
delete_vm_task(vmid)
return
print("[{}] Registering in STARRS.".format(name))
logging.info("[{}] Registering in STARRS.".format(name))
set_job_status(job, 'registering in STARRS')
vm = VM(vmid)
ip = get_next_ip(starrs, app.config['STARRS_IP_RANGE'])
@ -80,7 +87,7 @@ def create_vm_task(user, name, cores, memory, disk, iso):
ip)
set_job_status(job, 'setting VM expiration')
get_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
print("[{}] VM successfully provisioned.".format(name))
logging.info("[{}] VM successfully provisioned.".format(name))
set_job_status(job, 'complete')
@ -123,7 +130,7 @@ def process_expiring_vms_task():
expired_vms.append([vm.id, vm.name, days])
vm.stop()
elif days <= -7:
print(
logging.info(
"Deleting {} ({}) as it has been at least a week since expiration."
.format(vm.name, vm.id))
send_stop_ssh_tunnel(vm.id)
@ -148,13 +155,14 @@ def setup_template_task(template_id, name, user, ssh_key, cores, memory):
proxmox = connect_proxmox()
starrs = connect_starrs()
db = connect_db()
print("[{}] Retrieving template info for template {}.".format(
logging.info("[{}] Retrieving template info for template {}.".format(
name, template_id))
template = get_template(db, template_id)
print("[{}] Cloning template {}.".format(name, template_id))
logging.info("[{}] Cloning template {}.".format(name, template_id))
set_job_status(job, 'cloning template')
vmid = clone_vm(proxmox, template_id, name, user)
print("[{}] Waiting until Proxmox is done provisioning.".format(name))
logging.info(
"[{}] Waiting until Proxmox is done provisioning.".format(name))
set_job_status(job, 'waiting for Proxmox')
timeout = 20
retry = 0
@ -165,36 +173,37 @@ def setup_template_task(template_id, name, user, ssh_key, cores, memory):
continue
break
if retry == timeout:
print("[{}] Failed to provision, deleting.".format(name))
logging.info("[{}] Failed to provision, deleting.".format(name))
set_job_status(job, 'failed to provision')
delete_vm_task(vmid)
return
print("[{}] Registering in STARRS.".format(name))
logging.info("[{}] Registering in STARRS.".format(name))
set_job_status(job, 'registering in STARRS')
vm = VM(vmid)
ip = get_next_ip(starrs, app.config['STARRS_IP_RANGE'])
register_starrs(starrs, name, app.config['STARRS_USER'], vm.get_mac(),
ip)
get_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
print("[{}] Setting CPU and memory.".format(name))
logging.info("[{}] Setting CPU and memory.".format(name))
set_job_status(job, 'setting CPU and memory')
vm.set_cpu(cores)
vm.set_mem(memory)
print("[{}] Applying cloud-init config.".format(name))
logging.info("[{}] Applying cloud-init config.".format(name))
set_job_status(job, 'applying cloud-init')
vm.set_ci_user(user)
vm.set_ci_ssh_key(ssh_key)
vm.set_ci_network()
print("[{}] Waiting for STARRS to propogate before starting VM.".
format(name))
logging.info(
"[{}] Waiting for STARRS to propogate before starting VM.".format(
name))
set_job_status(job, 'waiting for STARRS')
job.save_meta()
time.sleep(90)
print("[{}] Starting VM.".format(name))
logging.info("[{}] Starting VM.".format(name))
set_job_status(job, 'starting VM')
job.save_meta()
vm.start()
print("[{}] Template successfully provisioned.".format(name))
logging.info("[{}] Template successfully provisioned.".format(name))
set_job_status(job, 'completed')
job.save_meta()