# HG changeset patch # User igor@manas.xt.vpn # Date 1221462204 -10800 # Node ID e80bdf496aa2ef9cf9d3609ac64e8018bec615e8 # Parent 44efea4507acf9b625f9dc115d2805c3ab9b332e 1. --network (-n) option; topology name is not hardcoded since present 2. fix for incorrect processing of the paramater spicified in form like drbd8=sda1 in xen-drbd-install diff -r 44efea4507ac -r e80bdf496aa2 init.d-xen-drbd --- a/init.d-xen-drbd Sat Aug 30 11:14:50 2008 +0300 +++ b/init.d-xen-drbd Mon Sep 15 10:03:24 2008 +0300 @@ -1,19 +1,19 @@ #!/bin/sh XEN_DRBD_PATH='/usr/bin' -TOPOLOGY_NAME='xen-drbd' +TOPOLOGY_NAME='network' START_ACTION='nothing' STOP_ACTION='nothing' [ -e /etc/default/xen-drbd ] && . /etc/default/xen-drbd case $1 in start) - $XEN_DRBD_PATH/xen-drbd-install ${TOPOLOGY_NAME} make-links | sh -s + $XEN_DRBD_PATH/xen-drbd-install --network=${TOPOLOGY_NAME} make-links | sh -s if [ -z "$START_ACTION" ] || echo $START_ACTION | grep -qix nothing then true else - $XEN_DRBD_PATH/xen-drbd $START_ACTION + $XEN_DRBD_PATH/xen-drbd --network=${TOPOLOGY_NAME} $START_ACTION fi ;; stop) @@ -21,7 +21,7 @@ then true else - $XEN_DRBD_PATH/xen-drbd $STOP_ACTION + $XEN_DRBD_PATH/xen-drbd --network=${TOPOLOGY_NAME} $STOP_ACTION fi ;; *) diff -r 44efea4507ac -r e80bdf496aa2 xen-drbd-install.py --- a/xen-drbd-install.py Sat Aug 30 11:14:50 2008 +0300 +++ b/xen-drbd-install.py Mon Sep 15 10:03:24 2008 +0300 @@ -1,13 +1,13 @@ #!/usr/bin/python -import sys,re +import sys,re,getopt sys.path.append('/etc/xen') def show_usage(): print """ Usage: - xen-drbd-install (to view) - xen-drbd-install | sh -s (to run) + xen-drbd-install [options] (to view) + xen-drbd-install [options] | sh -s (to run) is the name of the file, which contains network description @@ -16,20 +16,43 @@ make-domains make-bridges make-links + +Options: + --help (-h) -- show usage information + --network=name (-n) -- the network descriptions is in the file name.py (default: network.py) """ -if len(sys.argv) != 3: + + +network='network' +try: + opts, args = getopt.getopt(sys.argv[1:], "hn:", ["help", "network="]) +except getopt.GetoptError, err: + # print help information and exit: + print str(err) # will print something like "option -a not recognized" + usage() + sys.exit(2) + +for o, a in opts: + if o in ("-h", "--help"): + show_usage() + sys.exit() + elif o in ("-n", "--network"): + network = a + else: + assert False, "unhandled option" + +if len(args) != 1: show_usage() sys.exit(1) - -network=sys.argv[1] try: exec 'from %s import * ' % (network) except ImportError: - print "Can't find or interpret module %s with topology description" %(network) + print "Can't find or interpret module <%s> with topology description" %(network) sys.exit(1) + drbd_base_port=7790 meta_disk='/dev/%s/meta'%lvm_vg_name drbd_device={} @@ -83,7 +106,7 @@ for dom in domains: for disk in disk_table[dom]: - drbd_number=int(re.compile('drbd').sub('',disk.split(':')[0])) + drbd_number=int(re.compile('drbd').sub('',(disk.split(':')[0]).split('=')[0] )) resource=disk.split(':')[1] disk="/dev/%s/%s" % (lvm_vg_name,resource) @@ -345,8 +368,8 @@ #make_all_system() -if len(sys.argv) > 1: - command = sys.argv[2] +if len(args) > 0: + command = args[0] if command == 'make-drbd': make_drbd() elif command == 'make-domains': diff -r 44efea4507ac -r e80bdf496aa2 xen-drbd.py --- a/xen-drbd.py Sat Aug 30 11:14:50 2008 +0300 +++ b/xen-drbd.py Mon Sep 15 10:03:24 2008 +0300 @@ -1,21 +1,5 @@ #!/usr/bin/python -network='od' -debug=2 - -import sys,os,imp -from commands import mkarg - - -sys.path.append('/etc/xen') -try: - exec 'from %s import *' % (network) -except ImportError: - print "Can't find or interpret module %s with topology description" %(network) - sys.exit(1) - -xen_drbd_start="/etc/xen/xen-drbd-start" -domain_create_line="xm create "+xen_drbd_start+" network="+network+" domain=%s" def the_peer_of(node): if node == node1: @@ -24,12 +8,11 @@ another_node=node1 return another_node -he_is=the_peer_of(i_am) def log_error(error): print error -def run_now(command,node=i_am): +def run_now(command,node): if node == i_am: line=command+" > /dev/stderr 2>&1" else: @@ -43,7 +26,7 @@ p.close() return output -def run(command,node=i_am): +def run(command,node): return run_now(command,node) #if node == i_am: # print command @@ -60,7 +43,7 @@ disk.append((disk_description.split(':'))[1]) return disk -def set_drbd_primary(domain, node=i_am): +def set_drbd_primary(domain, node): res="" drbd_resources=get_drbd_resources(domain) for drbd in drbd_resources: @@ -68,7 +51,7 @@ print "DRBD resource <%s> on the node <%s> is <%s> now" % (drbd,node,get_drbd_state(drbd,node)) return res -def set_drbd_secondary(domain, node=i_am): +def set_drbd_secondary(domain, node): res="" drbd_resources=get_drbd_resources(domain) for drbd in drbd_resources: @@ -76,7 +59,7 @@ print "DRBD resource <%s> on the node <%s> is <%s> now" % (drbd,node,get_drbd_state(drbd,node)) return res -def get_domain_id(domain,node=i_am): +def get_domain_id(domain,node): """ Returns domain id of the or -1 if the is not running on the """ @@ -87,7 +70,7 @@ res = int(res) return res -def get_drbd_id(resource,node=i_am): +def get_drbd_id(resource,node): res=run_now("ls -l /dev/drbd/%s 2> /dev/null | awk '{print $10}' | sed s@/dev/drbd@@" %resource, node).rstrip("\n") if not res: res = -1 @@ -95,19 +78,19 @@ res = int(res) return res -def get_drbd_state(resource,node=i_am): +def get_drbd_state(resource,node): res=run_now("drbdadm state %s | sed s@/.*@@" %resource, node).rstrip("\n") if not res: res = -1 return res -def get_drbd_cstate(resource,node=i_am): +def get_drbd_cstate(resource,node): res=run_now("drbdadm cstate %s " %resource, node).rstrip("\n") if not res: res = -1 return res -def start_domain(domain,node=i_am): +def start_domain(domain,node): if (get_domain_id(domain,i_am) != -1): log_error("Domain %s is running already on the node %s" % (domain,i_am)) return -1 @@ -119,7 +102,7 @@ print set_drbd_primary(domain,node) print run(domain_create_line % domain, node) -def migrate_domain_out(domain,node=i_am): +def migrate_domain_out(domain,node): if (get_domain_id(domain,node) == -1): log_error("Domain %s is not running on the node %s" % (domain,node)) return -1 @@ -131,44 +114,44 @@ set_drbd_secondary(domain,node) print "+ Done" -def migrate_domain_in(domain,node=i_am): +def migrate_domain_in(domain,node): migrate_domain_out(domain,the_peer_of(node)) def migrate_domain(domain,node): migrate_domain_in(domain,node) -def running_domains(node=i_am): +def running_domains(node): xm_domains=run_now("xm list | awk '{print $1}'", node).split("\n") return filter(lambda x: x in xm_domains, domains) -def migrate_out_all(node=i_am): +def migrate_out_all(node): for domain in running_domains(node): migrate_domain_out(domain,node) -def migrate_in_all(node=i_am): +def migrate_in_all(node): for domain in running_domains(the_peer_of(node)): migrate_domain_in(domain,node) -def start_all(node=i_am): +def start_all(node): for domain in domains: if not domain in running_domains(node) and not domain in running_domains(the_peer_of(node)): start_domain(domain,node) -def start_my_domains(node=i_am): +def start_my_domains(node): for domain in domain_home[node]: if not domain in running_domains(node) and not domain in running_domains(the_peer_of(node)): start_domain(domain,node) -def migrate_my_domains_home(node=i_am): +def migrate_my_domains_home(node): for domain in domain_home[node]: if not domain in running_domains(node) and domain in running_domains(the_peer_of(node)): migrate_domain_in(domain,node) -def migrate_and_start_my_domains(node=i_am): +def migrate_and_start_my_domains(node): migrate_my_domains_home(node) start_my_domains(node) -def migrate_and_start_all(node=i_am): +def migrate_and_start_all(node): migrate_my_domains_home(node) start_my_domains(node) migrate_my_domains_home(the_peer_of(node)) @@ -196,7 +179,7 @@ def show_usage(): print """ Usage: - xen-drbd command [domain] + xen-drbd [options] command [domain] Commands: start domain @@ -212,6 +195,12 @@ migrate-and-start-all dump-config domain + +Options: + --help (-h) -- show usage information + --network=name (-n) -- the network descriptions is in the file name.py (default: network.py) + + """ def test(): @@ -234,41 +223,79 @@ #print "get_domain_id(samba,node2)=",get_domain_id("samba",node2) #sys.exit(0) -if len(sys.argv) == 1: +network='network' +import sys,os,imp,getopt +from commands import mkarg + +try: + opts, args = getopt.getopt(sys.argv[1:], "hn:", ["help", "network="]) +except getopt.GetoptError, err: + # print help information and exit: + print str(err) # will print something like "option -a not recognized" + usage() + sys.exit(2) + +for o, a in opts: + if o in ("-h", "--help"): + show_usage() + sys.exit() + elif o in ("-n", "--network"): + network = a + else: + assert False, "unhandled option" + + +debug=2 + + + +sys.path.append('/etc/xen') +try: + exec 'from %s import *' % (network) +except ImportError: + print "Can't find or interpret module <%s> with topology description" %(network) + sys.exit(1) + +xen_drbd_start="/etc/xen/xen-drbd-start" +domain_create_line="xm create "+xen_drbd_start+" network="+network+" domain=%s" + +if len(args) == 0: show_usage() sys.exit(0) -command=sys.argv[1] -if len(sys.argv) == 3: - domain=sys.argv[2] +he_is=the_peer_of(i_am) + +command=args[0] +if len(args) == 2: + domain=args[1] if command == 'start': - start_domain(domain) + start_domain(domain, i_am) elif command == 'migrate-out': - migrate_domain_out(domain) + migrate_domain_out(domain, i_am) elif command == 'migrate-in': - migrate_domain_in(domain) + migrate_domain_in(domain, i_am) elif command == 'dump-config': dump_config(domain) else: show_usage() sys.exit(0) -elif len(sys.argv) == 2: +elif len(args) == 1: if command == 'start-all': - start_all() + start_all(i_am) elif command == 'start-my-domains': - start_my_domains() + start_my_domains(i_am) elif command == 'migrate-out-all': - migrate_out_all() + migrate_out_all(i_am) elif command == 'migrate-in-all': - migrate_in_all() + migrate_in_all(i_am) elif command == 'migrate-my-domains-home': - migrate_my_domains_home() + migrate_my_domains_home(i_am) elif command == 'migrate-and-start-my-domains': - migrate_and_start_my_domains() + migrate_and_start_my_domains(i_am) elif command == 'migrate-and-start-all': - migrate_and_start_all() + migrate_and_start_all(i_am) elif command == 'list': - print running_domains() + print running_domains(i_am) else: show_usage() sys.exit(0)