ThorSsh takes thor and allows it to run from local to remote. It assumes that the sources are always local and the remotes are always remote.
For running as_user('other_user') the assumption is that your connection is logged in either as 1) root, or 2) a user who can sudo to root
Use thor as you normally would, but on any thor instance add the following:
class ThorTest < Thor include Thor::Actions include ThorSsh::Actions
Then set a destination server to an Net::SSH connection to make all actions use a different server for the destination.
self.destination_connection = Net::SSH.start(... [ssh connection] ...)
Things that don't work yet
This is still a work in progress. The main issue is that calling #inside or anything that depends on it (in_root) does not work yet. I'll get it working soon though.
TODO: Get #inside working TODO: Add other features needed for provisioning system TODO: Make way to copy remote to remote TODO: Update method blacklist
The test run through vagrant, which seemed logical since we want to test ssh stuff.
Install a box (first time only)
cd spec/vagrant bundle exec vagrant box add ubuntu11 http://timhuegdon.com/vagrant-boxes/ubuntu-11.10.box bundle exec vagrant init ubuntu11 # enable the sandbox and create a commit we can rollback to bundle exec vagrant sandbox on bundle exec vagrant sandbox commit
Run the tests
cd ../.. bundle exec rspec
When you're done
cd spec/vagrant vagrant halt
Add upload progress: https://github.com/net-ssh/net-sftp/blob/master/lib/net/sftp/operations/upload.rb