mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-04-25 16:06:43 +00:00
Add LVM facts to setup module
This commit adds LinuxHardware.get_device_facts() and calls that from
.populate().
LVM facts are only gathered if the setup module is running as root and
the lvm utilities are available (tested by searching for 'vgs').
If the conditions are met, facts are set for each volume group and
logical volume.
Example:
Test LVM Data:
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
test 1 2 0 wz--n- 5.00g 2.00g
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
testlv test -wi-a---- 1.00g
testlv2 test -wi-a---- 2.00g
Facts Returned:
$ ansible localhost -i /tmp/inv -m setup -a 'filter=ansible_lvm'
localhost | success >> {
"ansible_facts": {
"ansible_lvm": {
"lvs": {
"testlv": {
"size_g": "1.00",
"vg": "test"
},
"testlv2": {
"size_g": "2.00",
"vg": "test"
}
},
"vgs": {
"test": {
"free_g": "2.00",
"num_lvs": "2",
"num_pvs": "1",
"size_g": "5.00"
}
}
}
},
"changed": false
}
Test as non-root:
$ ansible localhost -i /tmp/inv-user -m setup -a 'filter=ansible_lvm'
localhost | success >> {
"ansible_facts": {},
"changed": false
}
Test without lvm utilities available
$ sudo mv /sbin/vgs{,.bk}
$ ansible localhost -i /tmp/inv -m setup -a 'filter=ansible_lvm'
localhost | success >> {
"ansible_facts": {},
"changed": false
}
This commit is contained in:
committed by
Abhijit Menon-Sen
parent
0c21196633
commit
f344ec463f
@@ -724,6 +724,7 @@ class LinuxHardware(Hardware):
|
||||
self.get_dmi_facts()
|
||||
self.get_device_facts()
|
||||
self.get_uptime_facts()
|
||||
self.get_lvm_facts()
|
||||
try:
|
||||
self.get_mount_facts()
|
||||
except TimeoutError:
|
||||
@@ -1067,6 +1068,37 @@ class LinuxHardware(Hardware):
|
||||
uptime_seconds_string = get_file_content('/proc/uptime').split(' ')[0]
|
||||
self.facts['uptime_seconds'] = int(float(uptime_seconds_string))
|
||||
|
||||
def get_lvm_facts(self):
|
||||
""" Get LVM Facts if running as root and lvm utils are available """
|
||||
|
||||
if os.getuid() == 0 and module.get_bin_path('vgs'):
|
||||
lvm_util_options = '--noheadings --nosuffix --units g'
|
||||
|
||||
#vgs fields: VG #PV #LV #SN Attr VSize VFree
|
||||
vgs={}
|
||||
rc, vg_lines, err = module.run_command(
|
||||
'vgs %s' % lvm_util_options)
|
||||
for vg_line in vg_lines.splitlines():
|
||||
items = vg_line.split()
|
||||
vgs[items[0]] = {'size_g':items[-2],
|
||||
'free_g':items[-1],
|
||||
'num_lvs': items[2],
|
||||
'num_pvs': items[1]}
|
||||
|
||||
#lvs fields:
|
||||
#LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
|
||||
lvs = {}
|
||||
rc, lv_lines, err = module.run_command(
|
||||
'lvs %s' % lvm_util_options)
|
||||
for lv_line in lv_lines.splitlines():
|
||||
items = lv_line.split()
|
||||
lvs[items[0]] = {'size_g': items[3],
|
||||
'vg': items[1]}
|
||||
|
||||
self.facts['lvm'] = {'lvs': lvs,
|
||||
'vgs': vgs}
|
||||
|
||||
|
||||
class SunOSHardware(Hardware):
|
||||
"""
|
||||
In addition to the generic memory and cpu facts, this also sets
|
||||
|
||||
Reference in New Issue
Block a user