mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-03-09 15:40:09 +00:00
more fixes!
This commit is contained in:
parent
daa994ba32
commit
d19522cab5
12 changed files with 100 additions and 60 deletions
|
@ -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()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue