summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Pugh2017-11-22 15:10:25 (GMT)
committerJon Pugh2017-11-22 15:10:25 (GMT)
commit09bae987414291922ff6e6fa866f20e41bdd5ed1 (patch)
tree42997f35141606115d5e2980fbbd3849adbc4550
parent2789f03eefaf5601d32f6ba78287da532bfcee35 (diff)
Adding PhpServer http server and refactoring how verification happens.
-rw-r--r--src/Application.php11
-rw-r--r--src/Command/VerifyCommand.php2
-rw-r--r--src/Common/ContextAwareTrait.php6
-rw-r--r--src/Context.php45
-rw-r--r--src/Provision.php14
-rw-r--r--src/Service.php71
-rw-r--r--src/Service/DbService.php15
-rw-r--r--src/Service/Http/HttpPhpService.php81
-rw-r--r--src/Service/Http/Php/servertest/index.php5
-rw-r--r--src/Service/HttpService.php17
-rw-r--r--src/ServiceSubscription.php4
11 files changed, 203 insertions, 68 deletions
diff --git a/src/Application.php b/src/Application.php
index 16513a3..6aab5af 100644
--- a/src/Application.php
+++ b/src/Application.php
@@ -74,6 +74,17 @@ class Application extends BaseApplication
}
/**
+ * Make configureIO public so we can run it before ->run()
+ *
+ * @param InputInterface $input
+ * @param OutputInterface $output
+ */
+ public function configureIO(InputInterface $input, OutputInterface $output)
+ {
+ parent::configureIO($input, $output);
+ }
+
+ /**
* Initializes all the default commands.
*/
protected function getDefaultCommands()
diff --git a/src/Command/VerifyCommand.php b/src/Command/VerifyCommand.php
index db5e730..786b53e 100644
--- a/src/Command/VerifyCommand.php
+++ b/src/Command/VerifyCommand.php
@@ -75,7 +75,7 @@ class VerifyCommand extends Command
}
*/
- $message = $this->context->verify();
+ $message = $this->context->verifyCommand();
}
}
diff --git a/src/Common/ContextAwareTrait.php b/src/Common/ContextAwareTrait.php
index 6513a2a..21089e7 100644
--- a/src/Common/ContextAwareTrait.php
+++ b/src/Common/ContextAwareTrait.php
@@ -2,7 +2,6 @@
namespace Aegir\Provision\Common;
-use Aegir\Provision;
use Aegir\Provision\Context;
trait ContextAwareTrait
@@ -29,11 +28,6 @@ trait ContextAwareTrait
*/
public function getContext()
{
-
- if (is_null($this->context)) {
- return Provision::getContext()();
- }
-
return $this->context;
}
}
diff --git a/src/Context.php b/src/Context.php
index d623fe2..2950d74 100644
--- a/src/Context.php
+++ b/src/Context.php
@@ -468,32 +468,33 @@ class Context implements BuilderAwareInterface
*
* If this context is a Service Subscriber, the provider service will be verified first.
*/
- public function verify() {
+ public function verifyCommand() {
$return_codes = [];
// Run verify method on all services.
foreach ($this->getServices() as $type => $service) {
- $friendlyName = $service->getFriendlyName();
-
- if ($this->isProvider()) {
- $this->getProvision()->io()->section("Verify service: {$friendlyName}");
- foreach ($service->verify() as $type => $verify_success) {
- $return_codes[] = $verify_success? 0: 1;
- }
- }
- else {
- $this->getProvision()->io()->section("Verify service: {$friendlyName} on {$service->provider->name}");
-
- // First verify the service provider.
- foreach ($service->verifyProvider() as $verify_part => $verify_success) {
- $return_codes[] = $verify_success? 0: 1;
- }
-
- // Then run "verify" on the subscriptions.
- foreach ($this->getSubscription($type)->verify() as $type => $verify_success) {
- $return_codes[] = $verify_success? 0: 1;
- }
- }
+ $return_codes[] = $service->verify() ? 0 : 1;
}
+//
+// if ($this->isProvider()) {
+// $this->getProvision()->io()->section("Verify service: {$friendlyName}");
+// foreach ($service->verify() as $type => $verify_success) {
+// $return_codes[] = $verify_success? 0: 1;
+// }
+// }
+// else {
+// $this->getProvision()->io()->section("Verify service: {$friendlyName} on {$service->provider->name}");
+//
+// // First verify the service provider.
+// foreach ($service->verifyProvider() as $verify_part => $verify_success) {
+// $return_codes[] = $verify_success? 0: 1;
+// }
+//
+// // Then run "verify" on the subscriptions.
+// foreach ($this->getSubscription($type)->verify() as $type => $verify_success) {
+// $return_codes[] = $verify_success? 0: 1;
+// }
+// }
+// }
// If any service verify failed, exit with a non-zero code.
if (count(array_filter($return_codes))) {
diff --git a/src/Provision.php b/src/Provision.php
index 6948249..4519aef 100644
--- a/src/Provision.php
+++ b/src/Provision.php
@@ -79,16 +79,18 @@ class Provision implements ConfigAwareInterface, ContainerAwareInterface, Logger
$this
->setConfig($config)
- ->setInput($input)
- ->setOutput($output)
;
-
+
// Create Application.
$application = new Application(self::APPLICATION_NAME, self::VERSION);
$application
->setProvision($this)
- ->setLogger($logger);
-
+ ->setLogger($logger)
+ ;
+ $application->configureIO($input, $output);
+ $this->setInput($input);
+ $this->setOutput($output);
+
// Create and configure container.
$container = Robo::createDefaultContainer($input, $output, $application, $config);
$this->setContainer($container);
@@ -108,7 +110,7 @@ class Provision implements ConfigAwareInterface, ContainerAwareInterface, Logger
public function run(InputInterface $input, OutputInterface $output) {
$status_code = $this->runner->run($input, $output);
-
+
return $status_code;
}
diff --git a/src/Service.php b/src/Service.php
index 2b6bbea..353200c 100644
--- a/src/Service.php
+++ b/src/Service.php
@@ -8,17 +8,20 @@
namespace Aegir\Provision;
+use Aegir\Provision\Common\ContextAwareTrait;
use Aegir\Provision\Common\ProvisionAwareTrait;
+use Psr\Log\LoggerAwareTrait;
use Robo\Common\BuilderAwareTrait;
use Robo\Common\OutputAdapter;
use Robo\Contract\BuilderAwareInterface;
class Service implements BuilderAwareInterface
{
-
use BuilderAwareTrait;
use ProvisionAwareTrait;
-
+ use ContextAwareTrait;
+ use LoggerAwareTrait;
+
public $type;
public $properties;
@@ -46,7 +49,9 @@ class Service implements BuilderAwareInterface
function __construct($service_config, Context $provider_context)
{
$this->provider = $provider_context;
+ $this->setContext($provider_context);
$this->setProvision($provider_context->getProvision());
+ $this->setLogger($provider_context->getProvision()->getLogger());
$this->type = $service_config['type'];
$this->properties = $service_config['properties'];
@@ -77,30 +82,54 @@ class Service implements BuilderAwareInterface
return "\Aegir\Provision\Service\\{$service}Service";
}
}
-
- /**
- * React to the `provision verify` command.
- */
- function verify()
- {
- return [
- 'configuration' => $this->writeConfigurations(),
- 'service' => $this->restartService(),
- ];
- }
/**
- * React to `provision verify` command when run on a subscriber, to verify the service's provider.
- *
- * This is used to allow skipping of the service restart.
+ * React to the verify command. Passes off to the method verifySite, verifyServer, verifyPlatform.
+ * @return mixed
*/
- function verifyProvider()
- {
- return [
- 'configuration' => $this->writeConfigurations(),
- ];
+ public function verify() {
+ $method = 'verify' . ucfirst($this->getContext()->type);
+ $this->getProvision()->getLogger()->info("Running {method}", [
+ 'method' => $method
+ ]);
+ return $this::$method();
}
+//
+// /**
+// * React to the `provision verify` command.
+// */
+// function verifySite()
+// {
+// return [
+// 'configuration' => $this->writeConfigurations(),
+// 'service' => $this->restartService(),
+// ];
+// }
+//
+// /**
+// * React to the `provision verify` command.
+// */
+// function verifyPlatform()
+// {
+// return [
+// 'configuration' => $this->writeConfigurations(),
+// 'service' => $this->restartService(),
+// ];
+// }
+//
+// /**
+// * React to `provision verify` command when run on a subscriber, to verify the service's provider.
+// *
+// * This is used to allow skipping of the service restart.
+// */
+// function verifyServer()
+// {
+// return [
+// 'configuration' => $this->writeConfigurations(),
+// ];
+// }
+
/**
* Run the services "restart_command".
* @return bool
diff --git a/src/Service/DbService.php b/src/Service/DbService.php
index 8c9e948..188bbf6 100644
--- a/src/Service/DbService.php
+++ b/src/Service/DbService.php
@@ -12,6 +12,7 @@ namespace Aegir\Provision\Service;
use Aegir\Provision\Context\SiteContext;
use Aegir\Provision\Service;
+use Aegir\Provision\ServiceInterface;
use Aegir\Provision\ServiceSubscription;
use Symfony\Component\Console\Output\OutputInterface;
@@ -20,7 +21,7 @@ use Symfony\Component\Console\Output\OutputInterface;
*
* @package Aegir\Provision\Service
*/
-class DbService extends Service
+class DbService extends Service implements ServiceInterface
{
const SERVICE = 'db';
@@ -89,7 +90,7 @@ class DbService extends Service
/**
* React to the `provision verify` command on Server contexts
*/
- function verify() {
+ function verifyServer() {
$this->creds = array_map('urldecode', parse_url($this->properties['master_db']));
if (!isset($this->creds['port'])) {
@@ -135,11 +136,11 @@ class DbService extends Service
/**
* React to the `provision verify` command on subscriber contexts (sites and platforms)
*/
- function verifySubscription(ServiceSubscription $serviceSubscription) {
- $this->subscription = $serviceSubscription;
+ function verifySite() {
+ $this->subscription = $this->getContext()->getSubscription($this->type);
// Check for database
- $this->create_site_database($serviceSubscription->context);
+ $this->create_site_database($this->getContext());
$this->creds_root = array_map('urldecode', parse_url($this->properties['master_db']));
@@ -169,6 +170,10 @@ class DbService extends Service
}
}
+ public function verifyPlatform() {
+
+ }
+
/**
* React to `provision verify` command when run on a subscriber, to verify the service's provider.
*
diff --git a/src/Service/Http/HttpPhpService.php b/src/Service/Http/HttpPhpService.php
new file mode 100644
index 0000000..aeae730
--- /dev/null
+++ b/src/Service/Http/HttpPhpService.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * @file
+ * The Provision HttpApacheService class.
+ *
+ * @see \Provision_Service_http_apache
+ */
+
+namespace Aegir\Provision\Service\Http;
+
+use Aegir\Provision\Robo\ProvisionCollectionBuilder;
+use Aegir\Provision\Service\Http\Apache\Configuration\PlatformConfiguration;
+use Aegir\Provision\Service\Http\Apache\Configuration\ServerConfiguration;
+use Aegir\Provision\Service\Http\Apache\Configuration\SiteConfiguration;
+use Aegir\Provision\Service\HttpService;
+use Aegir\Provision\ServiceSubscription;
+use Robo\Result;
+use Aegir\Provision\Service\Http\Php\PhpServer;
+use Symfony\Component\Process\Process;
+
+/**
+ * Class HttpPhpService
+ *
+ * @package Aegir\Provision\Service\Http
+ */
+class HttpPhpService extends HttpService
+{
+ const SERVICE_TYPE = 'php';
+ const SERVICE_TYPE_NAME = 'PHP Server';
+
+
+ public function verifyServer()
+ {
+
+ $host = $this->getContext()->getProperty('remote_host');
+ $port = $this->getProperty('http_port');
+
+ $this->getProvision()->getLogger()->info('Running server at {host}:{port}', [
+ 'host' => $host,
+ 'port' => $port,
+ ]);
+//
+
+ $this->getContext()->getBuilder()->build(PhpServer::class, ['port' => $port]);
+
+// $server = new PhpServer($port);
+
+ /** @var PhpServer $server */
+ $server = $this->getContext()->getBuilder()->task(PhpServer::class, ['port' => $port]);
+
+ $server->host($host);
+ $server->dir(__DIR__ . '/Php/servertest');
+
+ $server->background();
+ $server->run();
+//
+ $pid = $server->getProcess()->getPid();
+
+ $this->getProvision()->getLogger()->info('Server started at {host}:{port} running as process {pid}', [
+ 'host' => $host,
+ 'port' => $port,
+ 'pid' => $pid,
+ ]);
+
+
+ }
+
+ public function verifySite()
+ {
+ }
+
+ public function verifySubscription(ServiceSubscription $subscription)
+ {
+
+ print_r($subscription->context->getProperty('root'));
+ $this->application->getBuilder()->taskServer($this->getProperty('http_port'))
+ ->dir('.');;
+
+
+ }
+}
diff --git a/src/Service/Http/Php/servertest/index.php b/src/Service/Http/Php/servertest/index.php
new file mode 100644
index 0000000..4c16b1e
--- /dev/null
+++ b/src/Service/Http/Php/servertest/index.php
@@ -0,0 +1,5 @@
+<h1><?php print "It Works!"; ?></h1>
+
+<p>
+ <?php print "This page is being generated by PHP web server." ?>
+</p>
diff --git a/src/Service/HttpService.php b/src/Service/HttpService.php
index 46f1793..0afced0 100644
--- a/src/Service/HttpService.php
+++ b/src/Service/HttpService.php
@@ -11,6 +11,7 @@ namespace Aegir\Provision\Service;
//require_once DRUSH_BASE_PATH . '/commands/core/rsync.core.inc';
use Aegir\Provision\Service;
+use Aegir\Provision\ServiceInterface;
use Aegir\Provision\ServiceSubscription;
use Consolidation\AnnotatedCommand\CommandFileDiscovery;
@@ -19,7 +20,7 @@ use Consolidation\AnnotatedCommand\CommandFileDiscovery;
*
* @package Aegir\Provision\Service
*/
-class HttpService extends Service {
+class HttpService extends Service implements ServiceInterface {
const SERVICE = 'http';
const SERVICE_NAME = 'Web Server';
@@ -57,7 +58,7 @@ class HttpService extends Service {
*
* This is used to allow skipping of the service restart.
*/
- function verifyProvider()
+ function verifyServer()
{
return [
'configuration' => $this->writeConfigurations(),
@@ -67,14 +68,18 @@ class HttpService extends Service {
/**
* React to the `provision verify` command on Server contexts
*/
- function verifySubscription(ServiceSubscription $serviceSubscription) {
- $this->subscription = $serviceSubscription;
+ function verifySite() {
+ $this->subscription = $this->getContext()->getSubscription();
return [
- 'configuration' => $this->writeConfigurations($serviceSubscription),
+ 'configuration' => $this->writeConfigurations($this->subscription),
'service' => $this->restartService(),
];
}
-//
+
+ function verifyPlatform() {
+ }
+
+ //
// /**
// * Support the ability to cloak the database credentials using environment variables.
// */
diff --git a/src/ServiceSubscription.php b/src/ServiceSubscription.php
index b7d9932..c2b809a 100644
--- a/src/ServiceSubscription.php
+++ b/src/ServiceSubscription.php
@@ -9,6 +9,7 @@
namespace Aegir\Provision;
+use Aegir\Provision\Common\ContextAwareTrait;
use Aegir\Provision\Common\ProvisionAwareTrait;
class ServiceSubscription {
@@ -20,13 +21,14 @@ class ServiceSubscription {
public $properties = [];
use ProvisionAwareTrait;
+ use ContextAwareTrait;
function __construct(
Context $context,
$server,
$service_name
) {
- $this->context = $context;
+ $this->setContext($context);
$this->server = Provision::getContext($server, $context->getProvision());
$this->service = $this->server->getService($service_name);
$this->type = $this->server->getService($service_name)->type;