9b7f309930c5fe60c0ee89e85da2859cbcfdd821
[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     register)
78         if [ "$2" == "Domain-0" ]; then
79             echo "No, you can't control Domain 0"
80             exit 1
81         fi
82         if [ -e /etc/xen/"$2" ]; then
83             echo "Machine already exists outside database"
84             exit 1
85         fi
86         if [ -e "$ACLDIR"/"$2" ]; then
87             echo "Machine already registered"
88             exit 1
89         fi
90         echo "include /etc/remctl/acl/web" > "$ACLDIR/$2"
91         "$0" web
92         ;;
93     web)
94         "$0" auto_machine_list
95         "$0" all_machines
96         ;;      
97     all)
98         "$0" auto_machine_list
99         "$0" all_machines
100         "$0" auto_moira_list
101         "$0" all_moira
102         ;;
103 esac
104
105 exit 0