mirror of
				https://github.com/ComputerScienceHouse/proxstar.git
				synced 2025-03-09 15:40:09 +00:00 
			
		
		
		
	remove reset limits, disable debug, improve get next starrs ip, add start of template code
This commit is contained in:
		
							parent
							
								
									8fbe4de70f
								
							
						
					
					
						commit
						7b4e7fb6e8
					
				
					 7 changed files with 70 additions and 22 deletions
				
			
		| 
						 | 
				
			
			@ -26,10 +26,19 @@ else:
 | 
			
		|||
app.config.from_pyfile(config)
 | 
			
		||||
app.config["GIT_REVISION"] = subprocess.check_output(
 | 
			
		||||
    ['git', 'rev-parse', '--short', 'HEAD']).decode('utf-8').rstrip()
 | 
			
		||||
auth = OIDCAuthentication(
 | 
			
		||||
    app,
 | 
			
		||||
    issuer=app.config['OIDC_ISSUER'],
 | 
			
		||||
    client_registration_info=app.config['OIDC_CLIENT_CONFIG'])
 | 
			
		||||
 | 
			
		||||
retry = 0
 | 
			
		||||
while retry < 5:
 | 
			
		||||
    try:
 | 
			
		||||
        auth = OIDCAuthentication(
 | 
			
		||||
            app,
 | 
			
		||||
            issuer=app.config['OIDC_ISSUER'],
 | 
			
		||||
            client_registration_info=app.config['OIDC_CLIENT_CONFIG'])
 | 
			
		||||
        break
 | 
			
		||||
    except:
 | 
			
		||||
        retry += 1
 | 
			
		||||
        time.sleep(2)
 | 
			
		||||
 | 
			
		||||
cache = SimpleCache()
 | 
			
		||||
 | 
			
		||||
redis_conn = Redis(app.config['REDIS_HOST'], app.config['REDIS_PORT'])
 | 
			
		||||
| 
						 | 
				
			
			@ -334,16 +343,6 @@ def set_limits(user):
 | 
			
		|||
        return '', 403
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/limits/<string:user>/reset', methods=['POST'])
 | 
			
		||||
@auth.oidc_auth
 | 
			
		||||
def reset_limits(user):
 | 
			
		||||
    if 'rtp' in session['userinfo']['groups']:
 | 
			
		||||
        delete_user_usage_limits(user)
 | 
			
		||||
        return '', 200
 | 
			
		||||
    else:
 | 
			
		||||
        return '', 403
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/user/<string:user>/delete', methods=['POST'])
 | 
			
		||||
@auth.oidc_auth
 | 
			
		||||
def delete_user(user):
 | 
			
		||||
| 
						 | 
				
			
			@ -375,4 +374,4 @@ def logout():
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    app.run(debug=True)
 | 
			
		||||
    app.run()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,7 +24,8 @@ def send_vm_expire_email(user, vms):
 | 
			
		|||
    body = "The following VMs in Proxstar are expiring soon:\n\n"
 | 
			
		||||
    for vm in vms:
 | 
			
		||||
        if vm[1] == 0:
 | 
			
		||||
            body += "    - {} today (VM has been stopped)\n".format(vm[0], vm[1])
 | 
			
		||||
            body += "    - {} today (VM has been stopped)\n".format(
 | 
			
		||||
                vm[0], vm[1])
 | 
			
		||||
        if vm[1] == 1:
 | 
			
		||||
            body += "    - {} in 1 day\n".format(vm[0])
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,3 +28,10 @@ class Pool_Cache(Base):
 | 
			
		|||
    usage = Column(JSON, nullable=False)
 | 
			
		||||
    limits = Column(JSON, nullable=False)
 | 
			
		||||
    percents = Column(JSON, nullable=False)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Template(Base):
 | 
			
		||||
    __tablename__ = 'template'
 | 
			
		||||
    id = Column(Integer, primary_key=True)
 | 
			
		||||
    name = Column(String(32), nullable=False)
 | 
			
		||||
    desc = Column(Text)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -296,3 +296,25 @@ def delete_user_pool(proxmox, pool):
 | 
			
		|||
        if 'rtp' not in proxmox.access.users(
 | 
			
		||||
                "{}@csh.rit.edu".format(pool)).get()['groups']:
 | 
			
		||||
            proxmox.access.users("{}@csh.rit.edu".format(pool)).delete()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def clone_vm(proxmox, template_id, name, pool):
 | 
			
		||||
    node = proxmox.nodes(get_vm_node(proxmox, template_id))
 | 
			
		||||
    newid = get_free_vmid(proxmox)
 | 
			
		||||
    target = get_node_least_mem(proxmox)
 | 
			
		||||
    node.qemu(template_id).clone.post(
 | 
			
		||||
        newid=newid,
 | 
			
		||||
        name=name,
 | 
			
		||||
        pool=pool,
 | 
			
		||||
        full=1,
 | 
			
		||||
        description='Managed by Proxstar',
 | 
			
		||||
        target=target)
 | 
			
		||||
    retry = 0
 | 
			
		||||
    while retry < 60:
 | 
			
		||||
        try:
 | 
			
		||||
            mac = get_vm_mac(proxmox, newid)
 | 
			
		||||
            break
 | 
			
		||||
        except:
 | 
			
		||||
            retry += 1
 | 
			
		||||
            time.sleep(3)
 | 
			
		||||
    return newid, mac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ def get_next_ip(starrs, range_name):
 | 
			
		|||
        c.execute("COMMIT")
 | 
			
		||||
    finally:
 | 
			
		||||
        c.close()
 | 
			
		||||
    return results
 | 
			
		||||
    return results[0][0]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_ip_for_mac(starrs, mac):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,7 @@ def create_vm_task(user, name, cores, memory, disk, iso):
 | 
			
		|||
        starrs = connect_starrs()
 | 
			
		||||
        vmid, mac = create_vm(proxmox, user, name, cores, memory, disk, iso)
 | 
			
		||||
        register_starrs(starrs, name, app.config['STARRS_USER'], mac,
 | 
			
		||||
                        get_next_ip(starrs,
 | 
			
		||||
                                    app.config['STARRS_IP_RANGE'])[0][0])
 | 
			
		||||
                        get_next_ip(starrs, app.config['STARRS_IP_RANGE']))
 | 
			
		||||
        get_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -104,9 +103,30 @@ def generate_pool_cache_task():
 | 
			
		|||
        store_pool_cache(db, pools)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def setup_template(hostname):
 | 
			
		||||
def setup_template(template_id, name, user, cores, memory):
 | 
			
		||||
    with app.app_context():
 | 
			
		||||
        proxmox = connect_proxmox()
 | 
			
		||||
        starrs = connect_starrs()
 | 
			
		||||
        db = connect_db()
 | 
			
		||||
        vmid, mac = clone_vm(proxmox, template_id, name, user)
 | 
			
		||||
        ip = get_next_ip(starrs, app.config['STARRS_IP_RANGE'])
 | 
			
		||||
        register_starrs(starrs, name, app.config['STARRS_USER'], mac, ip)
 | 
			
		||||
        get_vm_expire(db, vmid, app.config['VM_EXPIRE_MONTHS'])
 | 
			
		||||
        change_vm_cpu(proxmox, vmid, cores)
 | 
			
		||||
        change_vm_mem(proxmox, vmid, memory)
 | 
			
		||||
        time.sleep(60)
 | 
			
		||||
        change_vm_power(proxmox, vmid, 'start')
 | 
			
		||||
        client = paramiko.SSHClient()
 | 
			
		||||
        client.connect('ssh.example.com', username='root', password='todo')
 | 
			
		||||
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 | 
			
		||||
        retry = 0
 | 
			
		||||
        while retry < 30:
 | 
			
		||||
            try:
 | 
			
		||||
                client.connect(ip, username='root', password='')
 | 
			
		||||
                break
 | 
			
		||||
            except:
 | 
			
		||||
                retry += 1
 | 
			
		||||
                time.sleep(3)
 | 
			
		||||
        stdin, stdout, stderr = client.exec_command('ls')
 | 
			
		||||
        for line in stdout:
 | 
			
		||||
            print('... ' + line.strip('\n'))
 | 
			
		||||
        client.close()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,7 +92,6 @@
 | 
			
		|||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <button class="btn btn-info proxstar-poolbtn edit-limit" data-user="{{ pool['user'] }}" data-cpu="{{ pool['limits']['cpu'] }}" data-mem="{{ pool['limits']['mem'] }}" data-disk="{{ pool['limits']['disk'] }}">EDIT</button>
 | 
			
		||||
                            <button class="btn btn-warning proxstar-poolbtn reset-limit" data-user="{{ pool['user'] }}">RESET</button>
 | 
			
		||||
                            {% if not pool['vms'] %}
 | 
			
		||||
                            <button class="btn btn-danger proxstar-poolbtn delete-user" data-user="{{ pool['user'] }}">DELETE</button>
 | 
			
		||||
                            {% endif %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue