mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-27 18:50:21 -07:00
Added support for AIX 5.3 and 6.1
A collegue of mine has added basix AIX support to the setup, user and group modules. We have tested this on AIX 5.3 and 6.1 and it works "as advertised"
This commit is contained in:
parent
584fd7a261
commit
6a89177a59
3 changed files with 290 additions and 17 deletions
112
library/setup
112
library/setup
|
@ -119,27 +119,39 @@ class Facts(object):
|
|||
self.facts['architecture'] = self.facts['machine']
|
||||
if self.facts['system'] == 'Linux':
|
||||
self.get_distribution_facts()
|
||||
elif self.facts['system'] == 'AIX':
|
||||
rc, out, err = module.run_command("/usr/sbin/bootinfo -p")
|
||||
data = out.split('\n')
|
||||
self.facts['architecture'] = data[0]
|
||||
|
||||
|
||||
# platform.dist() is deprecated in 2.6
|
||||
# in 2.6 and newer, you should use platform.linux_distribution()
|
||||
def get_distribution_facts(self):
|
||||
dist = platform.dist()
|
||||
self.facts['distribution'] = dist[0].capitalize() or 'NA'
|
||||
self.facts['distribution_version'] = dist[1] or 'NA'
|
||||
self.facts['distribution_release'] = dist[2] or 'NA'
|
||||
# Try to handle the exceptions now ...
|
||||
for (path, name) in Facts.OSDIST_DICT.items():
|
||||
if os.path.exists(path):
|
||||
if self.facts['distribution'] == 'Fedora':
|
||||
pass
|
||||
elif name == 'RedHat':
|
||||
data = get_file_content(path)
|
||||
if 'Red Hat' in data:
|
||||
self.facts['distribution'] = name
|
||||
else:
|
||||
self.facts['distribution'] = data.split()[0]
|
||||
else:
|
||||
self.facts['distribution'] = name
|
||||
if self.facts['system'] == 'AIX':
|
||||
self.facts['distribution'] = 'AIX'
|
||||
rc, out, err = module.run_command("/usr/bin/oslevel")
|
||||
data = out.split('.')
|
||||
self.facts['distribution_version'] = data[0]
|
||||
self.facts['distribution_release'] = data[1]
|
||||
else:
|
||||
dist = platform.dist()
|
||||
self.facts['distribution'] = dist[0].capitalize() or 'NA'
|
||||
self.facts['distribution_version'] = dist[1] or 'NA'
|
||||
self.facts['distribution_release'] = dist[2] or 'NA'
|
||||
# Try to handle the exceptions now ...
|
||||
for (path, name) in Facts.OSDIST_DICT.items():
|
||||
if os.path.exists(path):
|
||||
if self.facts['distribution'] == 'Fedora':
|
||||
pass
|
||||
elif name == 'RedHat':
|
||||
data = get_file_content(path)
|
||||
if 'Red Hat' in data:
|
||||
self.facts['distribution'] = name
|
||||
else:
|
||||
self.facts['distribution'] = data.split()[0]
|
||||
else:
|
||||
self.facts['distribution'] = name
|
||||
|
||||
def get_cmdline(self):
|
||||
data = get_file_content('/proc/cmdline')
|
||||
|
@ -602,6 +614,72 @@ class FreeBSDHardware(Hardware):
|
|||
if s:
|
||||
self.facts['devices'][d.group(1)].append(s.group(1))
|
||||
|
||||
class AIX(Hardware):
|
||||
"""
|
||||
AIX-specific subclass of Hardware. Defines memory and CPU facts:
|
||||
- memfree_mb
|
||||
- memtotal_mb
|
||||
- swapfree_mb
|
||||
- swaptotal_mb
|
||||
- processor (a list)
|
||||
- processor_cores
|
||||
- processor_count
|
||||
"""
|
||||
platform = 'AIX'
|
||||
|
||||
def __init__(self):
|
||||
Hardware.__init__(self)
|
||||
|
||||
def populate(self):
|
||||
self.get_cpu_facts()
|
||||
self.get_memory_facts()
|
||||
self.get_dmi_facts()
|
||||
return self.facts
|
||||
|
||||
def get_cpu_facts(self):
|
||||
self.facts['processor'] = []
|
||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El proc0 -a type")
|
||||
data = out.split(' ')
|
||||
self.facts['processor'] = data[1]
|
||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El proc0 -a smt_threads")
|
||||
data = out.split(' ')
|
||||
self.facts['processor_cores'] = int(data[1])
|
||||
rc, out, err = module.run_command("/usr/sbin/lsdev -Cc processor")
|
||||
i = 0
|
||||
for line in out.split('\n'):
|
||||
data = line.split(':')
|
||||
if 'Available' in line:
|
||||
i += 1
|
||||
self.facts['processor_count'] = int(i)
|
||||
|
||||
def get_memory_facts(self):
|
||||
pagesize = 4096
|
||||
rc, out, err = module.run_command("/usr/bin/vmstat -v")
|
||||
for line in out.split('\n'):
|
||||
data = line.split()
|
||||
if 'memory pages' in line:
|
||||
pagecount = long(data[0])
|
||||
if 'free pages' in line:
|
||||
freecount = long(data[0])
|
||||
self.facts['memtotal_mb'] = pagesize * pagecount / 1024 / 1024
|
||||
self.facts['memfree_mb'] = pagesize * freecount / 1024 / 1024
|
||||
# Get swapinfo. swapinfo output looks like:
|
||||
# Device 1M-blocks Used Avail Capacity
|
||||
# /dev/ada0p3 314368 0 314368 0%
|
||||
#
|
||||
rc, out, err = module.run_command("/usr/sbin/lsps -s")
|
||||
lines = out.split('\n')
|
||||
data = lines[1].split()
|
||||
swaptotal_mb = long(data[0].rstrip('MB'))
|
||||
percused = int(data[1].rstrip('%'))
|
||||
self.facts['swaptotal_mb'] = swaptotal_mb
|
||||
self.facts['swapfree_mb'] = long(swaptotal_mb * ( 100 - percused ) / 100)
|
||||
|
||||
def get_dmi_facts(self):
|
||||
rc, out, err = module.run_command("/usr/sbin/lsattr -El sys0 -a fwversion")
|
||||
data = out.split()
|
||||
self.facts['firmware_version'] = data[1].strip('IBM,')
|
||||
|
||||
class Network(Facts):
|
||||
"""
|
||||
This is a generic Network subclass of Facts. This should be further
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue