App-Dochazka-REST
view release on metacpan or search on metacpan
bin/dochazka-ldap-sync-all view on Meta::CPAN
=head1 SYNOPSIS
Sync all LDAP-enabled Dochazka employees from the LDAP database.
dochazka-ldap-sync-all [--quiet]
The script should be run on an L<App::Dochazka::REST> server that has been
configured to use LDAP.
=head1 DESCRIPTION
The script first queries the Dochazka database for a list of all employees
whose "sync" property is true ("LDAP-enabled employees").
The script then loops over these employees, syncing each employee from LDAP and
updating the employee record if anything has changed.
=cut
# process command-line options
my $help = 0;
my $quiet = 0;
GetOptions(
'help|?' => \$help,
'quiet|q' => \$quiet,
) or pod2usage(2);
pod2usage(1) if $help;
my $ARGS = {
quiet => $quiet,
};
init_arbitrary_script( $ARGS );
my $status = get_all_sync_employees( $dbix_conn );
if ( $status->level eq 'NOTICE' and $status->code eq 'DISPATCH_NO_RECORDS_FOUND' ) {
print "No employees to sync\n" unless $quiet;
exit( 0 );
}
my $emp_list = $status->payload;
foreach ( @$emp_list ) {
if ( ! ldap_exists( $_->nick ) ) {
print "WARNING: " . $_->nick . " not found in LDAP database!\n" unless $quiet;
next;
}
my $old = $_->clone();
$status = $_->ldap_sync();
if ( $status->not_ok ) {
print "WARNING: could not sync " . $_->nick . " from LDAP\n" unless $quiet;
next;
}
if ( $old->compare( $_ ) ) {
print $_->nick . " existing profile data match LDAP: no action needed\n" unless $quiet;
next;
}
$status = $_->update( $faux_context );
if ( $status->ok ) {
print $_->nick . " profile updated from LDAP\n" unless $quiet;
next;
}
print "WARNING: could not update " . $_->nick . " employee object (" .
$status->text . ")\n" unless $quiet;
}
print "Processed " . scalar( @$emp_list ) . " employees\n" unless $quiet;
exit( 0 );
( run in 1.133 second using v1.01-cache-2.11-cpan-63c85eba8c4 )