| 
                Last change
                  on this file since 3041 was
                  2513,
                  checked in by adehnert, 16 years ago
           | 
        
        
          | 
               
Minor cleanup of monocast and LVM load balancer 
 
           | 
        
        | 
            File size:
            1.1 KB
           | 
      
      
        
  | Line |   | 
|---|
| 1 | from subprocess import PIPE, Popen | 
|---|
| 2 | from invirt.config import structs as config | 
|---|
| 3 | import random | 
|---|
| 4 |  | 
|---|
| 5 | hostnames = [ h.hostname for h in config.hosts ] | 
|---|
| 6 |  | 
|---|
| 7 | def monocast(args, hostnames = hostnames, randomize = True): | 
|---|
| 8 |     """ | 
|---|
| 9 |     Given a command and a list of hostnames or IPs, issue the command to each | 
|---|
| 10 |     node until it connects to one of the nodes. | 
|---|
| 11 |  | 
|---|
| 12 |     Returns: | 
|---|
| 13 |         host the command ran on | 
|---|
| 14 |         hosts that could not be contacted | 
|---|
| 15 |         returncode of remctl | 
|---|
| 16 |         stdout of remctl | 
|---|
| 17 |         stderr of remctl | 
|---|
| 18 |     """ | 
|---|
| 19 |     if(randomize): | 
|---|
| 20 |         hostnames = random.sample(hostnames, len(hostnames)) | 
|---|
| 21 |     hostsdown = [] | 
|---|
| 22 |     for host in hostnames: | 
|---|
| 23 |         pipe = Popen(['remctl', host, 'remote', 'web'] + args, stdout=PIPE, stderr=PIPE) | 
|---|
| 24 |         output = pipe.communicate() | 
|---|
| 25 |         if pipe.returncode != 0: | 
|---|
| 26 |             if output[1].startswith('remctl: cannot connect to %s' % host): | 
|---|
| 27 |                 hostsdown.append(host) | 
|---|
| 28 |             else: | 
|---|
| 29 |                 return (host, hostsdown, pipe.returncode,) + output | 
|---|
| 30 |         else: | 
|---|
| 31 |             return (host, hostsdown, pipe.returncode,) + output | 
|---|
| 32 |     raise RuntimeError("Failed to contact any hosts: tried %s" % (hostsdown, )) | 
|---|
       
      
      Note: See 
TracBrowser
        for help on using the repository browser.