[slapd] soyouz, query and regex
							parent
							
								
									f4dd6fe242
								
							
						
					
					
						commit
						02df5674b1
					
				| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
glob_slapd:
 | 
					glob_slapd:
 | 
				
			||||||
  master_ip: 172.16.10.1
 | 
					  master_ip: "{{ query('ldap', 'ipv4', 'tealc', 'adm') | first }}"
 | 
				
			||||||
 | 
					  regex: "^(role:(dhcp|dns|dns-primary|dns-secondary|ftp|gitlab|miroir|ntp|pve|radius|backup)|ecdsa-sha2-nistp256:.*|ssh-(ed25519|dss|rsa):.*)$"
 | 
				
			||||||
  replication_credentials: "{{ vault_ldap_replication_credentials }}"
 | 
					  replication_credentials: "{{ vault_ldap_replication_credentials }}"
 | 
				
			||||||
  private_key: "{{ vault_ldap_private_key }}"
 | 
					  private_key: "{{ vault_ldap_private_key }}"
 | 
				
			||||||
  certificate: "{{ vault_ldap_certificate }}"
 | 
					  certificate: "{{ vault_ldap_certificate }}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
loc_slapd:
 | 
					loc_slapd:
 | 
				
			||||||
  ip: 172.16.10.12
 | 
					  ip: "{{ query('ldap', 'ipv4', 'daniel', 'adm') | first }}"
 | 
				
			||||||
  replica: true
 | 
					  replica: true
 | 
				
			||||||
  replica_rid: 2
 | 
					  replica_rid: 2
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
loc_slapd:
 | 
					loc_slapd:
 | 
				
			||||||
  ip: 172.16.10.13
 | 
					  ip: "{{ query('ldap', 'ipv4', 'jack', 'adm') | first }}"
 | 
				
			||||||
  replica: true
 | 
					  replica: true
 | 
				
			||||||
  replica_rid: 3
 | 
					  replica_rid: 3
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
loc_slapd:
 | 
					loc_slapd:
 | 
				
			||||||
  ip: 172.16.10.11
 | 
					  ip: "{{ query('ldap', 'ipv4', 'sam', 'adm') | first }}"
 | 
				
			||||||
  replica: true
 | 
					  replica: true
 | 
				
			||||||
  replica_rid: 1
 | 
					  replica_rid: 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,5 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					loc_slapd:
 | 
				
			||||||
 | 
					  ip: "{{ query('ldap', 'ipv4', 'sputnik', 'adm') | first }}"
 | 
				
			||||||
 | 
					  replica: true
 | 
				
			||||||
 | 
					  replica_rid: 4
 | 
				
			||||||
							
								
								
									
										1
									
								
								hosts
								
								
								
								
							
							
						
						
									
										1
									
								
								hosts
								
								
								
								
							| 
						 | 
					@ -66,6 +66,7 @@ tealc.adm.crans.org
 | 
				
			||||||
sam.adm.crans.org
 | 
					sam.adm.crans.org
 | 
				
			||||||
daniel.adm.crans.org
 | 
					daniel.adm.crans.org
 | 
				
			||||||
jack.adm.crans.org
 | 
					jack.adm.crans.org
 | 
				
			||||||
 | 
					sputnik.adm.crans.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[linx]
 | 
					[linx]
 | 
				
			||||||
linx.adm.crans.org
 | 
					linx.adm.crans.org
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										5
									
								
								ldap.yml
								
								
								
								
							
							
						
						
									
										5
									
								
								ldap.yml
								
								
								
								
							| 
						 | 
					@ -1,5 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env ansible-playbook
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
- hosts: daniel
 | 
					 | 
				
			||||||
  roles:
 | 
					 | 
				
			||||||
    - slapd
 | 
					 | 
				
			||||||
| 
						 | 
					@ -60,6 +60,21 @@ class LookupModule(LookupBase):
 | 
				
			||||||
        result = [res.decode('utf-8') for res in result['ipHostNumber']]
 | 
					        result = [res.decode('utf-8') for res in result['ipHostNumber']]
 | 
				
			||||||
        return result
 | 
					        return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def ipv4(self, 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['ipHostNumber']]
 | 
				
			||||||
 | 
					        result = [ res for res in result if type(ipaddress.ip_address(res)) is ipaddress.IPv4Address ]
 | 
				
			||||||
 | 
					        return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def all_ip(self, host):
 | 
					    def all_ip(self, host):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Retrieve all IP addresses of a device
 | 
					        Retrieve all IP addresses of a device
 | 
				
			||||||
| 
						 | 
					@ -141,6 +156,8 @@ class LookupModule(LookupBase):
 | 
				
			||||||
            result = self.query(*terms[1:])
 | 
					            result = self.query(*terms[1:])
 | 
				
			||||||
        elif terms[0] == 'ip':
 | 
					        elif terms[0] == 'ip':
 | 
				
			||||||
            result = self.ip(*terms[1:])
 | 
					            result = self.ip(*terms[1:])
 | 
				
			||||||
 | 
					        elif terms[0] == 'ipv4':
 | 
				
			||||||
 | 
					            result = self.ipv4(*terms[1:])
 | 
				
			||||||
        elif terms[0] == 'all_ip':
 | 
					        elif terms[0] == 'all_ip':
 | 
				
			||||||
            result = self.all_ip(*terms[1:])
 | 
					            result = self.all_ip(*terms[1:])
 | 
				
			||||||
        elif terms[0] == 'cn':
 | 
					        elif terms[0] == 'cn':
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,11 +48,7 @@
 | 
				
			||||||
    - qemu-guest-agent
 | 
					    - qemu-guest-agent
 | 
				
			||||||
    - serial-tty
 | 
					    - serial-tty
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- hosts: ldap_server
 | 
					- import_playbook: slapd.yml
 | 
				
			||||||
  vars:
 | 
					 | 
				
			||||||
    slapd: '{{ glob_slapd | combine(loc_slapd | default({})) }}'
 | 
					 | 
				
			||||||
  roles:
 | 
					 | 
				
			||||||
    - slapd
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
- hosts: server
 | 
					- hosts: server
 | 
				
			||||||
  vars:
 | 
					  vars:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env ansible-playbook
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					- hosts: ldap_server
 | 
				
			||||||
 | 
					  vars:
 | 
				
			||||||
 | 
					    slapd: '{{ glob_slapd | default({}) | combine(loc_slapd | default({})) }}'
 | 
				
			||||||
 | 
					  roles:
 | 
				
			||||||
 | 
					    - slapd
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@ auditlog 		/var/log/openldap/auditlog.log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
moduleload constraint
 | 
					moduleload constraint
 | 
				
			||||||
overlay constraint
 | 
					overlay constraint
 | 
				
			||||||
constraint_attribute description regex ^(dhcp|dns|dns-primary|dns-secondary|ftp|gitlab|miroir|ntp|pve|radius)$
 | 
					constraint_attribute description regex {{ slapd.regex }}
 | 
				
			||||||
  restrict=ldap:///ou=hosts,dc=crans,dc=org??one?(objectClass=device)
 | 
					  restrict=ldap:///ou=hosts,dc=crans,dc=org??one?(objectClass=device)
 | 
				
			||||||
constraint_attribute uid regex ^_
 | 
					constraint_attribute uid regex ^_
 | 
				
			||||||
  restrict=ldap:///ou=passwd,dc=crans,dc=org??one?(objectClass=posixAccount)
 | 
					  restrict=ldap:///ou=passwd,dc=crans,dc=org??one?(objectClass=posixAccount)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue