mirror of
https://github.com/nextcloud/all-in-one.git
synced 2025-12-20 06:26:57 +00:00
Initial import
This commit is contained in:
commit
2295a33590
884 changed files with 93939 additions and 0 deletions
136
php/src/ContainerDefinitionFetcher.php
Normal file
136
php/src/ContainerDefinitionFetcher.php
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
<?php
|
||||
|
||||
namespace AIO;
|
||||
|
||||
use AIO\Container\Container;
|
||||
use AIO\Container\ContainerEnvironmentVariables;
|
||||
use AIO\Container\ContainerPorts;
|
||||
use AIO\Container\ContainerInternalPorts;
|
||||
use AIO\Container\ContainerVolume;
|
||||
use AIO\Container\ContainerVolumes;
|
||||
use AIO\Container\State\RunningState;
|
||||
use AIO\Data\ConfigurationManager;
|
||||
use AIO\Data\DataConst;
|
||||
use AIO\Docker\DockerActionManager;
|
||||
|
||||
class ContainerDefinitionFetcher
|
||||
{
|
||||
private ConfigurationManager $configurationManager;
|
||||
private \DI\Container $container;
|
||||
|
||||
public function __construct(
|
||||
ConfigurationManager $configurationManager,
|
||||
\DI\Container $container
|
||||
)
|
||||
{
|
||||
$this->configurationManager = $configurationManager;
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
public function GetContainerById(string $id): ?Container
|
||||
{
|
||||
$containers = $this->FetchDefinition();
|
||||
|
||||
foreach ($containers as $container) {
|
||||
if ($container->GetIdentifier() === $id) {
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function GetDefinition(bool $latest): array
|
||||
{
|
||||
$data = json_decode(file_get_contents(__DIR__ . '/../containers.json'), true);
|
||||
|
||||
$containers = [];
|
||||
foreach ($data['production'] as $entry) {
|
||||
$ports = new ContainerPorts();
|
||||
foreach ($entry['ports'] as $port) {
|
||||
$ports->AddPort($port);
|
||||
}
|
||||
|
||||
$internalPorts = new ContainerInternalPorts();
|
||||
foreach ($entry['internalPorts'] as $internalPort) {
|
||||
$internalPorts->AddInternalPort($internalPort);
|
||||
}
|
||||
|
||||
$volumes = new ContainerVolumes();
|
||||
foreach ($entry['volumes'] as $value) {
|
||||
if($value['name'] === '%BORGBACKUP_HOST_LOCATION%') {
|
||||
$value['name'] = $this->configurationManager->GetBorgBackupHostLocation();
|
||||
if($value['name'] === '') {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$volumes->AddVolume(
|
||||
new ContainerVolume(
|
||||
$value['name'],
|
||||
$value['location'],
|
||||
$value['writeable']
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$variables = new ContainerEnvironmentVariables();
|
||||
foreach ($entry['environmentVariables'] as $value) {
|
||||
$variables->AddVariable($value);
|
||||
}
|
||||
|
||||
$containers[] = new Container(
|
||||
$entry['identifier'],
|
||||
$entry['displayName'],
|
||||
$entry['containerName'],
|
||||
$entry['restartPolicy'],
|
||||
$entry['maxShutdownTime'],
|
||||
$ports,
|
||||
$internalPorts,
|
||||
$volumes,
|
||||
$variables,
|
||||
$entry['dependsOn'],
|
||||
$entry['secrets'],
|
||||
$this->container->get(DockerActionManager::class)
|
||||
);
|
||||
}
|
||||
|
||||
return $containers;
|
||||
}
|
||||
|
||||
public function FetchDefinition(): array
|
||||
{
|
||||
if (!file_exists(DataConst::GetDataDirectory() . '/containers.json')) {
|
||||
$containers = $this->GetDefinition(true);
|
||||
} else {
|
||||
$containers = $this->GetDefinition(false);
|
||||
}
|
||||
|
||||
$borgBackupMode = $this->configurationManager->GetBorgBackupMode();
|
||||
$fetchLatest = false;
|
||||
|
||||
foreach ($containers as $container) {
|
||||
|
||||
if ($container->GetIdentifier() === 'nextcloud-aio-borgbackup') {
|
||||
if ($container->GetRunningState() === RunningState::class) {
|
||||
if ($borgBackupMode !== 'backup' && $borgBackupMode !== 'restore') {
|
||||
$fetchLatest = true;
|
||||
}
|
||||
} else {
|
||||
$fetchLatest = true;
|
||||
}
|
||||
|
||||
} elseif ($container->GetIdentifier() === 'nextcloud-aio-watchtower' && $container->GetRunningState() === RunningState::class) {
|
||||
return $containers;
|
||||
}
|
||||
}
|
||||
|
||||
if ($fetchLatest === true) {
|
||||
$containers = $this->GetDefinition(true);
|
||||
}
|
||||
|
||||
return $containers;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue