X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FTak.git;a=blobdiff_plain;f=lib%2FTak%2FConnectorService.pm;h=a3a3caa3cc638b2e20124c0ccc876dd50e8a0eca;hp=2fb1eaf0e1e7cb3510190286da9e3ae36a3ab696;hb=7b71b06eb809e6fbf7c5ca24a54ca40d098465a8;hpb=e99bc1419a3c02cd19429e4c80393342f811082a diff --git a/lib/Tak/ConnectorService.pm b/lib/Tak/ConnectorService.pm index 2fb1eaf..a3a3caa 100644 --- a/lib/Tak/ConnectorService.pm +++ b/lib/Tak/ConnectorService.pm @@ -15,9 +15,13 @@ has connections => (is => 'ro', default => sub { Tak::Router->new }); has ssh => (is => 'ro', default => sub { {} }); sub handle_create { - my ($self, $on) = @_; - my ($kid_in, $kid_out, $kid_pid) = $self->_open($on); + my ($self, $on, %args) = @_; + my $log_level = $args{log_level}||'info'; + my ($kid_in, $kid_out, $kid_pid) = $self->_open($on, $log_level); $kid_in->print(io('maint/mk-fat |')->all, "__END__\n"); + my $up = <$kid_out>; + die [ failure => "Garbled response from child: $up" ] + unless $up eq "UP\n"; my $connection = Tak::ConnectionService->new( read_fh => $kid_out, write_fh => $kid_in, listening_service => Tak::Router->new @@ -35,16 +39,16 @@ sub handle_create { } sub _open { - my ($self, $on) = @_; + my ($self, $on, @args) = @_; unless ($on) { - my $kid_pid = IPC::Open2::open2(my $kid_out, my $kid_in, $^X, '-') + my $kid_pid = IPC::Open2::open2(my $kid_out, my $kid_in, $^X, '-', '-', @args) or die "Couldn't open2 child: $!"; return ($kid_in, $kid_out, $kid_pid); } my $ssh = $self->ssh->{$on} ||= Net::OpenSSH->new($on); $ssh->error and die "Couldn't establish ssh connection: ".$ssh->error; - return $ssh->open2('perl','-'); + return $ssh->open2('perl','-', $on, @args); } sub start_connection_request {