From 395380ea2b320bec4708144522af9db743553c88 Mon Sep 17 00:00:00 2001 From: Simon L Date: Fri, 29 Sep 2023 21:44:12 +0200 Subject: [PATCH] allow to set aio_variables from containers.json Signed-off-by: Simon L --- php/containers-schema.json | 7 +++++++ php/src/Container/AioVariables.php | 19 +++++++++++++++++++ php/src/Container/Container.php | 7 +++++++ php/src/ContainerDefinitionFetcher.php | 15 ++++++++++++++- php/src/Docker/DockerActionManager.php | 9 +++++++++ 5 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 php/src/Container/AioVariables.php diff --git a/php/containers-schema.json b/php/containers-schema.json index 96789207..4d8e77a5 100644 --- a/php/containers-schema.json +++ b/php/containers-schema.json @@ -83,6 +83,13 @@ } } }, + "aio_variables": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[A-Z_-a-z]+=.*$" + } + }, "restart": { "type": "string", "pattern": "^unless-stopped$" diff --git a/php/src/Container/AioVariables.php b/php/src/Container/AioVariables.php new file mode 100644 index 00000000..10a150f4 --- /dev/null +++ b/php/src/Container/AioVariables.php @@ -0,0 +1,19 @@ +variables[] = $variable; + } + + /** + * @return string[] + */ + public function GetVariables() : array { + return $this->variables; + } +} diff --git a/php/src/Container/Container.php b/php/src/Container/Container.php index 335fdba0..30aa1f68 100644 --- a/php/src/Container/Container.php +++ b/php/src/Container/Container.php @@ -34,6 +34,7 @@ class Container { private array $tmpfs; private bool $init; private string $imageTag; + private AioVariables $aioVariables; private DockerActionManager $dockerActionManager; public function __construct( @@ -58,6 +59,7 @@ class Container { array $tmpfs, bool $init, string $imageTag, + AioVariables $aioVariables, DockerActionManager $dockerActionManager ) { $this->identifier = $identifier; @@ -81,6 +83,7 @@ class Container { $this->tmpfs = $tmpfs; $this->init = $init; $this->imageTag = $imageTag; + $this->aioVariables = $aioVariables; $this->dockerActionManager = $dockerActionManager; } @@ -186,4 +189,8 @@ class Container { public function GetEnvironmentVariables() : ContainerEnvironmentVariables { return $this->containerEnvironmentVariables; } + + public function GetAioVariables() : AioVariables { + return $this->aioVariables; + } } diff --git a/php/src/ContainerDefinitionFetcher.php b/php/src/ContainerDefinitionFetcher.php index c31760cc..a246083d 100644 --- a/php/src/ContainerDefinitionFetcher.php +++ b/php/src/ContainerDefinitionFetcher.php @@ -2,6 +2,7 @@ namespace AIO; +use AIO\Container\AioVariables; use AIO\Container\Container; use AIO\Container\ContainerEnvironmentVariables; use AIO\Container\ContainerPort; @@ -54,6 +55,7 @@ class ContainerDefinitionFetcher $additionalData = json_decode(file_get_contents($path), true); $data = array_merge_recursive($data, $additionalData); 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']; } } @@ -168,9 +170,12 @@ class ContainerDefinitionFetcher if (isset($entry['depends_on'])) { $valueDependsOn = $entry['depends_on']; 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) { - $valueDependsOn[] = $containerName; + $valueDependsOnTemp[] = $containerName; } + $valueDependsOn = array_merge_recursive($valueDependsOnTemp, $valueDependsOn); } foreach ($valueDependsOn as $value) { 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 = ''; if (isset($entry['display_name'])) { $displayName = $entry['display_name']; @@ -314,6 +326,7 @@ class ContainerDefinitionFetcher $tmpfs, $init, $imageTag, + $aioVariables, $this->container->get(DockerActionManager::class) ); } diff --git a/php/src/Docker/DockerActionManager.php b/php/src/Docker/DockerActionManager.php index 26cef960..66d45b5a 100644 --- a/php/src/Docker/DockerActionManager.php +++ b/php/src/Docker/DockerActionManager.php @@ -248,6 +248,15 @@ class DockerActionManager $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(); // Special thing for the nextcloud container if ($container->GetIdentifier() === 'nextcloud-aio-nextcloud') {