Felix Almeida
2015-09-10 20:30:41 UTC
Hi all,
I'm trying to run a simple task in parallel that captures the OS type (Linux, AIX, HP-UX, etc.) of a set of UNIX servers and save this information into a CSV file.
However, if I add the @parallel decorator to the task the CSV file is left empty (only the header is saved), but if I remove the @parallel decorator then everything goes well. Note that the output to the screen via puts works fine in both cases.
Please, any ideas of what I'm doing wrong?
Perhaps this is not even a fabric question but a Python one (I'm not sure, sorry).
Here is the complete code:
import csv
from fabric.api import env, task, runs_once, parallel, execute, run, puts, hide
env.abort_on_prompts = True
env.always_use_pty = False
env.command_timeout = 3
env.disable_known_hosts = True
env.eagerly_disconnect = True
env.timeout = 3
env.use_shell = False
env.warn_only = True
@parallel(pool_size=5)
def _run(csv_output):
try:
with hide('output', 'running'):
out = run('uname')
except SystemExit:
msg = 'error: a password is being requested'
else:
msg = str(out)
puts(msg)
csv_output.writerow([env.host, msg])
return str(out)
@task
@runs_once
def run_uname(hosts_file=None):
if hosts_file:
with open(hosts_file) as input_:
host_list = [line.strip() for line in input_]
env.hosts.extend(host_list)
with open('output.csv', 'wb') as output:
writer = csv.writer(output)
writer.writerow(['HOSTNAME', 'UNAME'])
with hide('running', 'status'):
execute(_run, writer)
I run it like this: fab run_uname:test_hosts.txt
My environment is this: RHEL4, Python 2.7.10, Fabric 1.10.2, Paramiko 1.15.2
Thank you!
Felix
________________________________
This communication is confidential. We only send and receive email on the basis of the terms set out at www.rogers.com/web/content/emailnotice<http://www.rogers.com/web/content/emailnotice>
Ce message est confidentiel. Notre transmission et réception de courriels se fait strictement suivant les modalités énoncées dans l'avis publié à www.rogers.com/aviscourriel <http://www.rogers.com/aviscourriel>
________________________________
I'm trying to run a simple task in parallel that captures the OS type (Linux, AIX, HP-UX, etc.) of a set of UNIX servers and save this information into a CSV file.
However, if I add the @parallel decorator to the task the CSV file is left empty (only the header is saved), but if I remove the @parallel decorator then everything goes well. Note that the output to the screen via puts works fine in both cases.
Please, any ideas of what I'm doing wrong?
Perhaps this is not even a fabric question but a Python one (I'm not sure, sorry).
Here is the complete code:
import csv
from fabric.api import env, task, runs_once, parallel, execute, run, puts, hide
env.abort_on_prompts = True
env.always_use_pty = False
env.command_timeout = 3
env.disable_known_hosts = True
env.eagerly_disconnect = True
env.timeout = 3
env.use_shell = False
env.warn_only = True
@parallel(pool_size=5)
def _run(csv_output):
try:
with hide('output', 'running'):
out = run('uname')
except SystemExit:
msg = 'error: a password is being requested'
else:
msg = str(out)
puts(msg)
csv_output.writerow([env.host, msg])
return str(out)
@task
@runs_once
def run_uname(hosts_file=None):
if hosts_file:
with open(hosts_file) as input_:
host_list = [line.strip() for line in input_]
env.hosts.extend(host_list)
with open('output.csv', 'wb') as output:
writer = csv.writer(output)
writer.writerow(['HOSTNAME', 'UNAME'])
with hide('running', 'status'):
execute(_run, writer)
I run it like this: fab run_uname:test_hosts.txt
My environment is this: RHEL4, Python 2.7.10, Fabric 1.10.2, Paramiko 1.15.2
Thank you!
Felix
________________________________
This communication is confidential. We only send and receive email on the basis of the terms set out at www.rogers.com/web/content/emailnotice<http://www.rogers.com/web/content/emailnotice>
Ce message est confidentiel. Notre transmission et réception de courriels se fait strictement suivant les modalités énoncées dans l'avis publié à www.rogers.com/aviscourriel <http://www.rogers.com/aviscourriel>
________________________________