-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: added vagrant transport layer (#40)
Although possible with the ssh layer, it's cumbersome as it requires to specify the vagrant ssh key, host and port.
- Loading branch information
1 parent
4849ce2
commit 812ae9e
Showing
6 changed files
with
162 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<?php | ||
|
||
namespace Consolidation\SiteProcess\Factory; | ||
|
||
use Consolidation\SiteAlias\SiteAliasInterface; | ||
use Consolidation\SiteProcess\Transport\VagrantTransport; | ||
|
||
/** | ||
* VagrantTransportFactory will create a VagrantTransport for applicable site aliases. | ||
*/ | ||
class VagrantTransportFactory implements TransportFactoryInterface | ||
{ | ||
/** | ||
* @inheritdoc | ||
*/ | ||
public function check(SiteAliasInterface $siteAlias) | ||
{ | ||
return $siteAlias->has('vagrant'); | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function create(SiteAliasInterface $siteAlias) | ||
{ | ||
return new VagrantTransport($siteAlias); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
<?php | ||
|
||
namespace Consolidation\SiteProcess\Transport; | ||
|
||
use Consolidation\SiteProcess\SiteProcess; | ||
use Consolidation\SiteProcess\Util\Escape; | ||
use Consolidation\SiteAlias\SiteAliasInterface; | ||
use Consolidation\SiteProcess\Util\Shell; | ||
|
||
/** | ||
* VagrantTransport knows how to wrap a command such that it runs on a remote | ||
* system via the vagrant cli. | ||
*/ | ||
class VagrantTransport implements TransportInterface | ||
{ | ||
protected $tty; | ||
protected $siteAlias; | ||
|
||
public function __construct(SiteAliasInterface $siteAlias) | ||
{ | ||
$this->siteAlias = $siteAlias; | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function configure(SiteProcess $process) | ||
{ | ||
$this->tty = $process->isTty(); | ||
} | ||
|
||
/** | ||
* inheritdoc | ||
*/ | ||
public function wrap($args) | ||
{ | ||
$transport = ['vagrant', 'ssh']; | ||
$transportOptions = $this->getTransportOptions(); | ||
$commandToExecute = $this->getCommandToExecute($args); | ||
|
||
return array_merge( | ||
$transport, | ||
$transportOptions, | ||
['-c'], | ||
$commandToExecute | ||
); | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function addChdir($cd_remote, $args) | ||
{ | ||
return array_merge( | ||
[ | ||
'cd', | ||
$cd_remote, | ||
Shell::op('&&'), | ||
], | ||
$args | ||
); | ||
} | ||
|
||
/** | ||
* getTransportOptions returns the transport options for the tranport | ||
* mechanism itself | ||
*/ | ||
protected function getTransportOptions() | ||
{ | ||
return $this->tty ? ['-t'] : []; | ||
} | ||
|
||
/** | ||
* getCommandToExecute processes the arguments for the command to | ||
* be executed such that they are appropriate for the transport mechanism. | ||
*/ | ||
protected function getCommandToExecute($args) | ||
{ | ||
// Escape each argument for the target system and then join | ||
$args = Escape::argsForSite($this->siteAlias, $args); | ||
$commandToExecute = implode(' ', $args); | ||
|
||
return [$commandToExecute]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
<?php | ||
|
||
namespace Consolidation\SiteProcess; | ||
|
||
use Consolidation\SiteProcess\Transport\VagrantTransport; | ||
use PHPUnit\Framework\TestCase; | ||
use Consolidation\SiteAlias\SiteAlias; | ||
|
||
class VagrantTransportTest extends TestCase | ||
{ | ||
/** | ||
* Data provider for testWrap. | ||
*/ | ||
public function wrapTestValues() | ||
{ | ||
return [ | ||
[ | ||
'vagrant ssh -c ls', | ||
[ | ||
'vagrant' => [] | ||
], | ||
] | ||
]; | ||
} | ||
|
||
/** | ||
* @dataProvider wrapTestValues | ||
*/ | ||
public function testWrap($expected, $siteAliasData) | ||
{ | ||
$siteAlias = new SiteAlias($siteAliasData, '@alias.dev'); | ||
$dockerTransport = new VagrantTransport($siteAlias); | ||
$actual = $dockerTransport->wrap(['ls']); | ||
$this->assertEquals($expected, implode(' ', $actual)); | ||
} | ||
} |