Advertisement
Guest User

Untitled

a guest
Apr 26th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. #! /usr/bin/env perl
  2. use strict;
  3. use warnings;
  4.  
  5. sub vbox_list {
  6. my %vms;
  7. my ($running) = @_;
  8. my $what = $running ? 'runningvms' : 'vms';
  9. local $ENV{LC_ALL} = 'C';
  10. open VBOX, "VBoxManage list -l $what |" or die 'VBoxManage: $!';
  11. local $/ = "nnn";
  12. while (my $section = <VBOX>) {
  13. my %vm = ();
  14. $section =~ s/nn.*//s; # strip shared folders, etc.
  15. foreach my $line (split /n/, $section) {
  16. $line =~ s/A([^:]+):s+// or next;
  17. $vm{$1} = $line;
  18. }
  19. $vms{$vm{UUID}} = {%vm};
  20. }
  21. close VBOX;
  22. return %vms;
  23. }
  24.  
  25. sub vbox_list_cables {
  26. my ($vms) = @_;
  27. my @cables;
  28. foreach my $vm (values %$vms) {
  29. my %vm = %$vm;
  30. foreach my $key (keys %vm) {
  31. next unless $key =~ /ANIC *([0-9]+)z/;
  32. my $num = $1;
  33. if ($vm{$key} =~ /(^|, )Cable connected: on($|, )/) {
  34. push @cables, [$vm{UUID}, $vm{Name}, $num];
  35. }
  36. }
  37. }
  38. return @cables;
  39. }
  40.  
  41. sub vbox_iterate_cableconnected {
  42. my ($cables, $onoff) = @_;
  43. foreach my $cable (@$cables) {
  44. my ($uuid, $name, $num) = @$cable;
  45. system 'VBoxManage', 'controlvm', $uuid, "setlinkstate$num", $onoff;
  46. # TODO: report errors
  47. }
  48. }
  49.  
  50. my %vms = vbox_list(1);
  51. my @cables = vbox_list_cables(%vms);
  52. vbox_iterate_cableconnected(@cables, 'off');
  53. sleep(1);
  54. vbox_iterate_cableconnected(@cables, 'on');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement