From f756ccaeb313aea81e5cf62357e337678df49174 Mon Sep 17 00:00:00 2001 From: Rottler Tamas Date: Tue, 15 Aug 2023 12:39:58 +0200 Subject: [PATCH 1/3] vmw_vm_uptime --- vmw_vm_uptime | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 vmw_vm_uptime diff --git a/vmw_vm_uptime b/vmw_vm_uptime new file mode 100755 index 0000000..c89261c --- /dev/null +++ b/vmw_vm_uptime @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 +from pyVmomi import vim +import pyVim.connect +import atexit +import argparse +from pprint import pprint +import re +from datetime import datetime +from dateutil.tz import tzlocal +import siteconf + +site_conf = siteconf.read() + + +def get_args(): + parser = argparse.ArgumentParser( + description='Clone VM from template') + + parser.add_argument('-s', '--site', + required=False, + action='store', + help='name of the site to connect to') + + parser.add_argument('-H', '--host', + required=False, + action='store', + help='vcenter host name (override site)') + + parser.add_argument('-u', '--user', + required=False, + action='store', + help='user name') + + parser.add_argument('-p', '--passwd', + required=False, + action='store', + help='password') + + args = parser.parse_args() + return args + + +def get_vms(content): + obj_view = content.viewManager.CreateContainerView( + content.rootFolder, [vim.VirtualMachine], True) + vms_list = obj_view.view + obj_view.Destroy() + return vms_list + + +def main(): + args = get_args() + + host, user, passwd = None, None, None + if args.site: + if not args.site in site_conf: + print(f"site not found: {args.site}") + exit(1) + host = site_conf[args.site]['vcenter'] + user = site_conf[args.site]['vcenter_user'] + passwd = site_conf[args.site]['vcenter_passwd'] + if args.host: + host = args.host + if args.user: + host = args.user + if args.passwd: + host = args.passwd + + if not host or not user or not passwd: + print("Missing site / host, user, passwd.") + exit(1) + #print(f"host {host} user {user} passwd {passwd}") + + si = pyVim.connect.SmartConnectNoSSL( + host = host, + user = user, + pwd = passwd + ) + atexit.register(pyVim.connect.Disconnect, si) + content = si.RetrieveContent() + + vms = get_vms(content) + for vm in vms: + uptime = vm.summary.quickStats.uptimeSeconds + if uptime > 86400: + days = uptime // 86400 + uptime %= 86400 + uptimestr = f"{days:3}d " + else: + uptimestr = ' ' + uptimestr += f"{uptime // 3600:2}h" + boottime = vm.runtime.bootTime + if boottime: + boottime = boottime.strftime('%Y-%m-%d %H:%M') + else: + boottime = 'off' + uptimestr = '-' + print(f"{vm.name:42} {boottime} ({uptimestr})") + + +if __name__ == "__main__": + main() + +# vim: set tabstop=4 shiftwidth=4 expandtab smarttab: From 65308f0ca8b6181098e7844d30d0c850580303df Mon Sep 17 00:00:00 2001 From: Rottler Tamas Date: Tue, 15 Aug 2023 12:53:27 +0200 Subject: [PATCH 2/3] print time az 'Z' for UTC --- vmw_vm_uptime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vmw_vm_uptime b/vmw_vm_uptime index c89261c..8b30a1c 100755 --- a/vmw_vm_uptime +++ b/vmw_vm_uptime @@ -91,7 +91,7 @@ def main(): uptimestr += f"{uptime // 3600:2}h" boottime = vm.runtime.bootTime if boottime: - boottime = boottime.strftime('%Y-%m-%d %H:%M') + boottime = boottime.strftime('%Y-%m-%d %H:%MZ') else: boottime = 'off' uptimestr = '-' From d508a490d91dc98d758160fe9b86e55af223d961 Mon Sep 17 00:00:00 2001 From: Rottler Tamas Date: Thu, 15 Feb 2024 18:42:17 +0100 Subject: [PATCH 3/3] no exception for vm names ending in _R --- vmw_snapshot_list | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vmw_snapshot_list b/vmw_snapshot_list index 7894b99..f66a6ef 100755 --- a/vmw_snapshot_list +++ b/vmw_snapshot_list @@ -104,8 +104,8 @@ def main(): continue snaplist = snapshots(vm.snapshot.rootSnapshotList, args.age) - if re.search('_R$', vm.name): - continue; + #if re.search('_R$', vm.name): + # continue; for s in snaplist: print("%s: %s" % (vm.name, s))