mirror of
				https://github.com/retspen/webvirtcloud
				synced 2025-07-31 12:41:08 +00:00 
			
		
		
		
	adding enable/disable cpu hotplug, live add/remove vcpu to instance.
This commit is contained in:
		
							parent
							
								
									e4223dde5d
								
							
						
					
					
						commit
						49e179590e
					
				
					 3 changed files with 130 additions and 39 deletions
				
			
		|  | @ -363,10 +363,11 @@ | |||
|                         <div class="tab-content"> | ||||
|                             <div role="tabpanel" class="tab-pane tab-pane-bordered active" id="resizevm_cpu"> | ||||
|                                 {% if request.user.is_superuser or request.user.is_staff or userinstance.is_change %} | ||||
|                                     {% if status == 5 or not vcpus %} | ||||
|                                     <form class="form-horizontal" method="post" role="form">{% csrf_token %} | ||||
|                                         <p style="font-weight:bold;">{% trans "Logical host CPUs" %} : {{ vcpu_host }}</p> | ||||
|                                         <div class="form-group"> | ||||
|                                             <label class="col-sm-4 control-label" style="font-weight:normal;"> {% trans "Current allocation" %}</label> | ||||
|                                             <label class="col-sm-4 control-label" style="font-weight:normal;"> {% trans "Current Allocation" %}</label> | ||||
|                                             <div class="col-sm-4"> | ||||
|                                                 <select name="cur_vcpu" class="form-control"> | ||||
|                                                     {% for cpu in vcpu_range %} | ||||
|  | @ -380,7 +381,7 @@ | |||
|                                             </div> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Maximum allocation" %}</label> | ||||
|                                             <label class="col-sm-4 control-label" style="font-weight:normal;">{% trans "Maximum Allocation" %}</label> | ||||
|                                             <div class="col-sm-4"> | ||||
|                                                 <select name="vcpu" class="form-control"> | ||||
|                                                     {% for cpu in vcpu_range %} | ||||
|  | @ -396,6 +397,28 @@ | |||
|                                             <button class="btn btn-lg btn-success pull-right disabled">{% trans "Resize" %}</button> | ||||
|                                         {% endifequal %} | ||||
|                                     </form> | ||||
|                                     <div class="clearfix"></div> | ||||
|                                     {% else %} | ||||
|                                         <p style="font-weight:bold;">{% trans "Logical Instance Active/Maximum CPUs" %} : {{ cur_vcpu }} / {{ vcpu }} </p> | ||||
|                                         <div class="col-sm-3"></div> | ||||
|                                         <div class="col-sm-6"> | ||||
|                                             {% for id, vcpu in vcpus.items %} | ||||
|                                                 <form method="post" role="form">{% csrf_token %} | ||||
|                                                 <div class="col-sm-3"> | ||||
|                                                      <input name="id" value="{{ id }}" hidden/> | ||||
|                                                      {% if vcpu.enabled == 'yes' and vcpu.hotpluggable == "yes" %} | ||||
|                                                             <button type="submit" class="btn btn-block btn-success" value="False" name="set_vcpu" title="Disable">{{ id }}</button> | ||||
|                                                      {% elif vcpu.enabled == 'yes' and vcpu.hotpluggable == "no" %} | ||||
|                                                             <button type="button" class="btn btn btn-block btn-info" title="Constant">{{ id }}</button> | ||||
|                                                      {% else %} | ||||
|                                                             <button type="submit" class="btn btn btn-block btn-default" value="True" name="set_vcpu" title="Enable">{{ id }}</button> | ||||
|                                                      {% endif %} | ||||
|                                                 </div> | ||||
|                                                 </form> | ||||
|                                             {% endfor %} | ||||
|                                         </div> | ||||
|                                         <div class="col-sm-3"></div> | ||||
|                                     {% endif %} | ||||
|                                 {% else %} | ||||
|                                     {% trans "You don't have permission for resizing instance" %} | ||||
|                                     <button class="btn btn-lg btn-success pull-right disabled">{% trans "Resize" %}</button> | ||||
|  | @ -1358,6 +1381,30 @@ | |||
|                             </form> | ||||
|                             <div class="clearfix"></div> | ||||
|                         </div> | ||||
|                          <div class="well"> | ||||
|                             <p>{% trans "To set instance vCPUs hotpluggable" %}</p> | ||||
|                             <form class="form-horizontal" method="post" role="form">{% csrf_token %} | ||||
|                                 <div class="form-group"> | ||||
|                                     <label for="video_model_select" class="col-sm-3 control-label">{% trans "vCPU Hot Plug" %}</label> | ||||
|                                     <div class="col-sm-6"> | ||||
|                                       <div class="input-group"> | ||||
|                                         <select id="vcpu_hotplug" class="form-control" name="vcpu_hotplug"> | ||||
|                                             <option value="True" {% if vcpus %} selected {% endif %}>{% trans 'Enabled' %}</option> | ||||
|                                             <option value="False" {% if not vcpus %} selected {% endif %}>{% trans 'Disabled' %}</option> | ||||
|                                         </select> | ||||
|                                         <span class="input-group-btn"> | ||||
|                                         {% if status == 5 %} | ||||
|                                             <button type="submit" class="btn btn-success" name="set_vcpu_hotplug">{% trans "Set" %}</button> | ||||
|                                         {% else %} | ||||
|                                             <button class="btn btn-success" name="set_vcpu_hotplug" disabled>{% trans "Set" %}</button> | ||||
|                                         {% endif %} | ||||
|                                         </span> | ||||
|                                       </div> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                             </form> | ||||
|                             <div class="clearfix"></div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     {% endif %} | ||||
|                 </div> | ||||
|  |  | |||
|  | @ -26,6 +26,7 @@ from libvirt import libvirtError, VIR_DOMAIN_XML_SECURE | |||
| from logs.views import addlogmsg | ||||
| from django.conf import settings | ||||
| from django.contrib import messages | ||||
| from collections import OrderedDict | ||||
| 
 | ||||
| 
 | ||||
| @login_required | ||||
|  | @ -44,7 +45,7 @@ def allinstances(request): | |||
|     :param request: | ||||
|     :return: | ||||
|     """ | ||||
|     all_host_vms = {} | ||||
|     all_host_vms = OrderedDict() | ||||
|     error_messages = [] | ||||
|     computes = Compute.objects.all().order_by("name") | ||||
| 
 | ||||
|  | @ -76,7 +77,7 @@ def instances(request, compute_id): | |||
|     :param compute_id | ||||
|     :return: | ||||
|     """ | ||||
|     all_host_vms = {} | ||||
|     all_host_vms = OrderedDict() | ||||
|     error_messages = [] | ||||
|     compute = get_object_or_404(Compute, pk=compute_id) | ||||
| 
 | ||||
|  | @ -266,6 +267,7 @@ def instance(request, compute_id, vname): | |||
|         boot_order = conn.get_bootorder() | ||||
|         vcpu = conn.get_vcpu() | ||||
|         cur_vcpu = conn.get_cur_vcpu() | ||||
|         vcpus = conn.get_vcpus() | ||||
|         uuid = conn.get_uuid() | ||||
|         memory = conn.get_memory() | ||||
|         cur_memory = conn.get_cur_memory() | ||||
|  | @ -668,6 +670,29 @@ def instance(request, compute_id, vname): | |||
|                     addlogmsg(request.user.username, instance.name, msg) | ||||
|                     return HttpResponseRedirect(request.get_full_path() + '#suspend') | ||||
| 
 | ||||
|                 if 'set_vcpu' in request.POST: | ||||
|                     id = request.POST.get('id', '') | ||||
|                     enabled = request.POST.get('set_vcpu', '') | ||||
|                     if enabled == 'True': | ||||
|                         conn.set_vcpu(id, 1) | ||||
|                     else: | ||||
|                         conn.set_vcpu(id, 0) | ||||
|                     msg = _("vCPU {} is enabled={}".format(id, enabled)) | ||||
|                     messages.success(request, msg) | ||||
|                     addlogmsg(request.user.username, instance.name, msg) | ||||
|                     return HttpResponseRedirect(request.get_full_path() + '#resize') | ||||
| 
 | ||||
|                 if 'set_vcpu_hotplug' in request.POST: | ||||
|                     status = request.POST.get('vcpu_hotplug', '') | ||||
|                     msg = _("vCPU Hot-plug is enabled={}".format(status)) | ||||
|                     try: | ||||
|                         conn.set_vcpu_hotplug(eval(status)) | ||||
|                     except libvirtError as lib_err: | ||||
|                         messages.error(request, lib_err.message) | ||||
|                     messages.success(request, msg) | ||||
|                     addlogmsg(request.user.username, instance.name, msg) | ||||
|                     return HttpResponseRedirect(request.get_full_path() + '#resize') | ||||
| 
 | ||||
|                 if 'set_autostart' in request.POST: | ||||
|                     conn.set_autostart(1) | ||||
|                     msg = _("Set autostart") | ||||
|  | @ -1036,7 +1061,7 @@ def get_host_instances(request, comp): | |||
|             inst_on_db = Instance(compute_id=comp["id"], name=inst_name, uuid=info['uuid']) | ||||
|             inst_on_db.save() | ||||
| 
 | ||||
|     all_host_vms = {} | ||||
|     all_host_vms = OrderedDict() | ||||
|     status = connection_manager.host_is_up(comp.type, comp.hostname) | ||||
| 
 | ||||
|     if status is True: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue