Added cross-platform uptime fact

Having an uptime fact allows you to check after a reboot whether the system was effectively rebooted.

```yaml
  - name: Safeguard - Was system properly rebooted ?
    action: fail msg="System was not properly rebooted"
    when: ansible_uptime > 900
```

This patch has been tested on Linux, Solaris and HP-UX.
This commit is contained in:
Dag Wieers 2014-06-05 11:58:00 +02:00
parent 11b72df27b
commit 14a9966984

View file

@ -117,6 +117,7 @@ class Facts(object):
self.facts = {} self.facts = {}
self.get_platform_facts() self.get_platform_facts()
self.get_distribution_facts() self.get_distribution_facts()
self.get_uptime()
self.get_cmdline() self.get_cmdline()
self.get_public_ssh_host_keys() self.get_public_ssh_host_keys()
self.get_selinux_facts() self.get_selinux_facts()
@ -130,6 +131,20 @@ class Facts(object):
def populate(self): def populate(self):
return self.facts return self.facts
def get_uptime(self):
uptime_path = module.get_bin_path('uptime')
if uptime_path:
rc, out, err = module.run_command(uptime_path)
if rc == 0:
raw = out.replace(',','')
days = int(raw.split()[2])
if 'min' in raw:
hours = 0
minutes = int(raw[4])
else:
hours, minutes = map(int, raw.split()[4].split(':'))
self.facts['uptime'] = days*24*60*60 + hours*60*60 + minutes*60
# Platform # Platform
# platform.system() can be Linux, Darwin, Java, or Windows # platform.system() can be Linux, Darwin, Java, or Windows
def get_platform_facts(self): def get_platform_facts(self):
@ -537,6 +552,11 @@ class LinuxHardware(Hardware):
pass pass
return self.facts return self.facts
def get_uptime(self):
data = get_file_content('/proc/uptime')
if data:
self.facts['uptime'] = float(data.split()[0])
def get_memory_facts(self): def get_memory_facts(self):
if not os.access("/proc/meminfo", os.R_OK): if not os.access("/proc/meminfo", os.R_OK):
return return
@ -798,6 +818,11 @@ class SunOSHardware(Hardware):
self.get_memory_facts() self.get_memory_facts()
return self.facts return self.facts
def get_uptime(self):
rc, out, err = module.run_command("/usr/bin/kstat -p unix:0:system_misc:snaptime")
if out:
self.facts['uptime'] = float(out.split()[1])
def get_cpu_facts(self): def get_cpu_facts(self):
physid = 0 physid = 0
sockets = {} sockets = {}