Skip to content
GitLab
Explore
Sign in
project
provision
Compare revisions
5f540724d70b3574fcd1fd6b892c58a5a7d43c65 to 4.x-services
Commits on Source (10)
Fixing loading of services by service type.
· 121044e6
Jon Pugh
authored
Oct 25, 2017
121044e6
Moving service loading to Context class... not quite ready! but...
· d9718351
Jon Pugh
authored
Oct 25, 2017
d9718351
Adding Comment.
· f02900b9
Jon Pugh
authored
Oct 26, 2017
f02900b9
Removing redundant code.
· f7322fc8
Jon Pugh
authored
Oct 26, 2017
f7322fc8
Add allowedContexts() method for limiting what services can be subscribed to by which contexts.
· 12750314
Jon Pugh
authored
Oct 26, 2017
12750314
Add ServiceSubscription class and use that instead of Service on all non-server contexts.
· 088401df
Jon Pugh
authored
Oct 26, 2017
088401df
Make sure there are enough items in the list of servers and services.
· 83919d63
Jon Pugh
authored
Oct 26, 2017
83919d63
Remove shell command for now.
· 0167b213
Jon Pugh
authored
Oct 26, 2017
0167b213
Generate http_vhostd_path in SiteConfiguration and add vhost.tpl.php file.
· 1c68f8df
Jon Pugh
authored
Nov 02, 2017
1c68f8df
Merge branch '4.x-services' of git.drupal.org:project/provision into 4.x-services
· c8625f17
Jon Pugh
authored
Nov 02, 2017
c8625f17
Show whitespace changes
Inline
Side-by-side
src/Application.php
View file @
c8625f17
...
...
@@ -124,7 +124,7 @@ class Application extends BaseApplication
$commands
[]
=
new
ListCommand
();
$commands
[]
=
new
SaveCommand
();
$commands
[]
=
new
ServicesCommand
();
$commands
[]
=
new
ShellCommand
();
//
$commands[] = new ShellCommand();
$commands
[]
=
new
StatusCommand
();
$commands
[]
=
new
VerifyCommand
();
...
...
@@ -220,11 +220,11 @@ class Application extends BaseApplication
public
function
getServerOptions
(
$service_type
=
''
)
{
$servers
=
[];
foreach
(
$this
->
getAllServers
()
as
$server
)
{
if
(
$service_type
&&
isset
(
$server
->
services
[
$service_type
]))
{
$servers
[
$server
->
name
]
=
$server
->
name
.
': '
.
$server
->
getS
ervice
(
$service_type
)
->
type
;
if
(
$service_type
&&
!
empty
(
$server
->
config
[
'
services
'
]
[
$service_type
]))
{
$servers
[
$server
->
name
]
=
$server
->
name
.
': '
.
$server
->
config
[
's
ervice
s'
][
$service_type
][
'
type
'
]
;
}
else
{
$servers
[
$server
->
name
]
=
$server
->
name
.
': '
.
$server
->
getS
ervice
(
$service_type
)
->
type
;
else
if
(
$service_type
==
''
)
{
$servers
[
$server
->
name
]
=
$server
->
name
.
': '
.
$server
->
config
[
's
ervice
s'
][
$service_type
][
'
type
'
]
;
}
}
return
$servers
;
...
...
src/Command/ServicesCommand.php
View file @
c8625f17
...
...
@@ -8,6 +8,7 @@ use Aegir\Provision\Context\PlatformContext;
use
Aegir\Provision\Context\ServerContext
;
use
Aegir\Provision\Context\SiteContext
;
use
Consolidation\AnnotatedCommand\CommandFileDiscovery
;
use
Symfony\Component\Console\Exception\LogicException
;
use
Symfony\Component\Console\Input\ArrayInput
;
use
Symfony\Component\Console\Input\InputInterface
;
use
Symfony\Component\Console\Input\InputDefinition
;
...
...
@@ -123,6 +124,10 @@ class ServicesCommand extends Command
// If server, ask which service type.
if
(
$this
->
context
->
type
==
'server'
)
{
if
(
empty
(
$this
->
context
->
getServiceTypeOptions
(
$service
)))
{
throw
new
\Exception
(
"There was no class found for service
$service
. Create one named
\\
Aegir
\\
Provision
\\
Service
\\
{
$service
}
Service"
);
}
$service_type
=
$this
->
io
->
choice
(
'Which service type?'
,
$this
->
context
->
getServiceTypeOptions
(
$service
));
// Then ask for all options.
...
...
@@ -137,6 +142,10 @@ class ServicesCommand extends Command
}
// All other context types are associating with servers that provide the service.
else
{
if
(
empty
(
$this
->
getApplication
()
->
getServerOptions
(
$service
)))
{
throw
new
\Exception
(
"No servers providing
$service
service were found. Create one with `provision save` or use `provision services` to add to an existing server."
);
}
$server
=
$this
->
io
->
choice
(
'Which server?'
,
$this
->
getApplication
()
->
getServerOptions
(
$service
));
// Then ask for all options.
...
...
src/Context.php
View file @
c8625f17
...
...
@@ -133,6 +133,12 @@ class Context
$this
->
services
[
strtolower
(
$service_name
)]
=
new
$service_class
(
$service
,
$this
);
}
}
elseif
(
isset
(
$this
->
config
[
'service_subscriptions'
]))
{
foreach
(
$this
->
config
[
'service_subscriptions'
]
as
$service_name
=>
$service
)
{
$this
->
servers
[
$service_name
]
=
$server
=
$this
->
application
->
getContext
(
$service
[
'server'
]);
$this
->
services
[
$service_name
]
=
new
ServiceSubscription
(
$this
,
$server
,
$service_name
);
}
}
else
{
$this
->
services
=
[];
}
...
...
@@ -151,8 +157,11 @@ class Context
$discovery
->
setSearchPattern
(
'*Service.php'
);
$servicesFiles
=
$discovery
->
discover
(
__DIR__
.
'/Service'
,
'\Aegir\Provision\Service'
);
foreach
(
$servicesFiles
as
$serviceClass
)
{
// If this is a server, show all services. If it is not, but service allows this type of context, load it.
if
(
$this
->
type
==
'server'
||
in_array
(
$this
->
type
,
$serviceClass
::
allowedContexts
()))
{
$classes
[
$serviceClass
::
SERVICE
]
=
$serviceClass
;
}
}
if
(
$service
&&
isset
(
$classes
[
$service
]))
{
return
$classes
[
$service
];
...
...
@@ -334,9 +343,24 @@ class Context
*/
public
function
showServices
(
DrupalStyle
$io
)
{
if
(
!
empty
(
$this
->
getServices
()))
{
$is_server
=
$this
->
type
==
'server'
;
$rows
=
[];
$headers
=
$is_server
?
[
'Services'
]
:
[
'Service'
,
'Server'
,
'Type'
];
foreach
(
$this
->
getServices
()
as
$name
=>
$service
)
{
if
(
$is_server
)
{
$rows
[]
=
[
$name
,
$service
->
type
];
}
else
{
$rows
[]
=
[
$name
,
$service
->
server
->
name
,
$service
->
server
->
getService
(
$name
)
->
type
];
}
// Show all properties.
if
(
!
empty
(
$service
->
properties
))
{
...
...
@@ -345,7 +369,7 @@ class Context
}
}
}
$io
->
table
(
[
'Services'
]
,
$rows
);
$io
->
table
(
$headers
,
$rows
);
}
}
...
...
@@ -413,7 +437,23 @@ class Context
return
'\Aegir\Provision\Context\\'
.
ucfirst
(
$type
)
.
"Context"
;
}
// public function verify() {
// return "Provision Context";
// }
/**
* Verify this context.
*
* Running `provision verify CONTEXT` triggers this method.
*
* Collect all services for the context and run the verify() method on them
*/
public
function
verify
()
{
return
"Provision Context"
;
// Run verify method on all services.
foreach
(
$this
->
getServices
()
as
$service
)
{
$service
->
verify
();
}
}
}
src/Context/PlatformContext.php
View file @
c8625f17
...
...
@@ -4,6 +4,7 @@ namespace Aegir\Provision\Context;
use
Aegir\Provision\Application
;
use
Aegir\Provision\Context
;
use
Aegir\Provision\Service\Http\Apache\Configuration\PlatformConfiguration
;
use
Symfony\Component\Config\Definition\ConfigurationInterface
;
/**
...
...
@@ -61,10 +62,10 @@ class PlatformContext extends Context implements ConfigurationInterface
return
$options
;
}
public
function
verify
()
{
parent
::
verify
();
$this
->
web_server
->
verify
(
);
return
"Platform Context Verified: "
.
$this
->
name
;
}
// @TODO: Remove. This should be handled by Services now.
//
public function verify() {
//
parent::verify();
//
$this->
logger->info('Verifying Web Server...'
);
//
$this->web_server->verify()
;
//
}
}
src/Context/ServerContext.php
View file @
c8625f17
...
...
@@ -36,14 +36,4 @@ class ServerContext extends Context implements ConfigurationInterface
return
$options
;
}
public
function
verify
()
{
// Run verify method on all services.
foreach
(
$this
->
getServices
()
as
$service
)
{
$service
->
verify
();
}
return
"Server Context Verified: "
.
$this
->
name
;
}
}
src/Context/SiteContext.php
View file @
c8625f17
...
...
@@ -33,15 +33,18 @@ class SiteContext extends Context implements ConfigurationInterface
parent
::
__construct
(
$name
,
$console_config
,
$application
,
$options
);
// Load "db_server" context.
if
(
isset
(
$this
->
config
[
'
db_
serv
er
'
]))
{
$this
->
db_server
=
$application
->
getContext
(
$this
->
config
[
'service_subscriptions'
][
'db'
][
'server'
]);
$this
->
db_server
->
logger
=
$application
->
logger
;
//
if (isset($this->config['serv
ice_subscriptions']['db
'])) {
//
$this->db_server = $application->getContext($this->config['service_subscriptions']['db']['server']);
//
}
$this
->
platform
=
$application
->
getContext
(
$this
->
config
[
'platform'
]);
}
else
{
throw
new
\Exception
(
'No db_server found.'
);
$this
->
logger
=
$application
->
logger
;
if
(
isset
(
$this
->
config
[
'platform'
]))
{
$this
->
platform
=
$application
->
getContext
(
$this
->
config
[
'platform'
]
);
}
}
static
function
option_documentation
()
...
...
@@ -63,12 +66,11 @@ class SiteContext extends Context implements ConfigurationInterface
public
function
verify
()
{
parent
::
verify
();
$this
->
db_server
->
verify
();
$this
->
platform
->
verify
();
// @TODO: Write VHOST!
// $this->db_server->service('db')->verify();
// $this->platform->verify();
return
"Site Context Verified: "
.
$this
->
name
;
//
return "Site Context Verified: " . $this->name;
}
// /**
...
...
src/Service.php
View file @
c8625f17
...
...
@@ -28,6 +28,14 @@ class Service {
$this
->
writeConfigurations
();
}
/**
* List context types that are allowed to subscribe to this service.
* @return array
*/
static
function
allowedContexts
()
{
return
[];
}
/**
* Write this service's configurations.
*/
...
...
@@ -35,6 +43,7 @@ class Service {
if
(
empty
(
$this
->
getConfigurations
()[
$this
->
context
->
type
]))
{
return
;
}
$this
->
context
->
application
->
logger
->
info
(
'CONTEXT '
.
$this
->
context
->
type
);
foreach
(
$this
->
getConfigurations
()[
$this
->
context
->
type
]
as
$configuration_class
)
{
$config
=
new
$configuration_class
(
$this
->
context
,
$this
);
$config
->
write
();
...
...
src/Service/DbService.php
View file @
c8625f17
...
...
@@ -37,6 +37,16 @@ class DbService extends Service
];
}
/**
* List context types that are allowed to subscribe to this service.
* @return array
*/
static
function
allowedContexts
()
{
return
[
'site'
];
}
/**
* Implements Service::server_options()
*
...
...
src/Service/Http/Apache/Configuration/SiteConfiguration.php
View file @
c8625f17
...
...
@@ -22,12 +22,18 @@ class SiteConfiguration extends Configuration {
function
filename
()
{
if
(
drush_get_option
(
'provision_apache_conf_suffix'
,
FALSE
))
{
return
$this
->
data
[
'http_vhostd_path'
]
.
'/'
.
$this
->
uri
.
'.conf'
;
}
else
{
return
$this
->
data
[
'http_vhostd_path'
]
.
'/'
.
$this
->
uri
;
}
$file
=
$this
->
uri
.
'.conf'
;
// return $this->service->properties['http_platformd_path'] . '/' . ltrim($this->context->name, '@') . '.conf';
return
$this
->
context
->
console_config
[
'config_path'
]
.
'/'
.
$this
->
context
->
name
.
'/'
.
$file
;
// return $this->context->config['config_path'];
// if (drush_get_option('provision_apache_conf_suffix', FALSE)) {
// return $this->data['http_vhostd_path'] . '/' . $this->uri . '.conf';
// }
// else {
// return $this->data['http_vhostd_path'] . '/' . $this->uri;
// }
}
function
process
()
{
...
...
@@ -49,5 +55,16 @@ class SiteConfiguration extends Configuration {
$this
->
template
=
$this
->
disabled_template
;
}
$app_dir
=
$this
->
context
->
console_config
[
'config_path'
]
.
'/'
.
$this
->
service
->
getType
();
// $this->data['http_port'] = $this->service->properties['http_port'];
// $this->data['include_statement'] = '# INCLUDE STATEMENT';
// $this->data['http_pred_path'] = "{$app_dir}/pre.d";
// $this->data['http_postd_path'] = "{$app_dir}/post.d";
// $this->data['http_platformd_path'] = "{$app_dir}/platform.d";
// $this->data['extra_config'] = "";
$this
->
data
[
'http_vhostd_path'
]
=
"
{
$app_dir
}
/vhost.d"
;
}
}
\ No newline at end of file
src/Service/HttpService.php
View file @
c8625f17
...
...
@@ -41,6 +41,16 @@ class HttpService extends Service {
];
}
/**
* List context types that are allowed to subscribe to this service.
* @return array
*/
static
function
allowedContexts
()
{
return
[
'platform'
];
}
/**
* Support the ability to cloak the database credentials using environment variables.
*/
...
...
src/ServiceSubscription.php
0 → 100644
View file @
c8625f17
<?php
/**
* @file
* A context's subscription to a service. Handles properties specific to a
* context for each service.
*
* @see Provision_Service
*/
namespace
Aegir\Provision
;
class
ServiceSubscription
{
public
$context
;
public
$service
;
public
$server
;
public
$type
;
function
__construct
(
$context
,
$server
,
$service_name
)
{
$this
->
context
=
$context
;
$this
->
server
=
$server
;
$this
->
service
=
$server
->
getService
(
$service_name
);
$this
->
type
=
$server
->
getService
(
$service_name
)
->
type
;
}
}