Initial revison of reasonable automatic remctl setup.
[invirt/packages/invirt-remote.git] / files / etc / remctl / sipb-xen-auto / remctl-update.sh
1 #!/bin/sh
2 DIR=/etc/remctl/sipb-xen-auto
3 TEMPLATE=$DIR/conf.template
4 MACHINEDIR=$DIR/machine.d
5 MOIRADIR=$DIR/moira-acl
6 MOIRATMP=$DIR/moira-tmp
7 MACHINETMP=$DIR/machine-list-tmp
8 AUTOMACHINELIST=$DIR/auto-machine-list
9 AUTOMOIRALIST=$DIR/auto-moira-list
10 BINDIR=$DIR/bin
11 ACLDIR=$DIR/acl
12
13 update_machine()
14 {
15     machine=$1
16     sed "s/#MACHINENAME#/$machine/g" $TEMPLATE | \
17         sed "s,#BINDIR#,$BINDIR,g" >| $MACHINETMP
18     if ! cmp -s $MACHINEDIR/$machine $MACHINETMP; then
19         mv $MACHINETMP $MACHINEDIR/$machine
20     else
21         rm -f $MACHINETMP
22     fi
23 }
24
25 update_moiragroup()
26 {
27     group=$1
28     # Should perhaps replace with LDAP, but fine for now.
29
30     # We should do more careful error checking so we don't take away
31     # all bits and delete the moira-acl files whenever there's an AFS
32     # outage.
33     pts membership system:$group -noauth | tail -n+2 | \
34         sed 's/\./\//' | \
35         sed 's/^  //' | \
36         sed 's/$/@ATHENA.MIT.EDU/g' >| $MOIRATMP
37     if test -s $MOIRATMP; then
38         if ! cmp -s $MOIRADIR/$group $MOIRATMP; then
39             mv $MOIRATMP $MOIRADIR/$group
40         fi
41     else
42         if test -e $MOIRADIR/$group; then
43             rm $MOIRADIR/$group
44         fi
45     fi
46     rm -f $MOIRATMP
47 }
48
49 case "$1" in
50     moiragroup)
51         update_moiragroup "$2"
52         ;;
53
54     all_machines)
55         # update the remctl.conf definitions
56         for machine in `cat $AUTOMACHINELIST`; do
57             update_machine $machine
58         done
59         ;;
60     all_moira)
61         # update our moira ACL lists
62         for group in `cat $AUTOMOIRALIST`; do
63             update_moiragroup $group
64         done
65         ;;
66     auto_machine_list)
67         # update the list of maintained machines
68         /bin/ls $ACLDIR >| $AUTOMACHINELIST
69         ;;
70     auto_moira_list)
71         # update the moira list-of-lists
72         # /bin/ls $MOIRADIR >| $AUTOMOIRALIST # BAD IDEA in case of outage
73
74         # This extracts the list of all moira lists we care about, and updates those.
75         grep -R moira $ACLDIR/ /etc/remctl/acl/ | perl -pe 's/.*moira-acl\/(.*)/$1/g' >| $AUTOMOIRALIST
76         ;;
77     all)
78         "$0" auto_machine_list
79         "$0" all_machines
80         "$0" auto_moira_list
81         "$0" all_moira
82         ;;
83 esac
84
85 exit 0