diff --git a/scripts/machines.py b/scripts/machines.py index 07891f097fe0f8cab942d76ba3e4dc27849b6b60..c2a702667a84a8decba865fc0486e62aa0210c3a 100755 --- a/scripts/machines.py +++ b/scripts/machines.py @@ -49,7 +49,9 @@ def filter(**filters) -> str: return "".join(f"({k}={v})" for k, v in filters.items()) -def machines_ldap(utilisateur="", responsable="", room="", machine="", **kwargs): +def machines_ldap( + utilisateur="", responsable="", room="", machine="", vlan=False, **kwargs +): """Get a dict of Gepettists machines from LDAP.""" filters = FILTERS if machine: @@ -67,13 +69,24 @@ def machines_ldap(utilisateur="", responsable="", room="", machine="", **kwargs) attributes=ATTRIBUTES, ) - return { + ret = { str(entry.cn): { short(k): parse(k, v) for k, v in entry.entry_attributes_as_dict.items() } for entry in CONN.entries } + if vlan: + filters = "".join(f"(cn={k})" for k in ret.keys()) + attributes = ["cn", "laas-vlan", "laas-vlan-name"] + CONN.search("ou=hosts,dc=laas,dc=fr", f"(|{filters})", attributes=attributes) + + for entry in CONN.entries: + cn, vlan, name = (str(entry[k]) for k in attributes) + ret[cn]["vlan"] = f"{vlan}: {name}" + + return ret + def users_ldap(): """Get a dict of Gepettists with their room and st""" @@ -98,6 +111,7 @@ def machines_display(data, sort_by="datePeremption"): def get_parser() -> ArgumentParser: """Configure argparse.""" parser = ArgumentParser(description=__doc__) + parser.add_argument("-V", "--vlan", action="store_true") # Filtering parser.add_argument("-m", "--machine")