api redesign
This commit is contained in:
parent
541bd3663e
commit
79e5777ae3
8 changed files with 72 additions and 77 deletions
|
@ -186,26 +186,22 @@ def dashboard(user_pid=0):
|
||||||
#extract rrd and status from the deployments
|
#extract rrd and status from the deployments
|
||||||
rrd = {}
|
rrd = {}
|
||||||
statuses = {}
|
statuses = {}
|
||||||
for cubeid in inv_deploycubeids:
|
for unit_id in inv_deploycubeids:
|
||||||
rrd[cubeid] = {}
|
rrd[unit_id] = {}
|
||||||
try:
|
data = { 'unit_id': int(unit_id),
|
||||||
query = contact_proxmaster({}, 'vmrrd', cubeid)
|
'type': 'deploy' }
|
||||||
except:
|
query = contact_proxmaster(data, 'vmrrd')
|
||||||
flash('Deploy #{} unreachable.'.format(str(cubeid)))
|
if query['status'] == 'UNREACHABLE':
|
||||||
|
flash('Deploy #{} is unreachable. Support is notified.'.format(str(unit_id)))
|
||||||
graphs_list = ['net', 'cpu', 'mem', 'hdd']
|
send_email(current_app.config['MAIL_USERNAME'], 'Deploy {} is unreachable'.format(unit_id),
|
||||||
try:
|
'vmanager/email/adm_unreachable', user=cuser, unit_id=unit_id )
|
||||||
|
else:
|
||||||
|
graphs_list = ['net', 'cpu', 'mem', 'hdd']
|
||||||
for graph in graphs_list:
|
for graph in graphs_list:
|
||||||
raw = query[graph]['image'].encode('raw_unicode_escape')
|
raw = query[graph]['image'].encode('raw_unicode_escape')
|
||||||
rrd[cubeid][graph] = base64.b64encode(raw).decode()
|
rrd[unit_id][graph] = base64.b64encode(raw).decode()
|
||||||
status = { cubeid : query['status'] }
|
status = { unit_id : query['status'] }
|
||||||
statuses.update(status)
|
statuses.update(status)
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
flash('Deploy #{} unreachable. Support is notified'.format(str(cubeid)))
|
|
||||||
send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(cubeid),
|
|
||||||
'vmanager/email/adm_unreachable', user=cuser, cubeid=cubeid )
|
|
||||||
#current_app.logger.warning('[ADMIN] {} deployments: {}, services: {}, domains: {}, services: {}'.format(cuser.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list ))
|
|
||||||
return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions)
|
return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -94,15 +94,17 @@ def dashboard():
|
||||||
rrd = {}
|
rrd = {}
|
||||||
statuses = {}
|
statuses = {}
|
||||||
#current_app.logger.warning(str(inv_deploycubeids))
|
#current_app.logger.warning(str(inv_deploycubeids))
|
||||||
for cubeid in inv_deploycubeids:
|
for user_id in inv_deploycubeids:
|
||||||
rrd[cubeid] = {}
|
rrd[user_id] = {}
|
||||||
|
data = { 'user_id': int(user_id),
|
||||||
|
'type': 'deploy' }
|
||||||
try:
|
try:
|
||||||
query = contact_proxmaster({}, 'vmrrd', cubeid)
|
query = contact_proxmaster(data, 'vmrrd')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
current_app.logger.error(e)
|
current_app.logger.error(e)
|
||||||
flash('Deploy #{} unreachable. Support is notified'.format(str(cubeid)))
|
flash('Deploy #{} unreachable. Support is notified'.format(str(unit_id)))
|
||||||
send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(cubeid),
|
send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(unit_id),
|
||||||
'vmanager/email/adm_unreachable', user=current_user, cubeid=cubeid)
|
'vmanager/email/adm_unreachable', user=current_user, unit_id=unit_id)
|
||||||
#current_app.logger.info('debug query:')
|
#current_app.logger.info('debug query:')
|
||||||
#current_app.logger.info(query)
|
#current_app.logger.info(query)
|
||||||
|
|
||||||
|
@ -110,14 +112,14 @@ def dashboard():
|
||||||
try:
|
try:
|
||||||
for graph in graphs_list:
|
for graph in graphs_list:
|
||||||
raw = query[graph]['image'].encode('raw_unicode_escape')
|
raw = query[graph]['image'].encode('raw_unicode_escape')
|
||||||
rrd[cubeid][graph] = base64.b64encode(raw).decode()
|
rrd[unit_id][graph] = base64.b64encode(raw).decode()
|
||||||
status = { cubeid : query['status'] }
|
status = { unit_id : query['status'] }
|
||||||
statuses.update(status)
|
statuses.update(status)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
current_app.logger.error(e)
|
current_app.logger.error(e)
|
||||||
flash('Deploy #{} unreachable. Support is notified'.format(str(cubeid)))
|
flash('Deploy #{} unreachable. Support is notified'.format(str(unit_id)))
|
||||||
send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(cubeid),
|
send_email(current_app.config['MAIL_USERNAME'], 'Cube {} is unreachable'.format(unit_id),
|
||||||
'vmanager/email/adm_unreachable', user=current_user, cubeid=cubeid )
|
'vmanager/email/adm_unreachable', user=current_user, unit_id=unit_id )
|
||||||
|
|
||||||
current_app.logger.info('[{}] Enabled deployments: {}, services: {}, domains: {}, addresses: {}'.format(current_user.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list ))
|
current_app.logger.info('[{}] Enabled deployments: {}, services: {}, domains: {}, addresses: {}'.format(current_user.email, inv_deployments_list, inv_services_list, inv_domains_list, inv_addresses_list ))
|
||||||
return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions)
|
return render_template('main/dashboard.html', rrd=rrd, status=statuses, inv_deployments=inv_deployments, inv_services=inv_services, inv_domains=inv_domains, inv_addresses=inv_addresses, region=regions)
|
||||||
|
|
|
@ -213,23 +213,16 @@ lm.anonymous_user = AnonymousUser
|
||||||
def load_user(user_id):
|
def load_user(user_id):
|
||||||
return User.query.get(int(user_id))
|
return User.query.get(int(user_id))
|
||||||
|
|
||||||
def contact_proxmaster(data, method, cubeid=0):
|
def contact_proxmaster(data, method):
|
||||||
prxurl = current_app.config['PROXMASTER_URL']
|
|
||||||
data['apikey'] = current_app.config['APIKEY']
|
data['apikey'] = current_app.config['APIKEY']
|
||||||
data_json = json.dumps(data)
|
data_json = json.dumps(data)
|
||||||
|
url = current_app.config['PROXMASTER_URL'] + '/' + str(method)
|
||||||
url = '{}/{}/{}'.format(prxurl, method, cubeid)
|
|
||||||
if method == 'vmcreate':
|
|
||||||
url = '{}/vmcreate'.format(prxurl)
|
|
||||||
if method == 'vmremove':
|
|
||||||
url = '{}/vmremove/{}'.format(prxurl, cubeid)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
db_result = requests.post( url, data=data_json, headers={"content-type": "application/json"}, timeout=30 )
|
db_result = requests.post( url, data=data_json, headers={"content-type": "application/json"}, timeout=30 )
|
||||||
proxjson = db_result.json()
|
proxjson = db_result.json()
|
||||||
return proxjson
|
return proxjson
|
||||||
except:
|
except:
|
||||||
return None
|
return { 'status': 'UNREACHABLE' }
|
||||||
|
|
||||||
class Router(db.Model):
|
class Router(db.Model):
|
||||||
__tablename__ = 'routers'
|
__tablename__ = 'routers'
|
||||||
|
@ -238,7 +231,7 @@ class Router(db.Model):
|
||||||
date_created = db.Column(db.DateTime, default=datetime.utcnow)
|
date_created = db.Column(db.DateTime, default=datetime.utcnow)
|
||||||
deleted = db.Column(db.Boolean, default=False)
|
deleted = db.Column(db.Boolean, default=False)
|
||||||
|
|
||||||
machine_id = db.Column(db.BigInteger) #cubeid
|
machine_id = db.Column(db.BigInteger) #unit_id
|
||||||
|
|
||||||
class Bridge(db.Model):
|
class Bridge(db.Model):
|
||||||
__tablename__ = 'bridge'
|
__tablename__ = 'bridge'
|
||||||
|
@ -263,7 +256,7 @@ class Deployment(db.Model):
|
||||||
period = db.Column(db.Integer)
|
period = db.Column(db.Integer)
|
||||||
daysleft = db.Column(db.Integer)
|
daysleft = db.Column(db.Integer)
|
||||||
|
|
||||||
machine_id = db.Column(db.BigInteger) #cubeid
|
machine_id = db.Column(db.BigInteger) #unit_id
|
||||||
machine_alias = db.Column(db.String) #dns name
|
machine_alias = db.Column(db.String) #dns name
|
||||||
machine_cpu = db.Column(db.Integer)
|
machine_cpu = db.Column(db.Integer)
|
||||||
machine_mem = db.Column(db.Integer)
|
machine_mem = db.Column(db.Integer)
|
||||||
|
|
|
@ -180,14 +180,14 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
{% if deploy.enabled == True %}
|
{% if deploy.enabled == True %}
|
||||||
<img class="icon icons8-Device-Manager" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACl0lEQVRYhe2X70sTcRzHfdhDH/Zn9KAHPrwnejNSwqx01hpBw+1RDyoJrfZk3i0mKerWrtApKJmtQVkSSoPIfbc1vJtzOuFiWeE6QnaJlqbeuydNlj92m/PoBx68nrz5wvfFfd984FNSUuSnYwi1Xyirv7TY+0uq20JL1x8mUoVS2xFJ6xhCFS1gcAsfk7KCQrnxaG7x/xIg71fwckZW5bW4rI3ATa8Ic98Mrg6JObF44toJcETGC1HJSaNWAreeiLjojsLUG8+JpU8jgT9ewrHEVwyGJFVGYmntOtDsm4djXMqJZh3QrIQn7oSPbp/h5baJY9sFnK8+weyJq8KMJPMXqLBP1NIs+U6zBLswli2gSQlpOxmlWTKrY4gxG9pO7tMsQaU9WKatAEv8NBvkt+c6hhhplkDHEOpABCrtwbIqR/jDuS7+c4MzmspQ7xTW6rr59ezsVy7XdfOodwqLepewkRky510C2OfJwgQoq/9IlSOcHuBXVBusxrO5DTQNixgISvkLlNvfHDd5ZhaKvTzDvUAat31i/gI6hlDm/kTqoAQ4IqPFW4BARWvgpJGLLXFEBkdkVLeFYeqJoab9LWyjC8jku2HkpmDqiaHByaPZNw+OyLCNLuDa0BySsoK4tK4uQLMBQ0175IfeFV3Vu6KrBregJGUFTUMJnO2c3Mp3o65rUknKCgZDEs50TsLgnkKDS4DFE8dw5AtolsD29F1hT3C6I4IWrwh9N686Wi/3xNHiFdHYOw3HuPTbEwyGJNAsgXWPPuwpkP2LfbPrOQX6IstbZx9Pr+3oQHj+2z9QwkOBQ4G/QuDU3Uja3J9I7QeTZ1ax9Cc2M1x6ML15wSWs5r2cUlZ/aTErNt0auLIDNmDIdz3/CZaw0mqfwL4CAAAAAElFTkSuQmCC">
|
<img class="icon icons8-Device-Manager" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACl0lEQVRYhe2X70sTcRzHfdhDH/Zn9KAHPrwnejNSwqx01hpBw+1RDyoJrfZk3i0mKerWrtApKJmtQVkSSoPIfbc1vJtzOuFiWeE6QnaJlqbeuydNlj92m/PoBx68nrz5wvfFfd984FNSUuSnYwi1Xyirv7TY+0uq20JL1x8mUoVS2xFJ6xhCFS1gcAsfk7KCQrnxaG7x/xIg71fwckZW5bW4rI3ATa8Ic98Mrg6JObF44toJcETGC1HJSaNWAreeiLjojsLUG8+JpU8jgT9ewrHEVwyGJFVGYmntOtDsm4djXMqJZh3QrIQn7oSPbp/h5baJY9sFnK8+weyJq8KMJPMXqLBP1NIs+U6zBLswli2gSQlpOxmlWTKrY4gxG9pO7tMsQaU9WKatAEv8NBvkt+c6hhhplkDHEOpABCrtwbIqR/jDuS7+c4MzmspQ7xTW6rr59ezsVy7XdfOodwqLepewkRky510C2OfJwgQoq/9IlSOcHuBXVBusxrO5DTQNixgISvkLlNvfHDd5ZhaKvTzDvUAat31i/gI6hlDm/kTqoAQ4IqPFW4BARWvgpJGLLXFEBkdkVLeFYeqJoab9LWyjC8jku2HkpmDqiaHByaPZNw+OyLCNLuDa0BySsoK4tK4uQLMBQ0175IfeFV3Vu6KrBregJGUFTUMJnO2c3Mp3o65rUknKCgZDEs50TsLgnkKDS4DFE8dw5AtolsD29F1hT3C6I4IWrwh9N686Wi/3xNHiFdHYOw3HuPTbEwyGJNAsgXWPPuwpkP2LfbPrOQX6IstbZx9Pr+3oQHj+2z9QwkOBQ4G/QuDU3Uja3J9I7QeTZ1ax9Cc2M1x6ML15wSWs5r2cUlZ/aTErNt0auLIDNmDIdz3/CZaw0mqfwL4CAAAAAElFTkSuQmCC">
|
||||||
{% if status[deploy.machine_id] == 'running' %}
|
{% if status[deploy.machine_id] == 'running' %}
|
||||||
<button class="confirm command command-vmshutdown btn btn-default btn-warning" value="vmshutdown" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Shutdown</button>
|
<button class="confirm command command-shutdown btn btn-default btn-warning" value="shutdown" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Shutdown</button>
|
||||||
<button class="confirm command command-vmstop btn btn-default btn-danger" value="vmstop" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> Force Stop</button>
|
<button class="confirm command command-stop btn btn-default btn-danger" value="stop" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> Force Stop</button>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<img class="icon icons8-Remote-Control" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAC+0lEQVRYhcWXz04aURTGZ+HCB+jCB2Dh0kWXXbBh7sREsPuuTBc+QB+A1MBctKBLgtGYVuPChYmuak2mDWXuBGfU0mpDhWCoKMb/KK0Q7pwuxmGGQflTBr3JJMNd3N93z/edAzBMFxbiRQfC0haLCUEBMs36xWGnV+jpBqvpcvliAxyWeISJwPrF/icRwTAMw/rFfoSJwGLxzZNVw+kVejgs8Swf89p6sMsXG3B6hV79s54BhKVlxJPXVhEIk6jLFxvoGDw4Hu9zB+Wdkdlk3hOS960eI150cFiaQAGyOjge79P3Wb/Yz2JCOrJicDze5w7Jmbcfz4/CMoWJL0XwTMlH9wUN8SKHAmTVvMdhaYzDsVe2wPWnkQgOSxOIJ6MmUQ4Ok0Xb4M1EDL2Tn1mrwGJCbIU3E2EFIkyEjuBLuxRiWRXiORXW0ipMbzYWYU1+y51wH/zHsQrWdfEXYGm3tUx0dPNothZeqhjvhRLATJNKtAcPbqR865cVs8fFsgY7LQIsfqcwvUkhnjNEfd5X6zLhDm38Ng+r/4Z/SNAqSMgYoIhCoVDS9hPHal0wR+fTJ4gXuY7gYZnCQoJWS64cGqClXQrXdwLkw1oBvvXLylBQ3mtp8j3UanPbxnv+xvBeOtA6IFcwcrD6yxAw9uni2hOSs+ZR3DY8c6H5u3WkVm9L65sAAADS5zbD338zPC+Wobq//JPC2R8DXKZa6SOKjXD92c6rUCwDxLL14Zrb1iqig9uGMwzDuIPyjjlwEYVC6kyFq9taP8MyBSGjQqF0f9L1wLmDG6mW4YgXHSOzybz5kJWkYXD2qhaktxoAwEKiQzjDaL9QPJPKwZR4Wz1oZpPCzR0oail74m4Enxahc7i+OCy9GJ5ScmYREUUbOmGZwlpahdSZCitJtToLzPC2PW9VhB6yCjXmvNVzW+DNKqH7bs2DrfBGIma3aN33fVfgjUR0/eatingU+EMiHhVuFvFyUjkYnU+fDAXlvUeF68vpFXpdga/Pu/Gn8h8Gr4IF2ejgSgAAAABJRU5ErkJggg==">
|
<img class="icon icons8-Remote-Control" width="32" height="32" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAC+0lEQVRYhcWXz04aURTGZ+HCB+jCB2Dh0kWXXbBh7sREsPuuTBc+QB+A1MBctKBLgtGYVuPChYmuak2mDWXuBGfU0mpDhWCoKMb/KK0Q7pwuxmGGQflTBr3JJMNd3N93z/edAzBMFxbiRQfC0haLCUEBMs36xWGnV+jpBqvpcvliAxyWeISJwPrF/icRwTAMw/rFfoSJwGLxzZNVw+kVejgs8Swf89p6sMsXG3B6hV79s54BhKVlxJPXVhEIk6jLFxvoGDw4Hu9zB+Wdkdlk3hOS960eI150cFiaQAGyOjge79P3Wb/Yz2JCOrJicDze5w7Jmbcfz4/CMoWJL0XwTMlH9wUN8SKHAmTVvMdhaYzDsVe2wPWnkQgOSxOIJ6MmUQ4Ok0Xb4M1EDL2Tn1mrwGJCbIU3E2EFIkyEjuBLuxRiWRXiORXW0ipMbzYWYU1+y51wH/zHsQrWdfEXYGm3tUx0dPNothZeqhjvhRLATJNKtAcPbqR865cVs8fFsgY7LQIsfqcwvUkhnjNEfd5X6zLhDm38Ng+r/4Z/SNAqSMgYoIhCoVDS9hPHal0wR+fTJ4gXuY7gYZnCQoJWS64cGqClXQrXdwLkw1oBvvXLylBQ3mtp8j3UanPbxnv+xvBeOtA6IFcwcrD6yxAw9uni2hOSs+ZR3DY8c6H5u3WkVm9L65sAAADS5zbD338zPC+Wobq//JPC2R8DXKZa6SOKjXD92c6rUCwDxLL14Zrb1iqig9uGMwzDuIPyjjlwEYVC6kyFq9taP8MyBSGjQqF0f9L1wLmDG6mW4YgXHSOzybz5kJWkYXD2qhaktxoAwEKiQzjDaL9QPJPKwZR4Wz1oZpPCzR0oail74m4Enxahc7i+OCy9GJ5ScmYREUUbOmGZwlpahdSZCitJtToLzPC2PW9VhB6yCjXmvNVzW+DNKqH7bs2DrfBGIma3aN33fVfgjUR0/eatingU+EMiHhVuFvFyUjkYnU+fDAXlvUeF68vpFXpdga/Pu/Gn8h8Gr4IF2ejgSgAAAABJRU5ErkJggg==">
|
||||||
<button class="btn btn-default btn-info" onclick="window.open('/vmanager/command/vmvnc/{{ deploy.machine_id }}', '_blank');"><span class="glyphicon glyphicon-console" aria-hidden="true"></span> Console</button>
|
<button class="btn btn-default btn-info" onclick="window.open('/vmanager/command/vmvnc/{{ deploy.machine_id }}', '_blank');"><span class="glyphicon glyphicon-console" aria-hidden="true"></span> Console</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="command command-vmstart btn btn-default btn-success" value="vmstart" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</button>
|
<button class="command command-start btn btn-default btn-success" value="start" vmid="{{ deploy.machine_id }}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -52,7 +52,7 @@ addEventListener("DOMContentLoaded", function() {
|
||||||
<div class="panel panel-default">
|
<div class="panel panel-default">
|
||||||
<div class="panel-heading">{{ value['hostname'] }} ({{ key }})</div>
|
<div class="panel-heading">{{ value['hostname'] }} ({{ key }})</div>
|
||||||
<div class="panel-body"><p>
|
<div class="panel-body"><p>
|
||||||
<button class="btn btn-default btn-info" onclick="window.open('/vmvnc/{{ value['vmid'] }}','popUpWindow','height=768,width=1280,left=2,top=2,,scrollbars=no,menubar=no'); return false;"><span class="glyphicon glyphicon-console" aria-hidden="true"></span> Console</button>
|
<button class="btn btn-default btn-info" onclick="window.open('/vnc/{{ value['vmid'] }}','popUpWindow','height=768,width=1280,left=2,top=2,,scrollbars=no,menubar=no'); return false;"><span class="glyphicon glyphicon-console" aria-hidden="true"></span> Console</button>
|
||||||
<button class="command command-vmstart btn btn-default btn-success" value="vmstart" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</button>
|
<button class="command command-vmstart btn btn-default btn-success" value="vmstart" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-play" aria-hidden="true"></span> Start</button>
|
||||||
<button class="command command-vmshutdown btn btn-default btn-warning" value="vmshutdown" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Shutdown</button>
|
<button class="command command-vmshutdown btn btn-default btn-warning" value="vmshutdown" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-off" aria-hidden="true"></span> Shutdown</button>
|
||||||
<button class="command command-vmstop btn btn-default btn-danger" value="vmstop" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> Force Stop</button>
|
<button class="command command-vmstop btn btn-default btn-danger" value="vmstop" vmid="{{ value['vmid'] }}"><span class="glyphicon glyphicon-alert" aria-hidden="true"></span> Force Stop</button>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<p>{{ user.email }} encountered an error working with cube id: {{ cubeid }}<br />
|
<p>{{ user.email }} encountered an error working with id: {{ unit_id }}<br />
|
||||||
<br />
|
<br />
|
||||||
</p>
|
</p>
|
||||||
<p>Regards,
|
<p>Regards,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
User {{ user.email }} encountered an error working with cube id: {{ cubeid }}
|
User {{ user.email }} encountered an error working with id: {{ unit_id }}
|
||||||
|
|
||||||
Regards,
|
Regards,
|
||||||
Proxadmin
|
Proxadmin
|
||||||
|
|
|
@ -49,9 +49,11 @@ def createvm():
|
||||||
#no switches in the account. create one...
|
#no switches in the account. create one...
|
||||||
data = { 'clientid': str(current_user.pid),
|
data = { 'clientid': str(current_user.pid),
|
||||||
'clientemail': str(current_user.email),
|
'clientemail': str(current_user.email),
|
||||||
'region': str(selected_region.name)
|
'region': str(selected_region.name),
|
||||||
|
'type': 'bridge'
|
||||||
}
|
}
|
||||||
query = contact_proxmaster(data, 'brcreate')
|
#create bridge unit
|
||||||
|
query = contact_proxmaster(data, 'create')
|
||||||
if query is not None:
|
if query is not None:
|
||||||
bridge = Bridge(user_id=int(current_user.pid))
|
bridge = Bridge(user_id=int(current_user.pid))
|
||||||
db.session.add(bridge)
|
db.session.add(bridge)
|
||||||
|
@ -63,12 +65,13 @@ def createvm():
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
else:
|
else:
|
||||||
#bridge found. lets see on which slave it is so we can create the instance on the same slave.
|
#bridge found. lets see on which slave it is so we can create the instance on the same slave.
|
||||||
data = {}
|
data = { 'unit_id': int(selected_bridge.bridge_id),
|
||||||
query = contact_proxmaster(data, 'brquery', str(selected_bridge.bridge_id))
|
'type': 'bridge' }
|
||||||
|
query = contact_proxmaster(data, 'status')
|
||||||
if query is not None:
|
if query is not None:
|
||||||
newbridge = False
|
newbridge = False
|
||||||
else:
|
else:
|
||||||
flash('Point found but cannot be used1')
|
flash('Point found but cannot be used!')
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
|
|
||||||
#machine will be installed where the switch physically is
|
#machine will be installed where the switch physically is
|
||||||
|
@ -78,24 +81,23 @@ def createvm():
|
||||||
#create new machine...
|
#create new machine...
|
||||||
data = { 'clientid': str(current_user.pid),
|
data = { 'clientid': str(current_user.pid),
|
||||||
'clientemail': str(current_user.email),
|
'clientemail': str(current_user.email),
|
||||||
'hostname': str(form.servername.data) + '-c' + str(current_user.pid),
|
'hostname': 'c' + str(current_user.pid) + '-' + str(form.servername.data),
|
||||||
'region': str(selected_region.name),
|
'region': str(selected_region.name),
|
||||||
'slave': str(slave_name),
|
'slave': str(slave_name),
|
||||||
'type': 'kvm',
|
'type': 'deploy',
|
||||||
'cpu': '1',
|
'cpu': '1',
|
||||||
'mem': '512',
|
'mem': '512',
|
||||||
'hdd': '20',
|
'hdd': '20',
|
||||||
'eth0br': str(bridge_id),
|
'bridge': str(bridge_id)
|
||||||
'eth0ip': 'AUTO'
|
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
query = contact_proxmaster(data, 'vmcreate')
|
query = contact_proxmaster(data, 'create')
|
||||||
except:
|
except:
|
||||||
flash('Region not available! Please try again later...')
|
flash('Region not available! Please try again later...')
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
|
|
||||||
if query is not None:
|
if query is not None:
|
||||||
deployment = Deployment(user_id=int(current_user.pid), machine_alias=query['hostname'], machine_id=query['cube'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0)
|
deployment = Deployment(user_id=int(current_user.pid), machine_alias=query['hostname'], machine_id=query['unit_id'], machine_cpu=data['cpu'], machine_mem=data['mem'], machine_hdd=data['hdd'], enabled=True, protected=False, daysleft=15, warning=True, discount=0)
|
||||||
db.session.add(deployment)
|
db.session.add(deployment)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
flash('New device created successfully in region "{}".'.format(str(selected_region.description)))
|
flash('New device created successfully in region "{}".'.format(str(selected_region.description)))
|
||||||
|
@ -171,7 +173,7 @@ def activate(itemid=0):
|
||||||
'eth1ip': str(selected_address.ip)
|
'eth1ip': str(selected_address.ip)
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
query = contact_proxmaster(data, 'vmcreate')
|
query = contact_proxmaster(data, 'create')
|
||||||
except:
|
except:
|
||||||
flash('Region unreachable! Cannot create router. Please try again later...')
|
flash('Region unreachable! Cannot create router. Please try again later...')
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
|
@ -204,34 +206,35 @@ def activate(itemid=0):
|
||||||
return redirect(url_for('main.dashboard'))
|
return redirect(url_for('main.dashboard'))
|
||||||
return render_template('vmanager/activate.html', form=form, deploy=deploy, cpu_cost=cpu_cost, mem_cost=mem_cost, hdd_cost=hdd_cost, ppm=ppm, discount=discount, total=total, currency=owner.currency)
|
return render_template('vmanager/activate.html', form=form, deploy=deploy, cpu_cost=cpu_cost, mem_cost=mem_cost, hdd_cost=hdd_cost, ppm=ppm, discount=discount, total=total, currency=owner.currency)
|
||||||
|
|
||||||
@vmanager.route('/vmremove/<int:itemid>', methods=['GET', 'POST'])
|
@vmanager.route('/vmremove/<int:unit_id>', methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def remove(itemid=0):
|
def remove(unit_id=0):
|
||||||
data = {}
|
data = { 'unit_id': int(unit_id),
|
||||||
deploy = Deployment.query.filter_by(machine_id=int(itemid)).first()
|
'type': 'deploy' }
|
||||||
|
deploy = Deployment.query.filter_by(machine_id=int(unit_id)).first()
|
||||||
if current_user.is_administrator():
|
if current_user.is_administrator():
|
||||||
if deploy.protected is not True:
|
if deploy.protected is not True:
|
||||||
try:
|
try:
|
||||||
query = contact_proxmaster(data, 'vmremove', int(itemid))
|
query = contact_proxmaster(data, 'remove')
|
||||||
flash('Machine {} terminated'.format(itemid))
|
flash('Machine {} terminated'.format(unit_id))
|
||||||
deploy.deleted = True
|
deploy.deleted = True
|
||||||
deploy.enabled = False
|
deploy.enabled = False
|
||||||
deploy.warning = False
|
deploy.warning = False
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
except:
|
except:
|
||||||
flash('Cannot delete machine {}'.format(itemid))
|
flash('Cannot delete machine {}'.format(unit_id))
|
||||||
return redirect(url_for('admin.list_recyclebin'))
|
return redirect(url_for('admin.list_recyclebin'))
|
||||||
else:
|
else:
|
||||||
current_app.logger.warning('Deployment id:{} is protected! Cannot be removed'.format(itemid))
|
current_app.logger.warning('Deployment id:{} is protected! Cannot be removed'.format(unit_id))
|
||||||
else:
|
else:
|
||||||
current_app.logger.warning('[WARNING] Unauthorized attempt to remove Deployment id:{}'.format(itemid))
|
current_app.logger.warning('[WARNING] Unauthorized attempt to remove Deployment id:{}'.format(unit_id))
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
@vmanager.route('/command/<cmd>/<int:vmid>')
|
@vmanager.route('/command/<cmd>/<int:unit_id>')
|
||||||
@login_required
|
@login_required
|
||||||
def command(cmd=None, vmid=0):
|
def command(cmd=None, unit_id=0):
|
||||||
#checks whether this is a valid command
|
#checks whether this is a valid command
|
||||||
valid_commands = ['vmstatus', 'vmstart', 'vmshutdown', 'vmstop', 'vmvnc']
|
valid_commands = ['status', 'start', 'shutdown', 'stop', 'vmvnc']
|
||||||
if not cmd in valid_commands:
|
if not cmd in valid_commands:
|
||||||
current_app.logger.warning(cmd + ' is not a valid command!')
|
current_app.logger.warning(cmd + ' is not a valid command!')
|
||||||
abort(404)
|
abort(404)
|
||||||
|
@ -242,20 +245,21 @@ def command(cmd=None, vmid=0):
|
||||||
for invcls in result:
|
for invcls in result:
|
||||||
inventory.extend([invcls.machine_id])
|
inventory.extend([invcls.machine_id])
|
||||||
|
|
||||||
data = {}
|
data = { 'type': 'deploy',
|
||||||
|
'unit_id': int(unit_id) }
|
||||||
|
|
||||||
if current_user.is_administrator():
|
if current_user.is_administrator():
|
||||||
#current_app.logger.warning('[ADMIN] Access override for cube id:{}'.format(vmid))
|
#current_app.logger.warning('[ADMIN] Access override for cube id:{}'.format(unitunit__id))
|
||||||
db_result = contact_proxmaster(data, cmd, int(vmid))
|
db_result = contact_proxmaster(data, cmd)
|
||||||
if cmd == 'vmvnc':
|
if cmd == 'vmvnc':
|
||||||
return redirect(db_result['url'])
|
return redirect(db_result['url'])
|
||||||
else:
|
else:
|
||||||
#checks if current user owns this vmid
|
#checks if current user owns this unit_id
|
||||||
if not vmid in inventory:
|
if not unit_id in inventory:
|
||||||
current_app.logger.warning('[{}] Access violation with cube id: {}'.format(current_user.email, vmid))
|
current_app.logger.warning('[{}] Access violation with unit id: {}'.format(current_user.email, unit_id))
|
||||||
#TODO: log ips
|
#TODO: log ips
|
||||||
else:
|
else:
|
||||||
db_result = contact_proxmaster(data, cmd, int(vmid))
|
db_result = contact_proxmaster(data, cmd)
|
||||||
#print(db_result)
|
#print(db_result)
|
||||||
if cmd == 'vmvnc':
|
if cmd == 'vmvnc':
|
||||||
return redirect(db_result['url'])
|
return redirect(db_result['url'])
|
||||||
|
|
Loading…
Reference in a new issue