-sub execlist {
- my (@args) = @_;
- my $ret = fork // die 'Cannot fork';
- if ($ret) {
- waitpid $ret, 0;
- die "gruntmaster-exec died\n" if -z 'exec-result';
- my ($excode, $exmsg) = read_file 'exec-result';
- unlink 'exec-result';
- chomp ($excode, $exmsg);
- die [$excode, $exmsg] if $excode > 0;
+our (%vm, %pid);
+
+sub runvm {
+ my ($name, $arg) = @_;
+ return unless $ENV{GRUNTMASTER_VM};
+ my $cmd = $ENV{GRUNTMASTER_VM};
+ $cmd .= ' ' . $arg if $arg;
+ get_logger->trace("Starting VM $name ($cmd)");
+ $vm{$name} = Expect->spawn($cmd);
+ $vm{$name}->raw_pty(1);
+ $vm{$name}->expect(5, '# ') or get_logger->logdie("Error while starting VM $name: ". $vm{$name}->error);
+}
+
+sub stopvms {
+ kill KILL => $_->pid for values %vm;
+ %vm = %pid = ();
+}
+
+sub execlist_finish {
+ my ($vm, $kill) = @_;
+
+ if ($vm{$vm}) {
+ warn "Cannot kill VM" if $kill;
+ $vm{$vm}->expect(5, '# ');