Rev | Line | |
---|
[816] | 1 | from subprocess import PIPE, Popen |
---|
| 2 | from invirt.config import structs as config |
---|
| 3 | import yaml |
---|
| 4 | |
---|
| 5 | def bcast(cmd, hosts = [h.hostname for h in config.hosts]): |
---|
| 6 | """ |
---|
| 7 | Given a command and a list of hostnames or IPs, issue the command to all |
---|
| 8 | the nodes and return a list of (host, output) pairs (the order should be |
---|
| 9 | the same as the order of the hosts). |
---|
| 10 | """ |
---|
| 11 | pipes = [(host, |
---|
| 12 | Popen(['remctl', host, 'remote', 'web', cmd], stdout=PIPE)) |
---|
| 13 | for host in hosts] |
---|
| 14 | outputs = [(s, p.communicate()[0]) for (s, p) in pipes] |
---|
| 15 | for (s, p) in pipes: |
---|
| 16 | if p.returncode != 0: |
---|
| 17 | raise RuntimeError("remctl to host %s returned non-zero exit status %d" |
---|
| 18 | % (s, p.returncode)) |
---|
| 19 | return [(s, yaml.load(o, yaml.CSafeLoader)) for (s, o) in outputs] |
---|
Note: See
TracBrowser
for help on using the repository browser.