mirror of
https://github.com/retspen/webvirtcloud
synced 2024-12-24 23:25:24 +00:00
settings tab for changing devices/interface/source/bridge added
TODO: handle multiple interfaces
This commit is contained in:
parent
1499af1eef
commit
50ddda98f2
4 changed files with 59 additions and 2 deletions
|
@ -491,6 +491,11 @@
|
||||||
{% trans "VNC" %}
|
{% trans "VNC" %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
<li role="presentation">
|
||||||
|
<a href="#network" aria-controls="network" role="tab" data-toggle="tab">
|
||||||
|
{% trans "Network" %}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
<li role="presentation">
|
<li role="presentation">
|
||||||
<a href="#clone" aria-controls="clone" role="tab" data-toggle="tab">
|
<a href="#clone" aria-controls="clone" role="tab" data-toggle="tab">
|
||||||
{% trans "Clone" %}
|
{% trans "Clone" %}
|
||||||
|
@ -652,6 +657,33 @@
|
||||||
</form>
|
</form>
|
||||||
<div class="clearfix"></div>
|
<div class="clearfix"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="network">
|
||||||
|
<p>{% trans "Assign network device to bridge" %}</p>
|
||||||
|
<form class="form-horizontal" action="" method="post" role="form">{% csrf_token %}
|
||||||
|
<p style="font-weight:bold;">{% trans "Network devices" %}</p>
|
||||||
|
{% for network in networks %}
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-sm-3 control-label" style="font-weight:normal;">eth{{ forloop.counter0 }}</label>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" name="net-{{ forloop.counter0 }}" value="{{ network.mac }}"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<input type="text" class="form-control" name="net-source-{{ forloop.counter0 }}" value="{{ network.nic }}"/>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-1">
|
||||||
|
<button type="button" class="btn btn-sm btn-success pull-left" name="random-mac-{{ forloop.counter0 }}"
|
||||||
|
onclick="random_mac({{ forloop.counter0 }})" style="margin-top: 2px;">{% trans "Random MAC" %}</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% ifequal status 5 %}
|
||||||
|
<button type="submit" class="btn btn-lg btn-success pull-right" name="change_network">{% trans "Change" %}</button>
|
||||||
|
{% else %}
|
||||||
|
<button class="btn btn-lg btn-success pull-right disabled" name="change_network">{% trans "Change" %}</button>
|
||||||
|
{% endifequal %}
|
||||||
|
</form>
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="clone">
|
<div role="tabpanel" class="tab-pane tab-pane-bordered" id="clone">
|
||||||
<p style="font-weight:bold;">{% trans "Create a clone" %}</p>
|
<p style="font-weight:bold;">{% trans "Create a clone" %}</p>
|
||||||
<form class="form-horizontal" action="" method="post" role="form">{% csrf_token %}
|
<form class="form-horizontal" action="" method="post" role="form">{% csrf_token %}
|
||||||
|
@ -1117,7 +1149,7 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (~$.inArray(hash, ['#media', '#clone', '#autostart', '#xmledit', '#vncsettings', '#migrate'])) {
|
if (~$.inArray(hash, ['#media', '#network', '#clone', '#autostart', '#xmledit', '#vncsettings', '#migrate'])) {
|
||||||
var btnsect = $('#navbtn>li>a');
|
var btnsect = $('#navbtn>li>a');
|
||||||
$(btnsect).each(function () {
|
$(btnsect).each(function () {
|
||||||
if ($(this).attr('href') === '#settings') {
|
if ($(this).attr('href') === '#settings') {
|
||||||
|
|
|
@ -503,6 +503,18 @@ def instance(request, compute_id, vname):
|
||||||
addlogmsg(request.user.username, instance.name, msg)
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
return HttpResponseRedirect(reverse('instance', args=[compute_id, clone_data['name']]))
|
return HttpResponseRedirect(reverse('instance', args=[compute_id, clone_data['name']]))
|
||||||
|
|
||||||
|
if 'change_network' in request.POST:
|
||||||
|
network_data = {}
|
||||||
|
|
||||||
|
for post in request.POST:
|
||||||
|
if 'net-' in post:
|
||||||
|
network_data[post] = request.POST.get(post, '')
|
||||||
|
|
||||||
|
conn.change_network(network_data)
|
||||||
|
msg = _("Edit network")
|
||||||
|
addlogmsg(request.user.username, instance.name, msg)
|
||||||
|
return HttpResponseRedirect(request.get_full_path() + '#network')
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
except libvirtError as lib_err:
|
except libvirtError as lib_err:
|
||||||
|
|
|
@ -679,3 +679,16 @@ class wvmInstance(wvmConnect):
|
||||||
storage.clone_volume(vol_name, target_file)
|
storage.clone_volume(vol_name, target_file)
|
||||||
|
|
||||||
self._defineXML(ElementTree.tostring(tree))
|
self._defineXML(ElementTree.tostring(tree))
|
||||||
|
|
||||||
|
def change_network(self, network_data):
|
||||||
|
xml = self._XMLDesc(VIR_DOMAIN_XML_SECURE)
|
||||||
|
tree = ElementTree.fromstring(xml)
|
||||||
|
|
||||||
|
for interface in tree.findall('devices/interface'):
|
||||||
|
if interface.get('type') == 'bridge':
|
||||||
|
source = interface.find('source')
|
||||||
|
source.set('bridge', network_data['net-source-0'])
|
||||||
|
|
||||||
|
new_xml = ElementTree.tostring(tree)
|
||||||
|
self._defineXML(new_xml)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
|
||||||
SECRET_KEY = '4y(f4rfqc6f2!i8_vfuu)kav6tdv5#sc=n%o451dm+th0&3uci'
|
SECRET_KEY = '4y(f4rfqc6f2!i8_vfuu)kav6tdv5#sc=n%o451dm+th0&3uci'
|
||||||
|
|
||||||
DEBUG = False
|
DEBUG = True
|
||||||
|
|
||||||
TEMPLATE_DEBUG = DEBUG
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue