commit
2852b91719
3 changed files with 148 additions and 0 deletions
@ -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