diff --git a/lookup_plugins/ldap.py b/lookup_plugins/ldap.py index cdca475f389f925d3a575a95abb26cdf1bb83a64..bd04a89a8c20a36334c06696def3772598e21b35 100644 --- a/lookup_plugins/ldap.py +++ b/lookup_plugins/ldap.py @@ -60,9 +60,28 @@ class LookupModule(LookupBase): result = [res.decode('utf-8') for res in result['ipHostNumber']] return result + def cn(self, host, vlan): + """ + Retrieve aliases of an interface of a device + query('ldap', 'cn', HOST, VLAN) + """ + if isinstance(vlan, int): + network_query_id = self.base.search(f"ou=networks,{self.base_dn}", ldap.SCOPE_ONELEVEL, f"description={vlan}") + network_result = self.base.result(network_query_id) + vlan = network_result[1][0][1]['cn'][0].decode('utf-8') + if vlan == 'srv': + query_id = self.base.search(f"cn={host}.crans.org,cn={host},ou=hosts,{self.base_dn}", ldap.SCOPE_BASE) + else: + query_id = self.base.search(f"cn={host}.{vlan}.crans.org,cn={host},ou=hosts,{self.base_dn}", ldap.SCOPE_BASE) + result = self.base.result(query_id) + result = result[1][0][1] + result = [res.decode('utf-8') for res in result['cn']] + return result + + def subnet_ipv4(self, subnet): """ - Retrive used IP addresses on a subnet + Retrieve used IP addresses on a subnet query('ldap', 'subnet_ipv4', SUBNET) """ network_query_id = self.base.search(f"cn={subnet},ou=networks,{self.base_dn}", ldap.SCOPE_BASE) @@ -80,6 +99,8 @@ class LookupModule(LookupBase): result = self.query(*terms[1:]) elif terms[0] == 'ip': result = self.ip(*terms[1:]) + elif terms[0] == 'cn': + result = self.cn(*terms[1:]) elif terms[0] == 'subnet_ipv4': result = self.subnet_ipv4(*terms[1:]) elif terms[0] == 'group':