Skip to content

Commit 7e1d87d

Browse files
author
Bryan Fu
committed
Merge pull request #4 from wuy1/master
Add change memory WebUI
2 parents 8dfa137 + 1f5fba5 commit 7e1d87d

12 files changed

Lines changed: 163 additions & 2 deletions

File tree

AutoDeployUI/urls.py

100644100755
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
# vNode Customization
103103
url(r'^vnodecustom/adddrive$', 'app.view.vnodecustom.adddrive', name='adddrive'),
104104
url(r'^vnodecustom/addnic$', 'app.view.vnodecustom.addnic', name='addnic'),
105+
url(r'^vnodecustom/changemem$', 'app.view.vnodecustom.changemem', name='changemem'),
105106

106107
# Support Page
107108
url(r'^support$', 'app.view.support.support', name='support'),

app/templates/app/layout.html

100644100755
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@
131131
<li>
132132
<a href="{% url 'addnic' %}"><i class="fa fa-pinterest fa-fw"></i> Add NIC </a>
133133
</li>
134+
<li>
135+
<a href="{% url 'changemem' %}"><i class="fa fa-pinterest fa-fw"></i> Change Memory </a>
136+
</li>
134137
</ul>
135138
</li>
136139
<li>
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
{% extends "app/layout.html" %}
2+
3+
{% block content %}
4+
<div class="container-fluid">
5+
<div class="row">
6+
<h1 class="page-header">Change Memory</h1>
7+
</div>
8+
<div class="row" style="width: 50%">
9+
<div id='progressbar' style='display:none' align="center">
10+
<img src='../../static/app/img/progressbar.gif'/>
11+
</div>
12+
<form action="changememory" class="crawl" method="POST" id="ChangeMemoryForm">
13+
{% csrf_token %}
14+
{{ form.duration.errors }}
15+
{{ form.nodeCount.errors }}
16+
<p style="color: #e38d13">{{ message }}</p>
17+
<table class="table table-striped table-bordered table-hover" id="ChangeMemoryTable">
18+
<tbody>
19+
<tr>
20+
<td style="width: 30%;">ESXi</td>
21+
<td style="width: 70%;">
22+
<select id="esxihost" name="esxihost" class="form-control">
23+
<option selected value="0">Please Select...</option>
24+
{% if esxihosts %}
25+
{% for esxihost in esxihosts %}
26+
<option value="{{ esxihost.id }}">{{ esxihost.esxiIP }}</option>
27+
{% endfor %}
28+
{% endif %}
29+
</select>
30+
</td>
31+
</tr>
32+
<tr>
33+
<td style="width: 30%;">VM Name</td>
34+
<td style="width: 70%;">
35+
<select id="vmname" name="vmname" class="form-control" onchange="seleceVMName.value = this.options[this.selectedIndex].value">
36+
<option value="0">Please Select...</option>
37+
</select>
38+
<input type="hidden" name="seleceVMName" id="seleceVMName" value="0">
39+
</td>
40+
</tr>
41+
<tr>
42+
<td style="width: 30%;">Memory Size(MB)</td>
43+
<td style="width: 70%;">
44+
<input name="memorysize" id="memorysize" placeholder="4">
45+
</td>
46+
</tr>
47+
<tr>
48+
<td style="width: 30%;"></td>
49+
<td style="width: 70%;"><button id="changeMemorybutton" name="changeMemorybutton" type="button" class="btn btn-default">Update Memory</button>
50+
</td>
51+
</tr>
52+
</tbody>
53+
</table>
54+
</form>
55+
</div>
56+
</div>
57+
58+
<script type="text/javascript" src="../../static/app/scripts/jquery.min.js"></script>
59+
60+
<script>
61+
$('#esxihost').change(function() {
62+
var esxi = $('#esxihost').val()
63+
$.ajax({
64+
type: 'GET',
65+
url: '../api/v1/esxi/'+esxi+'/getvms',
66+
dataType: 'json',
67+
success: function (output) {
68+
if(output.indexOf("Failed") >= 0){
69+
var $vmname = $('#vmname').empty();
70+
$vmname.append('<option selected value="0">Please Select...</option>')
71+
alert("Fail to get the vms information. Please check your ESXi host information!");
72+
}
73+
else{
74+
var parsed = JSON.parse(output);
75+
var $vmname = $('#vmname').empty();
76+
$vmname.append('<option selected value="0">Please Select...</option>')
77+
$.each(parsed, function(index, value) {
78+
var $html = '<option value="' + value["name"] + '">' + value["name"] + '</option>'
79+
$('#vmname').append($html)
80+
})
81+
}
82+
},
83+
error: function(){
84+
alert("Fail to get the vms information. Please consult system admin for the permission.");
85+
}
86+
});
87+
})
88+
89+
$('#changeMemorybutton').click(function() {
90+
$('#progressbar').show();
91+
var id = $('#esxihost').val();
92+
var vmname = $('#vmname').val();
93+
var size = $('#memorysize').val();
94+
$.ajax({
95+
type: 'POST',
96+
url: '../api/v1/esxi/'+ id +'/changemem',
97+
data: {'csrfmiddlewaretoken': '{{csrf_token}}', "id": id, "name": vmname, "size": size},
98+
dataType: 'json',
99+
success: function (output) {
100+
$('#progressbar').hide();
101+
if(output.indexOf("fail") >= 0){
102+
alert("Fail to update memory information, please power off your VM first!");
103+
}
104+
else {
105+
$('#progressbar').hide();
106+
alert("Update memory successfully!")
107+
}
108+
},
109+
error: function(){
110+
$('#progressbar').hide();
111+
alert("Fail to update memory. Please power off your VM first.");
112+
}
113+
});
114+
})
115+
</script>
116+
117+
{% endblock %}

app/view/docker.py

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from django.shortcuts import render
1414
from django.http import HttpRequest
1515
from django.template import RequestContext
16+
from django.contrib.auth.decorators import login_required
1617

18+
@login_required
1719
def docker(request):
1820
assert isinstance(request, HttpRequest)
1921
return render(

app/view/esxi.py

100644100755
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121

2222
from app.form.forms import ESXiAddForm
2323
from app.form.forms import ESXiEditForm
24+
from django.contrib.auth.decorators import login_required
2425

2526
title = "vRack System"
2627

28+
@login_required
2729
def esxi(request):
2830
esxiHome = ESXi.objects.all()
2931
assert isinstance(request, HttpRequest)
@@ -37,6 +39,7 @@ def esxi(request):
3739
})
3840
)
3941

42+
@login_required
4043
def esxiadd(request):
4144
c = {}
4245
c.update(csrf(request))
@@ -77,6 +80,7 @@ def esxiadd(request):
7780
}
7881
)
7982

83+
@login_required
8084
def esxiupdate(request):
8185
c = {}
8286
c.update(csrf(request))
@@ -125,6 +129,7 @@ def esxiupdate(request):
125129
})
126130
)
127131

132+
@login_required
128133
def esxidelete(request):
129134
esxiHost = request.GET.get('esxiip')
130135

app/view/kvm.py

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from django.shortcuts import render
1414
from django.http import HttpRequest
1515
from django.template import RequestContext
16+
from django.contrib.auth.decorators import login_required
1617

18+
@login_required
1719
def kvm(request):
1820
assert isinstance(request, HttpRequest)
1921
return render(

app/view/support.py

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from django.shortcuts import render
1414
from django.http import HttpRequest
1515
from django.template import RequestContext
16+
from django.contrib.auth.decorators import login_required
1617

18+
@login_required
1719
def support(request):
1820
"""Renders the contact page."""
1921
assert isinstance(request, HttpRequest)

app/view/views.py

100644100755
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def esxi_network(request, id, format=None):
7777
return Response(network, status=status.HTTP_200_OK)
7878

7979

80-
@api_view(('POST'),)
80+
@api_view(('POST',))
8181
def esxi_change_memory(request, id, format=None):
8282
"""
8383
Change VM Memory
@@ -107,6 +107,8 @@ def esxi_change_memory(request, id, format=None):
107107
content = vRackBuilder.esxi_change_memory(host, usr, pwd, request.data["name"], request.data["size"])
108108
if "fail" in content.lower() or "can't" in content.lower():
109109
return Response("Fail to Change VM memory size, please check your VM or ESXi", status=status.HTTP_500_INTERNAL_SERVER_ERROR)
110+
else:
111+
return Response(content, status=status.HTTP_200_OK)
110112

111113

112114
@api_view(('POST',))

app/view/vnode.py

100644100755
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@
1212
from django.template.context_processors import csrf
1313
from django.http import HttpRequest
1414
from django.template import RequestContext
15+
from django.contrib.auth.decorators import login_required
1516

1617
from app.form.forms import NodeDeployForm
1718

1819
from AutoDeployUI.models import ESXi
1920

2021
title = "vRackSystem"
2122

22-
23+
@login_required
2324
def uploadova(request):
2425
c = {}
2526
c.update(csrf(request))
@@ -32,6 +33,7 @@ def uploadova(request):
3233
}
3334
)
3435

36+
@login_required
3537
def vnodedeploy(request):
3638
c = {}
3739
c.update(csrf(request))
@@ -49,6 +51,7 @@ def vnodedeploy(request):
4951
}
5052
)
5153

54+
@login_required
5255
def vnodecontrol(request):
5356
c = {}
5457
c.update(csrf(request))

app/view/vnodecustom.py

100644100755
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
from django.http import HttpRequest
1515
from django.template import RequestContext
1616
from django.template.context_processors import csrf
17+
from django.contrib.auth.decorators import login_required
1718

1819
from AutoDeployUI.models import ESXi
1920
esxihosts = ESXi.objects.all()
2021

22+
@login_required
2123
def adddrive(request):
2224
c = {}
2325
c.update(csrf(request))
@@ -31,6 +33,7 @@ def adddrive(request):
3133
})
3234
)
3335

36+
@login_required
3437
def addnic(request):
3538
c = {}
3639
c.update(csrf(request))
@@ -42,4 +45,18 @@ def addnic(request):
4245
{
4346
'esxihosts': esxihosts,
4447
})
48+
)
49+
50+
@login_required
51+
def changemem(request):
52+
c = {}
53+
c.update(csrf(request))
54+
assert isinstance(request, HttpRequest)
55+
return render(
56+
request,
57+
'../templates/vnodecustom/changemem.html',
58+
context_instance = RequestContext(request,
59+
{
60+
'esxihosts': esxihosts,
61+
})
4562
)

0 commit comments

Comments
 (0)