Francois Gouget : testbot/TestAgent: Add global configuration options for the SSH tunneling.

Alexandre Julliard julliard at winehq.org
Tue Dec 11 13:33:32 CST 2012


Module: tools
Branch: master
Commit: f486603d9079ce1905e8241d4794d06180489745
URL:    http://source.winehq.org/git/tools.git/?a=commit;h=f486603d9079ce1905e8241d4794d06180489745

Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Tue Dec 11 17:46:00 2012 +0100

testbot/TestAgent: Add global configuration options for the SSH tunneling.

This makes it possible to use other SSH keys than just id_dsa.
This also makes it possible to disable SSH tunneling entirely or to
hardcode the SSH tunnel to use instead of using whatever VirtURI
specifies.

---

 testbot/lib/WineTestBot/Config.pm              |    8 ++++----
 testbot/lib/WineTestBot/ConfigLocalTemplate.pl |   21 +++++++++++++++++++++
 testbot/lib/WineTestBot/VMs.pm                 |   22 ++++++++++++----------
 testbot/scripts/TestAgent                      |   20 +++++++++++---------
 4 files changed, 48 insertions(+), 23 deletions(-)

diff --git a/testbot/lib/WineTestBot/Config.pm b/testbot/lib/WineTestBot/Config.pm
index 9a16fe6..8d96c36 100644
--- a/testbot/lib/WineTestBot/Config.pm
+++ b/testbot/lib/WineTestBot/Config.pm
@@ -32,8 +32,8 @@ use vars qw (@ISA @EXPORT @EXPORT_OK $UseSSL $LogDir $DataDir $BinDir
              $BuildTimeout $ReconfigTimeout $OverheadTimeout $TagPrefix
              $ProjectName $PatchesMailingList $PatchResultsEMail $LDAPServer
              $LDAPBindDN $LDAPSearchBase $LDAPSearchFilter
-             $LDAPRealNameAttribute $LDAPEMailAttribute $AgentPort
-             $JobPurgeDays $JobArchiveDays $WebHostName);
+             $LDAPRealNameAttribute $LDAPEMailAttribute $AgentPort $Tunnel
+             $TunnelDefaults $JobPurgeDays $JobArchiveDays $WebHostName);
 
 require Exporter;
 @ISA = qw(Exporter);
@@ -44,8 +44,8 @@ require Exporter;
              $SingleTimeout $BuildTimeout $ReconfigTimeout $OverheadTimeout
              $TagPrefix $ProjectName $PatchesMailingList $PatchResultsEMail
              $LDAPServer $LDAPBindDN $LDAPSearchBase $LDAPSearchFilter
-             $LDAPRealNameAttribute $LDAPEMailAttribute $AgentPort
-             $JobPurgeDays $JobArchiveDays $WebHostName);
+             $LDAPRealNameAttribute $LDAPEMailAttribute $AgentPort $Tunnel
+             $TunnelDefaults $JobPurgeDays $JobArchiveDays $WebHostName);
 @EXPORT_OK = qw($DbDataSource $DbUsername $DbPassword);
 
 if ($::RootDir !~ m=^/=)
diff --git a/testbot/lib/WineTestBot/ConfigLocalTemplate.pl b/testbot/lib/WineTestBot/ConfigLocalTemplate.pl
index 06afb77..38e6a3a 100644
--- a/testbot/lib/WineTestBot/ConfigLocalTemplate.pl
+++ b/testbot/lib/WineTestBot/ConfigLocalTemplate.pl
@@ -83,4 +83,25 @@ $WineTestBot::Config::LDAPEMailAttribute = undef;
 # The port the VM agents are listening on
 $WineTestBot::Config::AgentPort = undef;
 
+# This specifies if and how to do SSH tunneling.
+# - If unset then tunneling is automatic based on the VM's VirtURI setting.
+# - If set to an SSH URI, then tunneling is performed using these parameters.
+# - Any other setting disables SSH tunneling. In particular to disable
+#   tunneling for SSH VirtURIs it is recommended to set this to 'never'.
+$Tunnel = undef;
+
+# If set this specifies the SSH tunnel parameters to be used for the
+# TestAgent connection. This is mostly useful for parameters that cannot be
+# specified through the SSH URI, like the key filenames. Listed below are
+# the supported settings. For a full reference, see the Net::SSH2::auth()
+# documentation. Note though that interactive methods are disabled.
+# - username
+# - password
+# - publickey
+# - privatekey
+# - hostname
+# - local_username
+$WineTestBot::Config::TunnelDefaults = undef;
+
+
 1;
diff --git a/testbot/lib/WineTestBot/VMs.pm b/testbot/lib/WineTestBot/VMs.pm
index a42fb12..2d1c1fd 100644
--- a/testbot/lib/WineTestBot/VMs.pm
+++ b/testbot/lib/WineTestBot/VMs.pm
@@ -361,17 +361,19 @@ sub _GetTunnel($)
 {
   my ($self) = @_;
 
-  # Auto-detect the SSH settings based on the libvirt URI
-  my $VirtURI = $self->VirtURI;
-  if ($VirtURI =~ s/^[a-z]+\+(?:ssh|libssh2):/ssh:/)
+  # Use either the tunnel specified in the configuration file
+  # or autodetect the settings based on the VM's VirtURI setting.
+  my $URI = $Tunnel || $self->VirtURI;
+
+  if ($URI =~ s/^(?:[a-z]+\+)?(?:ssh|libssh2):/ssh:/)
   {
-    my $URI = URI->new($VirtURI);
-    my $TunnelInfo = {
-        sshhost  => $URI->host,
-        sshport  => $URI->port,
-        username => $URI->userinfo,
-    };
-    return $TunnelInfo;
+    my $ParsedURI = URI->new($URI);
+
+    my %TunnelInfo = %$TunnelDefaults;
+    $TunnelInfo{sshhost}  = $ParsedURI->host;
+    $TunnelInfo{sshport}  = $ParsedURI->port;
+    $TunnelInfo{username} = $ParsedURI->userinfo;
+    return \%TunnelInfo;
   }
 
   return undef;
diff --git a/testbot/scripts/TestAgent b/testbot/scripts/TestAgent
index 6d241b5..f72531c 100755
--- a/testbot/scripts/TestAgent
+++ b/testbot/scripts/TestAgent
@@ -53,7 +53,7 @@ my ($Cmd, $Hostname, $LocalFilename, $ServerFilename, @Rm);
 my (@Run, $RunIn, $RunOut, $RunErr);
 my $SendFlags = 0;
 my $RunFlags = 0;
-my ($Port, $ConnectTimeout, $Timeout, $Tunnel);
+my ($Port, $ConnectTimeout, $Timeout, $TunnelOpt);
 my $Usage;
 
 sub check_opt_val($$)
@@ -95,7 +95,7 @@ while (@ARGV)
     }
     elsif ($arg eq "--tunnel")
     {
-        $Tunnel = check_opt_val($arg, $Tunnel);
+        $TunnelOpt = check_opt_val($arg, $TunnelOpt);
     }
     elsif ($arg eq "--sendfile-exe")
     {
@@ -189,9 +189,9 @@ if (!defined $Usage)
         $Usage = 2;
     }
     $AgentPort = $Port if (defined $Port);
-    if (defined $Tunnel and $Tunnel !~ /^ssh:/)
+    if ($TunnelOpt and $TunnelOpt !~ /^ssh:/)
     {
-        error("only SSH proxies are supported\n");
+        error("only SSH tunnels are supported\n");
         $Usage = 2;
     }
 }
@@ -239,13 +239,15 @@ if (defined $Usage)
     exit 0;
 }
 
+$TunnelOpt = $Tunnel if (!defined $TunnelOpt);
 my $TunnelInfo;
-if (defined $Tunnel)
+if ($TunnelOpt)
 {
-    my $URI = URI->new($Tunnel);
-    $TunnelInfo = {sshhost  => $URI->host,
-                   sshport  => $URI->port,
-                   username => $URI->userinfo};
+    my $ParsedURI = URI->new($TunnelOpt);
+    %$TunnelInfo = %$TunnelDefaults;
+    $TunnelInfo->{sshhost} = $ParsedURI->host;
+    $TunnelInfo->{sshport} = $ParsedURI->port;
+    $TunnelInfo->{username} = $ParsedURI->userinfo;
 }
 
 my $TA = TestAgent->new($Hostname, $AgentPort, $TunnelInfo);




More information about the wine-cvs mailing list