Merge "Allow CPU profiles with isolated cores"
This commit is contained in:
commit
8a2ee04282
@ -31,7 +31,9 @@ class EditCpuFunctions(tables.LinkAction):
|
|||||||
|
|
||||||
def allowed(self, request, cpufunction=None):
|
def allowed(self, request, cpufunction=None):
|
||||||
host = self.table.kwargs['host']
|
host = self.table.kwargs['host']
|
||||||
return host._administrative == 'locked'
|
allowed = host._administrative == 'locked' and \
|
||||||
|
'worker' in host.subfunctions
|
||||||
|
return allowed
|
||||||
|
|
||||||
|
|
||||||
class CreateCpuProfile(tables.LinkAction):
|
class CreateCpuProfile(tables.LinkAction):
|
||||||
@ -45,7 +47,10 @@ class CreateCpuProfile(tables.LinkAction):
|
|||||||
return reverse(self.url, args=(host_id,))
|
return reverse(self.url, args=(host_id,))
|
||||||
|
|
||||||
def allowed(self, request, cpufunction=None):
|
def allowed(self, request, cpufunction=None):
|
||||||
return not stx_api.sysinv.is_system_mode_simplex(request)
|
host = self.table.kwargs['host']
|
||||||
|
allowed = not stx_api.sysinv.is_system_mode_simplex(request) and \
|
||||||
|
'worker' in host.subfunctions
|
||||||
|
return allowed
|
||||||
|
|
||||||
|
|
||||||
def get_function_name(datum):
|
def get_function_name(datum):
|
||||||
|
@ -126,34 +126,10 @@ class HostCpuProfile(CpuProfile):
|
|||||||
def profile_applicable(self, profile):
|
def profile_applicable(self, profile):
|
||||||
if self.number_of_cpu == profile.number_of_cpu and \
|
if self.number_of_cpu == profile.number_of_cpu and \
|
||||||
self.cores_per_cpu == profile.cores_per_cpu:
|
self.cores_per_cpu == profile.cores_per_cpu:
|
||||||
return self.check_profile_core_functions(profile)
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return not True
|
|
||||||
|
|
||||||
def check_profile_core_functions(self, profile):
|
|
||||||
platform_cores = 0
|
|
||||||
vswitch_cores = 0
|
|
||||||
shared_cores = 0
|
|
||||||
vm_cores = 0
|
|
||||||
isolated_cores = 0
|
|
||||||
for cpu in profile.processors:
|
|
||||||
platform_cores += cpu.platform
|
|
||||||
vswitch_cores += cpu.vswitch
|
|
||||||
shared_cores += cpu.shared
|
|
||||||
vm_cores += cpu.vms
|
|
||||||
isolated_cores += cpu.isolated
|
|
||||||
|
|
||||||
result = True
|
|
||||||
if platform_cores == 0:
|
|
||||||
result = False
|
|
||||||
elif 'worker' in self.personality and vswitch_cores == 0:
|
|
||||||
result = False
|
|
||||||
elif 'worker' in self.personality and vm_cores == 0:
|
|
||||||
result = False
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def compress_range(c_list):
|
def compress_range(c_list):
|
||||||
c_list.append(999)
|
c_list.append(999)
|
||||||
|
@ -70,17 +70,6 @@ def ifprofile_applicable(request, host, profile):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def cpuprofile_applicable(host, profile):
|
|
||||||
if (host.sockets == profile.sockets and
|
|
||||||
host.physical_cores == profile.physical_cores and
|
|
||||||
host.hyperthreading == profile.hyperthreading):
|
|
||||||
errorstring = icpu_utils.check_core_functions(host.subfunctions,
|
|
||||||
profile.cpus)
|
|
||||||
if not errorstring:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def diskprofile_applicable(host, diskprofile):
|
def diskprofile_applicable(host, diskprofile):
|
||||||
# if host contain sufficient number of disks for diskprofile
|
# if host contain sufficient number of disks for diskprofile
|
||||||
if not len(host.disks) >= len(diskprofile.disks):
|
if not len(host.disks) >= len(diskprofile.disks):
|
||||||
@ -328,6 +317,7 @@ class UpdateHostInfoAction(workflows.Action):
|
|||||||
personality = self.initial['personality']
|
personality = self.initial['personality']
|
||||||
|
|
||||||
mem_profile_configurable = False
|
mem_profile_configurable = False
|
||||||
|
cpu_profile_configurable = False
|
||||||
|
|
||||||
if personality and self.system_mode != constants.SYSTEM_MODE_SIMPLEX:
|
if personality and self.system_mode != constants.SYSTEM_MODE_SIMPLEX:
|
||||||
self.fields['personality'].widget.attrs['readonly'] = 'readonly'
|
self.fields['personality'].widget.attrs['readonly'] = 'readonly'
|
||||||
@ -342,38 +332,13 @@ class UpdateHostInfoAction(workflows.Action):
|
|||||||
|
|
||||||
if 'worker' in host.subfunctions:
|
if 'worker' in host.subfunctions:
|
||||||
mem_profile_configurable = True
|
mem_profile_configurable = True
|
||||||
|
cpu_profile_configurable = True
|
||||||
host.memory = stx_api.sysinv.host_memory_list(
|
host.memory = stx_api.sysinv.host_memory_list(
|
||||||
self.request, host.uuid)
|
self.request, host.uuid)
|
||||||
else:
|
else:
|
||||||
del self.fields['memoryProfile']
|
del self.fields['memoryProfile']
|
||||||
|
|
||||||
if host.nodes and host.cpus and host.ports:
|
if host.nodes and host.cpus and host.ports:
|
||||||
# Populate Available Cpu Profile Choices
|
|
||||||
try:
|
|
||||||
avail_cpu_profile_list = \
|
|
||||||
stx_api.sysinv.host_cpuprofile_list(self.request)
|
|
||||||
|
|
||||||
host_profile = icpu_utils.HostCpuProfile(
|
|
||||||
host.subfunctions,
|
|
||||||
host.cpus, host.nodes)
|
|
||||||
|
|
||||||
cpu_profile_tuple_list = [
|
|
||||||
('', _("Copy from an available cpu profile."))]
|
|
||||||
for ip in avail_cpu_profile_list:
|
|
||||||
nodes = stx_api.sysinv.host_node_list(self.request,
|
|
||||||
ip.uuid)
|
|
||||||
cpu_profile = icpu_utils.CpuProfile(ip.cpus, nodes)
|
|
||||||
if host_profile.profile_applicable(cpu_profile):
|
|
||||||
cpu_profile_tuple_list.append(
|
|
||||||
(ip.profilename, ip.profilename))
|
|
||||||
|
|
||||||
except Exception:
|
|
||||||
exceptions.handle(self.request, _(
|
|
||||||
'Unable to retrieve list of cpu profiles.'))
|
|
||||||
cpu_profile_tuple_list = []
|
|
||||||
|
|
||||||
self.fields['cpuProfile'].choices = cpu_profile_tuple_list
|
|
||||||
|
|
||||||
# Populate Available Interface Profile Choices
|
# Populate Available Interface Profile Choices
|
||||||
try:
|
try:
|
||||||
avail_interface_profile_list = \
|
avail_interface_profile_list = \
|
||||||
@ -394,7 +359,6 @@ class UpdateHostInfoAction(workflows.Action):
|
|||||||
self.fields[
|
self.fields[
|
||||||
'interfaceProfile'].choices = interface_profile_tuple_list
|
'interfaceProfile'].choices = interface_profile_tuple_list
|
||||||
else:
|
else:
|
||||||
self.fields['cpuProfile'].widget = forms.widgets.HiddenInput()
|
|
||||||
self.fields[
|
self.fields[
|
||||||
'interfaceProfile'].widget = forms.widgets.HiddenInput()
|
'interfaceProfile'].widget = forms.widgets.HiddenInput()
|
||||||
|
|
||||||
@ -424,6 +388,36 @@ class UpdateHostInfoAction(workflows.Action):
|
|||||||
else:
|
else:
|
||||||
self.fields['diskProfile'].widget = forms.widgets.HiddenInput()
|
self.fields['diskProfile'].widget = forms.widgets.HiddenInput()
|
||||||
|
|
||||||
|
# Populate Available Cpu Profile Choices
|
||||||
|
if cpu_profile_configurable and host.nodes and host.memory:
|
||||||
|
try:
|
||||||
|
avail_cpu_profile_list = \
|
||||||
|
stx_api.sysinv.host_cpuprofile_list(self.request)
|
||||||
|
|
||||||
|
host_profile = icpu_utils.HostCpuProfile(
|
||||||
|
host.subfunctions,
|
||||||
|
host.cpus, host.nodes)
|
||||||
|
|
||||||
|
cpu_profile_tuple_list = [
|
||||||
|
('', _("Copy from an available cpu profile."))]
|
||||||
|
for ip in avail_cpu_profile_list:
|
||||||
|
nodes = stx_api.sysinv.host_node_list(self.request,
|
||||||
|
ip.uuid)
|
||||||
|
cpu_profile = icpu_utils.CpuProfile(ip.cpus, nodes)
|
||||||
|
if host_profile.profile_applicable(cpu_profile):
|
||||||
|
cpu_profile_tuple_list.append(
|
||||||
|
(ip.profilename, ip.profilename))
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
exceptions.handle(self.request, _(
|
||||||
|
'Unable to retrieve list of cpu profiles.'))
|
||||||
|
cpu_profile_tuple_list = []
|
||||||
|
|
||||||
|
self.fields['cpuProfile'].choices = cpu_profile_tuple_list
|
||||||
|
|
||||||
|
else:
|
||||||
|
self.fields['cpuProfile'].widget = forms.widgets.HiddenInput()
|
||||||
|
|
||||||
if mem_profile_configurable and host.nodes and host.memory:
|
if mem_profile_configurable and host.nodes and host.memory:
|
||||||
# Populate Available Memory Profile Choices
|
# Populate Available Memory Profile Choices
|
||||||
try:
|
try:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user