SmartConnectNoSSL -> disableSslCertValidation=True

This commit is contained in:
ROTTLER Tamas 2024-12-15 00:43:44 +01:00
parent b982a56f90
commit 4cd15a9423
11 changed files with 283 additions and 16 deletions

View File

@ -23,6 +23,7 @@ echo "Trying to apply role \"$ROLE\" to host/group \"$HOST_PATTERN\"..."
ansible-playbook "$@" /dev/stdin <<END ansible-playbook "$@" /dev/stdin <<END
--- ---
- hosts: $HOST_PATTERN - hosts: $HOST_PATTERN
become: yes
roles: roles:
- $ROLE - $ROLE
END END

116
check_vcenter_datastore Executable file
View File

@ -0,0 +1,116 @@
#!/usr/bin/env python3
from pyVmomi import vim
import pyVim.connect
import atexit
import argparse
import re
import siteconf
site_conf = siteconf.read()
def get_args():
parser = argparse.ArgumentParser(
description='Set VM network')
parser.add_argument('-s', '--site',
required=True,
action='store',
help='name of the site to connect to')
parser.add_argument('-d', '--datastore',
required=True,
action='store',
help='datastore name')
parser.add_argument('-W', '--warning',
required=False,
action='store',
default='20%',
help='warning if less free space (nnn%, or nnn[GT]B, default: TB)')
parser.add_argument('-C', '--critical',
required=False,
action='store',
default='10%',
help='critical if less free space')
args = parser.parse_args()
return args
def get_datastore(content, name):
obj_view = content.viewManager.CreateContainerView(
content.rootFolder, [vim.Datastore], True)
ds_list = obj_view.view
obj_view.Destroy()
for ds in ds_list:
if not ds.summary.accessible:
continue
if ds.summary.name == name:
return ds
return None
def less_free(ds, minimum):
cap = ds.summary.capacity
free = ds.summary.freeSpace
ratio = free / cap
if m := re.match("([0-9.]+)%$", minimum):
min_ratio = float(m[1]) / 100
#print(f"min_ratio: {min_ratio}")
if ratio < min_ratio:
return True
else:
return False
elif m := re.match("([0-9.]+)([GT]B?)$", minimum):
min_n, unit = float(m[1]), m[2]
if unit[0] == 'G':
min_n *= 1024**3
if unit[0] == 'T':
min_n *= 1024**4
else:
min_n = float(min_n) * 1024**4 # TB
#print(f"min_n: {min_n}")
if ds.summary.freeSpace < min_n:
return True
else:
return False
def main():
args = get_args()
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']
si = pyVim.connect.SmartConnect(
host = host,
user = user,
pwd = passwd,
disableSslCertValidation = True
)
atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent()
ds = get_datastore(content, args.datastore)
if ds == None:
print(f"UNKNOWN: datastore {args.site} | {args.datastore} not found.")
exit(3)
cap = ds.summary.capacity / 1024**4
free = ds.summary.freeSpace / 1024**4
ratio = free / cap
text = f"{ds.summary.name} {ratio:.0%} free: {free:.3f} TB / {cap:.3f} TB"
if less_free(ds, args.critical):
print(f"CRITICAL: {text}")
exit(2)
elif less_free(ds, args.warning):
print(f"WARNING: {text}")
exit(1)
else:
print(f"OK: {text}")
if __name__ == "__main__":
main()
# vim: set tabstop=4 shiftwidth=4 expandtab smarttab:

View File

@ -31,10 +31,11 @@ def main():
user = site_conf[args.site]['vcenter_user'] user = site_conf[args.site]['vcenter_user']
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -40,10 +40,11 @@ def main():
user = site_conf[args.site]['vcenter_user'] user = site_conf[args.site]['vcenter_user']
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -66,10 +66,11 @@ def main():
user = site_conf[args.site]['vcenter_user'] user = site_conf[args.site]['vcenter_user']
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -62,10 +62,11 @@ def main():
user = site_conf[args.site]['vcenter_user'] user = site_conf[args.site]['vcenter_user']
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -90,10 +90,11 @@ def main():
exit(1) exit(1)
#print(f"host {host} user {user} passwd {passwd}") #print(f"host {host} user {user} passwd {passwd}")
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -72,10 +72,11 @@ def main():
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

142
vmw_vcenter_data Executable file
View File

@ -0,0 +1,142 @@
#!/usr/bin/env python3
from pyVmomi import vim
import pyVim.connect
import atexit
import argparse
#import time
import json
import siteconf
site_conf = siteconf.read()
def get_args():
parser = argparse.ArgumentParser(
description='Set VM network')
parser.add_argument('-s', '--site',
required=True,
action='store',
help='name of the site to connect to')
parser.add_argument('--list-datastores',
required=False,
action='store_true',
help='list all accessable datastores')
parser.add_argument('--list-config',
required=False,
action='store_true',
help='list relevant configuration')
args = parser.parse_args()
return args
def get_datastores(content):
obj_view = content.viewManager.CreateContainerView(
content.rootFolder, [vim.Datastore], True)
ds_list = obj_view.view
obj_view.Destroy()
result = []
for ds in ds_list:
if not ds.summary.accessible:
continue
result.append(ds)
return result
#def get_all_objs(content, vimtype):
# obj = {}
# container = content.viewManager.CreateContainerView(
# content.rootFolder, vimtype, True)
# for managed_object_ref in container.view:
# obj.update({managed_object_ref: managed_object_ref.name})
# return obj
#def list_datastores(content):
# datastores = get_datastores(content)
# for ds in datastores:
# cap = ds.summary.capacity / 1024**4
# free = ds.summary.freeSpace / 1024**4
# ratio = free / cap
# print(f"{ds.summary.name} {ratio:.0%} {free:.3f} TB / {cap:.3f} TB")
def main():
args = get_args()
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']
si = pyVim.connect.SmartConnect(
host = host,
user = user,
pwd = passwd,
disableSslCertValidation = True
)
atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent()
if args.list_datastores:
datastores = get_datastores(content)
names = []
for ds in datastores:
names.append(ds.summary.name)
names.sort()
print(names)
elif args.list_config:
print({
'vcenter_addr': site_conf[args.site]['vcenter'],
'vcenter_user': site_conf[args.site]['vcenter_user']
});
else:
print("No command given.")
if __name__ == "__main__":
main()
# vim: set tabstop=4 shiftwidth=4 expandtab smarttab:
####!/usr/bin/env python3
###import argparse
###import siteconf
###
###site_conf = siteconf.read()
###
###
###def get_args():
### parser = argparse.ArgumentParser(
### description='Set VM network')
###
### parser.add_argument('-s', '--site',
### required=True,
### action='store',
### help='name of the site to connect to')
###
### args = parser.parse_args()
### return args
###
###
###
###def main():
### args = get_args()
###
### if not args.site in site_conf:
### print(f"site not found: {args.site}")
### exit(1)
###
### vms = get_vms(content)
### for vm in vms:
### for d in vm.config.hardware.device:
### if hasattr(d, 'macAddress'):
### print(f'{d.macAddress} {vm.name}')
###
###
###
###
###if __name__ == "__main__":
### main()
###
#### vim: set tabstop=4 shiftwidth=4 expandtab smarttab:

View File

@ -62,10 +62,11 @@ def main():
user = site_conf[args.site]['vcenter_user'] user = site_conf[args.site]['vcenter_user']
passwd = site_conf[args.site]['vcenter_passwd'] passwd = site_conf[args.site]['vcenter_passwd']
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()

View File

@ -71,10 +71,11 @@ def main():
exit(1) exit(1)
#print(f"host {host} user {user} passwd {passwd}") #print(f"host {host} user {user} passwd {passwd}")
si = pyVim.connect.SmartConnectNoSSL( si = pyVim.connect.SmartConnect(
host = host, host = host,
user = user, user = user,
pwd = passwd pwd = passwd,
disableSslCertValidation = True
) )
atexit.register(pyVim.connect.Disconnect, si) atexit.register(pyVim.connect.Disconnect, si)
content = si.RetrieveContent() content = si.RetrieveContent()