thor-ssh

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.

ThorSsh Assumptions

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

  gem 'thor-ssh'

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

Running Tests

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

Start box

  vagrant up

Run the tests

  cd ../..
  bundle exec rspec

When you're done

  cd spec/vagrant
  vagrant halt

TODO:

Add upload progress: https://github.com/net-ssh/net-sftp/blob/master/lib/net/sftp/operations/upload.rb