[ANN] rubyhitsquad's vlad 1.0.0 Released

R

Ryan Davis

vlad version 1.0.0 has been released!

* <http://rubyhitsquad.com/>
* <http://rubyforge.org/projects/hitsquad/>

Vlad the Deployer is pragmatic application deployment automation,
without mercy. Much like Capistrano, but with 1/10th the
complexity. Vlad integrates seamlessly with Rake, and uses familiar
and standard tools like ssh and rsync.

Impale your application on the heartless spike of the Deployer.

## FEATURES/PROBLEMS:

* Full deployment automation stack.
* Supports single server deployment with just 4 variables defined.
* Very few dependencies. All simple.
* Uses ssh with your ssh settings already in place.
* Uses rsync for efficient transfers.
* Run remote commands on one or more servers.
* Syncs files to one or more servers.
* Mix and match local and remote tasks.
* Built on rake. easy.
* Compatible with all of your tab completion shell script rake-tastic
goodness.
* Ships with tests that actually pass.
* Engine is under 500 lines of code.
* Super uper simple.
* Does NOT support Windows right now. Coming soon in 1.1.
* This is 1.0.0... expect rough edges.

Changes:

## 1.0.0 / 2007-08-04

* 1 major enhancement
* Birthday!

* <http://rubyhitsquad.com/>
* <http://rubyforge.org/projects/hitsquad/>
 
P

Phlip

Bil said:
Reminds me of Victor the Cleaner from the original
La Femme Nikita[1].

That explains the line from the Beastie Boys that rhymes that with
"illin'est motherf---er from here to Gardina"!

Gardina is the next city over from Compton, which is renowned for
internecine crime.
 
J

Joel VanderWerf

Ryan said:
* Uses ssh with your ssh settings already in place.
* Uses rsync for efficient transfers.

Since you're using the external ssh program, you might consider using
the -S option in ssh. It lets you pay the setup cost (authentication,
tcp connect) once per host, rather than once per ssh or rsync
invocation. Makes a big difference with slow networks or many invocations.

In rakefiles, it lets you do the following:

m = SSHMaster.for "some.host.net"
m.rsync [file1, file2], some_dir_on_that_host
m.rsync local_dir, remote_dir, "-az" # or other rsync options
m.ssh some_cmd

Here's the implementation (needs hacking, I'm sure):

class SSHMaster
def initialize sock, host
@sock, @host = sock, host
end

def ssh cmd, &block
sh "ssh", "-S", @sock, @host, cmd, &block
end

DEFAULT_RSYNC_OPTS = ["-Cavz", "--exclude='*.bck'", "--progress"]

# dst may be "host:foo/bar" or just "foo/bar"
def rsync src, dst, opts=DEFAULT_RSYNC_OPTS, *optsrest, &block
src = [src] unless src.is_a?(Array)
src = FileList[*src]
opts = [opts] unless opts.is_a?(Array)
host_dst = (dst =~ /\A#{@host}:/) ? dst : "#{@host}:#{dst}"
sh "rsync", "--rsh=ssh -S #{@sock}",
*((opts + optsrest + src + [host_dst]).flatten), &block
end

SOCKET_NAME = "ssh_master_for_%r@%h:%p"

@master = {}

def self.for host
master = @master[host]
unless master
sock = File.join(ENV["TMPDIR"], SOCKET_NAME)
cmd = "ssh -M -S #{sock} #{host} 'echo hello; read'"
master_pipe = IO.popen(cmd, "r+")
master_pipe.gets
at_exit do
master_pipe.close if master_pipe and not master_pipe.closed?
end

master = @master[host] = new(sock, host)
end
master

rescue StandardError => ex
$stderr.puts "Failed to ssh to #{host}: #{ex.message}"
false
end
end
 
W

Wilson Bilkovich

Since you're using the external ssh program, you might consider using
the -S option in ssh. It lets you pay the setup cost (authentication,
tcp connect) once per host, rather than once per ssh or rsync
invocation. Makes a big difference with slow networks or many invocations.

We considered this, but there's a bug in the current version of svn
that breaks when you use ControlMaster. We're going to document how
to enable it in your ssh config file without breaking anything,
however. You just can't use it on hosts you intend to 'svn+ssh' into.

--Wilson.
 
E

Eric Hodel

Since you're using the external ssh program, you might consider
using the -S option in ssh. It lets you pay the setup cost
(authentication, tcp connect) once per host, rather than once per
ssh or rsync invocation. Makes a big difference with slow networks
or many invocations.

We're letting people set this per-host with their ~/.ssh/ssh_config.

Unfortunately some programs (subversion) don't work reliably with the
ControlMaster setting enabled.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,989
Messages
2,570,207
Members
46,782
Latest member
ThomasGex

Latest Threads

Top