braintree / runbook

A framework for gradual system automation
MIT License
730 stars 43 forks source link

feature: output a (remote) command into in a (File::)IO #22

Open fwolfst opened 4 years ago

fwolfst commented 4 years ago

Scenario is to create tgz archives on a remote server (tar -czf --to-stdout directory). Currently, captureing the output will be done in memory which is not feasible for large output. Implementation could be specific for files (like capture %Q{tar czf -O}, into_file: 'bigarchive.tgz') or preferrably more general (capture %Q{}, into_io: File.open(...)).

With a bit of headwrapping, this could also be modelled as download_cmd_out tar_cmd, to: 'stdout.file'.

Note that while i refer to tar commands, this might be useful for other commands that produce a lot of data, too.

fwolfst commented 4 years ago

The terminal solution would look like ssh user@host 'cd /path/ && tar -cf - file | gzip -9' > file.tgz (or actually <filedescriptor> instead of file.tgz). The first part of that (the ssh stuff) is nicely wrapped in the DSL; right now I only see support for it while using a custom ssh command.