/*
* SysDeck - Remote FS Panel (v0.0.35)
* Author: Jeremy Anderson (https://dcos.net)
*
* v0.0.35 directive: "then a remote fs manager such as ceph, and
* others but not nfs or amanada fs." Manages remote / distributed
* filesystem backends as systemd services and surfaces cluster
* status from each backend's CLI tool. Each backend card has
* Start / Stop / Restart controls + a cluster-info viewer.
*
* Backends shipped (see bridge/remotefs.py BACKEND_REGISTRY):
* Ceph — distributed object storage · LGPL-2.1
* GlusterFS — scale-out network filesystem · GPL-2.0
* MooseFS — distributed fault-tolerant FS · GPL-2.0
* BeeGFS — parallel cluster filesystem · BeeGFS EULA (free)
* OrangeFS — parallel FS (PVFS2 successor) · BSD-3
*
* EXCLUDED per directive — documented in the panel footer:
* NFS — kernel-builtin; no cluster; no remote-FS-as-data-store
* Amanda — backup system, not a remote/distributed filesystem
*
* Bridge surface (see shared/bridge.js → bridge.remotefs):
* summary() → {backends, totalBackends, installedCount, runningCount, excluded}
* status(id) → single-backend detail dict
* start(id) → {action, rc, success, output, stderr}
* stop(id) → same shape
* restart(id) → same shape
* clusterInfo(id) → backend-specific cluster status
*/
export async function mount(panel, { bridge, EventBus }) {
panel.innerHTML = renderSkeleton();
let summary = {};
try {
summary = await bridge.remotefs.summary();
} catch (err) {
panel.innerHTML = renderError(err);
return;
}
const backends = summary.backends || [];
const installed = backends.filter((b) => b.status !== 'uninstalled');
const running = backends.filter((b) => b.status === 'running');
panel.innerHTML = `
Distributed & cluster filesystem management
· ${summary.totalBackends || backends.length} backends supported
· ${summary.installedCount || installed.length} installed
· ${summary.runningCount || running.length} running
Remote Filesystems
Click 🔍 Cluster Info on a backend card above to
query its cluster status (ceph status --format=json,
gluster pool list, moosefs-cli info,
beegfs-ctl --listnodes, or
pvfs2-server -m). The output renders below.
(no cluster info requested yet)
No remote FS backends registered.
Not installed. ${escapeHtml(b.name)} is ${escapeHtml(b.license)} licensed — ${escapeHtml(b.homepage)}
${escapeHtml(b.installHint)}
| Status | ${statusBadge(b.status)} |
|---|---|
| Service | ${escapeHtml(b.serviceUnit || '—')} |
| CLI tool | ${escapeHtml(b.cli || '—')} |
| Default port | ${b.port} |
| Config | ${escapeHtml(b.configPath || '—')} |
| License | ${escapeHtml(b.license)} · ${escapeHtml(b.homepage)} |
Per v0.0.35 directive: "and others but not nfs or amanada fs." The following backends are intentionally excluded from this module:
| Backend | Reason |
|---|
${escapeHtml(String(err.message || err))}. Ensure the bridge helper is installed at /usr/lib/sysdeck/bridge/remotefs.py.