7b205bf33c40e7d2c0b5a3d5631bad8adf8c5c26
[invirt/packages/invirt-remote.git] / files / usr / sbin / 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=/usr/sbin
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     unregister)
78         machine="$2"
79         rm -f "$ACLDIR"/"$machine"
80         rm -f "$MACHINEDIR"/"$machine"
81         "$0" web
82         ;;
83     moveregister)
84         oldmachine="$2"
85         newmachine="$3"
86         mv "$ACLDIR"/"$oldmachine" "$ACLDIR"/"$newmachine"
87         rm -f "$MACHINEDIR"/"$oldmachine"
88         "$0" web
89         ;;
90     register)
91         machine="$2"
92         if [ "$machine" == "Domain-0" ]; then
93             echo "No, you can't control Domain 0"
94             exit 1
95         fi
96         if [ -e /etc/xen/"$machine" ]; then
97             echo "Machine already exists outside database"
98             exit 1
99         fi
100         if [ -e "$ACLDIR"/"$machine" ]; then
101             echo "Machine already registered"
102             exit 1
103         fi
104         echo "include /etc/remctl/acl/web" > "$ACLDIR/$machine"
105         "$0" web
106         ;;
107     web)
108         "$0" auto_machine_list
109         "$0" all_machines
110         ;;      
111     remctl-moira-update|all)
112         "$0" auto_machine_list
113         "$0" all_machines
114         "$0" auto_moira_list
115         "$0" all_moira
116         ;;
117 esac
118
119 exit 0