From d1ffed4a006bc9f8aeb0e8f63e8d2a160720b4f6 Mon Sep 17 00:00:00 2001 From: Alice Brooks Date: Thu, 12 Jun 2025 08:48:16 +0100 Subject: [PATCH] kdump: Remove nfs directory when using sysconfig configuration style This is because the sysconfig style only has the KDUMP_SAVEDIR field so we can't work with two path fields as it's impossible to extract them again --- pkg/kdump/kdump-client.js | 4 ++++ pkg/kdump/kdump-view.jsx | 24 +++++++++++++++--------- pkg/kdump/kdump.js | 6 ++++++ 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/pkg/kdump/kdump-client.js b/pkg/kdump/kdump-client.js index d4c3d989a42d..35add2554a39 100644 --- a/pkg/kdump/kdump-client.js +++ b/pkg/kdump/kdump-client.js @@ -48,6 +48,7 @@ export class KdumpClient { state: undefined, config: undefined, target: undefined, + sysconfig: undefined, }; cockpit.event_target(this); @@ -62,6 +63,7 @@ export class KdumpClient { // watch the config file this.configClient = new ConfigFile("/etc/kdump.conf", true); + this.state.sysconfig = false; this._watchConfigChanges(); this.configClient.wait().then(() => { @@ -69,6 +71,8 @@ export class KdumpClient { if (this.configClient.settings === null) { this.configClient.close(); this.configClient = new ConfigFileSUSE("/etc/sysconfig/kdump", true); + this.state.sysconfig = true; + this.dispatchEvent("kdumpSysconfigChanged", true); this._watchConfigChanges(); } }); diff --git a/pkg/kdump/kdump-view.jsx b/pkg/kdump/kdump-view.jsx index c6cc1e0d6bc6..8b5d74707e39 100644 --- a/pkg/kdump/kdump-view.jsx +++ b/pkg/kdump/kdump-view.jsx @@ -115,12 +115,15 @@ const exportAnsibleTask = (settings, os_release) => { return ansible; }; -function getLocation(target) { +function getLocation(target, sysconfig) { let path = target.path || DEFAULT_KDUMP_PATH; if (target.type === "ssh") { path = `${target.server}:${path}`; } else if (target.type == "nfs") { + if (sysconfig) { + path = ''; + } path = path[0] !== '/' ? '/' + path : path; path = `${target.server}:${target.export + path}`; } @@ -128,7 +131,7 @@ function getLocation(target) { return path; } -const KdumpSettingsModal = ({ settings, initialTarget, handleSave }) => { +const KdumpSettingsModal = ({ settings, initialTarget, handleSave, sysconfig }) => { const Dialogs = useDialogs(); const compressionAllowed = settings.compression?.allowed; const [isSaving, setIsSaving] = useState(false); @@ -276,13 +279,15 @@ const KdumpSettingsModal = ({ settings, initialTarget, handleSave }) => { placeholder="/export/cores" value={exportPath} onChange={(_event, value) => setExportPath(value)} isRequired /> + {sysconfig === false && setDirectory(value)} - isRequired /> + placeholder={DEFAULT_KDUMP_PATH} value={directory} + data-stored={directory} + onChange={(_event, value) => setDirectory(value)} + isRequired /> + } } @@ -353,7 +358,7 @@ export class KdumpPage extends React.Component { const target = this.props.kdumpStatus.target; let verifyMessage; if (!target.multipleTargets) { - const path = getLocation(target); + const path = getLocation(target, this.props.sysconfig); if (target.type === "local") { verifyMessage = fmt_to_fragments( ' ' + _("Results of the crash will be stored in $0 as $1, if kdump is properly configured."), @@ -403,7 +408,8 @@ export class KdumpPage extends React.Component { const Dialogs = this.context; Dialogs.show(); + handleSave={this.props.onSaveSettings} + sysconfig={this.props.sysconfig} />); } handleAutomationClick() { @@ -459,7 +465,7 @@ ${enableCrashKernel} if (target.multipleTargets) { kdumpLocation = _("invalid: multiple targets defined"); } else { - const locationPath = getLocation(target); + const locationPath = getLocation(target, this.props.sysconfig); if (target.type == "local") { kdumpLocation = cockpit.format(_("Local, $0"), locationPath); targetCanChange = true; diff --git a/pkg/kdump/kdump.js b/pkg/kdump/kdump.js index 1a143defef15..b0f75e88c220 100644 --- a/pkg/kdump/kdump.js +++ b/pkg/kdump/kdump.js @@ -41,6 +41,7 @@ const initStore = function(rootElement) { dataStore.domRootElement = rootElement; dataStore.kdumpClient = new kdumpClient.KdumpClient(); + dataStore.sysconfig = dataStore.kdumpClient.state.sysconfig; dataStore.saveSettings = settings => dataStore.kdumpClient.validateSettings(settings) @@ -74,6 +75,7 @@ const initStore = function(rootElement) { reservedMemory: dataStore.kdumpMemory, kdumpStatus: dataStore.kdumpStatus, kdumpCmdlineEnabled: dataStore.crashkernel || false, + sysconfig: dataStore.sysconfig, onSaveSettings: dataStore.saveSettings, onCrashKernel: dataStore.kdumpClient.crashKernel, exportConfig: dataStore.exportConfig, @@ -117,6 +119,10 @@ const initStore = function(rootElement) { dataStore.kdumpStatus = status; render(); }); + dataStore.kdumpClient.addEventListener('kdumpSysconfigChanged', function(event, sysconfig) { + dataStore.sysconfig = sysconfig; + render(); + }); // render once render();