source: trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/files/usr/sbin/remctl-update.sh @ 132

Last change on this file since 132 was 132, checked in by tabbott, 17 years ago

remctl support for renaming machines

  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/bin/sh
2DIR=/etc/remctl/sipb-xen-auto
3TEMPLATE=$DIR/conf.template
4MACHINEDIR=$DIR/machine.d
5MOIRADIR=$DIR/moira-acl
6MOIRATMP=$DIR/moira-tmp
7MACHINETMP=$DIR/machine-list-tmp
8AUTOMACHINELIST=$DIR/auto-machine-list
9AUTOMOIRALIST=$DIR/auto-moira-list
10BINDIR=/usr/sbin
11ACLDIR=$DIR/acl
12
13update_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
25update_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
49case "$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        ;;
117esac
118
119exit 0
Note: See TracBrowser for help on using the repository browser.