fix renewals, add email for vm expiration

This commit is contained in:
Jordan Rodgers 2018-01-24 03:26:15 -05:00
parent 0df186f5c3
commit bf19241bed
4 changed files with 61 additions and 2 deletions

View file

@ -211,8 +211,8 @@ def vm_mem(vmid, mem):
def vm_renew(vmid):
user = session['userinfo']['preferred_username']
proxmox = connect_proxmox()
if int(vmid) in get_user_allowed_vms(
proxmox, user) or 'rtp' in session['userinfo']['groups']:
if 'rtp' in session['userinfo']['groups'] or int(
vmid) in get_user_allowed_vms(proxmox, user):
renew_vm_expire(vmid, app.config['VM_EXPIRE_MONTHS'])
for interface in get_vm_interfaces(proxmox, vmid):
renew_ip(starrs, get_ip_for_mac(starrs, interface[1]))

View file

@ -47,6 +47,16 @@ def get_expired_vms(db):
return expired
def get_expiring_vms(db):
expiring = []
today = datetime.date.today()
expire = db.query(VM_Expiration).filter(
(VM_Expiration.expire_date - today) <= 10).all()
for vm in expire:
expiring.append(vm.id)
return expiring
def get_user_usage_limits(db, user):
limits = dict()
if is_rtp(user):

30
proxstar/mail.py Normal file
View file

@ -0,0 +1,30 @@
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email(toaddr, subject, body):
fromaddr = 'proxstar@csh.rit.edu'
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = subject
body = body
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('mail.csh.rit.edu', 25)
server.starttls()
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
def send_vm_expire_email(user, name, days):
toaddr = "{}@csh.rit.edu".format(user)
subject = 'Proxstar VM Expiration Notice'
if days != 1:
body = "{} is expiring in {} days. If you would like to keep this VM, please log into Proxstar and renew it.".format(
name, days)
else:
body = "{} is expiring in {} day. If you would like to keep this VM, please log into Proxstar and renew it.".format(
name, days)
send_email(toaddr, subject, body)

View file

@ -3,6 +3,7 @@ from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from proxstar.db import *
from proxstar.mail import *
from proxstar.starrs import *
from proxstar.proxmox import *
@ -68,3 +69,21 @@ def process_expired_vms_task():
# delete_vm(proxmox, starrs, vmid)
# delete_starrs(starrs, vmname)
# delete_vm_expire(vmid)
def process_expiring_vms_task():
with app.app_context():
proxmox = connect_proxmox()
db = connect_db()
starrs = connect_starrs()
pools = get_pools(proxmox)
for pool in pools:
vms = get_vms_for_user(proxmox, pool)
for vm in vms:
vmid = vm['vmid']
expire = get_vm_expire(db, vmid,
app.config['VM_EXPIRE_MONTHS'])
days = (expire - datetime.date.today()).days
if days in [10, 7, 3, 1]:
name = get_vm_config(proxmox, vmid)['name']
send_vm_expire_email('com6056', name, days)