Merge pull request #3459 from nextcloud/enh/noid/allow-to-set-aio-variables

This commit is contained in:
Simon L 2023-10-02 15:03:14 +02:00 committed by GitHub
commit 88cae17035
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 1 deletions

View file

@ -83,6 +83,13 @@
} }
} }
}, },
"aio_variables": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z_-a-z]+=.*$"
}
},
"restart": { "restart": {
"type": "string", "type": "string",
"pattern": "^unless-stopped$" "pattern": "^unless-stopped$"

View file

@ -0,0 +1,19 @@
<?php
namespace AIO\Container;
class AioVariables {
/** @var string[] */
private array $variables = [];
public function AddVariable(string $variable) : void {
$this->variables[] = $variable;
}
/**
* @return string[]
*/
public function GetVariables() : array {
return $this->variables;
}
}

View file

@ -34,6 +34,7 @@ class Container {
private array $tmpfs; private array $tmpfs;
private bool $init; private bool $init;
private string $imageTag; private string $imageTag;
private AioVariables $aioVariables;
private DockerActionManager $dockerActionManager; private DockerActionManager $dockerActionManager;
public function __construct( public function __construct(
@ -58,6 +59,7 @@ class Container {
array $tmpfs, array $tmpfs,
bool $init, bool $init,
string $imageTag, string $imageTag,
AioVariables $aioVariables,
DockerActionManager $dockerActionManager DockerActionManager $dockerActionManager
) { ) {
$this->identifier = $identifier; $this->identifier = $identifier;
@ -81,6 +83,7 @@ class Container {
$this->tmpfs = $tmpfs; $this->tmpfs = $tmpfs;
$this->init = $init; $this->init = $init;
$this->imageTag = $imageTag; $this->imageTag = $imageTag;
$this->aioVariables = $aioVariables;
$this->dockerActionManager = $dockerActionManager; $this->dockerActionManager = $dockerActionManager;
} }
@ -186,4 +189,8 @@ class Container {
public function GetEnvironmentVariables() : ContainerEnvironmentVariables { public function GetEnvironmentVariables() : ContainerEnvironmentVariables {
return $this->containerEnvironmentVariables; return $this->containerEnvironmentVariables;
} }
public function GetAioVariables() : AioVariables {
return $this->aioVariables;
}
} }

View file

@ -2,6 +2,7 @@
namespace AIO; namespace AIO;
use AIO\Container\AioVariables;
use AIO\Container\Container; use AIO\Container\Container;
use AIO\Container\ContainerEnvironmentVariables; use AIO\Container\ContainerEnvironmentVariables;
use AIO\Container\ContainerPort; use AIO\Container\ContainerPort;
@ -54,6 +55,7 @@ class ContainerDefinitionFetcher
$additionalData = json_decode(file_get_contents($path), true); $additionalData = json_decode(file_get_contents($path), true);
$data = array_merge_recursive($data, $additionalData); $data = array_merge_recursive($data, $additionalData);
if (isset($additionalData['aio_services_v1'][0]['display_name']) && $additionalData['aio_services_v1'][0]['display_name'] !== '') { if (isset($additionalData['aio_services_v1'][0]['display_name']) && $additionalData['aio_services_v1'][0]['display_name'] !== '') {
// Store container_name of community containers in variable for later
$additionalContainerNames[] = $additionalData['aio_services_v1'][0]['container_name']; $additionalContainerNames[] = $additionalData['aio_services_v1'][0]['container_name'];
} }
} }
@ -168,9 +170,12 @@ class ContainerDefinitionFetcher
if (isset($entry['depends_on'])) { if (isset($entry['depends_on'])) {
$valueDependsOn = $entry['depends_on']; $valueDependsOn = $entry['depends_on'];
if ($entry['container_name'] === 'nextcloud-aio-apache') { if ($entry['container_name'] === 'nextcloud-aio-apache') {
// Add community containers first and default ones last so that aio_variables works correctly
$valueDependsOnTemp = [];
foreach ($additionalContainerNames as $containerName) { foreach ($additionalContainerNames as $containerName) {
$valueDependsOn[] = $containerName; $valueDependsOnTemp[] = $containerName;
} }
$valueDependsOn = array_merge_recursive($valueDependsOnTemp, $valueDependsOn);
} }
foreach ($valueDependsOn as $value) { foreach ($valueDependsOn as $value) {
if ($value === 'nextcloud-aio-clamav') { if ($value === 'nextcloud-aio-clamav') {
@ -217,6 +222,13 @@ class ContainerDefinitionFetcher
} }
} }
$aioVariables = new AioVariables();
if (isset($entry['aio_variables'])) {
foreach ($entry['aio_variables'] as $value) {
$aioVariables->AddVariable($value);
}
}
$displayName = ''; $displayName = '';
if (isset($entry['display_name'])) { if (isset($entry['display_name'])) {
$displayName = $entry['display_name']; $displayName = $entry['display_name'];
@ -314,6 +326,7 @@ class ContainerDefinitionFetcher
$tmpfs, $tmpfs,
$init, $init,
$imageTag, $imageTag,
$aioVariables,
$this->container->get(DockerActionManager::class) $this->container->get(DockerActionManager::class)
); );
} }

View file

@ -248,6 +248,15 @@ class DockerActionManager
$this->configurationManager->GetAndGenerateSecret($secret); $this->configurationManager->GetAndGenerateSecret($secret);
} }
$aioVariables = $container->GetAioVariables()->GetVariables();
foreach($aioVariables as $variable) {
$config = $this->configurationManager->GetConfig();
$variableArray = explode('=', $variable);
$config[$variableArray[0]] = $variableArray[1];
$this->configurationManager->WriteConfig($config);
sleep(1);
}
$envs = $container->GetEnvironmentVariables()->GetVariables(); $envs = $container->GetEnvironmentVariables()->GetVariables();
// Special thing for the nextcloud container // Special thing for the nextcloud container
if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') { if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {