facts: correctly detect xen paravirt vs hvm cpuinfo (#49320)

* facts: correctly detect xen paravirt vs hvm cpuinfo

Fixes #49039

Signed-off-by: Adam Miller <admiller@redhat.com>

* provide default val if we IndexError

Signed-off-by: Adam Miller <admiller@redhat.com>
pull/55073/head
Adam Miller 6 years ago committed by ansibot
parent 58e076b64c
commit a2eb227970

@ -0,0 +1,2 @@
minor_changes:
- "ansible facts properly detect xen paravirt vs hvm"

@ -187,13 +187,18 @@ class LinuxHardware(Hardware):
data = line.split(":", 1) data = line.split(":", 1)
key = data[0].strip() key = data[0].strip()
try:
val = data[1].strip()
except IndexError:
val = ""
if xen: if xen:
if key == 'flags': if key == 'flags':
# Check for vme cpu flag, Xen paravirt does not expose this. # Check for vme cpu flag, Xen paravirt does not expose this.
# Need to detect Xen paravirt because it exposes cpuinfo # Need to detect Xen paravirt because it exposes cpuinfo
# differently than Xen HVM or KVM and causes reporting of # differently than Xen HVM or KVM and causes reporting of
# only a single cpu core. # only a single cpu core.
if 'vme' not in data: if 'vme' not in val:
xen_paravirt = True xen_paravirt = True
# model name is for Intel arch, Processor (mind the uppercase P) # model name is for Intel arch, Processor (mind the uppercase P)
@ -202,7 +207,7 @@ class LinuxHardware(Hardware):
if key in ['model name', 'Processor', 'vendor_id', 'cpu', 'Vendor', 'processor']: if key in ['model name', 'Processor', 'vendor_id', 'cpu', 'Vendor', 'processor']:
if 'processor' not in cpu_facts: if 'processor' not in cpu_facts:
cpu_facts['processor'] = [] cpu_facts['processor'] = []
cpu_facts['processor'].append(data[1].strip()) cpu_facts['processor'].append(val)
if key == 'vendor_id': if key == 'vendor_id':
vendor_id_occurrence += 1 vendor_id_occurrence += 1
if key == 'model name': if key == 'model name':
@ -211,21 +216,21 @@ class LinuxHardware(Hardware):
processor_occurence += 1 processor_occurence += 1
i += 1 i += 1
elif key == 'physical id': elif key == 'physical id':
physid = data[1].strip() physid = val
if physid not in sockets: if physid not in sockets:
sockets[physid] = 1 sockets[physid] = 1
elif key == 'core id': elif key == 'core id':
coreid = data[1].strip() coreid = val
if coreid not in sockets: if coreid not in sockets:
cores[coreid] = 1 cores[coreid] = 1
elif key == 'cpu cores': elif key == 'cpu cores':
sockets[physid] = int(data[1].strip()) sockets[physid] = int(val)
elif key == 'siblings': elif key == 'siblings':
cores[coreid] = int(data[1].strip()) cores[coreid] = int(val)
elif key == '# processors': elif key == '# processors':
cpu_facts['processor_cores'] = int(data[1].strip()) cpu_facts['processor_cores'] = int(val)
elif key == 'ncpus active': elif key == 'ncpus active':
i = int(data[1].strip()) i = int(val)
# Skip for platforms without vendor_id/model_name in cpuinfo (e.g ppc64le) # Skip for platforms without vendor_id/model_name in cpuinfo (e.g ppc64le)
if vendor_id_occurrence > 0: if vendor_id_occurrence > 0:

Loading…
Cancel
Save