Parallel uses multiprocessing, so you're opening output.csv in write mode once per host. You'll need to have a master task consolidate the return values of your parallel subtask (use execute) and write the csv once everything is done. Remember that execute returns a dictionary whose keys are the host_strings of each host and the values are the return value of the function you're executing.
On Thu, Sep 10, 2015 at 4:46 PM Felix Almeida <[email protected]> wrote: > 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 > > > > 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 > > ------------------------------ > _______________________________________________ > Fab-user mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/fab-user >
_______________________________________________ Fab-user mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/fab-user
