annotate vendor/consolidation/site-process/src/Transport/SshTransport.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
rev   line source
Chris@5 1 <?php
Chris@5 2
Chris@5 3 namespace Consolidation\SiteProcess\Transport;
Chris@5 4
Chris@5 5 use Consolidation\SiteProcess\SiteProcess;
Chris@5 6 use Consolidation\SiteProcess\Util\Escape;
Chris@5 7 use Consolidation\SiteAlias\SiteAliasInterface;
Chris@5 8 use Consolidation\SiteProcess\Util\Shell;
Chris@5 9 use Consolidation\Config\ConfigInterface;
Chris@5 10
Chris@5 11 /**
Chris@5 12 * SshTransport knows how to wrap a command such that it runs on a remote
Chris@5 13 * system via the ssh cli.
Chris@5 14 */
Chris@5 15 class SshTransport implements TransportInterface
Chris@5 16 {
Chris@5 17 protected $tty;
Chris@5 18 protected $siteAlias;
Chris@5 19
Chris@5 20 public function __construct(SiteAliasInterface $siteAlias)
Chris@5 21 {
Chris@5 22 $this->siteAlias = $siteAlias;
Chris@5 23 }
Chris@5 24
Chris@5 25 /**
Chris@5 26 * @inheritdoc
Chris@5 27 */
Chris@5 28 public function configure(SiteProcess $process)
Chris@5 29 {
Chris@5 30 $this->tty = $process->isTty();
Chris@5 31 }
Chris@5 32
Chris@5 33 /**
Chris@5 34 * inheritdoc
Chris@5 35 */
Chris@5 36 public function wrap($args)
Chris@5 37 {
Chris@5 38 $transport = ['ssh'];
Chris@5 39 $transportOptions = $this->getTransportOptions();
Chris@5 40 $commandToExecute = $this->getCommandToExecute($args);
Chris@5 41
Chris@5 42 return array_merge(
Chris@5 43 $transport,
Chris@5 44 $transportOptions,
Chris@5 45 $commandToExecute
Chris@5 46 );
Chris@5 47 }
Chris@5 48
Chris@5 49 /**
Chris@5 50 * @inheritdoc
Chris@5 51 */
Chris@5 52 public function addChdir($cd_remote, $args)
Chris@5 53 {
Chris@5 54 return array_merge(
Chris@5 55 [
Chris@5 56 'cd',
Chris@5 57 $cd_remote,
Chris@5 58 Shell::op('&&'),
Chris@5 59 ],
Chris@5 60 $args
Chris@5 61 );
Chris@5 62 }
Chris@5 63
Chris@5 64 /**
Chris@5 65 * getTransportOptions returns the transport options for the tranport
Chris@5 66 * mechanism itself
Chris@5 67 */
Chris@5 68 protected function getTransportOptions()
Chris@5 69 {
Chris@5 70 $transportOptions = [
Chris@5 71 Shell::preEscaped($this->siteAlias->get('ssh.options', '-o PasswordAuthentication=no')),
Chris@5 72 $this->siteAlias->remoteHostWithUser(),
Chris@5 73 ];
Chris@5 74 if ($this->tty) {
Chris@5 75 array_unshift($transportOptions, '-t');
Chris@5 76 }
Chris@5 77 return $transportOptions;
Chris@5 78 }
Chris@5 79
Chris@5 80 /**
Chris@5 81 * getCommandToExecute processes the arguments for the command to
Chris@5 82 * be executed such that they are appropriate for the transport mechanism.
Chris@5 83 */
Chris@5 84 protected function getCommandToExecute($args)
Chris@5 85 {
Chris@5 86 // Escape each argument for the target system and then join
Chris@5 87 $args = Escape::argsForSite($this->siteAlias, $args);
Chris@5 88 $commandToExecute = implode(' ', $args);
Chris@5 89
Chris@5 90 return [$commandToExecute];
Chris@5 91 }
Chris@5 92 }