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

Reply via email to