diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index ea7caf3e5..2eb042c97 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -19,6 +19,7 @@ - [Plugin/load-balancer] Limit concurrent VM migrations to 2 (configurable) to avoid long paused VMs [#7084](https://github.com/vatesfr/xen-orchestra/issues/7084) (PR [#7297](https://github.com/vatesfr/xen-orchestra/pull/7297)) - [Tags] Admin can create colored tags (PR [#7262](https://github.com/vatesfr/xen-orchestra/pull/7262)) - [Tags] Add tooltips on `xo:no-bak` and `xo:notify-on-snapshot` tags (PR [#7335](https://github.com/vatesfr/xen-orchestra/pull/7335)) +- [VM] Custom notes [#5792](https://github.com/vatesfr/xen-orchestra/issues/5792) (PR [#7322](https://github.com/vatesfr/xen-orchestra/pull/7322)) ### Bug fixes diff --git a/packages/xo-server/src/api/vm.mjs b/packages/xo-server/src/api/vm.mjs index 5b480a07f..d5c5b6ff5 100644 --- a/packages/xo-server/src/api/vm.mjs +++ b/packages/xo-server/src/api/vm.mjs @@ -694,6 +694,8 @@ set.params = { name_description: { type: 'string', minLength: 0, optional: true }, + notes: { type: ['string', 'null'], maxLength: 2048, optional: true }, + high_availability: { optional: true, enum: getHaValues(), diff --git a/packages/xo-server/src/xapi-object-to-xo.mjs b/packages/xo-server/src/xapi-object-to-xo.mjs index 0f1a01d69..8e371d786 100644 --- a/packages/xo-server/src/xapi-object-to-xo.mjs +++ b/packages/xo-server/src/xapi-object-to-xo.mjs @@ -401,6 +401,7 @@ const TRANSFORMS = { installTime: metrics && toTimestamp(metrics.install_time), name_description: obj.name_description, name_label: obj.name_label, + notes: otherConfig['xo:notes'], other: otherConfig, os_version: (guestMetrics && guestMetrics.os_version) || null, parent: link(obj, 'parent'), diff --git a/packages/xo-server/src/xapi/mixins/vm.mjs b/packages/xo-server/src/xapi/mixins/vm.mjs index 20405c439..fa35291d7 100644 --- a/packages/xo-server/src/xapi/mixins/vm.mjs +++ b/packages/xo-server/src/xapi/mixins/vm.mjs @@ -382,6 +382,11 @@ const methods = { nameLabel: true, + notes: { + get: vm => vm.other_config['xo:notes'], + set: (value, vm) => vm.update_other_config('xo:notes', value), + }, + PV_args: true, tags: true, diff --git a/packages/xo-web/package.json b/packages/xo-web/package.json index 0712dd204..941342947 100644 --- a/packages/xo-web/package.json +++ b/packages/xo-web/package.json @@ -123,6 +123,7 @@ "relative-luminance": "^2.0.1", "reselect": "^2.5.4", "rimraf": "^5.0.1", + "sanitize-html": "^2.11.0", "sass": "^1.38.1", "semver": "^6.0.0", "strip-ansi": "^5.2.0", diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index ea466f242..f116edacf 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -1197,6 +1197,9 @@ const messages = { 'Enabling this will allow the VM to automatically install Citrix PV drivers from Windows Update. This only includes drivers, the Citrix management agent must still be separately installed.', windowsToolsModalWarning: 'If you have previously installed XCP-ng tools instead of Citrix tools, this option will break your VM.', + editVmNotes: 'Edit VM notes', + supportsMarkdown: 'Supports Markdown syntax', + vmNotesTooLong: 'VM notes cannot be longer than 2048 characters', // ----- VM stat tab ----- statsCpu: 'CPU usage', diff --git a/packages/xo-web/src/common/xo/edit-vm-notes-modal/index.js b/packages/xo-web/src/common/xo/edit-vm-notes-modal/index.js new file mode 100644 index 000000000..f01e8bae2 --- /dev/null +++ b/packages/xo-web/src/common/xo/edit-vm-notes-modal/index.js @@ -0,0 +1,36 @@ +import _ from 'intl' +import Icon from 'icon' +import clamp from 'lodash/clamp' +import Component from 'base-component' +import React from 'react' + +export default class EditVmNotesModalBody extends Component { + get value() { + return { notes: this.state.notes ?? this.props.vm.notes ?? '' } + } + + render() { + return ( +
+