Last change
on this file since 3000 was
2513,
checked in by adehnert, 15 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.