Portál AbcLinuxu, 30. dubna 2025 09:09

LDAP: šablony pro LDIF

11.1.2007 02:02 | Přečteno: 1881× | Linux | Výběrový blog | poslední úprava: 11.1.2007 03:54

V poslední mě zajímá LDAP v pozici zdroje dat pro DHCP, DNS, atd... Do LDAP databáze je potřeba často hromadně sypat data získaná skriptem, ve formátu LDIF. Příklad záznamu v LDIFu:

dn: cn=lenovo,cn=192.168.0.0,cn=DHCP Config,dc=firma,dc=cz
cn: lenovo
dhcpHWAddress: ethernet XX:YY:XX:YY:XX:YY
dhcpStatements: fixed-address 192.168.0.10
objectClass: top
objectClass: dhcpHost

Kostru záznamu jednoduše popíšeme šablonou (soubor dhcphost.tpl):

@include base.conf
@include net.conf
dn: cn=%HOSTNAME%,cn=%SUBNETNUMBER%,cn=DHCP Config,%BASEDN%
cn: %HOSTNAME%
dhcpHWAddress: ethernet %MACADDRESS%
dhcpStatements: fixed-address %IPHOSTNUMBER%
objectClass: top
objectClass: dhcpHost

... kde proměnné jsou rozlišeny procenty. Některé parametry jako maska podsítě a basedn jsou neměnné, uložíme je do souboru base.conf:

%BASEDN%        dc=firma,dc=cz

...a net.conf:

%SUBNETNUMBER%  192.168.0.0
%SUBNETMASK%    255.255.255.0
%DHCPSERVER%    server1

Následující skript (soubor makeldif.sh) generuje LDIFy:

#!/bin/bash

#check if file exists
check_file()
{
        if [ ! -e $1 ]; then
                die "File doesn't exist: $1"
        fi
}

#include definitions from file
include()
{
        include_file=$1
        check_file $include_file

        #read line by line
        grep -v '#' $include_file | while read line; do
                create_regexp   "$(echo $line | awk '{print $1}')" \
                                "$(echo $line | awk '{print $2}')"
        done
}

#create regular expression
create_regexp()
{
        echo -n "s/$1/$2/g;" >> $regexp_file
}

#Show usage informations and exit
die()
{
        echo $1
        echo "Usage: $0 [parameters] template_file" > /dev/stderr
        echo "Parameters: %VARIABLE1% value1 %VARIABLE2% value2 ..." > /dev/stderr
        exit 1
}

regexp_file=regexp.tmp
rm -f $regexp_file

#exclude last param
param_count=$(expr $# - 1)

#check if params count is correct
if [ $(expr $param_count % 2) -ne 0 ]; then
        die "Wrong parameters: $@"
fi

#read command-line params and create regexp from them
for param in $(seq 1 2 $param_count); do
        create_regexp $1 $2
        shift; shift
done

template_file=$1
check_file $template_file

#include all files in this directive: @include filename
include_files="$(grep '@include' $template_file | awk '{print $2}')"
for include_file in $include_files ; do
        include $include_file
done

#read template_file and process it using sed and regexp from $regexp_file
grep -v '@include' $template_file | sed "$(cat $regexp_file)"
exit $?

Voláním příkazu:

./makeldif.sh %HOSTNAME% lenovo %MACADDRESS% XX:YY:XX:YY:XX:YY %IPHOSTNUMBER% 192.160.0.10 dhcphost.tpl

... vygenerujeme nahoře uvedený LDIF. Toto je interface pro generování LDIFů. Teď můžeme jednoduše generovat podobné LDIFy např. takto:

#!/bin/bash

ip=$(/sbin/ifconfig | head -2 | grep inet | awk '{print $2}' | cut -d : -f 2)
mac=$(/sbin/ifconfig | head -1 | awk '{print $5}')

./makeldif.sh %HOSTNAME% $HOSTNAME %MACADDRESS% $mac %IPHOSTNUMBER% $ip dhcphost.tpl

Skriptů bylo pro dnešek dost a vy si je můžete všechny stáhnout zde a vyzkoušet. Až mě zas něco napadne, tak to plácnu do blogu... ;-)

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

11.1.2007 07:13 Martin Beránek | skóre: 33 | blog: mousehouse | Brno
Rozbalit Rozbalit vše Re: LDAP: šablony pro LDIF
Odpovědět | Sbalit | Link | Blokovat | Admin
jenom mi to pripomelo: neznate nekdo nastroj ktery umoznuje pohodlne tahat data z ldapu/ldif a poradi si s base64 polozkami - zatim to resim dost hnusnym skryptem (dalsi nepekna vec je to, ze nektere polozky jsou na vice radku)
never use rm after eight
11.1.2007 10:37 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: LDAP: šablony pro LDIF
python-ldap? Commandline nástroje z ldap-utils jsou opravdu dosti nepříjemné. ldapsearch umí ten base64 výstup pro non-ascii nějakým switchem vypnout.
Táto, ty de byl? V práci, já debil.

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.