mirror of
https://github.com/ComputerScienceHouse/proxstar.git
synced 2025-03-09 15:40:09 +00:00
fix renewals, add email for vm expiration
This commit is contained in:
parent
0df186f5c3
commit
bf19241bed
4 changed files with 61 additions and 2 deletions
|
@ -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]))
|
||||
|
|
|
@ -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
30
proxstar/mail.py
Normal 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)
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue