#!/usr/bin/perl # # This script queries the zlm server for all bundle associations. # Then it prints a list of them and queries for which you would like # to see the associated device list. # It takes care of bundles assigned to devices, folders and groups. # # Brunold Rainer, 20.12.2006, Allianz BEST # # Version 1.0 # use Net::LDAPS; $ldaps = Net::LDAPS->new("ldaps://zlmserver.domain:10636") or die "$@"; $ldaps->bind("cn=admin,o=system", password=>"linux", version=>3) or die "$@"; # get nrmDevices $deviceattribs="nrmNam,dn,nrmOS,nrmGroupList"; $devices = $ldaps->search(base=>"o=cell",filter=>"objectclass=nrmDevice",attrs=>$deviceattribs) or die "$@"; # get nrmDevicesContainers $devicescont = $ldaps->search(base=>"o=cell",filter=>"objectclass=nrmDevicesContainer") or die "$@"; # get associations $assocfilter="(&(objectclass=nrmAssociation) (nrmAssocConsumerType=Server) (nrmAssocContentType=Bundle))"; $assocattribs="nrmAssocContent"; $assoc = $ldaps->search(base=>"o=cell",filter=>$assocfilter,attrs=>$assocattribs) or die "$@"; # output results print "======================================================================== \n"; print "Devices: ", $devices->count, "\n"; print "DevicesContainer: ", $devicescont->count, "\n"; print "Associations: ", $assoc->count, "\n"; print "======================================================================== \n"; # write associations to a array for (my $index = 0; $index < $assoc->count; $index++) { $assoc->entry($index)->get_value('nrmAssocContent') =~ /^nrmName=(.+?),/; $bundles{$1} = 1 if $1 ne ""; $indexlist{$1} .= "$index;"; } @bundlessort = (sort(keys(%bundles))); for ($i = 0; $i <= $#bundlessort; $i++) { print $i+1,"\t$bundlessort[$i]\n"; } print "======================================================================== \n"; # query for bundle to monitor printf "Select bundle to monitor: "; $selected = ; chomp($selected); # get bundle version $versfilter="(&(objectclass=nrmBundle) (nrmName=$bundlessort[$selected-1]))"; $versattribs="nrmXmlData"; $vers = $ldaps->search(base=>"o=cell",filter=>$versfilter,attrs=>$versattribs) or die "$@"; $vers->entry(0)->get_value('nrmXmlData') =~ /(.+)<\/Version>/; print "========================================================================= \n"; print "Bundle number $selected - " . $bundlessort[$selected-1] . " - deployed version $1 - was selected !\n"; print "========================================================================= \n"; # check association to the selected bundle and output the associated folders print "This bundle is assigned to the following devices:\n"; @indices = split(";", $indexlist{$bundlessort[$selected-1]}); for ($i = 0; $i <= $#indices; $i++) { $consumer = $assoc->entry($indices[$i])->get_value('nrmAssocConsumer'), "\n"; for (my $index = 0; $index < $devices->count; $index++) { $devicefullname = $devices->entry($index)->dn; if ($devicefullname =~ /$consumer/i) { $devlist{$devices->entry($index)->get_value('nrmName')} = substr($devices->entry($index)->get_value('nrmOS'),2); } $devicegroup = $devices->entry($index)->get_value('nrmGroupList'); if ($devicegroup =~ /$consumer/i) { $devlist{$devices->entry($index)->get_value('nrmName')} = substr($devices->entry($index)->get_value('nrmOS'),2); } } #what about the containers? needed? } foreach $key (sort(keys(%devlist))) { print "$key\t$devlist{$key}\n"; } $ldaps->unbind;