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 )