From 999fba2030fe19f1b76d7a8da0ba95590304a409 Mon Sep 17 00:00:00 2001 From: Mathieu <70369997+MathieuRA@users.noreply.github.com> Date: Fri, 18 Aug 2023 15:34:05 +0200 Subject: [PATCH] feat(xo-web/pool/advanced): ability to set a crash dump SR (#6973) Fixes #5060 --- CHANGELOG.unreleased.md | 3 +- packages/xo-server/src/api/pool.mjs | 8 +++++ packages/xo-server/src/xapi-object-to-xo.mjs | 1 + packages/xo-web/src/common/intl/messages.js | 1 + .../xo-web/src/xo-app/pool/tab-advanced.js | 32 ++++++++++++++++++- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 79f6dca4c..e09d1a9ab 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -9,6 +9,7 @@ - [Netbox] Synchronize VM tags [#5899](https://github.com/vatesfr/xen-orchestra/issues/5899) [Forum#6902](https://xcp-ng.org/forum/topic/6902) (PR [#6957](https://github.com/vatesfr/xen-orchestra/pull/6957)) - [REST API] Add support for `filter` and `limit` parameters to `backups/logs` and `restore/logs` collections [Forum#64789](https://xcp-ng.org/forum/post/64789) +- [Pool/Advanced] Ability to set a crash dump SR [#5060](https://github.com/vatesfr/xen-orchestra/issues/5060) (PR [#6973](https://github.com/vatesfr/xen-orchestra/pull/6973)) ### Bug fixes @@ -44,6 +45,6 @@ - xo-server minor - xo-server-auth-ldap patch - xo-server-netbox minor -- xo-web patch +- xo-web minor diff --git a/packages/xo-server/src/api/pool.mjs b/packages/xo-server/src/api/pool.mjs index 111799a17..288704fa3 100644 --- a/packages/xo-server/src/api/pool.mjs +++ b/packages/xo-server/src/api/pool.mjs @@ -20,6 +20,7 @@ export async function set({ backupNetwork, migrationNetwork, suspendSr, + crashDumpSr, }) { pool = this.getXapiObject(pool) @@ -29,6 +30,8 @@ export async function set({ migrationNetwork !== undefined && pool.update_other_config('xo:migrationNetwork', migrationNetwork), backupNetwork !== undefined && pool.update_other_config('xo:backupNetwork', backupNetwork), suspendSr !== undefined && pool.$call('set_suspend_image_SR', suspendSr === null ? Ref.EMPTY : suspendSr._xapiRef), + crashDumpSr !== undefined && + pool.$call('set_crash_dump_SR', crashDumpSr === null ? Ref.EMPTY : crashDumpSr._xapiRef), ]) } @@ -57,11 +60,16 @@ set.params = { type: ['string', 'null'], optional: true, }, + crashDumpSr: { + type: ['string', 'null'], + optional: true, + }, } set.resolve = { pool: ['id', 'pool', 'administrate'], suspendSr: ['suspendSr', 'SR', 'administrate'], + crashDumpSr: ['crashDumpSr', 'SR', 'administrate'], } // ------------------------------------------------------------------- diff --git a/packages/xo-server/src/xapi-object-to-xo.mjs b/packages/xo-server/src/xapi-object-to-xo.mjs index 2951f63ca..49f28bd88 100644 --- a/packages/xo-server/src/xapi-object-to-xo.mjs +++ b/packages/xo-server/src/xapi-object-to-xo.mjs @@ -98,6 +98,7 @@ const TRANSFORMS = { pool(obj) { const cpuInfo = obj.cpu_info return { + crashDumpSr: link(obj, 'crash_dump_SR'), current_operations: obj.current_operations, default_SR: link(obj, 'default_SR'), HA_enabled: Boolean(obj.ha_enabled), diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index 393b2c465..7b515b088 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -873,6 +873,7 @@ const messages = { srsTabName: 'SRs', // ----- Pool advanced tab ----- backupNetwork: 'Backup network', + crashDumpSr: 'Crash dump SR', poolEditAll: 'Edit all', poolHaStatus: 'High Availability', poolHaEnabled: 'Enabled', diff --git a/packages/xo-web/src/xo-app/pool/tab-advanced.js b/packages/xo-web/src/xo-app/pool/tab-advanced.js index fd8d9d4c0..f3b1c3cc2 100644 --- a/packages/xo-web/src/xo-app/pool/tab-advanced.js +++ b/packages/xo-web/src/xo-app/pool/tab-advanced.js @@ -5,7 +5,7 @@ import ActionButton from 'action-button' import ActionRowButton from 'action-row-button' import Component from 'base-component' import Icon from 'icon' -import renderXoItem, { Network } from 'render-xo-item' +import renderXoItem, { Network, Sr } from 'render-xo-item' import SelectFiles from 'select-files' import TabButton from 'tab-button' import Upgrade from 'xoa-upgrade' @@ -25,6 +25,7 @@ import { import { editPool, installSupplementalPackOnAllHosts, + isSrWritable, setHostsMultipathing, setPoolMaster, setRemoteSyslogHost, @@ -244,16 +245,27 @@ export default class TabAdvanced extends Component { _removeMigrationNetwork = () => editPool(this.props.pool, { migrationNetwork: null }) + _onChangeCrashDumpSr = sr => editPool(this.props.pool, { crashDumpSr: sr.id }) + + _onRemoveCrashDumpSr = () => editPool(this.props.pool, { crashDumpSr: null }) + _setRemoteSyslogHosts = () => setRemoteSyslogHosts(this.props.hosts, this.state.syslogDestination).then(() => this.setState({ editRemoteSyslog: false, syslogDestination: '' }) ) + _getCrashDumpSrPredicate = createSelector( + () => this.props.pool, + pool => sr => isSrWritable(sr) && sr.$pool === pool.id + ) + render() { const { backupNetwork, hosts, isAdmin, gpuGroups, pool, hostsByMultipathing, migrationNetwork } = this.props const { state } = this const { editRemoteSyslog } = state const { enabled: hostsEnabledMultipathing, disabled: hostsDisabledMultipathing } = hostsByMultipathing + const { crashDumpSr } = pool + const crashDumpSrPredicate = this._getCrashDumpSrPredicate() return (
@@ -343,6 +355,24 @@ export default class TabAdvanced extends Component { + + {_('crashDumpSr')} + + + {crashDumpSr !== undefined ? : _('noValue')} + {' '} + {crashDumpSr !== undefined && ( + + + + )} + +