1) reworking of lvm stuff into a single python script rather than a pile of shell...
authorTim Abbott <tabbott@mit.edu>
Tue, 9 Oct 2007 06:27:21 +0000 (02:27 -0400)
committerTim Abbott <tabbott@mit.edu>
Tue, 9 Oct 2007 06:27:21 +0000 (02:27 -0400)
2) changing naming for database VMs to always start with d_

svn path=/trunk/packages/sipb-xen-remctl-auto/sipb-xen-remctl-auto/; revision=146

files/etc/remctl/conf.d/sipb-xen-web
files/usr/sbin/dispatch.sh
files/usr/sbin/remctl-update.sh
files/usr/sbin/sipb-xen-listvms
files/usr/sbin/sipb-xen-lvm [new file with mode: 0755]
files/usr/sbin/sipb-xen-lvremove [deleted file]
files/usr/sbin/sipb-xen-lvrename [deleted file]

index 8a984e4..edc362c 100644 (file)
@@ -1,6 +1,7 @@
-web lvcreate /usr/sbin/sipb-xen-lvcreate /etc/remctl/acl/web
-web lvremove /usr/sbin/sipb-xen-lvremove /etc/remctl/acl/web
-web lvrename /usr/sbin/sipb-xen-lvrename /etc/remctl/acl/web
+web lvcreate /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvremove /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvrename /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
+web lvresize /usr/sbin/sipb-xen-lvm /etc/remctl/acl/web
 web vmboot /usr/sbin/sipb-xen-boot /etc/remctl/acl/web
 web register /usr/sbin/remctl-update.sh /etc/remctl/acl/web
 web moveregister /usr/sbin/remctl-update.sh /etc/remctl/acl/web
 web vmboot /usr/sbin/sipb-xen-boot /etc/remctl/acl/web
 web register /usr/sbin/remctl-update.sh /etc/remctl/acl/web
 web moveregister /usr/sbin/remctl-update.sh /etc/remctl/acl/web
index 7abf70d..5f1a063 100755 (executable)
 # need them for this script.
 
 ACTION=$(echo "$0" | awk -F'.' '{print $2}')
 # need them for this script.
 
 ACTION=$(echo "$0" | awk -F'.' '{print $2}')
-MACHINE="$1"
+ORIGMACHINE="$1"
+MACHINE="d_$ORIGMACHINE"
 
 case "$ACTION" in
     list|vcpu-list|destroy|create|uptime|shutdown)
         xm "$ACTION" "$MACHINE"
 
 case "$ACTION" in
     list|vcpu-list|destroy|create|uptime|shutdown)
         xm "$ACTION" "$MACHINE"
-        exit 0
        ;;
     reboot-with-cdrom)
        xm shutdown "$MACHINE"
        ;;
     reboot-with-cdrom)
        xm shutdown "$MACHINE"
-       xm create sipb-database machine_name="$MACHINE" cdrom_image="$2"
+       xm create sipb-database machine_name="$ORIGMACHINE" cdrom_image="$2"
        ;;
     reboot)
        if [ -n "$2" ]; then
        ;;
     reboot)
        if [ -n "$2" ]; then
-           /usr/sbin/dispatch.reboot-with-cdrom.sh "$1" "$2" &
+           /usr/sbin/dispatch.reboot-with-cdrom.sh "$ORIGMACHINE" "$2" &
        else
            xm reboot "$MACHINE"
        fi
        else
            xm reboot "$MACHINE"
        fi
index 7b205bf..c5cf3f3 100755 (executable)
@@ -46,6 +46,15 @@ update_moiragroup()
     rm -f "$MOIRATMP"
 }
 
     rm -f "$MOIRATMP"
 }
 
+check_machine_name()
+{
+    machine="$1"
+    if ! perl -0e 'exit($ARGV[0] !~ /^[A-Za-z0-9][A-Za-z0-9._-]*$/)' -- "$machinename"; then
+       echo "Bad machine name"
+       exit 1
+    fi
+}
+
 case "$1" in
     moiragroup)
        update_moiragroup "$2"
 case "$1" in
     moiragroup)
        update_moiragroup "$2"
@@ -76,6 +85,7 @@ case "$1" in
        ;;
     unregister)
        machine="$2"
        ;;
     unregister)
        machine="$2"
+       check_machine_name "$machine"
        rm -f "$ACLDIR"/"$machine"
        rm -f "$MACHINEDIR"/"$machine"
        "$0" web
        rm -f "$ACLDIR"/"$machine"
        rm -f "$MACHINEDIR"/"$machine"
        "$0" web
@@ -83,20 +93,15 @@ case "$1" in
     moveregister)
         oldmachine="$2"
         newmachine="$3"
     moveregister)
         oldmachine="$2"
         newmachine="$3"
+       check_machine_name "$oldmachine"
+       check_machine_name "$newmachine"
         mv "$ACLDIR"/"$oldmachine" "$ACLDIR"/"$newmachine"
         rm -f "$MACHINEDIR"/"$oldmachine"
         "$0" web
        ;;
     register)
        machine="$2"
         mv "$ACLDIR"/"$oldmachine" "$ACLDIR"/"$newmachine"
         rm -f "$MACHINEDIR"/"$oldmachine"
         "$0" web
        ;;
     register)
        machine="$2"
-       if [ "$machine" == "Domain-0" ]; then
-           echo "No, you can't control Domain 0"
-           exit 1
-       fi
-       if [ -e /etc/xen/"$machine" ]; then
-           echo "Machine already exists outside database"
-           exit 1
-       fi
+       check_machine_name "$machine"
        if [ -e "$ACLDIR"/"$machine" ]; then
            echo "Machine already registered"
            exit 1
        if [ -e "$ACLDIR"/"$machine" ]; then
            echo "Machine already registered"
            exit 1
index 45add61..aa99757 100755 (executable)
@@ -1,3 +1,3 @@
 #!/bin/sh
 
 #!/bin/sh
 
-xm uptime
+xm uptime | sed -n 's/^d_// p'
diff --git a/files/usr/sbin/sipb-xen-lvm b/files/usr/sbin/sipb-xen-lvm
new file mode 100755 (executable)
index 0000000..bc375a7
--- /dev/null
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+import sys
+import os.path
+from subprocess import call
+
+def check(b):
+    if not b:
+        exit(1)
+
+vg = "xenvg"
+prefix = "d_"
+
+subcommand = sys.argv[1]
+machine = sys.argv[2]
+disk = sys.argv[3]
+lvname = prefix + machine + "_" + disk
+lvpath = "/dev/" + vg + "/" + lvname
+
+def ensureoff(machine):
+    # Make sure the machine is off, but we don't care about errors if it is already off.
+    rv = call(["/usr/sbin/xm", "destroy", prefix + machine]
+
+if subcommand == "lvremove":
+    rv = call(["/sbin/lvremove", "--force", lvpath])
+    ensureoff(machine)
+    if rv != 0:
+        print >>sys.stderr, "Error removing LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvresize":
+    size = sys.argv[4]
+    ensureoff(machine)
+    rv = call(["/sbin/lvresize", "-L", size + "M", lvpath])
+    if rv != 0:
+        print >>sys.stderr, "Error resizing LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvrename":
+    newmachine = sys.argv[4]
+    newlvname = prefix + newmachine + "_" + disk
+    ensureoff(machine)
+    ensureoff(newmachine)    
+    rv = call(["/sbin/lvrename", vg, lvname, newlvname])
+    if rv != 0:
+        print >>sys.stderr, "Error renaming LV %s\n" %(lvname,)
+        sys.exit(1)
+else if subcommand == "lvcreate":
+    size = sys.argv[4]
+    rv = call(["/sbin/lvcreate", "-L", size + "M", "-n", lvname, vg])
+    if rv != 0:
+        print >>sys.stderr, "Error creating LV %s\n" %(lvname,)
+        sys.exit(1)
+    
+else if subcommand == "lvcreate-all":
+    from sipb_xen_database import *
+    import re
+    connect('postgres://sipb-xen@sipb-xen-dev.mit.edu/sipb_xen')
+    for d in Disk.select():
+        check(re.match('^[A-Za-z0-9]+$', d.guest_device_name))
+        machine = Machine.get(d.machine_id)
+        check(re.match('^[A-Za-z0-9][A-Za-z0-9._-]*$', machine.name))
+        lvname = machine.name + "_" + d.guest_device_name
+        if not os.path.exists("/dev/%s/%s" % (vg, lvname)):
+            # LV doesn't exist
+            print >>sys.stderr, "Creating LV %s..." % (lvname,)
+            rv = call(["/sbin/lvcreate", "-L", str(d.size) + "M", "-n", lvname, vg])
+            if rv != 0:
+                print >>sys.stderr, "Error creating LV %s\n" %(lvname,)
+                sys.exit(1)
+
diff --git a/files/usr/sbin/sipb-xen-lvremove b/files/usr/sbin/sipb-xen-lvremove
deleted file mode 100755 (executable)
index c4c06cf..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-machine="$2"
-disk="$3"
-
-if [ -e /etc/remctl/sipb-xen-auto/acl/"$machine" ]; then
-       /sbin/lvremove --force /dev/xenvg/"$machine"_"$disk"
-fi
diff --git a/files/usr/sbin/sipb-xen-lvrename b/files/usr/sbin/sipb-xen-lvrename
deleted file mode 100755 (executable)
index 8d46ee1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/sh
-oldmachine="$2"
-newmachine="$3"
-disk="$4"
-
-if [ -e /etc/remctl/sipb-xen-auto/acl/"$oldmachine" ]; then
-       /sbin/lvrename xenvg "$oldmachine"_"$disk" "$newmachine"_"$disk"
-fi