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