logger setup, wait for node start before sending requests
[scpubgit/Tak.git] / lib / Tak / ConnectorService.pm
index 2fb1eaf..a3a3caa 100644 (file)
@@ -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 {