Skip to content

Commit

Permalink
show error note if default daemon is not accessible (#102)
Browse files Browse the repository at this point in the history
Resolves: #100 

Check only default daemon connection the same as in ExApps management
page and show error note in admin settings.

Signed-off-by: Andrey Borysenko <andrey18106x@gmail.com>
  • Loading branch information
andrey18106 committed Oct 23, 2023
1 parent 86e67f1 commit 1a01267
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 22 deletions.
9 changes: 6 additions & 3 deletions lib/DeployActions/AIODockerActions.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,12 @@ public function isAIO(): bool {
* @return DaemonConfig|null
*/
public function registerAIODaemonConfig(): ?DaemonConfig {
$daemonConfig = $this->daemonConfigService->getDaemonConfigByName(self::AIO_DAEMON_CONFIG_NAME);
if ($daemonConfig !== null) {
return null;
$defaultDaemonConfig = $this->config->getAppValue(Application::APP_ID, 'default_daemon_config', '');
if ($defaultDaemonConfig !== '') {
$daemonConfig = $this->daemonConfigService->getDaemonConfigByName(self::AIO_DAEMON_CONFIG_NAME);
if ($daemonConfig !== null) {
return null;
}
}

$deployConfig = [
Expand Down
16 changes: 5 additions & 11 deletions lib/DeployActions/DockerActions.php
Original file line number Diff line number Diff line change
Expand Up @@ -574,14 +574,6 @@ private function buildDefaultExAppVolume(string $appId): array {
];
}

public function isDockerSocketAvailable(): bool {
$dockerSocket = '/var/run/docker.sock';
if (file_exists($dockerSocket) && is_readable($dockerSocket) && is_writable($dockerSocket)) {
return true;
}
return false;
}

/**
* Build ExApp container name (prefix + appid)
*
Expand All @@ -599,9 +591,11 @@ public function buildExAppVolumeName(string $appId): string {

public function registerDefaultDaemonConfig(): ?DaemonConfig {
$defaultDaemonConfig = $this->config->getAppValue(Application::APP_ID, 'default_daemon_config', '');
$daemonConfig = $this->daemonConfigService->getDaemonConfigByName($defaultDaemonConfig);
if ($daemonConfig !== null) {
return $daemonConfig;
if ($defaultDaemonConfig !== '') {
$daemonConfig = $this->daemonConfigService->getDaemonConfigByName($defaultDaemonConfig);
if ($daemonConfig !== null) {
return $daemonConfig;
}
}

$deployConfig = [
Expand Down
4 changes: 4 additions & 0 deletions lib/Service/DaemonConfigService.php
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,8 @@ public function updateDaemonConfig(DaemonConfig $daemonConfig): ?DaemonConfig {
return null;
}
}

public function defaultDaemonConfigAccessible() {

}
}
21 changes: 18 additions & 3 deletions lib/Settings/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use OCP\AppFramework\Services\IInitialState;
use OCP\IConfig;
use OCP\Settings\ISettings;
use Psr\Log\LoggerInterface;

class Admin implements ISettings {
private IInitialState $initialStateService;
Expand All @@ -23,6 +24,7 @@ class Admin implements ISettings {
private DockerActions $dockerActions;
private ExAppFetcher $exAppFetcher;
private AppAPIService $service;
private LoggerInterface $logger;

public function __construct(
IInitialState $initialStateService,
Expand All @@ -31,13 +33,15 @@ public function __construct(
DockerActions $dockerActions,
ExAppFetcher $exAppFetcher,
AppAPIService $service,
LoggerInterface $logger,
) {
$this->config = $config;
$this->initialStateService = $initialStateService;
$this->daemonConfigService = $daemonConfigService;
$this->dockerActions = $dockerActions;
$this->exAppFetcher = $exAppFetcher;
$this->service = $service;
$this->logger = $logger;
}

/**
Expand All @@ -59,13 +63,24 @@ public function getForm(): TemplateResponse {
'exAppsCount' => isset($daemonsExAppsCount[$daemonConfig->getName()]) ? $daemonsExAppsCount[$daemonConfig->getName()] : 0,
];
}, $this->daemonConfigService->getRegisteredDaemonConfigs());
$adminConfig = [
$adminInitialData = [
'daemons' => $daemons,
'default_daemon_config' => $this->config->getAppValue(Application::APP_ID, 'default_daemon_config', ''),
'docker_socket_accessible' => $this->dockerActions->isDockerSocketAvailable(),
'updates_count' => count($this->getExAppsWithUpdates()),
];
$this->initialStateService->provideInitialState('admin-config', $adminConfig);

$defaultDaemonConfigName = $this->config->getAppValue(Application::APP_ID, 'default_daemon_config', '');
if ($defaultDaemonConfigName !== '') {
$daemonConfig = $this->daemonConfigService->getDaemonConfigByName($defaultDaemonConfigName);
$this->dockerActions->initGuzzleClient($daemonConfig);
$daemonConfigAccessible = $this->dockerActions->ping($this->dockerActions->buildDockerUrl($daemonConfig));
$adminInitialData['daemon_config_accessible'] = $daemonConfigAccessible;
if (!$daemonConfigAccessible) {
$this->logger->error(sprintf('Deploy daemon "%s" is not accessible by Nextcloud. Please verify its configuration', $daemonConfig->getName()));
}
}

$this->initialStateService->provideInitialState('admin-initial-data', $adminInitialData);
return new TemplateResponse(Application::APP_ID, 'adminSettings');
}

Expand Down
9 changes: 4 additions & 5 deletions src/components/AdminSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@
<NcNoteCard type="warning">
<p>{{ t('app_api', 'Currently only Docker Daemon is supported.') }}</p>
</NcNoteCard>
<NcNoteCard v-if="!state?.docker_socket_accessible" type="error">
<p>{{ t('app_api', 'Default Docker socket (/var/run/docker.sock) is not accessible.') }}</p>
<p>{{ t('app_api', 'Please, make sure that docker is installed on server and webserver user have enough rights to it.') }}</p>
<NcNoteCard v-if="state.default_daemon_config !== '' && !state?.daemon_config_accessible" type="error">
<p>{{ t('app_api', 'Default Deploy Daemon is not accessible. Please verify its configuration') }}</p>
</NcNoteCard>
<DaemonConfigList :daemons.sync="daemons" :default-daemon.sync="default_daemon_config" :save-options="saveOptions" />
</NcSettingsSection>
Expand Down Expand Up @@ -65,7 +64,7 @@ export default {
},
data() {
return {
state: loadState('app_api', 'admin-config'),
state: loadState('app_api', 'admin-initial-data'),
daemons: [],
default_daemon_config: '',
docker_socket_accessible: false,
Expand All @@ -81,7 +80,7 @@ export default {
},
methods: {
loadInitialState() {
const state = loadState('app_api', 'admin-config')
const state = loadState('app_api', 'admin-initial-data')
this.daemons = state.daemons
this.default_daemon_config = state.default_daemon_config
this.docker_socket_accessible = state.docker_socket_accessible
Expand Down

0 comments on commit 1a01267

Please sign in to comment.