source: trunk/LATMOS-Accounts/bin/la-query @ 1382

Last change on this file since 1382 was 1045, checked in by nanardon, 12 years ago
  • add real-life test for scripts
  • Property svn:executable set to *
  • Property svn:keywords set to Id Rev
File size: 3.8 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use LATMOS::Accounts;
6use Getopt::Long;
7use Pod::Usage;
8
9=head1 NAME
10
11    la-query - Tools to query base in LATMOS::Accounts system
12
13=head1 SYNOPSIS
14
15    la-query [options] [obj_id]
16
17=head1 DESCRIPTION
18
19[obj_id] : If present, all set attributes (rw) will be displayed for that obj_id.
20        If none is given, all obj_ids will be printed.
21
22For the default object_type (user), obj_id = login.
23
24Example : la-query lambda
25
26=cut
27
28GetOptions(
29    'c|config=s'        => \my $config,
30    'b|base=s'          => \my $base,
31    'o|object=s'        => \my $otype,
32    'e|empty'           => \my $empty_attr,
33    'fmt=s'             => \my $fmt,
34    'filefmt=s'         => \my $filefmt,
35    'ro'                => \my $with_ro,
36    'no-unexp|wo-unexp' => \my $nounexp,
37    'with-unexp'        => \my $unexp,
38    'help'              => sub { pod2usage(0) },
39) or pod2usage();
40
41$otype ||= 'user';
42
43=head1 OPTIONS
44
45=over 4
46
47=item -c|--config configdir
48
49Use this configuration directory instead of the default one.
50
51=item -b|--base basename
52
53Query this specific base instead of the default one.
54
55=item -o|object object_type
56
57Query will be performed on this object. Default is the 'User' object.
58
59=item --with-unexp
60
61Take into account all objects (even non propagated ones, with attribute
62'exported'=0) (default)
63
64=item --wo-unexp
65
66Take into account only propagated objects (attribute 'exported'=1)
67
68=item -e|--empty
69
70(Only if obj_id is specified) Include also unset attributes.
71
72=item --ro
73
74(Only if obj_id is specified) Include also read-only attributes as comments.
75
76=item --fmt format
77
78Specify a format of output.
79
80If NOT present and "obj_id" is specified, all non-empty writable attributes will be printed (modified by -e and -ro).
81If NOT present and "obj_id" is NOT specified, only the list of "obj_id" will be printed.
82
83The "format" string may query tags in form:
84
85    %{ATTRIBUTE:printflike}
86
87Where ATTRIBUTE is the name of an attribute and the optional
88C<:printflike> is a printf like string to print the attribute content (without
89the C<%>).
90
91Examples for users:
92
93    --fmt "Name %{sn}, First Name %{givenName}\n"
94
95    --fmt "Name %{sn:20s}, First Name %{givenName}\n"
96
97=item --filefmt format-file
98
99"format-file" is a text file with the same strings as "--fmt" option, WITHOUT quotes (").
100
101It can be on more than one line, but all lines will be concatenated as one.
102Don't forget the "\n" if you really want seperate lines.
103
104Example of format-file:
105
106Name: %{sn}, First Name: %{givenName}\n
107     Department : %{department}\n
108
109Note : --fmt and --filefmt can be used together, and will be concatenated (the "fmt" string first, then what is in the "format-file").
110
111=back
112
113=cut
114
115my $LA = LATMOS::Accounts->new($config, noacl => 1);
116my $labase = $LA->base($base);
117$labase && $labase->load or die "Cannot load base";
118
119$labase->unexported($nounexp ? 0 : 1);
120
121unless ($labase->is_supported_object($otype)) {
122    die "Unsupported object type `$otype'\n";
123}
124
125if ($filefmt){
126        open(my $hfmt, '<', $filefmt) or die "Cannot open $filefmt\n";
127        $fmt ||= ''; # avoid undef warning
128        while (<$hfmt>) {
129                chomp($fmt .= $_);
130        }
131        close $hfmt;
132}
133
134if (@ARGV) {
135    foreach my $ouid (@ARGV) {
136        my $obj = $labase->get_object($otype, $ouid) or do {
137            die "Object $otype $ouid not found\n";
138        };
139        if ($fmt) {
140            print $obj->queryformat($fmt);
141        } else {
142            $obj->text_dump(*STDOUT,
143                {
144                    empty_attr => $empty_attr,
145                    only_rw => !$with_ro,
146                }
147            );
148        }
149    }
150} else {
151    foreach (sort $labase->list_objects($otype)) {
152        if ($fmt) {
153            my $o = $labase->get_object($otype, $_) or next;
154            print $o->queryformat($fmt);
155        } else {
156            print "$_\n";
157        }
158    }
159}
Note: See TracBrowser for help on using the repository browser.