mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Make changes proposed during review of restrict fact gathering feature:
* Make documentation examples into code blocks * Make code to call the subsets more general. * Made min subset always execute (cannot disable it). * Use a passed in modules parameter rather than global modules. This is needed for ziploader * Remove unneeded __init__() * Remove uneeded multiple inheritance from a base class * gather_facts is now a list type
This commit is contained in:
parent
d665911bab
commit
5a1e35224b
3 changed files with 131 additions and 187 deletions
|
@ -355,7 +355,7 @@ This option can be useful for those wishing to save fact gathering time. Both 's
|
||||||
|
|
||||||
.. versionadded:: 2.1
|
.. versionadded:: 2.1
|
||||||
|
|
||||||
You can specify a subset of gathered facts using the following options:
|
You can specify a subset of gathered facts using the following options::
|
||||||
|
|
||||||
gather_subset = all
|
gather_subset = all
|
||||||
|
|
||||||
|
@ -367,7 +367,7 @@ You can specify a subset of gathered facts using the following options:
|
||||||
|
|
||||||
You can combine them using comma separated list (ex: min,network,virtual)
|
You can combine them using comma separated list (ex: min,network,virtual)
|
||||||
|
|
||||||
You can also disable puppet facter or chef ohai facts collection using following options:
|
You can also disable puppet facter or chef ohai facts collection using following options::
|
||||||
|
|
||||||
ignore_ohai = True
|
ignore_ohai = True
|
||||||
ignore_facter = True
|
ignore_facter = True
|
||||||
|
|
|
@ -159,11 +159,9 @@ class Facts(object):
|
||||||
{ 'path' : '/usr/local/sbin/pkg', 'name' : 'pkgng' },
|
{ 'path' : '/usr/local/sbin/pkg', 'name' : 'pkgng' },
|
||||||
]
|
]
|
||||||
|
|
||||||
# Allowed fact subset for gather_subset options
|
def __init__(self, module, load_on_init=True):
|
||||||
ALLOWED_FACT_SUBSET = frozenset([ 'all', 'min', 'network', 'hardware', 'virtual' ])
|
|
||||||
|
|
||||||
def __init__(self, load_on_init=True):
|
|
||||||
|
|
||||||
|
self.module = module
|
||||||
self.facts = {}
|
self.facts = {}
|
||||||
|
|
||||||
if load_on_init:
|
if load_on_init:
|
||||||
|
@ -218,14 +216,14 @@ class Facts(object):
|
||||||
elif self.facts['system'] == 'AIX':
|
elif self.facts['system'] == 'AIX':
|
||||||
# Attempt to use getconf to figure out architecture
|
# Attempt to use getconf to figure out architecture
|
||||||
# fall back to bootinfo if needed
|
# fall back to bootinfo if needed
|
||||||
if module.get_bin_path('getconf'):
|
getconf_bin = self.module.get_bin_path('getconf')
|
||||||
rc, out, err = module.run_command([module.get_bin_path('getconf'),
|
if getconf_bin:
|
||||||
'MACHINE_ARCHITECTURE'])
|
rc, out, err = self.module.run_command([getconf_bin, 'MACHINE_ARCHITECTURE'])
|
||||||
data = out.split('\n')
|
data = out.split('\n')
|
||||||
self.facts['architecture'] = data[0]
|
self.facts['architecture'] = data[0]
|
||||||
else:
|
else:
|
||||||
rc, out, err = module.run_command([module.get_bin_path('bootinfo'),
|
bootinfo_bin = self.module.get_bin_path('bootinfo')
|
||||||
'-p'])
|
rc, out, err = self.module.run_command([bootinfo_bin, '-p'])
|
||||||
data = out.split('\n')
|
data = out.split('\n')
|
||||||
self.facts['architecture'] = data[0]
|
self.facts['architecture'] = data[0]
|
||||||
elif self.facts['system'] == 'OpenBSD':
|
elif self.facts['system'] == 'OpenBSD':
|
||||||
|
@ -233,7 +231,7 @@ class Facts(object):
|
||||||
|
|
||||||
def get_local_facts(self):
|
def get_local_facts(self):
|
||||||
|
|
||||||
fact_path = module.params.get('fact_path', None)
|
fact_path = self.module.params.get('fact_path', None)
|
||||||
if not fact_path or not os.path.exists(fact_path):
|
if not fact_path or not os.path.exists(fact_path):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -246,7 +244,7 @@ class Facts(object):
|
||||||
# try to read it as json first
|
# try to read it as json first
|
||||||
# if that fails read it with ConfigParser
|
# if that fails read it with ConfigParser
|
||||||
# if that fails, skip it
|
# if that fails, skip it
|
||||||
rc, out, err = module.run_command(fn)
|
rc, out, err = self.module.run_command(fn)
|
||||||
else:
|
else:
|
||||||
out = get_file_content(fn, default='')
|
out = get_file_content(fn, default='')
|
||||||
|
|
||||||
|
@ -297,20 +295,20 @@ class Facts(object):
|
||||||
# as it's much cleaner than this massive if-else
|
# as it's much cleaner than this massive if-else
|
||||||
if self.facts['system'] == 'AIX':
|
if self.facts['system'] == 'AIX':
|
||||||
self.facts['distribution'] = 'AIX'
|
self.facts['distribution'] = 'AIX'
|
||||||
rc, out, err = module.run_command("/usr/bin/oslevel")
|
rc, out, err = self.module.run_command("/usr/bin/oslevel")
|
||||||
data = out.split('.')
|
data = out.split('.')
|
||||||
self.facts['distribution_version'] = data[0]
|
self.facts['distribution_version'] = data[0]
|
||||||
self.facts['distribution_release'] = data[1]
|
self.facts['distribution_release'] = data[1]
|
||||||
elif self.facts['system'] == 'HP-UX':
|
elif self.facts['system'] == 'HP-UX':
|
||||||
self.facts['distribution'] = 'HP-UX'
|
self.facts['distribution'] = 'HP-UX'
|
||||||
rc, out, err = module.run_command("/usr/sbin/swlist |egrep 'HPUX.*OE.*[AB].[0-9]+\.[0-9]+'", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/sbin/swlist |egrep 'HPUX.*OE.*[AB].[0-9]+\.[0-9]+'", use_unsafe_shell=True)
|
||||||
data = re.search('HPUX.*OE.*([AB].[0-9]+\.[0-9]+)\.([0-9]+).*', out)
|
data = re.search('HPUX.*OE.*([AB].[0-9]+\.[0-9]+)\.([0-9]+).*', out)
|
||||||
if data:
|
if data:
|
||||||
self.facts['distribution_version'] = data.groups()[0]
|
self.facts['distribution_version'] = data.groups()[0]
|
||||||
self.facts['distribution_release'] = data.groups()[1]
|
self.facts['distribution_release'] = data.groups()[1]
|
||||||
elif self.facts['system'] == 'Darwin':
|
elif self.facts['system'] == 'Darwin':
|
||||||
self.facts['distribution'] = 'MacOSX'
|
self.facts['distribution'] = 'MacOSX'
|
||||||
rc, out, err = module.run_command("/usr/bin/sw_vers -productVersion")
|
rc, out, err = self.module.run_command("/usr/bin/sw_vers -productVersion")
|
||||||
data = out.split()[-1]
|
data = out.split()[-1]
|
||||||
self.facts['distribution_version'] = data
|
self.facts['distribution_version'] = data
|
||||||
elif self.facts['system'] == 'FreeBSD':
|
elif self.facts['system'] == 'FreeBSD':
|
||||||
|
@ -324,7 +322,7 @@ class Facts(object):
|
||||||
elif self.facts['system'] == 'OpenBSD':
|
elif self.facts['system'] == 'OpenBSD':
|
||||||
self.facts['distribution'] = 'OpenBSD'
|
self.facts['distribution'] = 'OpenBSD'
|
||||||
self.facts['distribution_release'] = platform.release()
|
self.facts['distribution_release'] = platform.release()
|
||||||
rc, out, err = module.run_command("/sbin/sysctl -n kern.version")
|
rc, out, err = self.module.run_command("/sbin/sysctl -n kern.version")
|
||||||
match = re.match('OpenBSD\s[0-9]+.[0-9]+-(\S+)\s.*', out)
|
match = re.match('OpenBSD\s[0-9]+.[0-9]+-(\S+)\s.*', out)
|
||||||
if match:
|
if match:
|
||||||
self.facts['distribution_version'] = match.groups()[0]
|
self.facts['distribution_version'] = match.groups()[0]
|
||||||
|
@ -414,7 +412,7 @@ class Facts(object):
|
||||||
self.facts['distribution_release'] = ora_prefix + data
|
self.facts['distribution_release'] = ora_prefix + data
|
||||||
break
|
break
|
||||||
|
|
||||||
uname_rc, uname_out, uname_err = module.run_command(['uname', '-v'])
|
uname_rc, uname_out, uname_err = self.module.run_command(['uname', '-v'])
|
||||||
distribution_version = None
|
distribution_version = None
|
||||||
if 'SmartOS' in data:
|
if 'SmartOS' in data:
|
||||||
self.facts['distribution'] = 'SmartOS'
|
self.facts['distribution'] = 'SmartOS'
|
||||||
|
@ -580,7 +578,7 @@ class Facts(object):
|
||||||
# try various forms of querying pid 1
|
# try various forms of querying pid 1
|
||||||
proc_1 = get_file_content('/proc/1/comm')
|
proc_1 = get_file_content('/proc/1/comm')
|
||||||
if proc_1 is None:
|
if proc_1 is None:
|
||||||
rc, proc_1, err = module.run_command("ps -p 1 -o comm|tail -n 1", use_unsafe_shell=True)
|
rc, proc_1, err = self.module.run_command("ps -p 1 -o comm|tail -n 1", use_unsafe_shell=True)
|
||||||
else:
|
else:
|
||||||
proc_1 = os.path.basename(proc_1)
|
proc_1 = os.path.basename(proc_1)
|
||||||
|
|
||||||
|
@ -613,7 +611,7 @@ class Facts(object):
|
||||||
elif self.facts['system'] == 'Linux':
|
elif self.facts['system'] == 'Linux':
|
||||||
if self._check_systemd():
|
if self._check_systemd():
|
||||||
self.facts['service_mgr'] = 'systemd'
|
self.facts['service_mgr'] = 'systemd'
|
||||||
elif module.get_bin_path('initctl') and os.path.exists("/etc/init/"):
|
elif self.module.get_bin_path('initctl') and os.path.exists("/etc/init/"):
|
||||||
self.facts['service_mgr'] = 'upstart'
|
self.facts['service_mgr'] = 'upstart'
|
||||||
elif os.path.realpath('/sbin/rc') == '/sbin/openrc':
|
elif os.path.realpath('/sbin/rc') == '/sbin/openrc':
|
||||||
self.facts['service_mgr'] = 'openrc'
|
self.facts['service_mgr'] = 'openrc'
|
||||||
|
@ -625,9 +623,9 @@ class Facts(object):
|
||||||
self.facts['service_mgr'] = 'service'
|
self.facts['service_mgr'] = 'service'
|
||||||
|
|
||||||
def get_lsb_facts(self):
|
def get_lsb_facts(self):
|
||||||
lsb_path = module.get_bin_path('lsb_release')
|
lsb_path = self.module.get_bin_path('lsb_release')
|
||||||
if lsb_path:
|
if lsb_path:
|
||||||
rc, out, err = module.run_command([lsb_path, "-a"])
|
rc, out, err = self.module.run_command([lsb_path, "-a"])
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['lsb'] = {}
|
self.facts['lsb'] = {}
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
@ -735,7 +733,7 @@ class Facts(object):
|
||||||
|
|
||||||
def _check_systemd(self):
|
def _check_systemd(self):
|
||||||
# tools must be installed
|
# tools must be installed
|
||||||
if module.get_bin_path('systemctl'):
|
if self.module.get_bin_path('systemctl'):
|
||||||
|
|
||||||
# this should show if systemd is the boot init system, if checking init faild to mark as systemd
|
# this should show if systemd is the boot init system, if checking init faild to mark as systemd
|
||||||
# these mirror systemd's own sd_boot test http://www.freedesktop.org/software/systemd/man/sd_booted.html
|
# these mirror systemd's own sd_boot test http://www.freedesktop.org/software/systemd/man/sd_booted.html
|
||||||
|
@ -845,9 +843,6 @@ class Hardware(Facts):
|
||||||
subclass = sc
|
subclass = sc
|
||||||
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Facts.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
|
@ -872,9 +867,6 @@ class LinuxHardware(Hardware):
|
||||||
# Now we have all of these in a dict structure
|
# Now we have all of these in a dict structure
|
||||||
MEMORY_FACTS = ORIGINAL_MEMORY_FACTS.union(('Buffers', 'Cached', 'SwapCached'))
|
MEMORY_FACTS = ORIGINAL_MEMORY_FACTS.union(('Buffers', 'Cached', 'SwapCached'))
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1058,7 +1050,7 @@ class LinuxHardware(Hardware):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Fall back to using dmidecode, if available
|
# Fall back to using dmidecode, if available
|
||||||
dmi_bin = module.get_bin_path('dmidecode')
|
dmi_bin = self.module.get_bin_path('dmidecode')
|
||||||
DMI_DICT = {
|
DMI_DICT = {
|
||||||
'bios_date': 'bios-release-date',
|
'bios_date': 'bios-release-date',
|
||||||
'bios_version': 'bios-version',
|
'bios_version': 'bios-version',
|
||||||
|
@ -1071,7 +1063,7 @@ class LinuxHardware(Hardware):
|
||||||
}
|
}
|
||||||
for (k, v) in DMI_DICT.items():
|
for (k, v) in DMI_DICT.items():
|
||||||
if dmi_bin is not None:
|
if dmi_bin is not None:
|
||||||
(rc, out, err) = module.run_command('%s -s %s' % (dmi_bin, v))
|
(rc, out, err) = self.module.run_command('%s -s %s' % (dmi_bin, v))
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
# Strip out commented lines (specific dmidecode output)
|
# Strip out commented lines (specific dmidecode output)
|
||||||
thisvalue = ''.join([ line for line in out.split('\n') if not line.startswith('#') ])
|
thisvalue = ''.join([ line for line in out.split('\n') if not line.startswith('#') ])
|
||||||
|
@ -1100,9 +1092,9 @@ class LinuxHardware(Hardware):
|
||||||
uuid = uuids[fields[0]]
|
uuid = uuids[fields[0]]
|
||||||
else:
|
else:
|
||||||
uuid = 'NA'
|
uuid = 'NA'
|
||||||
lsblkPath = module.get_bin_path("lsblk")
|
lsblkPath = self.module.get_bin_path("lsblk")
|
||||||
if lsblkPath:
|
if lsblkPath:
|
||||||
rc, out, err = module.run_command("%s -ln --output UUID %s" % (lsblkPath, fields[0]), use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("%s -ln --output UUID %s" % (lsblkPath, fields[0]), use_unsafe_shell=True)
|
||||||
|
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
uuid = out.strip()
|
uuid = out.strip()
|
||||||
|
@ -1121,9 +1113,9 @@ class LinuxHardware(Hardware):
|
||||||
|
|
||||||
def get_device_facts(self):
|
def get_device_facts(self):
|
||||||
self.facts['devices'] = {}
|
self.facts['devices'] = {}
|
||||||
lspci = module.get_bin_path('lspci')
|
lspci = self.module.get_bin_path('lspci')
|
||||||
if lspci:
|
if lspci:
|
||||||
rc, pcidata, err = module.run_command([lspci, '-D'])
|
rc, pcidata, err = self.module.run_command([lspci, '-D'])
|
||||||
else:
|
else:
|
||||||
pcidata = None
|
pcidata = None
|
||||||
|
|
||||||
|
@ -1176,7 +1168,7 @@ class LinuxHardware(Hardware):
|
||||||
part['sectorsize'] = get_file_content(part_sysdir + "/queue/logical_block_size")
|
part['sectorsize'] = get_file_content(part_sysdir + "/queue/logical_block_size")
|
||||||
if not part['sectorsize']:
|
if not part['sectorsize']:
|
||||||
part['sectorsize'] = get_file_content(part_sysdir + "/queue/hw_sector_size",512)
|
part['sectorsize'] = get_file_content(part_sysdir + "/queue/hw_sector_size",512)
|
||||||
part['size'] = module.pretty_bytes((float(part['sectors']) * float(part['sectorsize'])))
|
part['size'] = self.module.pretty_bytes((float(part['sectors']) * float(part['sectorsize'])))
|
||||||
d['partitions'][partname] = part
|
d['partitions'][partname] = part
|
||||||
|
|
||||||
d['rotational'] = get_file_content(sysdir + "/queue/rotational")
|
d['rotational'] = get_file_content(sysdir + "/queue/rotational")
|
||||||
|
@ -1193,7 +1185,7 @@ class LinuxHardware(Hardware):
|
||||||
d['sectorsize'] = get_file_content(sysdir + "/queue/logical_block_size")
|
d['sectorsize'] = get_file_content(sysdir + "/queue/logical_block_size")
|
||||||
if not d['sectorsize']:
|
if not d['sectorsize']:
|
||||||
d['sectorsize'] = get_file_content(sysdir + "/queue/hw_sector_size",512)
|
d['sectorsize'] = get_file_content(sysdir + "/queue/hw_sector_size",512)
|
||||||
d['size'] = module.pretty_bytes(float(d['sectors']) * float(d['sectorsize']))
|
d['size'] = self.module.pretty_bytes(float(d['sectors']) * float(d['sectorsize']))
|
||||||
|
|
||||||
d['host'] = ""
|
d['host'] = ""
|
||||||
|
|
||||||
|
@ -1228,14 +1220,14 @@ class LinuxHardware(Hardware):
|
||||||
def get_lvm_facts(self):
|
def get_lvm_facts(self):
|
||||||
""" Get LVM Facts if running as root and lvm utils are available """
|
""" Get LVM Facts if running as root and lvm utils are available """
|
||||||
|
|
||||||
if os.getuid() == 0 and module.get_bin_path('vgs'):
|
if os.getuid() == 0 and self.module.get_bin_path('vgs'):
|
||||||
lvm_util_options = '--noheadings --nosuffix --units g'
|
lvm_util_options = '--noheadings --nosuffix --units g'
|
||||||
|
|
||||||
vgs_path = module.get_bin_path('vgs')
|
vgs_path = self.module.get_bin_path('vgs')
|
||||||
#vgs fields: VG #PV #LV #SN Attr VSize VFree
|
#vgs fields: VG #PV #LV #SN Attr VSize VFree
|
||||||
vgs={}
|
vgs={}
|
||||||
if vgs_path:
|
if vgs_path:
|
||||||
rc, vg_lines, err = module.run_command( '%s %s' % (vgs_path, lvm_util_options))
|
rc, vg_lines, err = self.module.run_command( '%s %s' % (vgs_path, lvm_util_options))
|
||||||
for vg_line in vg_lines.splitlines():
|
for vg_line in vg_lines.splitlines():
|
||||||
items = vg_line.split()
|
items = vg_line.split()
|
||||||
vgs[items[0]] = {'size_g':items[-2],
|
vgs[items[0]] = {'size_g':items[-2],
|
||||||
|
@ -1243,12 +1235,12 @@ class LinuxHardware(Hardware):
|
||||||
'num_lvs': items[2],
|
'num_lvs': items[2],
|
||||||
'num_pvs': items[1]}
|
'num_pvs': items[1]}
|
||||||
|
|
||||||
lvs_path = module.get_bin_path('lvs')
|
lvs_path = self.module.get_bin_path('lvs')
|
||||||
#lvs fields:
|
#lvs fields:
|
||||||
#LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
|
#LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
|
||||||
lvs = {}
|
lvs = {}
|
||||||
if lvs_path:
|
if lvs_path:
|
||||||
rc, lv_lines, err = module.run_command( '%s %s' % (lvs_path, lvm_util_options))
|
rc, lv_lines, err = self.module.run_command( '%s %s' % (lvs_path, lvm_util_options))
|
||||||
for lv_line in lv_lines.splitlines():
|
for lv_line in lv_lines.splitlines():
|
||||||
items = lv_line.split()
|
items = lv_line.split()
|
||||||
lvs[items[0]] = {'size_g': items[3], 'vg': items[1]}
|
lvs[items[0]] = {'size_g': items[3], 'vg': items[1]}
|
||||||
|
@ -1263,9 +1255,6 @@ class SunOSHardware(Hardware):
|
||||||
"""
|
"""
|
||||||
platform = 'SunOS'
|
platform = 'SunOS'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1278,7 +1267,7 @@ class SunOSHardware(Hardware):
|
||||||
def get_cpu_facts(self):
|
def get_cpu_facts(self):
|
||||||
physid = 0
|
physid = 0
|
||||||
sockets = {}
|
sockets = {}
|
||||||
rc, out, err = module.run_command("/usr/bin/kstat cpu_info")
|
rc, out, err = self.module.run_command("/usr/bin/kstat cpu_info")
|
||||||
self.facts['processor'] = []
|
self.facts['processor'] = []
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
if len(line) < 1:
|
if len(line) < 1:
|
||||||
|
@ -1319,11 +1308,11 @@ class SunOSHardware(Hardware):
|
||||||
self.facts['processor_count'] = len(self.facts['processor'])
|
self.facts['processor_count'] = len(self.facts['processor'])
|
||||||
|
|
||||||
def get_memory_facts(self):
|
def get_memory_facts(self):
|
||||||
rc, out, err = module.run_command(["/usr/sbin/prtconf"])
|
rc, out, err = self.module.run_command(["/usr/sbin/prtconf"])
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
if 'Memory size' in line:
|
if 'Memory size' in line:
|
||||||
self.facts['memtotal_mb'] = line.split()[2]
|
self.facts['memtotal_mb'] = line.split()[2]
|
||||||
rc, out, err = module.run_command("/usr/sbin/swap -s")
|
rc, out, err = self.module.run_command("/usr/sbin/swap -s")
|
||||||
allocated = long(out.split()[1][:-1])
|
allocated = long(out.split()[1][:-1])
|
||||||
reserved = long(out.split()[5][:-1])
|
reserved = long(out.split()[5][:-1])
|
||||||
used = long(out.split()[8][:-1])
|
used = long(out.split()[8][:-1])
|
||||||
|
@ -1362,9 +1351,6 @@ class OpenBSDHardware(Hardware):
|
||||||
platform = 'OpenBSD'
|
platform = 'OpenBSD'
|
||||||
DMESG_BOOT = '/var/run/dmesg.boot'
|
DMESG_BOOT = '/var/run/dmesg.boot'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.sysctl = self.get_sysctl()
|
self.sysctl = self.get_sysctl()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1374,7 +1360,7 @@ class OpenBSDHardware(Hardware):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
def get_sysctl(self):
|
def get_sysctl(self):
|
||||||
rc, out, err = module.run_command(["/sbin/sysctl", "hw"])
|
rc, out, err = self.module.run_command(["/sbin/sysctl", "hw"])
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
return dict()
|
return dict()
|
||||||
sysctl = dict()
|
sysctl = dict()
|
||||||
|
@ -1403,7 +1389,7 @@ class OpenBSDHardware(Hardware):
|
||||||
# procs memory page disks traps cpu
|
# procs memory page disks traps cpu
|
||||||
# r b w avm fre flt re pi po fr sr wd0 fd0 int sys cs us sy id
|
# r b w avm fre flt re pi po fr sr wd0 fd0 int sys cs us sy id
|
||||||
# 0 0 0 47512 28160 51 0 0 0 0 0 1 0 116 89 17 0 1 99
|
# 0 0 0 47512 28160 51 0 0 0 0 0 1 0 116 89 17 0 1 99
|
||||||
rc, out, err = module.run_command("/usr/bin/vmstat")
|
rc, out, err = self.module.run_command("/usr/bin/vmstat")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['memfree_mb'] = long(out.splitlines()[-1].split()[4]) / 1024
|
self.facts['memfree_mb'] = long(out.splitlines()[-1].split()[4]) / 1024
|
||||||
self.facts['memtotal_mb'] = long(self.sysctl['hw.usermem']) / 1024 / 1024
|
self.facts['memtotal_mb'] = long(self.sysctl['hw.usermem']) / 1024 / 1024
|
||||||
|
@ -1412,7 +1398,7 @@ class OpenBSDHardware(Hardware):
|
||||||
# total: 69268 1K-blocks allocated, 0 used, 69268 available
|
# total: 69268 1K-blocks allocated, 0 used, 69268 available
|
||||||
# And for older OpenBSD:
|
# And for older OpenBSD:
|
||||||
# total: 69268k bytes allocated = 0k used, 69268k available
|
# total: 69268k bytes allocated = 0k used, 69268k available
|
||||||
rc, out, err = module.run_command("/sbin/swapctl -sk")
|
rc, out, err = self.module.run_command("/sbin/swapctl -sk")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
swaptrans = maketrans(' ', ' ')
|
swaptrans = maketrans(' ', ' ')
|
||||||
data = out.split()
|
data = out.split()
|
||||||
|
@ -1423,7 +1409,7 @@ class OpenBSDHardware(Hardware):
|
||||||
processor = []
|
processor = []
|
||||||
dmesg_boot = get_file_content(OpenBSDHardware.DMESG_BOOT)
|
dmesg_boot = get_file_content(OpenBSDHardware.DMESG_BOOT)
|
||||||
if not dmesg_boot:
|
if not dmesg_boot:
|
||||||
rc, dmesg_boot, err = module.run_command("/sbin/dmesg")
|
rc, dmesg_boot, err = self.module.run_command("/sbin/dmesg")
|
||||||
i = 0
|
i = 0
|
||||||
for line in dmesg_boot.splitlines():
|
for line in dmesg_boot.splitlines():
|
||||||
if line.split(' ', 1)[0] == 'cpu%i:' % i:
|
if line.split(' ', 1)[0] == 'cpu%i:' % i:
|
||||||
|
@ -1455,9 +1441,6 @@ class FreeBSDHardware(Hardware):
|
||||||
platform = 'FreeBSD'
|
platform = 'FreeBSD'
|
||||||
DMESG_BOOT = '/var/run/dmesg.boot'
|
DMESG_BOOT = '/var/run/dmesg.boot'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1471,12 +1454,12 @@ class FreeBSDHardware(Hardware):
|
||||||
|
|
||||||
def get_cpu_facts(self):
|
def get_cpu_facts(self):
|
||||||
self.facts['processor'] = []
|
self.facts['processor'] = []
|
||||||
rc, out, err = module.run_command("/sbin/sysctl -n hw.ncpu")
|
rc, out, err = self.module.run_command("/sbin/sysctl -n hw.ncpu")
|
||||||
self.facts['processor_count'] = out.strip()
|
self.facts['processor_count'] = out.strip()
|
||||||
|
|
||||||
dmesg_boot = get_file_content(FreeBSDHardware.DMESG_BOOT)
|
dmesg_boot = get_file_content(FreeBSDHardware.DMESG_BOOT)
|
||||||
if not dmesg_boot:
|
if not dmesg_boot:
|
||||||
rc, dmesg_boot, err = module.run_command("/sbin/dmesg")
|
rc, dmesg_boot, err = self.module.run_command("/sbin/dmesg")
|
||||||
for line in dmesg_boot.split('\n'):
|
for line in dmesg_boot.split('\n'):
|
||||||
if 'CPU:' in line:
|
if 'CPU:' in line:
|
||||||
cpu = re.sub(r'CPU:\s+', r"", line)
|
cpu = re.sub(r'CPU:\s+', r"", line)
|
||||||
|
@ -1486,7 +1469,7 @@ class FreeBSDHardware(Hardware):
|
||||||
|
|
||||||
|
|
||||||
def get_memory_facts(self):
|
def get_memory_facts(self):
|
||||||
rc, out, err = module.run_command("/sbin/sysctl vm.stats")
|
rc, out, err = self.module.run_command("/sbin/sysctl vm.stats")
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
data = line.split()
|
data = line.split()
|
||||||
if 'vm.stats.vm.v_page_size' in line:
|
if 'vm.stats.vm.v_page_size' in line:
|
||||||
|
@ -1501,7 +1484,7 @@ class FreeBSDHardware(Hardware):
|
||||||
# Device 1M-blocks Used Avail Capacity
|
# Device 1M-blocks Used Avail Capacity
|
||||||
# /dev/ada0p3 314368 0 314368 0%
|
# /dev/ada0p3 314368 0 314368 0%
|
||||||
#
|
#
|
||||||
rc, out, err = module.run_command("/usr/sbin/swapinfo -k")
|
rc, out, err = self.module.run_command("/usr/sbin/swapinfo -k")
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
if len(lines[-1]) == 0:
|
if len(lines[-1]) == 0:
|
||||||
lines.pop()
|
lines.pop()
|
||||||
|
@ -1525,7 +1508,7 @@ class FreeBSDHardware(Hardware):
|
||||||
def get_device_facts(self):
|
def get_device_facts(self):
|
||||||
sysdir = '/dev'
|
sysdir = '/dev'
|
||||||
self.facts['devices'] = {}
|
self.facts['devices'] = {}
|
||||||
drives = re.compile('(ada?\d+|da\d+|a?cd\d+)') #TODO: rc, disks, err = module.run_command("/sbin/sysctl kern.disks")
|
drives = re.compile('(ada?\d+|da\d+|a?cd\d+)') #TODO: rc, disks, err = self.module.run_command("/sbin/sysctl kern.disks")
|
||||||
slices = re.compile('(ada?\d+s\d+\w*|da\d+s\d+\w*)')
|
slices = re.compile('(ada?\d+s\d+\w*|da\d+s\d+\w*)')
|
||||||
if os.path.isdir(sysdir):
|
if os.path.isdir(sysdir):
|
||||||
dirlist = sorted(os.listdir(sysdir))
|
dirlist = sorted(os.listdir(sysdir))
|
||||||
|
@ -1543,7 +1526,7 @@ class FreeBSDHardware(Hardware):
|
||||||
Use dmidecode executable if available'''
|
Use dmidecode executable if available'''
|
||||||
|
|
||||||
# Fall back to using dmidecode, if available
|
# Fall back to using dmidecode, if available
|
||||||
dmi_bin = module.get_bin_path('dmidecode')
|
dmi_bin = self.module.get_bin_path('dmidecode')
|
||||||
DMI_DICT = dict(
|
DMI_DICT = dict(
|
||||||
bios_date='bios-release-date',
|
bios_date='bios-release-date',
|
||||||
bios_version='bios-version',
|
bios_version='bios-version',
|
||||||
|
@ -1556,7 +1539,7 @@ class FreeBSDHardware(Hardware):
|
||||||
)
|
)
|
||||||
for (k, v) in DMI_DICT.items():
|
for (k, v) in DMI_DICT.items():
|
||||||
if dmi_bin is not None:
|
if dmi_bin is not None:
|
||||||
(rc, out, err) = module.run_command('%s -s %s' % (dmi_bin, v))
|
(rc, out, err) = self.module.run_command('%s -s %s' % (dmi_bin, v))
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
# Strip out commented lines (specific dmidecode output)
|
# Strip out commented lines (specific dmidecode output)
|
||||||
self.facts[k] = ''.join([ line for line in out.split('\n') if not line.startswith('#') ])
|
self.facts[k] = ''.join([ line for line in out.split('\n') if not line.startswith('#') ])
|
||||||
|
@ -1587,9 +1570,6 @@ class NetBSDHardware(Hardware):
|
||||||
platform = 'NetBSD'
|
platform = 'NetBSD'
|
||||||
MEMORY_FACTS = ['MemTotal', 'SwapTotal', 'MemFree', 'SwapFree']
|
MEMORY_FACTS = ['MemTotal', 'SwapTotal', 'MemFree', 'SwapFree']
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1665,9 +1645,6 @@ class AIX(Hardware):
|
||||||
"""
|
"""
|
||||||
platform = 'AIX'
|
platform = 'AIX'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1678,7 +1655,7 @@ class AIX(Hardware):
|
||||||
self.facts['processor'] = []
|
self.facts['processor'] = []
|
||||||
|
|
||||||
|
|
||||||
rc, out, err = module.run_command("/usr/sbin/lsdev -Cc processor")
|
rc, out, err = self.module.run_command("/usr/sbin/lsdev -Cc processor")
|
||||||
if out:
|
if out:
|
||||||
i = 0
|
i = 0
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
@ -1691,19 +1668,19 @@ class AIX(Hardware):
|
||||||
i += 1
|
i += 1
|
||||||
self.facts['processor_count'] = int(i)
|
self.facts['processor_count'] = int(i)
|
||||||
|
|
||||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El " + cpudev + " -a type")
|
rc, out, err = self.module.run_command("/usr/sbin/lsattr -El " + cpudev + " -a type")
|
||||||
|
|
||||||
data = out.split(' ')
|
data = out.split(' ')
|
||||||
self.facts['processor'] = data[1]
|
self.facts['processor'] = data[1]
|
||||||
|
|
||||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El " + cpudev + " -a smt_threads")
|
rc, out, err = self.module.run_command("/usr/sbin/lsattr -El " + cpudev + " -a smt_threads")
|
||||||
|
|
||||||
data = out.split(' ')
|
data = out.split(' ')
|
||||||
self.facts['processor_cores'] = int(data[1])
|
self.facts['processor_cores'] = int(data[1])
|
||||||
|
|
||||||
def get_memory_facts(self):
|
def get_memory_facts(self):
|
||||||
pagesize = 4096
|
pagesize = 4096
|
||||||
rc, out, err = module.run_command("/usr/bin/vmstat -v")
|
rc, out, err = self.module.run_command("/usr/bin/vmstat -v")
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
data = line.split()
|
data = line.split()
|
||||||
if 'memory pages' in line:
|
if 'memory pages' in line:
|
||||||
|
@ -1716,7 +1693,7 @@ class AIX(Hardware):
|
||||||
# Device 1M-blocks Used Avail Capacity
|
# Device 1M-blocks Used Avail Capacity
|
||||||
# /dev/ada0p3 314368 0 314368 0%
|
# /dev/ada0p3 314368 0 314368 0%
|
||||||
#
|
#
|
||||||
rc, out, err = module.run_command("/usr/sbin/lsps -s")
|
rc, out, err = self.module.run_command("/usr/sbin/lsps -s")
|
||||||
if out:
|
if out:
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
data = lines[1].split()
|
data = lines[1].split()
|
||||||
|
@ -1726,7 +1703,7 @@ class AIX(Hardware):
|
||||||
self.facts['swapfree_mb'] = long(swaptotal_mb * ( 100 - percused ) / 100)
|
self.facts['swapfree_mb'] = long(swaptotal_mb * ( 100 - percused ) / 100)
|
||||||
|
|
||||||
def get_dmi_facts(self):
|
def get_dmi_facts(self):
|
||||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El sys0 -a fwversion")
|
rc, out, err = self.module.run_command("/usr/sbin/lsattr -El sys0 -a fwversion")
|
||||||
data = out.split()
|
data = out.split()
|
||||||
self.facts['firmware_version'] = data[1].strip('IBM,')
|
self.facts['firmware_version'] = data[1].strip('IBM,')
|
||||||
|
|
||||||
|
@ -1746,9 +1723,6 @@ class HPUX(Hardware):
|
||||||
|
|
||||||
platform = 'HP-UX'
|
platform = 'HP-UX'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
|
@ -1757,31 +1731,31 @@ class HPUX(Hardware):
|
||||||
|
|
||||||
def get_cpu_facts(self):
|
def get_cpu_facts(self):
|
||||||
if self.facts['architecture'] == '9000/800':
|
if self.facts['architecture'] == '9000/800':
|
||||||
rc, out, err = module.run_command("ioscan -FkCprocessor | wc -l", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("ioscan -FkCprocessor | wc -l", use_unsafe_shell=True)
|
||||||
self.facts['processor_count'] = int(out.strip())
|
self.facts['processor_count'] = int(out.strip())
|
||||||
#Working with machinfo mess
|
#Working with machinfo mess
|
||||||
elif self.facts['architecture'] == 'ia64':
|
elif self.facts['architecture'] == 'ia64':
|
||||||
if self.facts['distribution_version'] == "B.11.23":
|
if self.facts['distribution_version'] == "B.11.23":
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep 'Number of CPUs'", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep 'Number of CPUs'", use_unsafe_shell=True)
|
||||||
self.facts['processor_count'] = int(out.strip().split('=')[1])
|
self.facts['processor_count'] = int(out.strip().split('=')[1])
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep 'processor family'", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep 'processor family'", use_unsafe_shell=True)
|
||||||
self.facts['processor'] = re.search('.*(Intel.*)', out).groups()[0].strip()
|
self.facts['processor'] = re.search('.*(Intel.*)', out).groups()[0].strip()
|
||||||
rc, out, err = module.run_command("ioscan -FkCprocessor | wc -l", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("ioscan -FkCprocessor | wc -l", use_unsafe_shell=True)
|
||||||
self.facts['processor_cores'] = int(out.strip())
|
self.facts['processor_cores'] = int(out.strip())
|
||||||
if self.facts['distribution_version'] == "B.11.31":
|
if self.facts['distribution_version'] == "B.11.31":
|
||||||
#if machinfo return cores strings release B.11.31 > 1204
|
#if machinfo return cores strings release B.11.31 > 1204
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep core | wc -l", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep core | wc -l", use_unsafe_shell=True)
|
||||||
if out.strip()== '0':
|
if out.strip()== '0':
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep Intel", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep Intel", use_unsafe_shell=True)
|
||||||
self.facts['processor_count'] = int(out.strip().split(" ")[0])
|
self.facts['processor_count'] = int(out.strip().split(" ")[0])
|
||||||
#If hyperthreading is active divide cores by 2
|
#If hyperthreading is active divide cores by 2
|
||||||
rc, out, err = module.run_command("/usr/sbin/psrset | grep LCPU", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/sbin/psrset | grep LCPU", use_unsafe_shell=True)
|
||||||
data = re.sub(' +',' ',out).strip().split(' ')
|
data = re.sub(' +',' ',out).strip().split(' ')
|
||||||
if len(data) == 1:
|
if len(data) == 1:
|
||||||
hyperthreading = 'OFF'
|
hyperthreading = 'OFF'
|
||||||
else:
|
else:
|
||||||
hyperthreading = data[1]
|
hyperthreading = data[1]
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep logical", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep logical", use_unsafe_shell=True)
|
||||||
data = out.strip().split(" ")
|
data = out.strip().split(" ")
|
||||||
if hyperthreading == 'ON':
|
if hyperthreading == 'ON':
|
||||||
self.facts['processor_cores'] = int(data[0])/2
|
self.facts['processor_cores'] = int(data[0])/2
|
||||||
|
@ -1790,54 +1764,54 @@ class HPUX(Hardware):
|
||||||
self.facts['processor_cores'] = self.facts['processor_count']
|
self.facts['processor_cores'] = self.facts['processor_count']
|
||||||
else:
|
else:
|
||||||
self.facts['processor_cores'] = int(data[0])
|
self.facts['processor_cores'] = int(data[0])
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep Intel |cut -d' ' -f4-", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep Intel |cut -d' ' -f4-", use_unsafe_shell=True)
|
||||||
self.facts['processor'] = out.strip()
|
self.facts['processor'] = out.strip()
|
||||||
else:
|
else:
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | egrep 'socket[s]?$' | tail -1", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | egrep 'socket[s]?$' | tail -1", use_unsafe_shell=True)
|
||||||
self.facts['processor_count'] = int(out.strip().split(" ")[0])
|
self.facts['processor_count'] = int(out.strip().split(" ")[0])
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep -e '[0-9] core' | tail -1", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep -e '[0-9] core' | tail -1", use_unsafe_shell=True)
|
||||||
self.facts['processor_cores'] = int(out.strip().split(" ")[0])
|
self.facts['processor_cores'] = int(out.strip().split(" ")[0])
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep Intel", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep Intel", use_unsafe_shell=True)
|
||||||
self.facts['processor'] = out.strip()
|
self.facts['processor'] = out.strip()
|
||||||
|
|
||||||
def get_memory_facts(self):
|
def get_memory_facts(self):
|
||||||
pagesize = 4096
|
pagesize = 4096
|
||||||
rc, out, err = module.run_command("/usr/bin/vmstat | tail -1", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/bin/vmstat | tail -1", use_unsafe_shell=True)
|
||||||
data = int(re.sub(' +',' ',out).split(' ')[5].strip())
|
data = int(re.sub(' +',' ',out).split(' ')[5].strip())
|
||||||
self.facts['memfree_mb'] = pagesize * data / 1024 / 1024
|
self.facts['memfree_mb'] = pagesize * data / 1024 / 1024
|
||||||
if self.facts['architecture'] == '9000/800':
|
if self.facts['architecture'] == '9000/800':
|
||||||
try:
|
try:
|
||||||
rc, out, err = module.run_command("grep Physical /var/adm/syslog/syslog.log")
|
rc, out, err = self.module.run_command("grep Physical /var/adm/syslog/syslog.log")
|
||||||
data = re.search('.*Physical: ([0-9]*) Kbytes.*',out).groups()[0].strip()
|
data = re.search('.*Physical: ([0-9]*) Kbytes.*',out).groups()[0].strip()
|
||||||
self.facts['memtotal_mb'] = int(data) / 1024
|
self.facts['memtotal_mb'] = int(data) / 1024
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
#For systems where memory details aren't sent to syslog or the log has rotated, use parsed
|
#For systems where memory details aren't sent to syslog or the log has rotated, use parsed
|
||||||
#adb output. Unfortunately /dev/kmem doesn't have world-read, so this only works as root.
|
#adb output. Unfortunately /dev/kmem doesn't have world-read, so this only works as root.
|
||||||
if os.access("/dev/kmem", os.R_OK):
|
if os.access("/dev/kmem", os.R_OK):
|
||||||
rc, out, err = module.run_command("echo 'phys_mem_pages/D' | adb -k /stand/vmunix /dev/kmem | tail -1 | awk '{print $2}'", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("echo 'phys_mem_pages/D' | adb -k /stand/vmunix /dev/kmem | tail -1 | awk '{print $2}'", use_unsafe_shell=True)
|
||||||
if not err:
|
if not err:
|
||||||
data = out
|
data = out
|
||||||
self.facts['memtotal_mb'] = int(data) / 256
|
self.facts['memtotal_mb'] = int(data) / 256
|
||||||
else:
|
else:
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo | grep Memory", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo | grep Memory", use_unsafe_shell=True)
|
||||||
data = re.search('Memory[\ :=]*([0-9]*).*MB.*',out).groups()[0].strip()
|
data = re.search('Memory[\ :=]*([0-9]*).*MB.*',out).groups()[0].strip()
|
||||||
self.facts['memtotal_mb'] = int(data)
|
self.facts['memtotal_mb'] = int(data)
|
||||||
rc, out, err = module.run_command("/usr/sbin/swapinfo -m -d -f -q")
|
rc, out, err = self.module.run_command("/usr/sbin/swapinfo -m -d -f -q")
|
||||||
self.facts['swaptotal_mb'] = int(out.strip())
|
self.facts['swaptotal_mb'] = int(out.strip())
|
||||||
rc, out, err = module.run_command("/usr/sbin/swapinfo -m -d -f | egrep '^dev|^fs'", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/sbin/swapinfo -m -d -f | egrep '^dev|^fs'", use_unsafe_shell=True)
|
||||||
swap = 0
|
swap = 0
|
||||||
for line in out.strip().split('\n'):
|
for line in out.strip().split('\n'):
|
||||||
swap += int(re.sub(' +',' ',line).split(' ')[3].strip())
|
swap += int(re.sub(' +',' ',line).split(' ')[3].strip())
|
||||||
self.facts['swapfree_mb'] = swap
|
self.facts['swapfree_mb'] = swap
|
||||||
|
|
||||||
def get_hw_facts(self):
|
def get_hw_facts(self):
|
||||||
rc, out, err = module.run_command("model")
|
rc, out, err = self.module.run_command("model")
|
||||||
self.facts['model'] = out.strip()
|
self.facts['model'] = out.strip()
|
||||||
if self.facts['architecture'] == 'ia64':
|
if self.facts['architecture'] == 'ia64':
|
||||||
separator = ':'
|
separator = ':'
|
||||||
if self.facts['distribution_version'] == "B.11.23":
|
if self.facts['distribution_version'] == "B.11.23":
|
||||||
separator = '='
|
separator = '='
|
||||||
rc, out, err = module.run_command("/usr/contrib/bin/machinfo |grep -i 'Firmware revision' | grep -v BMC", use_unsafe_shell=True)
|
rc, out, err = self.module.run_command("/usr/contrib/bin/machinfo |grep -i 'Firmware revision' | grep -v BMC", use_unsafe_shell=True)
|
||||||
self.facts['firmware_version'] = out.split(separator)[1].strip()
|
self.facts['firmware_version'] = out.split(separator)[1].strip()
|
||||||
|
|
||||||
|
|
||||||
|
@ -1854,9 +1828,6 @@ class Darwin(Hardware):
|
||||||
"""
|
"""
|
||||||
platform = 'Darwin'
|
platform = 'Darwin'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Hardware.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.sysctl = self.get_sysctl()
|
self.sysctl = self.get_sysctl()
|
||||||
self.get_mac_facts()
|
self.get_mac_facts()
|
||||||
|
@ -1865,7 +1836,7 @@ class Darwin(Hardware):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
def get_sysctl(self):
|
def get_sysctl(self):
|
||||||
rc, out, err = module.run_command(["/usr/sbin/sysctl", "hw", "machdep", "kern"])
|
rc, out, err = self.module.run_command(["/usr/sbin/sysctl", "hw", "machdep", "kern"])
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
return dict()
|
return dict()
|
||||||
sysctl = dict()
|
sysctl = dict()
|
||||||
|
@ -1876,7 +1847,7 @@ class Darwin(Hardware):
|
||||||
return sysctl
|
return sysctl
|
||||||
|
|
||||||
def get_system_profile(self):
|
def get_system_profile(self):
|
||||||
rc, out, err = module.run_command(["/usr/sbin/system_profiler", "SPHardwareDataType"])
|
rc, out, err = self.module.run_command(["/usr/sbin/system_profiler", "SPHardwareDataType"])
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
return dict()
|
return dict()
|
||||||
system_profile = dict()
|
system_profile = dict()
|
||||||
|
@ -1887,7 +1858,7 @@ class Darwin(Hardware):
|
||||||
return system_profile
|
return system_profile
|
||||||
|
|
||||||
def get_mac_facts(self):
|
def get_mac_facts(self):
|
||||||
rc, out, err = module.run_command("sysctl hw.model")
|
rc, out, err = self.module.run_command("sysctl hw.model")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['model'] = out.splitlines()[-1].split()[1]
|
self.facts['model'] = out.splitlines()[-1].split()[1]
|
||||||
self.facts['osversion'] = self.sysctl['kern.osversion']
|
self.facts['osversion'] = self.sysctl['kern.osversion']
|
||||||
|
@ -1905,7 +1876,7 @@ class Darwin(Hardware):
|
||||||
def get_memory_facts(self):
|
def get_memory_facts(self):
|
||||||
self.facts['memtotal_mb'] = long(self.sysctl['hw.memsize']) / 1024 / 1024
|
self.facts['memtotal_mb'] = long(self.sysctl['hw.memsize']) / 1024 / 1024
|
||||||
|
|
||||||
rc, out, err = module.run_command("sysctl hw.usermem")
|
rc, out, err = self.module.run_command("sysctl hw.usermem")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['memfree_mb'] = long(out.splitlines()[-1].split()[1]) / 1024 / 1024
|
self.facts['memfree_mb'] = long(out.splitlines()[-1].split()[1]) / 1024 / 1024
|
||||||
|
|
||||||
|
@ -1936,10 +1907,6 @@ class Network(Facts):
|
||||||
subclass = sc
|
subclass = sc
|
||||||
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
||||||
|
|
||||||
def __init__(self, module):
|
|
||||||
self.module = module
|
|
||||||
Facts.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
|
@ -1953,9 +1920,6 @@ class LinuxNetwork(Network):
|
||||||
"""
|
"""
|
||||||
platform = 'Linux'
|
platform = 'Linux'
|
||||||
|
|
||||||
def __init__(self, module):
|
|
||||||
Network.__init__(self, module)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
ip_path = self.module.get_bin_path('ip')
|
ip_path = self.module.get_bin_path('ip')
|
||||||
if ip_path is None:
|
if ip_path is None:
|
||||||
|
@ -1987,7 +1951,7 @@ class LinuxNetwork(Network):
|
||||||
continue
|
continue
|
||||||
if v == 'v6' and not socket.has_ipv6:
|
if v == 'v6' and not socket.has_ipv6:
|
||||||
continue
|
continue
|
||||||
rc, out, err = module.run_command(command[v])
|
rc, out, err = self.module.run_command(command[v])
|
||||||
if not out:
|
if not out:
|
||||||
# v6 routing may result in
|
# v6 routing may result in
|
||||||
# RTNETLINK answers: Invalid argument
|
# RTNETLINK answers: Invalid argument
|
||||||
|
@ -2147,7 +2111,7 @@ class LinuxNetwork(Network):
|
||||||
if not address == '::1':
|
if not address == '::1':
|
||||||
ips['all_ipv6_addresses'].append(address)
|
ips['all_ipv6_addresses'].append(address)
|
||||||
|
|
||||||
ip_path = module.get_bin_path("ip")
|
ip_path = self.module.get_bin_path("ip")
|
||||||
|
|
||||||
args = [ip_path, 'addr', 'show', 'primary', device]
|
args = [ip_path, 'addr', 'show', 'primary', device]
|
||||||
rc, stdout, stderr = self.module.run_command(args)
|
rc, stdout, stderr = self.module.run_command(args)
|
||||||
|
@ -2182,16 +2146,13 @@ class GenericBsdIfconfigNetwork(Network):
|
||||||
"""
|
"""
|
||||||
platform = 'Generic_BSD_Ifconfig'
|
platform = 'Generic_BSD_Ifconfig'
|
||||||
|
|
||||||
def __init__(self, module):
|
|
||||||
Network.__init__(self, module)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
|
|
||||||
ifconfig_path = module.get_bin_path('ifconfig')
|
ifconfig_path = self.module.get_bin_path('ifconfig')
|
||||||
|
|
||||||
if ifconfig_path is None:
|
if ifconfig_path is None:
|
||||||
return self.facts
|
return self.facts
|
||||||
route_path = module.get_bin_path('route')
|
route_path = self.module.get_bin_path('route')
|
||||||
|
|
||||||
if route_path is None:
|
if route_path is None:
|
||||||
return self.facts
|
return self.facts
|
||||||
|
@ -2230,7 +2191,7 @@ class GenericBsdIfconfigNetwork(Network):
|
||||||
|
|
||||||
if v == 'v6' and not socket.has_ipv6:
|
if v == 'v6' and not socket.has_ipv6:
|
||||||
continue
|
continue
|
||||||
rc, out, err = module.run_command(command[v])
|
rc, out, err = self.module.run_command(command[v])
|
||||||
if not out:
|
if not out:
|
||||||
# v6 routing may result in
|
# v6 routing may result in
|
||||||
# RTNETLINK answers: Invalid argument
|
# RTNETLINK answers: Invalid argument
|
||||||
|
@ -2257,7 +2218,7 @@ class GenericBsdIfconfigNetwork(Network):
|
||||||
# FreeBSD, DragonflyBSD, NetBSD, OpenBSD and OS X all implicitly add '-a'
|
# FreeBSD, DragonflyBSD, NetBSD, OpenBSD and OS X all implicitly add '-a'
|
||||||
# when running the command 'ifconfig'.
|
# when running the command 'ifconfig'.
|
||||||
# Solaris must explicitly run the command 'ifconfig -a'.
|
# Solaris must explicitly run the command 'ifconfig -a'.
|
||||||
rc, out, err = module.run_command([ifconfig_path, ifconfig_options])
|
rc, out, err = self.module.run_command([ifconfig_path, ifconfig_options])
|
||||||
|
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
|
||||||
|
@ -2403,9 +2364,6 @@ class HPUXNetwork(Network):
|
||||||
"""
|
"""
|
||||||
platform = 'HP-UX'
|
platform = 'HP-UX'
|
||||||
|
|
||||||
def __init__(self, module):
|
|
||||||
Network.__init__(self, module)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
netstat_path = self.module.get_bin_path('netstat')
|
netstat_path = self.module.get_bin_path('netstat')
|
||||||
if netstat_path is None:
|
if netstat_path is None:
|
||||||
|
@ -2418,7 +2376,7 @@ class HPUXNetwork(Network):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
def get_default_interfaces(self):
|
def get_default_interfaces(self):
|
||||||
rc, out, err = module.run_command("/usr/bin/netstat -nr")
|
rc, out, err = self.module.run_command("/usr/bin/netstat -nr")
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
for line in lines:
|
for line in lines:
|
||||||
words = line.split()
|
words = line.split()
|
||||||
|
@ -2429,7 +2387,7 @@ class HPUXNetwork(Network):
|
||||||
|
|
||||||
def get_interfaces_info(self):
|
def get_interfaces_info(self):
|
||||||
interfaces = {}
|
interfaces = {}
|
||||||
rc, out, err = module.run_command("/usr/bin/netstat -ni")
|
rc, out, err = self.module.run_command("/usr/bin/netstat -ni")
|
||||||
lines = out.split('\n')
|
lines = out.split('\n')
|
||||||
for line in lines:
|
for line in lines:
|
||||||
words = line.split()
|
words = line.split()
|
||||||
|
@ -2445,7 +2403,7 @@ class HPUXNetwork(Network):
|
||||||
'address': address }
|
'address': address }
|
||||||
return interfaces
|
return interfaces
|
||||||
|
|
||||||
class DarwinNetwork(GenericBsdIfconfigNetwork, Network):
|
class DarwinNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the Mac OS X/Darwin Network Class.
|
This is the Mac OS X/Darwin Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork unchanged
|
It uses the GenericBsdIfconfigNetwork unchanged
|
||||||
|
@ -2469,21 +2427,21 @@ class DarwinNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
current_if['media_options'] = self.get_options(words[3])
|
current_if['media_options'] = self.get_options(words[3])
|
||||||
|
|
||||||
|
|
||||||
class FreeBSDNetwork(GenericBsdIfconfigNetwork, Network):
|
class FreeBSDNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the FreeBSD Network Class.
|
This is the FreeBSD Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork unchanged.
|
It uses the GenericBsdIfconfigNetwork unchanged.
|
||||||
"""
|
"""
|
||||||
platform = 'FreeBSD'
|
platform = 'FreeBSD'
|
||||||
|
|
||||||
class DragonFlyNetwork(GenericBsdIfconfigNetwork, Network):
|
class DragonFlyNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the DragonFly Network Class.
|
This is the DragonFly Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork unchanged.
|
It uses the GenericBsdIfconfigNetwork unchanged.
|
||||||
"""
|
"""
|
||||||
platform = 'DragonFly'
|
platform = 'DragonFly'
|
||||||
|
|
||||||
class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
class AIXNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the AIX Network Class.
|
This is the AIX Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork unchanged.
|
It uses the GenericBsdIfconfigNetwork unchanged.
|
||||||
|
@ -2491,9 +2449,9 @@ class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
platform = 'AIX'
|
platform = 'AIX'
|
||||||
|
|
||||||
def get_default_interfaces(self, route_path):
|
def get_default_interfaces(self, route_path):
|
||||||
netstat_path = module.get_bin_path('netstat')
|
netstat_path = self.module.get_bin_path('netstat')
|
||||||
|
|
||||||
rc, out, err = module.run_command([netstat_path, '-nr'])
|
rc, out, err = self.module.run_command([netstat_path, '-nr'])
|
||||||
|
|
||||||
interface = dict(v4 = {}, v6 = {})
|
interface = dict(v4 = {}, v6 = {})
|
||||||
|
|
||||||
|
@ -2518,14 +2476,14 @@ class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
all_ipv4_addresses = [],
|
all_ipv4_addresses = [],
|
||||||
all_ipv6_addresses = [],
|
all_ipv6_addresses = [],
|
||||||
)
|
)
|
||||||
rc, out, err = module.run_command([ifconfig_path, ifconfig_options])
|
rc, out, err = self.module.run_command([ifconfig_path, ifconfig_options])
|
||||||
|
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
|
||||||
if line:
|
if line:
|
||||||
words = line.split()
|
words = line.split()
|
||||||
|
|
||||||
# only this condition differs from GenericBsdIfconfigNetwork
|
# only this condition differs from GenericBsdIfconfigNetwork
|
||||||
if re.match('^\w*\d*:', line):
|
if re.match('^\w*\d*:', line):
|
||||||
current_if = self.parse_interface_line(words)
|
current_if = self.parse_interface_line(words)
|
||||||
interfaces[ current_if['device'] ] = current_if
|
interfaces[ current_if['device'] ] = current_if
|
||||||
|
@ -2547,16 +2505,16 @@ class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
self.parse_inet6_line(words, current_if, ips)
|
self.parse_inet6_line(words, current_if, ips)
|
||||||
else:
|
else:
|
||||||
self.parse_unknown_line(words, current_if, ips)
|
self.parse_unknown_line(words, current_if, ips)
|
||||||
uname_path = module.get_bin_path('uname')
|
uname_path = self.module.get_bin_path('uname')
|
||||||
if uname_path:
|
if uname_path:
|
||||||
rc, out, err = module.run_command([uname_path, '-W'])
|
rc, out, err = self.module.run_command([uname_path, '-W'])
|
||||||
# don't bother with wpars it does not work
|
# don't bother with wpars it does not work
|
||||||
# zero means not in wpar
|
# zero means not in wpar
|
||||||
if not rc and out.split()[0] == '0':
|
if not rc and out.split()[0] == '0':
|
||||||
if current_if['macaddress'] == 'unknown' and re.match('^en', current_if['device']):
|
if current_if['macaddress'] == 'unknown' and re.match('^en', current_if['device']):
|
||||||
entstat_path = module.get_bin_path('entstat')
|
entstat_path = self.module.get_bin_path('entstat')
|
||||||
if entstat_path:
|
if entstat_path:
|
||||||
rc, out, err = module.run_command([entstat_path, current_if['device'] ])
|
rc, out, err = self.module.run_command([entstat_path, current_if['device'] ])
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
break
|
break
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
@ -2571,9 +2529,9 @@ class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
current_if['type'] = 'ether'
|
current_if['type'] = 'ether'
|
||||||
# device must have mtu attribute in ODM
|
# device must have mtu attribute in ODM
|
||||||
if 'mtu' not in current_if:
|
if 'mtu' not in current_if:
|
||||||
lsattr_path = module.get_bin_path('lsattr')
|
lsattr_path = self.module.get_bin_path('lsattr')
|
||||||
if lsattr_path:
|
if lsattr_path:
|
||||||
rc, out, err = module.run_command([lsattr_path,'-El', current_if['device'] ])
|
rc, out, err = self.module.run_command([lsattr_path,'-El', current_if['device'] ])
|
||||||
if rc != 0:
|
if rc != 0:
|
||||||
break
|
break
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
@ -2591,7 +2549,7 @@ class AIXNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
current_if['macaddress'] = 'unknown' # will be overwritten later
|
current_if['macaddress'] = 'unknown' # will be overwritten later
|
||||||
return current_if
|
return current_if
|
||||||
|
|
||||||
class OpenBSDNetwork(GenericBsdIfconfigNetwork, Network):
|
class OpenBSDNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the OpenBSD Network Class.
|
This is the OpenBSD Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork.
|
It uses the GenericBsdIfconfigNetwork.
|
||||||
|
@ -2606,7 +2564,7 @@ class OpenBSDNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
def parse_lladdr_line(self, words, current_if, ips):
|
def parse_lladdr_line(self, words, current_if, ips):
|
||||||
current_if['macaddress'] = words[1]
|
current_if['macaddress'] = words[1]
|
||||||
|
|
||||||
class SunOSNetwork(GenericBsdIfconfigNetwork, Network):
|
class SunOSNetwork(GenericBsdIfconfigNetwork):
|
||||||
"""
|
"""
|
||||||
This is the SunOS Network Class.
|
This is the SunOS Network Class.
|
||||||
It uses the GenericBsdIfconfigNetwork.
|
It uses the GenericBsdIfconfigNetwork.
|
||||||
|
@ -2627,7 +2585,7 @@ class SunOSNetwork(GenericBsdIfconfigNetwork, Network):
|
||||||
all_ipv4_addresses = [],
|
all_ipv4_addresses = [],
|
||||||
all_ipv6_addresses = [],
|
all_ipv6_addresses = [],
|
||||||
)
|
)
|
||||||
rc, out, err = module.run_command([ifconfig_path, '-a'])
|
rc, out, err = self.module.run_command([ifconfig_path, '-a'])
|
||||||
|
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
|
|
||||||
|
@ -2711,9 +2669,6 @@ class Virtual(Facts):
|
||||||
subclass = sc
|
subclass = sc
|
||||||
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
return super(cls, subclass).__new__(subclass, *arguments, **keyword)
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Facts.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
|
@ -2725,9 +2680,6 @@ class LinuxVirtual(Virtual):
|
||||||
"""
|
"""
|
||||||
platform = 'Linux'
|
platform = 'Linux'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Virtual.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_virtual_facts()
|
self.get_virtual_facts()
|
||||||
return self.facts
|
return self.facts
|
||||||
|
@ -2844,9 +2796,9 @@ class LinuxVirtual(Virtual):
|
||||||
self.facts['virtualization_type'] = 'powervm_lx86'
|
self.facts['virtualization_type'] = 'powervm_lx86'
|
||||||
elif re.match('^vendor_id.*IBM/S390', line):
|
elif re.match('^vendor_id.*IBM/S390', line):
|
||||||
self.facts['virtualization_type'] = 'PR/SM'
|
self.facts['virtualization_type'] = 'PR/SM'
|
||||||
lscpu = module.get_bin_path('lscpu')
|
lscpu = self.module.get_bin_path('lscpu')
|
||||||
if lscpu:
|
if lscpu:
|
||||||
rc, out, err = module.run_command(["lscpu"])
|
rc, out, err = self.module.run_command(["lscpu"])
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
for line in out.split("\n"):
|
for line in out.split("\n"):
|
||||||
data = line.split(":", 1)
|
data = line.split(":", 1)
|
||||||
|
@ -2894,9 +2846,6 @@ class FreeBSDVirtual(Virtual):
|
||||||
"""
|
"""
|
||||||
platform = 'FreeBSD'
|
platform = 'FreeBSD'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Virtual.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_virtual_facts()
|
self.get_virtual_facts()
|
||||||
return self.facts
|
return self.facts
|
||||||
|
@ -2916,9 +2865,6 @@ class OpenBSDVirtual(Virtual):
|
||||||
"""
|
"""
|
||||||
platform = 'OpenBSD'
|
platform = 'OpenBSD'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Virtual.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_virtual_facts()
|
self.get_virtual_facts()
|
||||||
return self.facts
|
return self.facts
|
||||||
|
@ -2935,21 +2881,18 @@ class HPUXVirtual(Virtual):
|
||||||
"""
|
"""
|
||||||
platform = 'HP-UX'
|
platform = 'HP-UX'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Virtual.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_virtual_facts()
|
self.get_virtual_facts()
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
def get_virtual_facts(self):
|
def get_virtual_facts(self):
|
||||||
if os.path.exists('/usr/sbin/vecheck'):
|
if os.path.exists('/usr/sbin/vecheck'):
|
||||||
rc, out, err = module.run_command("/usr/sbin/vecheck")
|
rc, out, err = self.module.run_command("/usr/sbin/vecheck")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['virtualization_type'] = 'guest'
|
self.facts['virtualization_type'] = 'guest'
|
||||||
self.facts['virtualization_role'] = 'HP vPar'
|
self.facts['virtualization_role'] = 'HP vPar'
|
||||||
if os.path.exists('/opt/hpvm/bin/hpvminfo'):
|
if os.path.exists('/opt/hpvm/bin/hpvminfo'):
|
||||||
rc, out, err = module.run_command("/opt/hpvm/bin/hpvminfo")
|
rc, out, err = self.module.run_command("/opt/hpvm/bin/hpvminfo")
|
||||||
if rc == 0 and re.match('.*Running.*HPVM vPar.*', out):
|
if rc == 0 and re.match('.*Running.*HPVM vPar.*', out):
|
||||||
self.facts['virtualization_type'] = 'guest'
|
self.facts['virtualization_type'] = 'guest'
|
||||||
self.facts['virtualization_role'] = 'HPVM vPar'
|
self.facts['virtualization_role'] = 'HPVM vPar'
|
||||||
|
@ -2960,7 +2903,7 @@ class HPUXVirtual(Virtual):
|
||||||
self.facts['virtualization_type'] = 'host'
|
self.facts['virtualization_type'] = 'host'
|
||||||
self.facts['virtualization_role'] = 'HPVM'
|
self.facts['virtualization_role'] = 'HPVM'
|
||||||
if os.path.exists('/usr/sbin/parstatus'):
|
if os.path.exists('/usr/sbin/parstatus'):
|
||||||
rc, out, err = module.run_command("/usr/sbin/parstatus")
|
rc, out, err = self.module.run_command("/usr/sbin/parstatus")
|
||||||
if rc == 0:
|
if rc == 0:
|
||||||
self.facts['virtualization_type'] = 'guest'
|
self.facts['virtualization_type'] = 'guest'
|
||||||
self.facts['virtualization_role'] = 'HP nPar'
|
self.facts['virtualization_role'] = 'HP nPar'
|
||||||
|
@ -2975,15 +2918,12 @@ class SunOSVirtual(Virtual):
|
||||||
"""
|
"""
|
||||||
platform = 'SunOS'
|
platform = 'SunOS'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
Virtual.__init__(self)
|
|
||||||
|
|
||||||
def populate(self):
|
def populate(self):
|
||||||
self.get_virtual_facts()
|
self.get_virtual_facts()
|
||||||
return self.facts
|
return self.facts
|
||||||
|
|
||||||
def get_virtual_facts(self):
|
def get_virtual_facts(self):
|
||||||
rc, out, err = module.run_command("/usr/sbin/prtdiag")
|
rc, out, err = self.module.run_command("/usr/sbin/prtdiag")
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
if 'VMware' in line:
|
if 'VMware' in line:
|
||||||
self.facts['virtualization_type'] = 'vmware'
|
self.facts['virtualization_type'] = 'vmware'
|
||||||
|
@ -2999,7 +2939,7 @@ class SunOSVirtual(Virtual):
|
||||||
self.facts['virtualization_role'] = 'guest'
|
self.facts['virtualization_role'] = 'guest'
|
||||||
# Check if it's a zone
|
# Check if it's a zone
|
||||||
if os.path.exists("/usr/bin/zonename"):
|
if os.path.exists("/usr/bin/zonename"):
|
||||||
rc, out, err = module.run_command("/usr/bin/zonename")
|
rc, out, err = self.module.run_command("/usr/bin/zonename")
|
||||||
if out.rstrip() != "global":
|
if out.rstrip() != "global":
|
||||||
self.facts['container'] = 'zone'
|
self.facts['container'] = 'zone'
|
||||||
# Check if it's a branded zone (i.e. Solaris 8/9 zone)
|
# Check if it's a branded zone (i.e. Solaris 8/9 zone)
|
||||||
|
@ -3008,7 +2948,7 @@ class SunOSVirtual(Virtual):
|
||||||
# If it's a zone check if we can detect if our global zone is itself virtualized.
|
# If it's a zone check if we can detect if our global zone is itself virtualized.
|
||||||
# Relies on the "guest tools" (e.g. vmware tools) to be installed
|
# Relies on the "guest tools" (e.g. vmware tools) to be installed
|
||||||
if 'container' in self.facts and self.facts['container'] == 'zone':
|
if 'container' in self.facts and self.facts['container'] == 'zone':
|
||||||
rc, out, err = module.run_command("/usr/sbin/modinfo")
|
rc, out, err = self.module.run_command("/usr/sbin/modinfo")
|
||||||
for line in out.split('\n'):
|
for line in out.split('\n'):
|
||||||
if 'VMware' in line:
|
if 'VMware' in line:
|
||||||
self.facts['virtualization_type'] = 'vmware'
|
self.facts['virtualization_type'] = 'vmware'
|
||||||
|
@ -3020,7 +2960,7 @@ class SunOSVirtual(Virtual):
|
||||||
if os.path.exists("/usr/sbin/virtinfo"):
|
if os.path.exists("/usr/sbin/virtinfo"):
|
||||||
# The output of virtinfo is different whether we are on a machine with logical
|
# The output of virtinfo is different whether we are on a machine with logical
|
||||||
# domains ('LDoms') on a T-series or domains ('Domains') on a M-series. Try LDoms first.
|
# domains ('LDoms') on a T-series or domains ('Domains') on a M-series. Try LDoms first.
|
||||||
rc, out, err = module.run_command("/usr/sbin/virtinfo -p")
|
rc, out, err = self.module.run_command("/usr/sbin/virtinfo -p")
|
||||||
# The output contains multiple lines with different keys like this:
|
# The output contains multiple lines with different keys like this:
|
||||||
# DOMAINROLE|impl=LDoms|control=false|io=false|service=false|root=false
|
# DOMAINROLE|impl=LDoms|control=false|io=false|service=false|root=false
|
||||||
# The output may also be not formatted and the returncode is set to 0 regardless of the error condition:
|
# The output may also be not formatted and the returncode is set to 0 regardless of the error condition:
|
||||||
|
@ -3071,28 +3011,24 @@ def get_file_lines(path):
|
||||||
|
|
||||||
def ansible_facts(module):
|
def ansible_facts(module):
|
||||||
# Retrieve module parameters
|
# Retrieve module parameters
|
||||||
gather_subset = [ 'all' ]
|
gather_subset = ('all',)
|
||||||
if 'gather_subset' in module.params:
|
if 'gather_subset' in module.params:
|
||||||
gather_subset = module.params['gather_subset']
|
gather_subset = module.params['gather_subset']
|
||||||
|
|
||||||
# Retrieve all facts elements
|
# Retrieve all facts elements
|
||||||
if 'all' in gather_subset:
|
if 'all' in gather_subset:
|
||||||
gather_subset = [ 'min', 'hardware', 'network', 'virtual' ]
|
gather_subset = FACT_SUBSETS.keys()
|
||||||
|
else:
|
||||||
# Check subsets and forbid unallowed name
|
# Check subsets and forbid unallowed name
|
||||||
for subset in gather_subset:
|
for subset in gather_subset:
|
||||||
if subset not in Facts.ALLOWED_FACT_SUBSET:
|
if subset not in FACT_SUBSETS.keys():
|
||||||
raise TypeError("Bad subset '%s' given to Ansible. gather_subset options allowed: %s" % (subset, ", ".join(Facts.ALLOWED_FACT_SUBSET)))
|
raise TypeError("Bad subset '%s' given to Ansible. gather_subset options allowed: all, %s" % (subset, ", ".join(FACT_SUBSETS.keys())))
|
||||||
|
|
||||||
facts = {}
|
facts = {}
|
||||||
facts.update(Facts().populate())
|
|
||||||
if 'hardware' in gather_subset:
|
|
||||||
facts.update(Hardware().populate())
|
|
||||||
if 'network' in gather_subset:
|
|
||||||
facts.update(Network(module).populate())
|
|
||||||
if 'virtual' in gather_subset:
|
|
||||||
facts.update(Virtual().populate())
|
|
||||||
facts['gather_subset'] = gather_subset
|
facts['gather_subset'] = gather_subset
|
||||||
|
facts.update(Facts(module).populate())
|
||||||
|
for subset in gather_subset:
|
||||||
|
facts.update(FACT_SUBSETS[subset](module).populate())
|
||||||
return facts
|
return facts
|
||||||
|
|
||||||
# ===========================================
|
# ===========================================
|
||||||
|
@ -3153,3 +3089,11 @@ def get_all_facts(module):
|
||||||
setup_result['_ansible_verbose_override'] = True
|
setup_result['_ansible_verbose_override'] = True
|
||||||
|
|
||||||
return setup_result
|
return setup_result
|
||||||
|
|
||||||
|
### Note: have to define this at the bottom as it references classes defined earlier in this file
|
||||||
|
# Allowed fact subset for gather_subset options and what classes they use
|
||||||
|
FACT_SUBSETS = dict(
|
||||||
|
hardware=Hardware,
|
||||||
|
network=Network,
|
||||||
|
virtual=Virtual,
|
||||||
|
)
|
||||||
|
|
|
@ -64,7 +64,7 @@ class Play(Base, Taggable, Become):
|
||||||
|
|
||||||
# Connection
|
# Connection
|
||||||
_gather_facts = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
_gather_facts = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
||||||
_gather_subset = FieldAttribute(isa='string', default=None, always_post_validate=True)
|
_gather_subset = FieldAttribute(isa='list', default=None, always_post_validate=True)
|
||||||
_ignore_facter = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
_ignore_facter = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
||||||
_ignore_ohai = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
_ignore_ohai = FieldAttribute(isa='bool', default=None, always_post_validate=True)
|
||||||
_hosts = FieldAttribute(isa='list', required=True, listof=string_types, always_post_validate=True)
|
_hosts = FieldAttribute(isa='list', required=True, listof=string_types, always_post_validate=True)
|
||||||
|
|
Loading…
Reference in a new issue