Merge branch 'master' into scaleway
[gruntmaster-daemon.git] / lib / Gruntmaster / Daemon / Format.pm
index 2ad6f9519f4b8d82b3d7a892b8360bf514f0707c..2f117d7e923e837509223f91371e0b3ead5cc5c4 100644 (file)
@@ -14,30 +14,47 @@ use File::Slurp qw/read_file write_file/;
 use List::MoreUtils qw/natatime/;
 use Log::Log4perl qw/get_logger/;
 use String::ShellQuote qw/shell_quote/;
+use Time::HiRes qw/time/;
 use Try::Tiny;
 
 our $VERSION = '5999.000_005';
-our @EXPORT_OK = qw/prepare_files stopvms/;
+our @EXPORT_OK = qw/copy_from_vm copy_to_vm prepare_files stopvms/;
 
 ##################################################
 
 our (%vm, %pid);
 
+sub copy_from_vm {
+       my ($file) = @_;
+       return unless $ENV{GRUNTMASTER_COPY_FROM_VM};
+       get_logger->trace("Copying $file from VM");
+       system $ENV{GRUNTMASTER_COPY_FROM_VM}, $file
+}
+
+sub copy_to_vm {
+       my ($file) = @_;
+       return unless $ENV{GRUNTMASTER_COPY_TO_VM};
+       get_logger->trace("Copying $file to VM");
+       system $ENV{GRUNTMASTER_COPY_TO_VM}, $file
+}
+
 sub runvm {
        my ($name, $arg) = @_;
        return unless $ENV{GRUNTMASTER_VM};
-       my $cmd = $ENV{GRUNTMASTER_VM};
+       my $cmd = $ENV{GRUNTMASTER_VM} . ' ' . $name;
        $cmd .= ' ' . $arg if $arg;
        get_logger->trace("Starting VM $name ($cmd)");
        $vm{$name} = Expect->new;
        $vm{$name}->raw_pty(1);
        $vm{$name}->log_stdout(0);
        $vm{$name}->spawn($cmd);
-       $vm{$name}->expect(5, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error);
+       $vm{$name}->expect(50, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error);
+       $vm{$name}->send("rm -rf ~/work/*\n");
+       $vm{$name}->expect(50, '# ')
 }
 
 sub stopvms {
-       kill KILL => $_->pid for values %vm;
+       $_->hard_close for values %vm;
        %vm = %pid = ();
 }
 
@@ -46,14 +63,16 @@ sub execlist_finish {
 
        if ($vm{$vm}) {
                warn "Cannot kill VM\n" if $kill;
-               $vm{$vm}->expect(5, '# ');
+               $vm{$vm}->expect(50, '# ');
        } else {
                kill KILL => $pid{$vm} if $kill;
                waitpid $pid{$vm}, 0;
        }
+       write_file "time-stop-$vm", time;
        return if $kill;
 
        my $er = "exec-result-$vm";
+       copy_from_vm $er;
        die "gruntmaster-exec died\n" if -z $er;
        my ($excode, $exmsg) = read_file $er;
        unlink $er;
@@ -64,6 +83,7 @@ sub execlist_finish {
 
 sub execlist {
        my ($vm, @args) = @_;
+       write_file "time-start-$vm", time;
        my $er = "exec-result-$vm";
        if ($vm{$vm}) {
                my $cmd = ">$er " . shell_quote 'gruntmaster-exec', @args;
@@ -112,6 +132,7 @@ sub prepare{
                my $exmsg = $_->[1];
                die "Compile error ($exmsg)\n"
        } finally {
+               copy_from_vm 'errors';
                $Gruntmaster::Daemon::errors .= read_file 'errors';
                $Gruntmaster::Daemon::errors .= "\n" if -s 'errors';
                unlink 'errors';
@@ -132,6 +153,7 @@ sub prepare_files{
 
                $file->{run} = mkrun($format);
                write_file $name, $content;
+               copy_to_vm $name;
                if ($ENV{GRUNTMASTER_CCACHE}) {
                        my $key = lc sha256_hex($content) . '-' . $format;
                        my $cachefn = "$ENV{GRUNTMASTER_CCACHE}/$key";
This page took 0.011623 seconds and 4 git commands to generate.