From f7b18eb6cf1b1130b626ae6d9d69934d6403e7e4 Mon Sep 17 00:00:00 2001 From: Tim Abbott Date: Tue, 9 Oct 2007 02:27:21 -0400 Subject: [PATCH] 1) reworking of lvm stuff into a single python script rather than a pile of shell scripts 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 | 7 ++-- files/usr/sbin/dispatch.sh | 8 ++-- files/usr/sbin/remctl-update.sh | 21 +++++++---- files/usr/sbin/sipb-xen-listvms | 2 +- files/usr/sbin/sipb-xen-lvm | 69 ++++++++++++++++++++++++++++++++++ files/usr/sbin/sipb-xen-lvremove | 7 ---- files/usr/sbin/sipb-xen-lvrename | 8 ---- 7 files changed, 91 insertions(+), 31 deletions(-) create mode 100755 files/usr/sbin/sipb-xen-lvm delete mode 100755 files/usr/sbin/sipb-xen-lvremove delete mode 100755 files/usr/sbin/sipb-xen-lvrename diff --git a/files/etc/remctl/conf.d/sipb-xen-web b/files/etc/remctl/conf.d/sipb-xen-web index 8a984e4..edc362c 100644 --- a/files/etc/remctl/conf.d/sipb-xen-web +++ b/files/etc/remctl/conf.d/sipb-xen-web @@ -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 diff --git a/files/usr/sbin/dispatch.sh b/files/usr/sbin/dispatch.sh index 7abf70d..5f1a063 100755 --- a/files/usr/sbin/dispatch.sh +++ b/files/usr/sbin/dispatch.sh @@ -10,20 +10,20 @@ # 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" - exit 0 ;; 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 - /usr/sbin/dispatch.reboot-with-cdrom.sh "$1" "$2" & + /usr/sbin/dispatch.reboot-with-cdrom.sh "$ORIGMACHINE" "$2" & else xm reboot "$MACHINE" fi diff --git a/files/usr/sbin/remctl-update.sh b/files/usr/sbin/remctl-update.sh index 7b205bf..c5cf3f3 100755 --- a/files/usr/sbin/remctl-update.sh +++ b/files/usr/sbin/remctl-update.sh @@ -46,6 +46,15 @@ update_moiragroup() 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" @@ -76,6 +85,7 @@ case "$1" in ;; unregister) machine="$2" + check_machine_name "$machine" rm -f "$ACLDIR"/"$machine" rm -f "$MACHINEDIR"/"$machine" "$0" web @@ -83,20 +93,15 @@ case "$1" in 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" - 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 diff --git a/files/usr/sbin/sipb-xen-listvms b/files/usr/sbin/sipb-xen-listvms index 45add61..aa99757 100755 --- a/files/usr/sbin/sipb-xen-listvms +++ b/files/usr/sbin/sipb-xen-listvms @@ -1,3 +1,3 @@ #!/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 index 0000000..bc375a7 --- /dev/null +++ b/files/usr/sbin/sipb-xen-lvm @@ -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 index c4c06cf..0000000 --- a/files/usr/sbin/sipb-xen-lvremove +++ /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 index 8d46ee1..0000000 --- a/files/usr/sbin/sipb-xen-lvrename +++ /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 -- 1.7.9.5