init
This commit is contained in:
commit
2852b91719
|
@ -0,0 +1,5 @@
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
config = configparser.ConfigParser(allow_no_value=True)
|
||||||
|
config.read('config-and-secrets.conf')
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
import json
|
||||||
|
|
||||||
|
from enum import IntEnum
|
||||||
|
from xmlrpc.client import ServerProxy as RPCClient
|
||||||
|
|
||||||
|
from xmltodict import parse
|
||||||
|
|
||||||
|
from config import config
|
||||||
|
from ldap_list import vm_list
|
||||||
|
|
||||||
|
# Constants
|
||||||
|
ALL_VM_STATES = -1
|
||||||
|
START_ID = -1 # First id whatever it is
|
||||||
|
END_ID = -1 # Last id whatever it is
|
||||||
|
session_string = config['oca']['client_secrets']
|
||||||
|
f = open("list",'w')
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def put_under_list(obj):
|
||||||
|
if not isinstance(obj, list):
|
||||||
|
return [obj]
|
||||||
|
return obj
|
||||||
|
|
||||||
|
|
||||||
|
class VMState(IntEnum):
|
||||||
|
INIT = 0
|
||||||
|
PENDING = 1
|
||||||
|
HOLD = 2
|
||||||
|
ACTIVE = 3
|
||||||
|
STOPPED = 4
|
||||||
|
SUSPENDED = 5
|
||||||
|
DONE = 6
|
||||||
|
FAILED = 7
|
||||||
|
POWEROFF = 8
|
||||||
|
UNDEPLOYED = 9
|
||||||
|
CLONING = 10
|
||||||
|
CLONING_FAILURE = 11
|
||||||
|
|
||||||
|
|
||||||
|
class VmFilterFlag(IntEnum):
|
||||||
|
UIDUserResources = 0 # UID User’s Resources
|
||||||
|
UserAndItsGroupsResources = -1 # Resources belonging to the user and any of his groups
|
||||||
|
AllResources = -2 # All resources
|
||||||
|
UserResources = -3 # Resources belonging to the user
|
||||||
|
UserPrimaryGroupResources = -4 # Resources belonging to the user’s primary group
|
||||||
|
|
||||||
|
|
||||||
|
class VM:
|
||||||
|
def __init__(self, vm: dict):
|
||||||
|
self.id = vm.get('ID', None)
|
||||||
|
self.owner = {
|
||||||
|
'id': vm.get('UID', None),
|
||||||
|
'name': vm.get('UNAME', None),
|
||||||
|
'gname': vm.get('GNAME', None)
|
||||||
|
}
|
||||||
|
self.name = vm.get('NAME', None)
|
||||||
|
self.status = vm.get('STATE', None)
|
||||||
|
if self.status:
|
||||||
|
self.status = VMState(int(self.status)).name.lower()
|
||||||
|
|
||||||
|
template = vm['TEMPLATE']
|
||||||
|
|
||||||
|
self.disk = put_under_list(template.get('DISK', []))
|
||||||
|
self.graphics = template.get('GRAPHICS', {})
|
||||||
|
self.memory = template.get('MEMORY', None)
|
||||||
|
self.nic = put_under_list(template.get('NIC', []))
|
||||||
|
self.vcpu = template.get('VCPU', None)
|
||||||
|
self.host = {
|
||||||
|
'name': ((vm.get('HISTORY_RECORDS', {}) or {}).get('HISTORY', {}) or {}).get('HOSTNAME', None),
|
||||||
|
'id': ((vm.get('HISTORY_RECORDS', {}) or {}).get('HISTORY', {}) or {}).get('HID', None),
|
||||||
|
}
|
||||||
|
self.snapshots = put_under_list(vm.get('SNAPSHOTS', []))
|
||||||
|
|
||||||
|
def get_data(self):
|
||||||
|
return {
|
||||||
|
attr: getattr(self, attr)
|
||||||
|
for attr in dir(self)
|
||||||
|
if not attr.startswith('__') and not callable(getattr(self, attr))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with RPCClient(confi['oca']['server']) as rpc_client:
|
||||||
|
success, response, *_ = rpc_client.one.vmpool.infoextended(
|
||||||
|
session_string , -2, -1, -1, 3
|
||||||
|
)
|
||||||
|
if success:
|
||||||
|
vms = json.loads(json.dumps(parse(response)))['VM_POOL']['VM']
|
||||||
|
f = open("list",'w')
|
||||||
|
for entry in vm_list.entries:
|
||||||
|
temp_uname = entry.mail
|
||||||
|
#print(temp_uname)
|
||||||
|
for i, vm in enumerate(vms):
|
||||||
|
vm_user = vm['UNAME']
|
||||||
|
vm_id = vm['ID']
|
||||||
|
vm_port = vm['TEMPLATE']['GRAPHICS'].get('PORT')
|
||||||
|
vm_host = vm['HISTORY_RECORDS']['HISTORY']['HOSTNAME']
|
||||||
|
#print(vm_user, vm_id, vm_port, vm_host)
|
||||||
|
if vm['UNAME'] == temp_uname:
|
||||||
|
print(entry.uid, vm_id, vm_port, vm_host, file=f)
|
||||||
|
#temp_line = entry.uid
|
||||||
|
#f.write(temp_line)
|
||||||
|
|
||||||
|
#print(config['ldap']['admin_dn'])
|
||||||
|
f.close()
|
||||||
|
else:
|
||||||
|
print(response)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
import ldap3
|
||||||
|
import sys
|
||||||
|
from config import config
|
||||||
|
from ldap3 import Server, Connection, ObjectDef, Reader, ALL, SUBTREE, ALL_ATTRIBUTES
|
||||||
|
from ldap3.core import exceptions
|
||||||
|
|
||||||
|
|
||||||
|
LDAP_SERVER = config['ldap']['server']
|
||||||
|
LDAP_PASSWORD = config['ldap']['admin_password']
|
||||||
|
LDAP_USER = config['ldap']['admin_dn']
|
||||||
|
LDAP_PORT = config['ldap']['port']
|
||||||
|
#LDAP_ATTRS = jg
|
||||||
|
|
||||||
|
# Create the Server object with the given address.
|
||||||
|
server = Server(LDAP_SERVER, LDAP_PORT, get_info=ALL)
|
||||||
|
#Create a connection object, and bind with the given DN and password.
|
||||||
|
try:
|
||||||
|
conn = Connection(server, LDAP_USER, LDAP_PASSWORD, auto_bind=True)
|
||||||
|
print('LDAP Bind Successful.')
|
||||||
|
# Perform a search for a pre-defined criteria.
|
||||||
|
# Mention the search filter / filter type and attributes.
|
||||||
|
conn.search('ou=customer,dc=ungleich,dc=ch', '(&(!({}={})))'.format('mail','*@ungleich.ch') , attributes=['uid','mail'])
|
||||||
|
#conn.search('ou=customer,dc=ungleich,dc=ch', '(objectClass=*)' , attributes=['uid','mail'])
|
||||||
|
# Print the resulting entriesn.
|
||||||
|
#for entry in conn.entries:
|
||||||
|
#print(entry.uid, entry.mail)
|
||||||
|
vm_list = conn
|
||||||
|
except exceptions.LDAPException as err:
|
||||||
|
sys.exit(f'LDAP Error: {err}')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue