chore: fix spelling errors and typos in docs and comments (#8619)

This commit is contained in:
Josh Soref
2025-06-04 08:37:58 -04:00
committed by GitHub
parent 699f4e08a2
commit 0a378391a9
173 changed files with 341 additions and 341 deletions

View File

@@ -16,7 +16,7 @@ Returns a promise wich rejects as soon as a call to `iteratee` throws or a promi
- `concurrency`: a number which indicates the maximum number of parallel call to `iteratee`, defaults to `10`. The value `0` means no concurrency limit.
- `signal`: an abort signal to stop the iteration
- `stopOnError`: wether to stop iteration of first error, or wait for all calls to finish and throw an `AggregateError`, defaults to `true`
- `stopOnError`: whether to stop iteration of first error, or wait for all calls to finish and throw an `AggregateError`, defaults to `true`
```js
import { asyncEach } from '@vates/async-each'

View File

@@ -34,7 +34,7 @@ Returns a promise wich rejects as soon as a call to `iteratee` throws or a promi
- `concurrency`: a number which indicates the maximum number of parallel call to `iteratee`, defaults to `10`. The value `0` means no concurrency limit.
- `signal`: an abort signal to stop the iteration
- `stopOnError`: wether to stop iteration of first error, or wait for all calls to finish and throw an `AggregateError`, defaults to `true`
- `stopOnError`: whether to stop iteration of first error, or wait for all calls to finish and throw an `AggregateError`, defaults to `true`
```js
import { asyncEach } from '@vates/async-each'

View File

@@ -7,7 +7,7 @@
* @param {Array|Buffer|string} data1 - The first data array or buffer to compare.
* @param {T} data2 - The second data array or buffer to compare.
* @param {(index: number, diff: T) => void} [cb] - The callback function to invoke for each difference. If not provided, an array of differences will be returned.
* @returns {Array<number|T>|undefined} - An array of differences if no callback is provided, otherwise undefined.
* @returns {Array<number|T>|undefined} - An array of differences if no callback is provided; otherwise, undefined.
*/
module.exports = function diff(data1, data2, cb) {
let result

View File

@@ -14,7 +14,7 @@ import { deduped } from '@vates/disposable/deduped'
// the connection with the passed host will be established once at the first call, then, it will be shared with the next calls
const getConnection = deduped(async function (host)) {
const connection = new Connection(host)
return new Disposabe(connection, () => connection.close())
return new Disposable(connection, () => connection.close())
}, host => [host])
```

View File

@@ -32,7 +32,7 @@ import { deduped } from '@vates/disposable/deduped'
// the connection with the passed host will be established once at the first call, then, it will be shared with the next calls
const getConnection = deduped(async function (host)) {
const connection = new Connection(host)
return new Disposabe(connection, () => connection.close())
return new Disposable(connection, () => connection.close())
}, host => [host])
```

View File

@@ -28,7 +28,7 @@ fs.stat('autoexec.bat', function (e, stats) {
## API
- `fs = fatfs.createFileSystem(vol, [opts], [cb])` — Simply pass in a block driver (see below) mapped to a FAT partition somewhere, and get back the API documented [here](http://nodejs.org/api/fs.html). An options dictionary can be provided, details are in the next section. You may also optionally provide a callback `cb(err)` which will be automatically registered for the on `'ready'` or `'error'` event.
- `fs = fatfs.createFileSystem(vol, [opts], [cb])` — Simply pass in a block driver (see below) mapped to a FAT partition somewhere, and get back an instance of an [`fs`](http://nodejs.org/api/fs.html). An options dictionary can be provided, details are in the next section. You may also optionally provide a callback `cb(err)` which will be automatically registered for the on `'ready'` or `'error'` event.
- `'ready'` event — fired on `fs` when initial volume information has been determined and the API is ready to use. It is safe to call other `fs` methods before this fires **only if** you are sure the first sector will be readable and represents a valid FAT volume.
- `'error'` event — fired if initialization fails for whatever reason.
@@ -36,7 +36,7 @@ fs.stat('autoexec.bat', function (e, stats) {
The `opts` dictionary you pass to `fatfs.createFileSystem` can contain any of the following options:
- `ro` — Enables readonly mode if `true`. It defaults to `false`, but if your volume driver does not provide a `writeSectors` method it will be overriden to `true`.
- `ro` — Enables readonly mode if `true`. It defaults to `false`, but if your volume driver does not provide a `writeSectors` method it will be overridden to `true`.
- `noatime` — The FAT filesystem can track the last access time (just a date, actually) but this means every read operation would also incur some write overhead. Defaults to `true`, meaning by default access times will **not** be updated on reads. Set this to `false` to track access times.
- `modmode` — chooses how `fs.chmod` (and the mode field from `fs.stat`–family calls) should map FAT attributes to POSIX permissions. Set to the number `0111` to map the readonly flag to the user's write bit being unset, and the archive/system/hidden flags to the user/group/other executable bits respectively. Set to the number `07000` to map the readonly flag to _all_ write bits being unset, and the archive/system/hidden flags to the sticky/setgid/setuid bits respectively. Set to `null` for readonly mapping. Defaults to `0111`.
- `umask` — any bits _set_ in this octal number will be _unset_ in the 'mode' field from `fs.stat`–family calls. It does not affect anything else. Defaults to `process.umask()`, or `0022` if that is unavailable.
@@ -53,7 +53,7 @@ Well, sort of…
### Temporary
- **BETA** **BETA** **BETA**. Seriously, this is a _brand new_, _from scratch_, _completely unproven_ filesystem implementation. It does not have full automated test coverage, and it has not been manually tested very much either. Please please please **make sure you have a backup** of any important drive/image/card you unleash this upon.
- **BETA** **BETA** **BETA**. Seriously, this is a _brand new_, _from scratch_, _completely unproven_ filesystem implementation. It does not have full automated test coverage, and it has not been manually tested very much either. Please, please, please, **make sure you have a backup** of any important drive/image/card you unleash this upon.
- A few methods are not quite implemented, either: `fs.rename`, `fs.unlink` and `fs.rmdir`, as well as `fs.watchFile`/`fs.unwatchFile` and `fs.watch`. These are Coming Soon™.
- There are several internal housekeeping items (redundant FAT tables, extra FAT32 information, etc.) that are not done. These do not seem to affect interop, but you may see warnings when repairing a filesystem written by this module.
- Oh, and not to scare you, but if an IO error happens while writing, the library usually just bails — bubbling an error up to your callback as if it were a hot potato. Although some attempt has been made to do separate writes in the safest order (e.g. allocating an additional file cluster, then appending data into it, and then finally updating the file's size), but this behavior has not been thoroughly audited for all operations. There's certainly no attempt to retry/cleanup/rollback if a multi-step change runs into trouble partway through.

View File

@@ -29,7 +29,7 @@ The `remoteUrl` can be found using the following command from the XOA CLI, and t
`xo-server-db ls remote`
The `vhdPathInRemote` follows a file structure described [here](https://github.com/vatesfr/xen-orchestra/blob/master/%40xen-orchestra/backups/docs/VM%20backups/README.md).
The `vhdPathInRemote` follows a file structure described in [VM backups](https://github.com/vatesfr/xen-orchestra/blob/master/%40xen-orchestra/backups/docs/VM%20backups/README.md).
## Restore a file from a VHD using `fuse-vhd` CLI
@@ -42,7 +42,7 @@ The `vhdPathInRemote` follows a file structure described [here](https://github.c
`partx --bytes --output=NR,START,SIZE,NAME,UUID,TYPE --pairs <mountedVhdPath>`
4. Mount the disk. Depending on the partition type, you may need to add some additionnal options. The `norecovery` option is used for ext3/ext4/xfs file systems, otherwise remove this option.
4. Mount the disk. Depending on the partition type, you may need to add some additional options. The `norecovery` option is used for ext3/ext4/xfs file systems; otherwise, remove this option.
`mount --options=loop,ro,norecovery,sizelimit=<SIZE>,offset=<START*512> --source=<mountedVhdPath> --target=<diskMountPoint>`

View File

@@ -45,7 +45,7 @@ The `remoteUrl` can be found using the following command from the XOA CLI, and t
`xo-server-db ls remote`
The `vhdPathInRemote` follows a file structure described [here](https://github.com/vatesfr/xen-orchestra/blob/master/%40xen-orchestra/backups/docs/VM%20backups/README.md).
The `vhdPathInRemote` follows a file structure described in [VM backups](https://github.com/vatesfr/xen-orchestra/blob/master/%40xen-orchestra/backups/docs/VM%20backups/README.md).
## Restore a file from a VHD using `fuse-vhd` CLI
@@ -58,7 +58,7 @@ The `vhdPathInRemote` follows a file structure described [here](https://github.c
`partx --bytes --output=NR,START,SIZE,NAME,UUID,TYPE --pairs <mountedVhdPath>`
4. Mount the disk. Depending on the partition type, you may need to add some additionnal options. The `norecovery` option is used for ext3/ext4/xfs file systems, otherwise remove this option.
4. Mount the disk. Depending on the partition type, you may need to add some additional options. The `norecovery` option is used for ext3/ext4/xfs file systems; otherwise, remove this option.
`mount --options=loop,ro,norecovery,sizelimit=<SIZE>,offset=<START*512> --source=<mountedVhdPath> --target=<diskMountPoint>`

View File

@@ -32,12 +32,12 @@ const wrappedGenerator = new Throttle(sourceGenerator, speed)
Fork a generator. The rules ares:
- if the source returns, all the forks returns
- if the forks errors, all the forks errors with the same error
- if a the fork return , it is stopped, but the generator continue with the other
- if a the fork error , it is stopped, but the generator continue with the other
- if all the fork return , the source is stopped
- if all the fork error , the source is errored with the last error
- if the source returns, all the forks return
- if the forks error, all the forks error with the same error
- if a fork returns, it is stopped, but the generator continue with the other
- if a fork errors, it is stopped, but the generator continue with the other
- if all the forks return, the source is stopped
- if all the forks error, the source is errored with the last error
- the source start producing a packet when the fastest forked ask for it
- the source forks get the packet only when all the forks asked for it, no buffer stores in memory

View File

@@ -48,12 +48,12 @@ const wrappedGenerator = new Throttle(sourceGenerator, speed)
Fork a generator. The rules ares:
- if the source returns, all the forks returns
- if the forks errors, all the forks errors with the same error
- if a the fork return , it is stopped, but the generator continue with the other
- if a the fork error , it is stopped, but the generator continue with the other
- if all the fork return , the source is stopped
- if all the fork error , the source is errored with the last error
- if the source returns, all the forks return
- if the forks error, all the forks errors with the same error
- if a fork returns, it is stopped, but the generator continue with the other
- if a fork errors, it is stopped, but the generator continue with the other
- if all the forks return, the source is stopped
- if all the forks error, the source is errored with the last error
- the source start producing a packet when the fastest forked ask for it
- the source forks get the packet only when all the forks asked for it, no buffer stores in memory

View File

@@ -1,4 +1,4 @@
The use for this librariy is to create a composite key from a JSON value, ignoring objects identity and properties order.
The use for this library is to create a composite key from a JSON value, ignoring objects identity and properties order.
The hash algorithm used is intended to be fast and with low collisions and is not guaranteed to be be secure.

View File

@@ -16,7 +16,7 @@ npm install --save @vates/json-hash
## Usage
The use for this librariy is to create a composite key from a JSON value, ignoring objects identity and properties order.
The use for this library is to create a composite key from a JSON value, ignoring objects identity and properties order.
The hash algorithm used is intended to be fast and with low collisions and is not guaranteed to be be secure.

View File

@@ -1,6 +1,6 @@
export const INIT_PASSWD = Buffer.from('NBDMAGIC') // "NBDMAGIC" ensure we're connected to a nbd server
export const OPTS_MAGIC = Buffer.from('IHAVEOPT') // "IHAVEOPT" start an option block
export const NBD_OPT_REPLY_MAGIC = 1100100111001001n // magic received during negociation
export const NBD_OPT_REPLY_MAGIC = 1100100111001001n // magic received during negotiation
export const NBD_OPT_EXPORT_NAME = 1
export const NBD_OPT_ABORT = 2
export const NBD_OPT_LIST = 3

View File

@@ -43,9 +43,9 @@ export default class NbdClient {
// AFAIK, there is no guaranty the server answers in the same order as the queries
// so we handle a backlog of command waiting for response and handle concurrency manually
#waitingForResponse // there is already a listenner waiting for a response
#waitingForResponse // there is already a listener waiting for a response
#nextCommandQueryId = BigInt(0)
#commandQueryBacklog // map of command waiting for an response queryId => { size/*in byte*/, resolve, reject}
#commandQueryBacklog // map of command waiting for a response queryId => { size/*in byte*/, resolve, reject}
#connected = false
#reconnectingPromise
@@ -196,7 +196,7 @@ export default class NbdClient {
}
// send export name we want to access.
// it's implictly closing the negociation phase.
// it's implicitly closing the negotiation phase.
await this.#write(OPTS_MAGIC)
await this.#writeInt32(NBD_OPT_EXPORT_NAME)
const exportNameBuffer = Buffer.from(this.#exportName)

View File

@@ -24,7 +24,7 @@ $ npm install node-vsphere-soap --save
## Sample Code
### To connect to a vCenter server:
### To connect to a vCenter server
var nvs = require('node-vsphere-soap');
var vc = new nvs.Client(host, user, password, sslVerify);
@@ -54,7 +54,7 @@ $ npm install node-vsphere-soap --save
- userName - username of authenticated user
- fullName - full name of authenticated user
### To run a command:
### To run a command
var vcCmd = vc.runCommand( commandToRun, arguments );
vcCmd.once('result', function( result, raw, soapHeader) {

View File

@@ -7,7 +7,7 @@
This file creates the Client class
- when the class is instantiated, a connection will be made to the ESXi/vCenter server to verify that the creds are good
- upon a bad login, the connnection will be terminated
- upon a bad login, the connection will be terminated
*/

View File

@@ -1,6 +1,6 @@
### Usual workflow
> This section presents how this library should be used to implement a classic two factor authentification.
> This section presents how this library should be used to implement a classic two factor authentication.
#### Setup

View File

@@ -18,7 +18,7 @@ npm install --save @vates/otp
### Usual workflow
> This section presents how this library should be used to implement a classic two factor authentification.
> This section presents how this library should be used to implement a classic two factor authentication.
#### Setup

View File

@@ -63,16 +63,16 @@ task.failure(error)
Inside a task:
```js
// the abort signal of the current task if any, otherwise is `undefined`
// the abort signal of the current task if any; otherwise, is `undefined`
Task.abortSignal
// sends an info on the current task if any, otherwise does nothing
// sends an info on the current task if any; otherwise, does nothing
Task.info(message, data)
// sends an info on the current task if any, otherwise does nothing
// sends an info on the current task if any; otherwise, does nothing
Task.warning(message, data)
// attaches a property to the current task if any, otherwise does nothing
// attaches a property to the current task if any; otherwise, does nothing
//
// the latest value takes precedence
//
@@ -149,7 +149,7 @@ const onProgress = makeOnProgress({
// This function is called each time a root task or a subtask is updated.
//
// `taskLog.$root` can be used to uncondionally access the root task.
// `taskLog.$root` can be used to unconditionally access the root task.
onTaskUpdate(taskLog) {},
})

View File

@@ -79,16 +79,16 @@ task.failure(error)
Inside a task:
```js
// the abort signal of the current task if any, otherwise is `undefined`
// the abort signal of the current task if any; otherwise, is `undefined`
Task.abortSignal
// sends an info on the current task if any, otherwise does nothing
// sends an info on the current task if any; otherwise, does nothing
Task.info(message, data)
// sends an info on the current task if any, otherwise does nothing
// sends an info on the current task if any; otherwise, does nothing
Task.warning(message, data)
// attaches a property to the current task if any, otherwise does nothing
// attaches a property to the current task if any; otherwise, does nothing
//
// the latest value takes precedence
//
@@ -165,7 +165,7 @@ const onProgress = makeOnProgress({
// This function is called each time a root task or a subtask is updated.
//
// `taskLog.$root` can be used to uncondionally access the root task.
// `taskLog.$root` can be used to unconditionally access the root task.
onTaskUpdate(taskLog) {},
})

View File

@@ -20,7 +20,7 @@ function main([inputPath = 0]) {
try {
data = JSON.parse(input)
} catch (error) {
// fallback to XML
// fall back to XML
log(parseXml(input))
return
}

View File

@@ -168,13 +168,13 @@ export class ImportVmBackup {
vdis[vdiRef].baseVdi = snapshotCandidate
} catch (error) {
// can be a broken VHD chain, a vhd chain with a key backup, ....
// not an irrecuperable error, don't dispose parentVhd, and fallback to full restore
// not an irrecuperable error, don't dispose parentVhd, and fall back to full restore
warn(`can't use differential restore`, { error })
descendant?.close()
negativeDisk?.close()
}
}
// didn't make a negative stream : fallback to classic stream
// didn't make a negative stream : fall back to classic stream
if (disk === undefined) {
debug('use legacy restore')
disk = parent

View File

@@ -205,7 +205,7 @@ export class RemoteAdapter {
})
}
// check if we will be allowed to merge a a vhd created in this adapter
// check if we will be allowed to merge a vhd created in this adapter
// with the vhd at path `path`
async isMergeableParent(packedParentUid, path) {
return await Disposable.use(VhdSynthetic.fromVhdChain(this.handler, path), vhd => {
@@ -776,7 +776,7 @@ export class RemoteAdapter {
let json
let isImmutable = false
let remoteIsImmutable = false
// if the remote is immutable, check if this metadatas are also immutables
// if the remote is immutable, check if this metadata is also immutable
try {
// this file is not encrypted
await this._handler._readFile(IMMUTABILTY_METADATA_FILENAME)
@@ -792,7 +792,7 @@ export class RemoteAdapter {
json = await this.handler.readFile(path, { flag: 'r+' })
// s3 handler don't respect flags
} catch (err) {
// retry without triggerring immutbaility check ,only on immutable remote
// retry without triggering immutability check ,only on immutable remote
if (err.code === 'EPERM' && remoteIsImmutable) {
isImmutable = true
json = await this._handler.readFile(path, { flag: 'r' })

View File

@@ -24,7 +24,7 @@ export class RestoreMetadataBackup {
const dataFileName = resolve('/', backupId, metadata.data ?? 'data.json').slice(1)
const data = await handler.readFile(dataFileName)
// if data is JSON, sent it as a plain string, otherwise, consider the data as binary and encode it
// if data is JSON, sent it as a plain string; otherwise, consider the data as binary and encode it
const isJson = dataFileName.endsWith('.json')
return isJson ? data.toString() : { encoding: 'base64', data: data.toString('base64') }
}

View File

@@ -132,7 +132,7 @@ test('it remove vhd with missing or multiple ancestors', async () => {
const deletedOrphanVhd = loggued.match(/deleting orphan VHD/g) || []
assert.equal(deletedOrphanVhd.length, 1) // only one vhd should have been deleted
// we don't test the filew on disk, since they will all be marker as unused and deleted without a metadata.json file
// we don't test the file on disk, since they will all be marker as unused and deleted without a metadata.json file
})
test('it remove backup meta data referencing a missing vhd in delta backup', async () => {
@@ -287,7 +287,7 @@ test('it finish unterminated merge ', async () => {
})
// each of the vhd can be a file, a directory, an alias to a file or an alias to a directory
// the message an resulting files should be identical to the output with vhd files which is tested independantly
// the message and resulting files should be identical to the output with vhd files which is tested independently
describe('tests multiple combination ', { concurrency: 1 }, () => {
for (const useAlias of [true, false]) {
for (const vhdMode of ['file', 'directory']) {
@@ -308,9 +308,9 @@ describe('tests multiple combination ', { concurrency: 1 }, () => {
await VhdAbstract.createAlias(handler, 'broken.alias.vhd', brokenVhdDataPath)
}
// a vhd non referenced in metada
// a vhd non referenced in metadata
await generateVhd(`${basePath}/nonreference.vhd`, { useAlias, mode: vhdMode })
// an abandonded delta vhd without its parent
// an abandoned delta vhd without its parent
await generateVhd(`${basePath}/abandonned.vhd`, {
useAlias,
mode: vhdMode,
@@ -404,7 +404,7 @@ describe('tests multiple combination ', { concurrency: 1 }, () => {
// size should be the size of children + grand children + clean after the merge
assert.deepEqual(metadata.size, vhdMode === 'file' ? 6502400 : 6501888)
// broken vhd, non referenced, abandonned should be deleted ( alias and data)
// broken vhd, non referenced, abandoned should be deleted ( alias and data)
// ancestor and child should be merged
// grand child and clean vhd should not have changed
const survivors = await handler.list(basePath)
@@ -454,7 +454,7 @@ test('check Aliases should work alone', async () => {
logWarn: () => {},
})
// only ok have suvived
// only ok have survived
const alias = (await handler.list('vhds')).filter(f => f.endsWith('.vhd'))
assert.equal(alias.length, 1)

View File

@@ -512,7 +512,7 @@ export async function cleanVm(
remove,
mergeBlockConcurrency,
})
const metadataPath = vhdsToJSons[chain[chain.length - 1]] // all the chain should have the same metada file
const metadataPath = vhdsToJSons[chain[chain.length - 1]] // all the chain should have the same metadata file
metadataWithMergedVhd[metadataPath] = (metadataWithMergedVhd[metadataPath] ?? 0) + finalVhdSize
})
}

View File

@@ -26,7 +26,7 @@ const LTR_DEFINITIONS = {
copy.date(date.date() - firstDayOfWeek)
// warning, the year in term of week may different from YYYY
// since the computation of the first week of a year is timezone dependant
// since the computation of the first week of a year is timezone dependent
return copy.format('gggg-ww')
}
},
@@ -59,7 +59,7 @@ const LTR_DEFINITIONS = {
* return the entries too old to be kept
* if multiple entries are i the same time bucket : keep only the most recent one
* if an entry is valid in any of the bucket OR the minRetentionCount : keep it
* if a bucket is completly empty : it does not count as one, thus it may extend the retention
* if a bucket is completely empty : it does not count as one, thus it may extend the retention
* @returns Array<Backup>
*/
export function getOldEntries(minRetentionCount, entries, { longTermRetention = {}, timezone } = {}) {

View File

@@ -231,7 +231,7 @@ export const importIncrementalVm = defer(async function importIncrementalVm(
cancelableMap(cancelToken, Object.entries(newVdis), async (cancelToken, [id, vdi]) => {
for (const disk of ensureArray(disks[id])) {
if (disk === null) {
// we restore a backup and reuse completly a local snapshot
// we restore a backup and reuse completely a local snapshot
continue
}
await xapi.setField('VDI', vdi.$ref, 'name_label', `[Importing] ${vdiRecords[id].name_label}`)

View File

@@ -44,7 +44,7 @@ const isValidTar = async (handler, size, fd) => {
return buf.every(_ => _ === 0)
}
// TODO: find an heuristic for compressed files
// TODO: find a heuristic for compressed files
export async function isValidXva(path) {
const handler = this._handler

View File

@@ -43,7 +43,7 @@ async function getDeltaChainLength(xapi, type, ref) {
}
/**
* set the delta chain lenght ( number of delta since last base backup) to a VM and its associated VDIs
* set the delta chain length ( number of delta since last base backup) to a VM and its associated VDIs
*
* @param {Xapi} xapi
* @param {String} vmRef
@@ -58,7 +58,7 @@ export async function setVmDeltaChainLength(xapi, vmRef, length) {
/**
* Compute the delta chain length of a VM and its associated VDIs
* if there is a discrependcy, use, the highest value
* if there is a discrepancy, use, the highest value
* @param {Xapi} xapi
* @param {String} vmRef
* @returns {Promise}
@@ -92,7 +92,7 @@ export function resetVmOtherConfig(xapi, vmRef) {
/**
*
* used to ensure compatibiliy with the previous snapshots that were having the config stored only into VM
* used to ensure compatibility with the previous snapshots that were having the config stored only into VM
*
* @param {Xapi} xapi
* @param {String} vmRef
@@ -152,7 +152,7 @@ export async function setVmOtherConfig(xapi, vmRef, { timestamp, jobId, schedule
}
/**
*
* mark the export of he VM and its VDIs as successfull
* mark the export of he VM and its VDIs as successful
*
* @param {Xapi} xapi
* @param {String} vmRef

View File

@@ -24,7 +24,7 @@ export const FullRemote = class FullRemoteVmBackupRunner extends AbstractRemote
writer =>
writer.run({
stream: forkStreamUnpipe(stream),
// stream will be forked and transformed, it's not safe to attach additionnal properties to it
// stream will be forked and transformed, it's not safe to attach additional properties to it
streamLength: stream.length,
maxStreamLength: stream.maxStreamLength, // on encrypted source
timestamp: metadata.timestamp,

View File

@@ -45,8 +45,8 @@ export const FullXapi = class FullXapiVmBackupRunner extends AbstractXapi {
for (const vdiRef of vdis) {
const vdi = await this._xapi.getRecord('VDI', vdiRef)
// the size a of fully allocated vdi will be virtual_size exaclty, it's a gross over evaluation
// of the real stream size in general, since a disk is never completly full
// the size a of fully allocated vdi will be virtual_size exactly, it's a gross over evaluation
// of the real stream size in general, since a disk is never completely full
// vdi.physical_size seems to underevaluate a lot the real disk usage of a VDI, as of 2023-10-30
maxStreamLength += vdi.virtual_size
}

View File

@@ -17,7 +17,7 @@ class IncrementalRemoteVmBackupRunner extends AbstractRemote {
return IncrementalRemoteWriter
}
// we'll transfer the full list if at least one backup should be transfered
// we'll transfer the full list if at least one backup should be transferred
// to ensure we don't cut the delta chain
_filterTransferList(transferList) {
if (transferList.some(vmBackupMetadata => this._filterPredicate(vmBackupMetadata))) {

View File

@@ -90,7 +90,7 @@ export const AbstractRemote = class AbstractRemoteVmBackupRunner extends Abstrac
for (const timestamp of timestamps) {
if (remoteMetadatas[timestamp] !== nbRemotes) {
// this backup is not present in all the remote
// should be retransfered if not found later
// should be retransferred if not found later
transferList.push(localMetada.get(timestamp))
} else {
// backup is present in local and remote : the chain has already been transferred

View File

@@ -195,7 +195,7 @@ export const AbstractXapi = class AbstractXapiVmBackupRunner extends Abstract {
}
})
await Promise.all(vmSnapshots.map(snapshot => populateVdisOtherConfig(xapi, snapshot.$ref)))
// end of compatibiliy handling
// end of compatibility handling
// handle snapshot by VDI
this._jobSnapshotVdis = []
@@ -298,7 +298,7 @@ export const AbstractXapi = class AbstractXapiVmBackupRunner extends Abstract {
// preferNbd is not a guarantee that the backup used NBD, depending on the network configuration,
// in that case next runs will be full, but there is not an easy way to prevent that
this._settings.preferNbd &&
// only delete snapshost data if the config allows it
// only delete snapshot data if the config allows it
this._settings.cbtDestroySnapshotData
) {
Task.info('will delete snapshot data')

View File

@@ -230,7 +230,7 @@ export class IncrementalRemoteWriter extends MixinRemoteWriter(AbstractIncrement
const path = `${this._vmBackupDir}/${vhds[diskRef]}`
await adapter.writeVhd(path, disk, {
// no checksum for VHDs, because they will be invalidated by
// merges and chainings
// merges and chains
checksum: false,
validator: tmpPath => checkVhd(handler, tmpPath),
writeBlockConcurrency: this._config.writeBlockConcurrency,

View File

@@ -21,7 +21,7 @@ export class IncrementalXapiWriter extends MixinXapiWriter(AbstractIncrementalWr
}
// @todo use an index if possible
// @todo : this seems similare to decorateVmMetadata
// @todo : this seems similar to decorateVmMetadata
const replicatedVdis = sr.$VDIs
.filter(vdi => {
// REPLICATED_TO_SR_UUID is not used here since we are already filtering from sr.$VDIs

View File

@@ -53,7 +53,7 @@ Add the following file: `xo-vm-backups/<VM UUID>/cache.json.gz`.
This cache is compressed in Gzip and contains an JSON object with the metadata for all the backups of this VM indexed by their absolute path (i.e. `/xo-vm-backups/<VM UUID>/<timestamp>.json`).
This file is generated on demande when listing the backups, and directly updated on backup creation/deletion.
This file is generated on demand when listing the backups, and directly updated on backup creation/deletion.
In case any incoherence is detected, the file is deleted so it will be fully generated when required.
@@ -180,7 +180,7 @@ job:
sourceRemote: IdPattern
# Indicates which XAPI to use to connect to a specific VM or SR
# for remote to remote backup job,this is only needed if there is healtcheck
# for remote to remote backup job,this is only needed if there is healthcheck
recordToXapi:
[ObjectId]: XapiId

View File

@@ -6,8 +6,8 @@ export type FileDescriptor = number
* a base interface is defined to be able to add other accessor ,
* for example in browser or from a vmware datastore
*
* NOTE : file acessor on datastore should try to use a stream
* and read/skip from this when possible, since openingn a new stream is costly
* NOTE : file accessor on datastore should try to use a stream
* and read/skip from this when possible, since opening a new stream is costly
* and we are generally reading the vhd sequentially
*/
export interface FileAccessor {

View File

@@ -14,7 +14,7 @@ ee.on('start', async function () {
// whatever
})
// similar to EventEmmiter#emit() but returns a promise which resolves when all
// similar to EventEmitter#emit() but returns a promise which resolves when all
// listeners have settled
await ee.emitAsync('start')

View File

@@ -32,7 +32,7 @@ ee.on('start', async function () {
// whatever
})
// similar to EventEmmiter#emit() but returns a promise which resolves when all
// similar to EventEmitter#emit() but returns a promise which resolves when all
// listeners have settled
await ee.emitAsync('start')

View File

@@ -210,16 +210,16 @@ export default class RemoteHandlerAbstract {
validator,
})
if (checksum) {
// using _outpuFile means the checksum will NOT be encrypted
// using _outputFile means the checksum will NOT be encrypted
// it is by design to allow checking of encrypted files without the key
await this._outputFile(checksumFile(path), await checksumStream.checksum, { dirMode, flags: 'wx' })
}
}
// Free the resources possibly dedicated to put the remote at work, when it
// is no more needed
// is no longer needed
//
// FIXME: Some handlers are implemented based on system-wide mecanisms (such
// FIXME: Some handlers are implemented based on system-wide mechanisms (such
// as mount), forgetting them might breaking other processes using the same
// remote.
@synchronized()
@@ -331,7 +331,7 @@ export default class RemoteHandlerAbstract {
await this._rmtree(normalizePath(dir))
}
// Asks the handler to sync the state of the effective remote with its'
// Asks the handler to sync the state of the effective remote with its
// metadata
//
// This method MUST ALWAYS be called before using the handler.
@@ -386,7 +386,7 @@ export default class RemoteHandlerAbstract {
const data = await this.__readFile(ENCRYPTION_METADATA_FILENAME)
JSON.parse(data)
} catch (error) {
// can be enoent, bad algorithm, or broeken json ( bad key or algorithm)
// can be enoent, bad algorithm, or broken json ( bad key or algorithm)
if (encryptionAlgorithm !== 'none') {
if (await this.#canWriteMetadata()) {
// any other error , but on empty remote => update with remote settings
@@ -394,7 +394,7 @@ export default class RemoteHandlerAbstract {
info('will update metadata of this remote')
return this.#createMetadata()
} else {
// to add a new encrypted fs remote, the remote directory must be empty, otherwise metadata.json is not created
// to add a new encrypted fs remote, the remote directory must be empty; otherwise, metadata.json is not created
if (error.code === 'ENOENT' && error.path.includes('metadata.json')) {
throw new Error('Remote directory must be empty.')
}
@@ -644,7 +644,7 @@ export default class RemoteHandlerAbstract {
if (error.code === 'EISDIR' || error.code === 'EPERM') {
return this._rmtree(`${dir}/${file}`).catch(rmTreeError => {
if (rmTreeError.code === 'ENOTDIR') {
// this was realy a EPERM error, maybe with immutable backups
// this was really a EPERM error, maybe with immutable backups
throw error
}
throw rmTreeError

View File

@@ -16,7 +16,7 @@ class TestHandler extends AbstractHandler {
constructor(impl) {
super({ url: 'test://' }, { timeout: TIMEOUT })
Object.defineProperty(this, 'isEncrypted', {
get: () => false, // encryption is tested separatly
get: () => false, // encryption is tested separately
})
Object.keys(impl).forEach(method => {
this[`_${method}`] = impl[method]

View File

@@ -48,9 +48,9 @@ export const createChecksumStream = (algorithm = 'md5') => {
return stream
}
// Check if the checksum of a readable stream is equals to an expected checksum.
// Check if the checksum of a readable stream is equal to an expected checksum.
// The given stream is wrapped in a stream which emits an error event
// if the computed checksum is not equals to the expected checksum.
// if the computed checksum is not equal to the expected checksum.
export const validChecksumOfReadStream = (stream, expectedChecksum) => {
const algorithmId = expectedChecksum.slice(1, expectedChecksum.indexOf('$', 1))

View File

@@ -101,7 +101,7 @@ export default class S3Handler extends RemoteHandlerAbstract {
]
WITH_RETRY.forEach(functionName => {
if (this[functionName] !== undefined) {
// adding the retry on the top level mtehod won't
// adding the retry on the top level method won't
// cover when _functionName are called internally
this[functionName] = pRetry.wrap(this[functionName], {
delays: [100, 200, 500, 1000, 2000],
@@ -408,7 +408,7 @@ export default class S3Handler extends RemoteHandlerAbstract {
// nothing to do, directories do not exist, they are part of the files' path
}
// reimplement _rmtree to handle efficiantly path with more than 1000 entries in trees
// reimplement _rmtree to handle efficiently path with more than 1000 entries in trees
// @todo : use parallel processing for unlink
async _rmtree(path) {
let NextContinuationToken
@@ -461,7 +461,7 @@ export default class S3Handler extends RemoteHandlerAbstract {
this.#s3.middlewareStack.use(getApplyMd5BodyChecksumPlugin(this.#s3.config))
}
} catch (error) {
// maybe the account doesn't have enought privilege to query the object lock configuration
// maybe the account doesn't have enough privilege to query the object lock configuration
// be defensive and apply the md5 just in case
if (error.$metadata.httpStatusCode === 403) {
info(`s3 user doesnt have enough privilege to check for Object Lock, enable content MD5 header`)

View File

@@ -7,4 +7,4 @@ This script must be kept running to make file immutable reliably.
launch the `xo-lift-remote-immutability` cli. The configuration is stored in the config file .
If the config file have a `liftEvery`, this script will contiue to run and check regularly if there are files to update.
If the config file have a `liftEvery`, this script will continue to run and check regularly if there are files to update.

View File

@@ -23,7 +23,7 @@ This script must be kept running to make file immutable reliably.
launch the `xo-lift-remote-immutability` cli. The configuration is stored in the config file .
If the config file have a `liftEvery`, this script will contiue to run and check regularly if there are files to update.
If the config file have a `liftEvery`, this script will continue to run and check regularly if there are files to update.
## Contributions

View File

@@ -1,6 +1,6 @@
# Imutability
# Immutability
the goal is to make a remote that XO can write, but not modify during the immutability duration set on the remote. That way, it's not possible for XO to delete or encrypt any backup during this period. It protects your backup agains ransomware, at least as long as the attacker does not have a root access to the remote server.
the goal is to make a remote that XO can write, but not modify during the immutability duration set on the remote. That way, it's not possible for XO to delete or encrypt any backup during this period. It protects your backup against ransomware, at least as long as the attacker does not have a root access to the remote server.
We target `governance` type of immutability, **the local root account of the remote server will be able to lift immutability**.
@@ -10,7 +10,7 @@ It is compatible with encryption at rest made by XO.
## Prerequisites
The commands must be run as root on the remote, or by a user with the `CAP_LINUX_IMMUTABLE` capability . On start, the protect process writes into the remote `imutability.json` file its status and the immutability duration.
The commands must be run as root on the remote, or by a user with the `CAP_LINUX_IMMUTABLE` capability . On start, the protect process writes into the remote `immutability.json` file its status and the immutability duration.
the `chattr` and `lsattr` should be installed on the system
@@ -22,7 +22,7 @@ this package uses app-conf to store its config. The application name is `xo-immu
when marking a file or a folder immutable, it create an alias file in the `<indexPath>/<DayOfFileCreation>/<sha256(fullpath)>`.
`indexPath` can be defined in the config file, otherwise `XDG_HOME` is used. If not available it goes to `~/.local/share`
`indexPath` can be defined in the config file; otherwise, `XDG_HOME` is used. If not available it goes to `~/.local/share`
This index is used when lifting the immutability of the remote, it will only look at the old enough `<indexPath>/<DayOfFileCreation>/` folders.
@@ -33,7 +33,7 @@ It will also do a checkup to ensure immutability could work on this remote and h
The watching process depends on the backup type, since we don't want to make temporary files and cache immutable.
It won't protect files during upload, only when the files have been completly written on disk. Real time, in this case, means "protecting critical files as soon as possible after they are uploaded"
It won't protect files during upload, only when the files have been completely written on disk. Real time, in this case, means "protecting critical files as soon as possible after they are uploaded"
This can be alleviated by :

View File

@@ -40,7 +40,7 @@ async function test(remotePath, indexPath) {
}
async function handleExistingFile(root, indexPath, path) {
try {
// a vhd block directory is completly immutable
// a vhd block directory is completely immutable
if (isInVhdDirectory(path)) {
// this will trigger 3 times per vhd blocks
const dir = join(root, dirname(path))

View File

@@ -90,7 +90,7 @@
## **0.2.0** (2024-02-29)
- Fix Typescript typings errors when running `yarn type-check` command (PR [#7278](https://github.com/vatesfr/xen-orchestra/pull/7278))
- Fix TypeScript typings errors when running `yarn type-check` command (PR [#7278](https://github.com/vatesfr/xen-orchestra/pull/7278))
- Introduce PWA Json Manifest (PR [#7291](https://github.com/vatesfr/xen-orchestra/pull/7291))
## **0.1.7** (2023-12-28)

View File

@@ -857,7 +857,7 @@ const _createVm = defer(async ($defer: Defer) => {
// creates VDIs and VBDs and then executes any applicable post-install script.
await xapi.vm.provision(vmRefs)
// We set VCPUs max before, otherwise we cannot assign new values to the CPUs
// We set VCPUs max before; otherwise, we cannot assign new values to the CPUs
if (vmCreationParams.value.cpus > vmCreationParams.value.vcpusMax) {
await xapi.vm.setVCPUsMax(vmRefs, vmCreationParams.value.cpus)
}

View File

@@ -169,7 +169,7 @@ configure(
)
```
Duplicate logs will be buffered for `timeout` milliseconds or until a different log is emitted, at which time a dedicated log entry is emitted which indicate the number of duplicates that occured.
Duplicate logs will be buffered for `timeout` milliseconds or until a different log is emitted, at which time a dedicated log entry is emitted which indicate the number of duplicates that occurred.
```js
const logger = createLogger('app')
@@ -183,7 +183,7 @@ logger.error('Something went wrong')
logger.info('This is a different message')
```
In this example, the first three log entries are identical and the last two will be treated as duplicates. They will be grouped together and sent to the transport as a single log with `nDuplicates: 2` data when a different log entry is emitted (or after the timeout as elasped if there weren't one).
In this example, the first three log entries are identical and the last two will be treated as duplicates. They will be grouped together and sent to the transport as a single log with `nDuplicates: 2` data when a different log entry is emitted (or after the timeout as elapsed if there weren't one).
The output in the console would look something like:

View File

@@ -187,7 +187,7 @@ configure(
)
```
Duplicate logs will be buffered for `timeout` milliseconds or until a different log is emitted, at which time a dedicated log entry is emitted which indicate the number of duplicates that occured.
Duplicate logs will be buffered for `timeout` milliseconds or until a different log is emitted, at which time a dedicated log entry is emitted which indicate the number of duplicates that occurred.
```js
const logger = createLogger('app')
@@ -201,7 +201,7 @@ logger.error('Something went wrong')
logger.info('This is a different message')
```
In this example, the first three log entries are identical and the last two will be treated as duplicates. They will be grouped together and sent to the transport as a single log with `nDuplicates: 2` data when a different log entry is emitted (or after the timeout as elasped if there weren't one).
In this example, the first three log entries are identical and the last two will be treated as duplicates. They will be grouped together and sent to the transport as a single log with `nDuplicates: 2` data when a different log entry is emitted (or after the timeout as elapsed if there weren't one).
The output in the console would look something like:

View File

@@ -1,4 +1,4 @@
- mixins can depend on each other, they will be instanciated on-demand
- mixins can depend on each other, they will be instantiated on-demand
```js
import mixin from '@xen-orchestra/mixin'

View File

@@ -14,7 +14,7 @@ npm install --save @xen-orchestra/mixin
## Usage
- mixins can depend on each other, they will be instanciated on-demand
- mixins can depend on each other, they will be instantiated on-demand
```js
import mixin from '@xen-orchestra/mixin'

View File

@@ -30,9 +30,9 @@ export default class HttpProxy {
#app
constructor(app, { httpServer }) {
// don't setup the proxy if httpServer is not present
// don't set up the proxy if httpServer is not present
//
// that can happen when the app is instanciated in another context like xo-server-recover-account
// that can happen when the app is instantiated in another context like xo-server-recover-account
if (httpServer === undefined) {
return
}

View File

@@ -150,9 +150,9 @@ export default class SslCertificates {
#handlers = new Map()
constructor(app, { httpServer }) {
// don't setup the proxy if httpServer is not present
// don't set up the proxy if httpServer is not present
//
// that can happen when the app is instanciated in another context like xo-server-recover-account
// that can happen when the app is instantiated in another context like xo-server-recover-account
if (httpServer === undefined) {
return
}
@@ -176,7 +176,7 @@ export default class SslCertificates {
const { acmeDomain } = config
// not a let's encrypt protected end point, sommething changed in the configuration
// not a let's encrypt protected end point, something changed in the configuration
if (acmeDomain === undefined) {
handlers.delete(configKey)
return

View File

@@ -292,8 +292,8 @@ export default {
defaultPriority: 0x8000,
instructionType: {
goToTable: 1, // Setup the next table in the lookup pipeline
writeMetadata: 2, // Setup the metadata field for use later in pipeline
goToTable: 1, // Set up the next table in the lookup pipeline
writeMetadata: 2, // Set up the metadata field for use later in pipeline
writeActions: 3, // Write the action(s) onto the datapath action set
applyActions: 4, // Applies the action(s) immediately (no writing in action set)
clearActions: 5, // Clears all actions from the datapath action set
@@ -449,7 +449,7 @@ export default {
loop: 7, // Group entry would cause a loop
unknownGroup: 8,
/* Group not modified because a group
* MODIFY attempted to modify a non-existent group.
* MODIFY attempted to modify a nonexistent group.
*/
},

View File

@@ -26,7 +26,7 @@ snapshotNameLabelTpl = '[XO Backup {job.name}] {vm.name_label}'
vhdDirectoryCompression = 'brotli'
# This is a work-around.
# This is a workaround.
#
# See https://github.com/vatesfr/xen-orchestra/pull/4674
maxMergedDeltasPerRun = 2
@@ -34,7 +34,7 @@ maxMergedDeltasPerRun = 2
# Each `http.listen.<name>` entry defines a specific listening configuration for
# the HTTP server.
#
# `<name>` can be freely choosen.
# `<name>` can be freely chosen.
[http.listen.https]
# Generate self-signed certificate if missing
@@ -73,13 +73,13 @@ watchEvents = ['network', 'PIF', 'pool', 'SR', 'task', 'VBD', 'VDI', 'VIF', 'VM'
[reverseProxies]
# '/http/' = 'http://localhost:8081/'
#The target can have a path ( like `http://target/sub/directory/`),
# parameters (`?param=one`) and hash (`#jwt:32154`) that are automatically added to all queries transfered by the proxy.
# parameters (`?param=one`) and hash (`#jwt:32154`) that are automatically added to all queries transferred by the proxy.
# If a parameter is present in the configuration and in the query, only the config parameter is transferred.
# '/another' = http://hiddenServer:8765/path/
# And use the extended mode when required
# The additionnal options of a proxy's configuraiton's section are used to instantiate the `https` Agent(respectively the `http`).
# A notable option is `rejectUnauthorized` which allow to connect to a HTTPS backend with an invalid/ self signed certificate
# The additional options of a proxy's configuration's section are used to instantiate the `https` Agent(respectively the `http`).
# A notable option is `rejectUnauthorized` which allow to connect to a HTTPS backend with an invalid/ self-signed certificate
#[reverseProxies.'/https/']
# target = 'https://localhost:8080/'
# rejectUnauthorized = false

View File

@@ -24,7 +24,7 @@ class Foo extends Controller {
/**
* any jsdoc anotations
* any jsdoc annotations
* @example id 1234
*/
@Example(['foo', 'bar'])

View File

@@ -42,7 +42,7 @@ class Foo extends Controller {
/**
* any jsdoc anotations
* any jsdoc annotations
* @example id 1234
*/
@Example(['foo', 'bar'])

View File

@@ -43,7 +43,7 @@ export default function setupRestApi(express: Express, xoApp: XoApp) {
setupContainer(xoApp)
RegisterRoutes(express)
// do not register the doc at the root level, or it may lead to unwated behaviour
// do not register the doc at the root level, or it may lead to unwanted behaviour
// uncomment when all endpoints are migrated to this API
// express.get('/rest/v0', (_req, res) => res.redirect('/rest/v0/docs'))
express.use(`${BASE_URL}/docs`, swaggerUi.serve, swaggerUi.setup(swaggerOpenApiSpec, SWAGGER_UI_OPTIONS))

View File

@@ -4,7 +4,7 @@
[![Package Version](https://badgen.net/npm/v/@xen-orchestra/self-signed)](https://npmjs.org/package/@xen-orchestra/self-signed) ![License](https://badgen.net/npm/license/@xen-orchestra/self-signed) [![PackagePhobia](https://badgen.net/bundlephobia/minzip/@xen-orchestra/self-signed)](https://bundlephobia.com/result?p=@xen-orchestra/self-signed) [![Node compatibility](https://badgen.net/npm/node/@xen-orchestra/self-signed)](https://npmjs.org/package/@xen-orchestra/self-signed)
> Minimalist wrapper around openssl to generate a self signed certificate
> Minimalist wrapper around openssl to generate a self-signed certificate
## Install

View File

@@ -41,12 +41,12 @@ export default class VhdEsxiCowd extends VhdAbstract {
containsBlock(blockId) {
notEqual(this.#grainDirectory, undefined, "bat must be loaded to use contain blocks'")
// only check if a grain table exist for on of the sector of the block
// only check if a grain table exist for one of the sector of the block
// the great news is that a grain size has 4096 entries of 512B = 2M
// and a vhd block is also 2M
// so we only need to check if a grain table exists (it's not created without data)
// depending on the paramters we also look into the parent data
// depending on the parameters we also look into the parent data
return (
this.#grainDirectory.readUInt32LE(blockId * 4) !== 0 ||
(this.#lookMissingBlockInParent && this.#parentVhd.containsBlock(blockId))
@@ -84,7 +84,7 @@ export default class VhdEsxiCowd extends VhdAbstract {
this.#grainDirectory = await this.#read(2048 /* header length */, nbBlocks * 4)
}
// we're lucky : a grain address can address exacty a full block
// we're lucky : a grain address can address exactly a full block
async readBlock(blockId) {
notEqual(this.#grainDirectory, undefined, 'grainDirectory is not loaded')
const sectorOffset = this.#grainDirectory.readUInt32LE(blockId * 4)

View File

@@ -110,7 +110,7 @@ export default class VhdEsxiSeSparse extends VhdAbstract {
)
}
// since most of the data are writtent sequentially we always open a stream from start to the end of the file
// since most of the data are written sequentially we always open a stream from start to the end of the file
// If we have to rewind it, we destroy the stream and recreate with the right "start"
// We also recreate the stream if there is too much distance between current position and the wanted position
@@ -241,7 +241,7 @@ export default class VhdEsxiSeSparse extends VhdAbstract {
const offsetByte = grainIndex * GRAIN_SIZE_BYTES + this.#grainOffsetBytes
addGrain(offsetByte)
} else {
// multiply by -1 to differenciate type and offset
// multiply by -1 to differentiate type and offset
// no offset can be zero
addGrain(-grainType)
}
@@ -259,7 +259,7 @@ export default class VhdEsxiSeSparse extends VhdAbstract {
grainOffsets !== undefined && !grainOffsets.some(value => value === -SE_SPARSE_GRAIN_NON_ALLOCATED)
let parentBuffer, parentBlock
// don't read from parent is current block is already completly described
// don't read from parent is current block is already completely described
if (isLocallyFull) {
parentBuffer = Buffer.alloc(512 /* bitmap */ + 2 * 1024 * 1024 /* data */, 0)
parentBuffer.fill(255, 0, 512) // bitmap is full of bit 1

View File

@@ -22,7 +22,7 @@ export default class VhdEsxiStreamOptimized extends VhdAbstract {
get header() {
// a grain directory entry contains the address of a grain table
// a grain table can adresses at most 4096 grain of 512 Bytes of data
// a grain table can addresses at most 4096 grain of 512 Bytes of data
return unpackHeader(
createHeader(Math.ceil((this.#vmdkHeader.capacitySectors * SECTOR_SIZE) / DEFAULT_VHD_BLOCK_SIZE))
)

View File

@@ -379,7 +379,7 @@ export default class Esxi extends EventEmitter {
}
}
} catch (error) {
// no vmsd file :fall back to a full withou snapshots
// no vmsd file :fall back to a full without snapshots
}
return {
name_label: config.name[0],

View File

@@ -39,7 +39,7 @@ function set(obj, keyPath, val) {
}
// with descendant
if (typeof obj[key] !== 'object') {
// sometimes there is additionnal properties on a string ( like guestOS="ubuntut " and then guestOS.detailed =)
// sometimes there is additional properties on a string ( like guestOS="ubuntu " and then guestOS.detailed =)
// we ignore these data for now
return
}

View File

@@ -1,8 +1,8 @@
## Components and Subcomponents MUST be defined as Vue SFC (Single-File Component)
## DS Components MUST be stored in the `/ui` directory of `/web-core`.
## DS Components MUST be stored in the `/ui` directory of `/web-core`
## DS Components MUST be stored in their own directory.
## DS Components MUST be stored in their own directory
## Directory name MUST be in kebab-case (e.g. `my-component`)

View File

@@ -14,6 +14,6 @@ For more in-depth information, see:
- [Best practices](./best-practices.md)
- [CSS](./css.md)
- [Slots](./slots.md)
- [Typescript](./typescript.md)
- [TypeScript](./typescript.md)
To summary all the above guidelines, see the example component here: [Component example](./component-example.md).

View File

@@ -1,4 +1,4 @@
# Typescript
# TypeScript
## Types' naming SHOULD be meaningful

View File

@@ -53,7 +53,7 @@ As a bonus, this will allow the usage of `foo` and `foo.bar` as separate keys.
## Punctuation
Strings punctuations should be included in the translation key.
Strings punctuation should be included in the translation key.
This allows better adapting the punctuation to the rules of the target language.
@@ -66,7 +66,7 @@ For example:
> [!IMPORTANT]
> Since HTML is not accepted in translations, you must use a non-breaking space character (` `) instead of `&nbsp;`
### Example:
### Example
#### English

View File

@@ -42,7 +42,7 @@ const forceArg = defineJobArg<boolean>({
```typescript
const myJob = defineJob('processItems', [userIdArg, itemsArg, optionsArg], () => ({
validate(isRunning, userId, items) {
// You can use custom running check additionnal to internal one
// You can use custom running check additional to internal one
if (isRunning || isProcessingItems(userId, items)) {
throw new JobRunningError('Items are being processed')
}
@@ -57,7 +57,7 @@ const myJob = defineJob('processItems', [userIdArg, itemsArg, optionsArg], () =>
},
run(userId, items, force) {
// Job implementation
return procesItems(userId, items, force)
return processItems(userId, items, force)
},
}))
```

View File

@@ -53,7 +53,7 @@ export const useSidebarStore = defineStore('layout', () => {
watch(
() => uiStore.isMobile,
isMobile => {
// keep the state of desktop expention
// keep the state of desktop expansion
if (isMobile) {
desktopState = isExpanded.value
}

View File

@@ -42,7 +42,7 @@ class Host {
async smartReboot($defer, ref, bypassBlockedSuspend = false, bypassCurrentVmCheck = false) {
await this.callAsync('host.disable', ref)
// host may have been re-enabled already, this is not an problem
// host may have been re-enabled already, this is not a problem
$defer.onFailure(() => this.callAsync('host.enable', ref))
let currentVmRef

View File

@@ -68,7 +68,7 @@ export default class Network {
stopOnError: false,
})
} catch (error) {
// report an error occured, but continue the re-plugging process
// report an error occurred, but continue the re-plugging process
errorOccurred = true
warn(error)
}

View File

@@ -123,7 +123,7 @@ class Vdi {
}
/**
* return an buffer with 0/1 bit, showing if the 64KB block corresponding
* return a buffer with 0/1 bit, showing if the 64KB block corresponding
* in the raw vdi has changed
*/
async listChangedBlock(ref, baseRef) {

View File

@@ -17,7 +17,7 @@ export default class Vif {
},
{
// duplicated MAC addresses can lead to issues,
// therefore it should be passed explicitely
// therefore it should be passed explicitly
MAC = '',
} = {}
) {

View File

@@ -478,7 +478,7 @@ class Vm {
// must be done before destroying the VM
const disks = await this.VM_getDisks(vmRef, vm.VBDs)
// this cannot be done in parallel, otherwise disks and snapshots will be
// this cannot be done in parallel; otherwise, disks and snapshots will be
// destroyed even if this fails
await this.callAsync('VM.destroy', vmRef)

View File

@@ -112,7 +112,7 @@
### Bug fixes
- prevent XOA from failing with `an error has occured` due to license problems (PR [#8551](https://github.com/vatesfr/xen-orchestra/pull/8551))
- prevent XOA from failing with `an error has occurred` due to license problems (PR [#8551](https://github.com/vatesfr/xen-orchestra/pull/8551))
### Released packages
@@ -127,7 +127,7 @@
- [V2V] Resume an incomplete warm migration (PR [#8440](https://github.com/vatesfr/xen-orchestra/pull/8440))
- [Licences] Warn a user when the XOA's licence is near expiration, handle expired licences (PR [#8523](https://github.com/vatesfr/xen-orchestra/pull/8523))
- [Plugin/Web hook] Web hook plugin now support `Office 365 connector` format (PR [#8498](https://github.com/vatesfr/xen-orchestra/pull/8498))
- [REST API] Expose `/rest/v0/schedules` and `/rest/v0/schedules/<schedule-id>` enpoints (PR [#8477](https://github.com/vatesfr/xen-orchestra/pull/8477))
- [REST API] Expose `/rest/v0/schedules` and `/rest/v0/schedules/<schedule-id>` endpoints (PR [#8477](https://github.com/vatesfr/xen-orchestra/pull/8477))
- [REST API] Expose the possibility to run a schedule `/rest/v0/schedules/<schedule-id>/actions/run` (PR [#8477](https://github.com/vatesfr/xen-orchestra/pull/8477))
- **Migrated REST API endpoints**:
- `/rest/v0/vifs` (PR [#8483](https://github.com/vatesfr/xen-orchestra/pull/8483))
@@ -360,7 +360,7 @@
- [Settings/Remotes] Only allow using encryption when using data block storage to prevent errors during backups (PR [#8244](https://github.com/vatesfr/xen-orchestra/pull/8244))
- Fix _Rolling Pool Update_ and _Install Patches_ for XenServer >= 8.4 [Forum#9550](https://xcp-ng.org/forum/topic/9550/xenserver-8-patching/27?_=1736774010376) (PR [#8241](https://github.com/vatesfr/xen-orchestra/pull/8241))
- [New/VM] Fix premature destruction of the cloudConfig VDI when using the option _destroyCloudConfigVdiAfterBoot_ [#8219](https://github.com/vatesfr/xen-orchestra/issues/8219) (PR [#8247](https://github.com/vatesfr/xen-orchestra/pull/8247))
- [V2V] Improve compatiblity whith VSphere handling multiple vSAN storages (PR [#8243](https://github.com/vatesfr/xen-orchestra/pull/8243))
- [V2V] Improve compatiblity with VSphere handling multiple vSAN storages (PR [#8243](https://github.com/vatesfr/xen-orchestra/pull/8243))
- **XO 6**:
- [UI] Use user language set in XO 5 to set the language in XO 6 (PR [#8242](https://github.com/vatesfr/xen-orchestra/pull/8242))
- [Console] Add fullscreen functionality for console (PR [#8238](https://github.com/vatesfr/xen-orchestra/pull/8238))
@@ -567,7 +567,7 @@
### Bug fixes
- [Backup/Mirror] Fix `checkbasevdi must be called before updateUuidAndChain` error (PR [#8037](https://github.com/vatesfr/xen-orchestra/pull/8037))
- [Backups] Fix MESSAGE_METHOD_UNKOWN(VDI.get_cbt_enabled) on XenServer < 7.3 (PR [#8038](https://github.com/vatesfr/xen-orchestra/pull/8038))
- [Backups] Fix MESSAGE_METHOD_UNKNOWN(VDI.get_cbt_enabled) on XenServer < 7.3 (PR [#8038](https://github.com/vatesfr/xen-orchestra/pull/8038))
- [SR/New] Fix reattach button not displayed for HBA (PR [#7986](https://github.com/vatesfr/xen-orchestra/pull/7986))
- [New VM] Fix cryptic error notification (PR [#8052](https://github.com/vatesfr/xen-orchestra/pull/8052))
- [Netbox] Ignore tags that have an empty label (PR [#8056](https://github.com/vatesfr/xen-orchestra/pull/8056))
@@ -744,8 +744,8 @@
- [Import/VM Ware] Shows only SRs and networks of the selected pool (PR [#7905](https://github.com/vatesfr/xen-orchestra/pull/7905))
- [Backups] Work around XAPI not automatically updating VM's `allowed_operations` after backups [Forum#81327](https://xcp-ng.org/forum/post/81327) (PR [#7924](https://github.com/vatesfr/xen-orchestra/pull/7924))
- [REST API] Fix VDI export in raw format broken in XO 5.96.0
- [New/SR] Fix 'an error as occured' when creating a new SR (PR [#7931](https://github.com/vatesfr/xen-orchestra/pull/7931))
- [VM/General] Fix 'an error as occured' in general tab view for non-admin users (PR [#7928](https://github.com/vatesfr/xen-orchestra/pull/7928))
- [New/SR] Fix 'an error as occurred' when creating a new SR (PR [#7931](https://github.com/vatesfr/xen-orchestra/pull/7931))
- [VM/General] Fix 'an error as occurred' in general tab view for non-admin users (PR [#7928](https://github.com/vatesfr/xen-orchestra/pull/7928))
- [Plugin/perf-alert] Fix 'NaN' values in CPU usage (PR [#7925](https://github.com/vatesfr/xen-orchestra/pull/7925))
- [Backups] Fix the replication failing with "disk attached to Dom0" error (PR [#7920](https://github.com/vatesfr/xen-orchestra/pull/7920))
- [VM/SR/Disks tab] Fix error not displaying when toggling CBT (PR [#7947](https://github.com/vatesfr/xen-orchestra/pull/7947))
@@ -964,7 +964,7 @@
### Bug fixes
- [Console] Fix support of consoles behind an HTTP/HTTPS proxy [Forum#76935](https://xcp-ng.org/forum/post/76935')
- [Rolling Pool Update] Fixed RPU failing to install patches on hosts (and still appearing as successfull) (PR [#7640](https://github.com/vatesfr/xen-orchestra/pull/7640))
- [Rolling Pool Update] Fixed RPU failing to install patches on hosts (and still appearing as successful) (PR [#7640](https://github.com/vatesfr/xen-orchestra/pull/7640))
- [XOSTOR] Throw clearer error if attempt to create multiple trials (PR [#7649](https://github.com/vatesfr/xen-orchestra/pull/7649))
- [V2V] Fix import stuck (PR [#7653](https://github.com/vatesfr/xen-orchestra/pull/7653))
- [REST API] Don't wait for a new state of a task when the `wait` query string is not used
@@ -980,14 +980,14 @@
### Enhancements
- [New XOSTOR] Display a warning when replication count is higher than number of hosts with disks (PR [#7625](https://github.com/vatesfr/xen-orchestra/pull/7625))
- [New XOSTOR] Display a warning when replication count is greater than number of hosts with disks (PR [#7625](https://github.com/vatesfr/xen-orchestra/pull/7625))
- [XOSTOR] Ability to copy VDI UUID in the resources table (PR [#7629](https://github.com/vatesfr/xen-orchestra/pull/7629))
### Bug fixes
- [Pool] Fix `Headers Timeout Error` when installing patches on XCP-ng
- [Pool/Advanced] Only show current pool's SRs in default SR selector (PR [#7626](https://github.com/vatesfr/xen-orchestra/pull/7626))
- [SR/XOSTOR] Fix `an error has occured` in the Resource List (PR [#7630](https://github.com/vatesfr/xen-orchestra/pull/7630))
- [SR/XOSTOR] Fix `an error has occurred` in the Resource List (PR [#7630](https://github.com/vatesfr/xen-orchestra/pull/7630))
- [XOSTOR] Don't require host licenses to run XOSTOR (PR [#7628](https://github.com/vatesfr/xen-orchestra/pull/7628))
### Released packages
@@ -1160,7 +1160,7 @@
### Bug fixes
- [Jobs] Fix `t.value is undefined` when saving a new job (broken in XO 5.91)
- [XOSTOR] Move `ignore file sytems` outside of advanced settings (PR [#7429](https://github.com/vatesfr/xen-orchestra/pull/7429))
- [XOSTOR] Move `ignore file systems` outside of advanced settings (PR [#7429](https://github.com/vatesfr/xen-orchestra/pull/7429))
- Allow unauthenticated access to `robots.txt`
- [SR/XOSTOR] VG `linstor_group` removed if SR creation failed. (Deletion occurs only if `xo-server` was responsible for this VG creation) (PR [#7426](https://github.com/vatesfr/xen-orchestra/pull/7426))
@@ -1176,7 +1176,7 @@
- Disable search engine indexing via a `robots.txt`
- [Stats] Support format used by XAPI 23.31
- [REST API] Export host [SMT](https://en.wikipedia.org/wiki/Simultaneous_multithreading) status at `/hosts/:id/smt` [Forum#71374](https://xcp-ng.org/forum/post/71374)
- [Home & REST API] `$container` field of an halted VM now points to a host if a VDI is on a local storage [Forum#71769](https://xcp-ng.org/forum/post/71769)
- [Home & REST API] `$container` field of a halted VM now points to a host if a VDI is on a local storage [Forum#71769](https://xcp-ng.org/forum/post/71769)
- [Pool/Advanced] _Auto power on_ can be disabled at pool level (PR [#7401](https://github.com/vatesfr/xen-orchestra/pull/7401))
- [Pool/Network] Ability to edit MTU [#7039](https://github.com/vatesfr/xen-orchestra/issues/7039) (PR [#7393](https://github.com/vatesfr/xen-orchestra/pull/7393))
- [Backup] Ability to set a number of retries for VM backup failures [#2139](https://github.com/vatesfr/xen-orchestra/issues/2139) (PR [#7308](https://github.com/vatesfr/xen-orchestra/pull/7308))
@@ -1194,7 +1194,7 @@
- [Plugins/audit] Don't log `tag.getAllConfigured` calls
- [Remotes] Correctly clear error when the remote is tested with success
- [Import/VMWare] Fix importing last snapshot (PR [#7370](https://github.com/vatesfr/xen-orchestra/pull/7370))
- [Host/Reboot] Fix false positive warning when restarting an host after updates (PR [#7366](https://github.com/vatesfr/xen-orchestra/pull/7366))
- [Host/Reboot] Fix false positive warning when restarting a host after updates (PR [#7366](https://github.com/vatesfr/xen-orchestra/pull/7366))
- [New/VM] Respect _Fast clone_ setting broken since 5.91.0 (PR [#7388](https://github.com/vatesfr/xen-orchestra/issues/7388))
- [Backup] Remove incorrect _unused VHD_ warning because the situation is normal (PR [#7406](https://github.com/vatesfr/xen-orchestra/issues/7406))
- [Backup] Remove display of empty directories for mirror backups (PR [#7340](https://github.com/vatesfr/xen-orchestra/pull/7340))
@@ -1696,10 +1696,10 @@
### Bug fixes
- [Home/Host] Fix "isHostTimeConsistentWithXoaTime.then is not a function" (PR [#6896](https://github.com/vatesfr/xen-orchestra/pull/6896))
- [ESXi Import] was depending on an older unmaintened library that was downgrading the global security level of XO (PR [#6859](https://github.com/vatesfr/xen-orchestra/pull/6859))
- [ESXi Import] was depending on an older unmaintained library that was downgrading the global security level of XO (PR [#6859](https://github.com/vatesfr/xen-orchestra/pull/6859))
- [Backup] Fix memory consumption when deleting _VHD directory_ incremental backups
- [Remote] Fix `remote is disabled` error when editing a disabled remote
- [Settings/Servers] Fix connectiong using an explicit IPv6 address
- [Settings/Servers] Fix connection using an explicit IPv6 address
- [Backups/Health check] Use the right SR for health check during replication job (PR [#6902](https://github.com/vatesfr/xen-orchestra/pull/6902))
### Released packages
@@ -1762,7 +1762,7 @@
### Highlights
- [Backup] Implementation of mirror backup (Entreprise plan) (PRs [#6858](https://github.com/vatesfr/xen-orchestra/pull/6858), [#6854](https://github.com/vatesfr/xen-orchestra/pull/6854))
- [Backup] Implementation of mirror backup (Enterprise plan) (PRs [#6858](https://github.com/vatesfr/xen-orchestra/pull/6858), [#6854](https://github.com/vatesfr/xen-orchestra/pull/6854))
- [Self service] Add default tags to all VMs that will be created by a Self Service (PRs [#6810](https://github.com/vatesfr/xen-orchestra/pull/6810), [#6812](https://github.com/vatesfr/xen-orchestra/pull/6812))
- [Self Service] Ability to set a default value for the "Share VM" feature for Self Service users during creation/edition (PR [#6838](https://github.com/vatesfr/xen-orchestra/pull/6838))
- [REST API] Add endpoints to display missing patches for pools and hosts (PR [#6855](https://github.com/vatesfr/xen-orchestra/pull/6855))
@@ -1782,7 +1782,7 @@
- [Sorted table] In collapsed actions, a spinner is displayed during the action time (PR [#6831](https://github.com/vatesfr/xen-orchestra/pull/6831))
- [VM] Show SUSE icon when distro name is `opensuse` (PR [#6852](https://github.com/vatesfr/xen-orchestra/pull/6852))
- [ACL] Fix various `an error has occurred` due to ACLs (PR [#6848](https://github.com/vatesfr/xen-orchestra/pull/6848))
- [Home/host] When ahost has an inconsistent time with XOA, an alert is displayed (PR [#6833](https://github.com/vatesfr/xen-orchestra/pull/6833))
- [Home/host] When a host has an inconsistent time with XOA, an alert is displayed (PR [#6833](https://github.com/vatesfr/xen-orchestra/pull/6833))
- [Incremental Replication] Fix task showing as _interrupted_ when running without health check [Forum#62669](https://xcp-ng.org/forum/post/62669) (PR [#6866](https://github.com/vatesfr/xen-orchestra/pull/6866))
- [Host evacuation] Better error message when migration network no longer exists
@@ -1851,7 +1851,7 @@
- [VM/Advanced] Automatically eject removable medias when converting a VM to a template [#6752](https://github.com/vatesfr/xen-orchestra/issues/6752) (PR [#6769](https://github.com/vatesfr/xen-orchestra/pull/6769))
- [Dashboard/Health] Add free space column for storage state table (PR [#6778](https://github.com/vatesfr/xen-orchestra/pull/6778))
- [VM/General] Displays the template name used to create the VM, as well as the email address of the VM creator for admin users (PR [#6771](https://github.com/vatesfr/xen-orchestra/pull/6771))
- [Kubernetes] Give the possibility to create an high availability cluster (PR [#6794](https://github.com/vatesfr/xen-orchestra/pull/6794))
- [Kubernetes] Give the possibility to create a high availability cluster (PR [#6794](https://github.com/vatesfr/xen-orchestra/pull/6794))
### Bug fixes
@@ -1899,7 +1899,7 @@
### Bug fixes
- [Backup/Restore] Fix restore via a proxy showing as interupted (PR [#6702](https://github.com/vatesfr/xen-orchestra/pull/6702))
- [Backup/Restore] Fix restore via a proxy showing as interrupted (PR [#6702](https://github.com/vatesfr/xen-orchestra/pull/6702))
- [ESXI import] Fix failing imports when using non default datacenter name [Forum#59543](https://xcp-ng.org/forum/post/59543) PR [#6729](https://github.com/vatesfr/xen-orchestra/pull/6729)
- [Backup] Fix backup worker consuming too much memory and being killed by system during full VM backup to S3 compatible remote PR [#6732](https://github.com/vatesfr/xen-orchestra/pull/6732)
- [Plugin/perf-alert] Ignore special SRs (e.g. _XCP-ng Tools_, _DVD drives_, etc) as their usage is always 100% (PR [#6755](https://github.com/vatesfr/xen-orchestra/pull/6755))
@@ -2161,13 +2161,13 @@
- [Remotes] Prevent remote path from ending with `xo-vm-backups` as it's usually a mistake
- [OVA export] Speed up OVA generation by 2. Generated file will be bigger (as big as uncompressed XVA) (PR [#6487](https://github.com/vatesfr/xen-orchestra/pull/6487))
- [Settings/Users] Add `Remove` button to delete OTP of users from the admin panel [Forum#6521](https://xcp-ng.org/forum/topic/6521/remove-totp-on-a-user-account) (PR [#6541](https://github.com/vatesfr/xen-orchestra/pull/6541))
- [Plugin/transport-nagios] XO now reports backed up VMs invidually with the VM name label used as _host_ and backup job name used as _service_
- [Plugin/transport-nagios] XO now reports backed up VMs individually with the VM name label used as _host_ and backup job name used as _service_
- [VM/Advanced] Add warm migration button (PR [#6533](https://github.com/vatesfr/xen-orchestra/pull/6533))
### Bug fixes
- [Dashboard/Health] Fix `Unknown SR` and `Unknown VDI` in Unhealthy VDIs (PR [#6519](https://github.com/vatesfr/xen-orchestra/pull/6519))
- [Delta Backup] Can now recover VHD merge when failed at the begining
- [Delta Backup] Can now recover VHD merge when failed at the beginning
- [Delta Backup] Fix `ENOENT` errors when merging a VHD directory on non-S3 remote
- [Remote] Prevent the browser from auto-completing the encryption key field
@@ -2521,7 +2521,7 @@
### Highlights
- [Backup] _Restore Health Check_ can now be configured to be run automatically during a backup schedule (PRs [#6227](https://github.com/vatesfr/xen-orchestra/pull/6227), [#6228](https://github.com/vatesfr/xen-orchestra/pull/6228), [#6238](https://github.com/vatesfr/xen-orchestra/pull/6238) & [#6242](https://github.com/vatesfr/xen-orchestra/pull/6242))
- [Backup] VMs with USB Pass-through devices are now supported! The advanced _Offline Snapshot Mode_ setting must be enabled. For Full Backup or Disaster Recovery jobs, Rolling Snapshot needs to be anabled as well. (PR [#6239](https://github.com/vatesfr/xen-orchestra/pull/6239))
- [Backup] VMs with USB Pass-through devices are now supported! The advanced _Offline Snapshot Mode_ setting must be enabled. For Full Backup or Disaster Recovery jobs, Rolling Snapshot needs to be enabled as well. (PR [#6239](https://github.com/vatesfr/xen-orchestra/pull/6239))
- [Backup] Implement file cache for listing the backups of a VM (PR [#6220](https://github.com/vatesfr/xen-orchestra/pull/6220))
- [RPU/Host] If some backup jobs are running on the pool, ask for confirmation before starting an RPU, shutdown/rebooting a host or restarting a host's toolstack (PR [6232](https://github.com/vatesfr/xen-orchestra/pull/6232))
- [XO Web] Add ability to configure a default filter for Storage [#6236](https://github.com/vatesfr/xen-orchestra/issues/6236) (PR [#6237](https://github.com/vatesfr/xen-orchestra/pull/6237))
@@ -2539,7 +2539,7 @@
### Bug fixes
- [S3] Fix S3 remote with empty directory not showing anything to restore (PR [#6218](https://github.com/vatesfr/xen-orchestra/pull/6218))
- [S3] remote fom did not save the `https` and `allow unatuhorized`during remote creation (PR [#6219](https://github.com/vatesfr/xen-orchestra/pull/6219))
- [S3] remote fom did not save the `https` and `allow unauthorized`during remote creation (PR [#6219](https://github.com/vatesfr/xen-orchestra/pull/6219))
- [VM/advanced] Fix various errors when adding ACLs [#6213](https://github.com/vatesfr/xen-orchestra/issues/6213) (PR [#6230](https://github.com/vatesfr/xen-orchestra/pull/6230))
- [Home/Self] Don't make VM's resource set name clickable for non admin users as they aren't allowed to view the Self Service page (PR [#6252](https://github.com/vatesfr/xen-orchestra/pull/6252))
- [load-balancer] Fix density mode failing to shutdown hosts (PR [#6253](https://github.com/vatesfr/xen-orchestra/pull/6253))
@@ -2707,7 +2707,7 @@
### Highlights
- [New SR] Add confirmation message before creating local SR (PR [#6121](https://github.com/vatesfr/xen-orchestra/pull/6121))
- [Dashboad/Health] List all VDIs that need coalescing (PR [#6120](https://github.com/vatesfr/xen-orchestra/pull/6120))
- [Dashboard/Health] List all VDIs that need coalescing (PR [#6120](https://github.com/vatesfr/xen-orchestra/pull/6120))
- [Delta Backup/Restore] Ability to choose SR for each VDI [#4605](https://github.com/vatesfr/xen-orchestra/issues/4605), [#4016](https://github.com/vatesfr/xen-orchestra/issues/4016) (PR [#6117](https://github.com/vatesfr/xen-orchestra/pull/6117))
### Enhancements
@@ -2757,7 +2757,7 @@
- [Backup] Delete S3 backups completely, even if there are more than 1000 files (PR [#6103](https://github.com/vatesfr/xen-orchestra/pull/6103))
- [Backup] Fix merge resuming (PR [#6099](https://github.com/vatesfr/xen-orchestra/pull/6099))
- [Plugin/Audit] Fix `key cannot be 'null' or 'undefined'` error when no audit log in the database [#6040](https://github.com/vatesfr/xen-orchestra/issues/6040) (PR [#6071](https://github.com/vatesfr/xen-orchestra/pull/6071))
- [Backup] Fix backuping restored VMs
- [Backup] Fix backing up restored VMs
- [Audit Log] Don't log `proxy.getApplianceUpdaterState` API calls
- [Audit Log] Fix long data loading when displaying logs (PR [#6113](https://github.com/vatesfr/xen-orchestra/pull/6113))

View File

@@ -20,7 +20,7 @@
### Bug fixes
- [Dashboard/Health] Fix `error has occured` when a pool has no default SR
- [Dashboard/Health] Fix `error has occurred` when a pool has no default SR
- [Delta Backup] Fix unnecessary full backup when not using S3 [Forum#5371](https://xcp-ng.org/forum/topic/5371/delta-backup-changes-in-5-66) (PR [#6070](https://github.com/vatesfr/xen-orchestra/pull/6070))
- [Backup] Fix incorrect warnings `incorrect size [...] instead of undefined`
@@ -97,7 +97,7 @@
- [Delta Backup Restoration] Fix assertion error [Forum#5257](https://xcp-ng.org/forum/topic/5257/problems-building-from-source/16)
- [Delta Backup Restoration] `TypeError: this disposable has already been disposed` [Forum#5257](https://xcp-ng.org/forum/topic/5257/problems-building-from-source/20)
- [Backups] Fix: `Error: Chaining alias is forbidden xo-vm-backups/..alias.vhd to xo-vm-backups/....alias.vhd` when backuping a file to s3 [Forum#5226](https://xcp-ng.org/forum/topic/5256/s3-backup-try-it)
- [Backups] Fix: `Error: Chaining alias is forbidden xo-vm-backups/..alias.vhd to xo-vm-backups/....alias.vhd` when backing up a file to s3 [Forum#5226](https://xcp-ng.org/forum/topic/5256/s3-backup-try-it)
- [Delta Backup Restoration] `VDI_IO_ERROR(Device I/O errors)` [Forum#5727](https://xcp-ng.org/forum/topic/5257/problems-building-from-source/4) (PR [#6031](https://github.com/vatesfr/xen-orchestra/pull/6031))
- [Delta Backup] Fix `Cannot read property 'uuid' of undefined` when a VDI has been removed from a backed up VM (PR [#6034](https://github.com/vatesfr/xen-orchestra/pull/6034))
@@ -121,7 +121,7 @@
### Enhancements
- [S3] Ability to authorize self signed certificates for S3 remote (PR [#5961](https://github.com/vatesfr/xen-orchestra/pull/5961))
- [S3] Ability to authorize self-signed certificates for S3 remote (PR [#5961](https://github.com/vatesfr/xen-orchestra/pull/5961))
### Bug fixes
@@ -270,7 +270,7 @@
### Bug fixes
- [VM/disks] Fix `an error has occured` when self service user was on VM disk view (PR [#5841](https://github.com/vatesfr/xen-orchestra/pull/5841))
- [VM/disks] Fix `an error has occurred` when self service user was on VM disk view (PR [#5841](https://github.com/vatesfr/xen-orchestra/pull/5841))
- [Backup] Protect replicated VMs from being started on specific hosts (PR [#5852](https://github.com/vatesfr/xen-orchestra/pull/5852))
### Released packages
@@ -300,7 +300,7 @@
- [IPs] Handle space-delimited IP address format provided by outdated guest tools [5801](https://github.com/vatesfr/xen-orchestra/issues/5801) (PR [5805](https://github.com/vatesfr/xen-orchestra/pull/5805))
- [API/pool.listPoolsMatchingCriteria] fix `unknown error from the peer` error (PR [5807](https://github.com/vatesfr/xen-orchestra/pull/5807))
- [Backup] Limit number of connections to hosts, which should reduce the occurences of `ECONNRESET`
- [Backup] Limit number of connections to hosts, which should reduce the occurrences of `ECONNRESET`
- [Plugins/perf-alert] All mode: only selects running hosts and VMs (PR [5811](https://github.com/vatesfr/xen-orchestra/pull/5811))
- [New VM] Fix summary section always showing "0 B" for RAM (PR [#5817](https://github.com/vatesfr/xen-orchestra/pull/5817))
- [Backup/Restore] Fix _start VM after restore_ [5820](https://github.com/vatesfr/xen-orchestra/issues/5820)
@@ -876,9 +876,9 @@
- [Proxy/deploy] Ability to set HTTP proxy configuration (PR [#5145](https://github.com/vatesfr/xen-orchestra/pull/5145))
- [Import/OVA] Allow for VMDK disks inside .ova files to be gzipped (PR [#5085](https://github.com/vatesfr/xen-orchestra/pull/5085))
- [Proxy] Show pending upgrades (PR [#5167](https://github.com/vatesfr/xen-orchestra/pull/5167))
- [SDN Controller] Add/Remove netork traffic rules for a VM's VIFs (PR [#5135](https://github.com/vatesfr/xen-orchestra/pull/5135))
- [SDN Controller] Add/Remove network traffic rules for a VM's VIFs (PR [#5135](https://github.com/vatesfr/xen-orchestra/pull/5135))
- [Backup/health] Show VM snapshots with missing jobs, schedules or VMs [#5086](https://github.com/vatesfr/xen-orchestra/issues/5086) (PR [#5125](https://github.com/vatesfr/xen-orchestra/pull/5125))
- [New delta backup] Show a warning icon when the advanced full backup interval setting and the backup retention are higher than 50 (PR (https://github.com/vatesfr/xen-orchestra/pull/5144))
- [New delta backup] Show a warning icon when the advanced full backup interval setting and the backup retention are greater than 50 (PR (https://github.com/vatesfr/xen-orchestra/pull/5144))
- [VM/network] Improve the network locking mode feedback [#4713](https://github.com/vatesfr/xen-orchestra/issues/4713) (PR [#5170](https://github.com/vatesfr/xen-orchestra/pull/5170))
- [Remotes] Add AWS S3 as a backup storage
- [New VM] Only make network boot option first when the VM has no disks or when the network installation is chosen [#4980](https://github.com/vatesfr/xen-orchestra/issues/4980) (PR [#5119](https://github.com/vatesfr/xen-orchestra/pull/5119))
@@ -996,7 +996,7 @@
- [Home/SR] Fix inability to edit SRs' name [#5057](https://github.com/vatesfr/xen-orchestra/issues/5057) (PR [#5058](https://github.com/vatesfr/xen-orchestra/pull/5058))
- [Backup] Fix huge logs in case of Continuous Replication or Disaster Recovery errors (PR [#5069](https://github.com/vatesfr/xen-orchestra/pull/5069))
- [Notification] Fix same notification showing again as unread (PR [#5067](https://github.com/vatesfr/xen-orchestra/pull/5067))
- [SDN Controller] Fix broken private network creation when specifiyng a preferred center [#5076](https://github.com/vatesfr/xen-orchestra/issues/5076) (PRs [#5079](https://github.com/vatesfr/xen-orchestra/pull/5079) & [#5080](https://github.com/vatesfr/xen-orchestra/pull/5080))
- [SDN Controller] Fix broken private network creation when specifying a preferred center [#5076](https://github.com/vatesfr/xen-orchestra/issues/5076) (PRs [#5079](https://github.com/vatesfr/xen-orchestra/pull/5079) & [#5080](https://github.com/vatesfr/xen-orchestra/pull/5080))
- [Import/VMDK] Import of VMDK disks has been broken since 5.45.0 (PR [#5087](https://github.com/vatesfr/xen-orchestra/pull/5087))
- [Remotes] Fix not displayed used/total disk (PR [#5093](https://github.com/vatesfr/xen-orchestra/pull/5093))
- [Perf alert] Regroup items with missing stats in one email [#3137](https://github.com/vatesfr/xen-orchestra/issues/3137) (PR [#4413](https://github.com/vatesfr/xen-orchestra/pull/4413))
@@ -1077,7 +1077,7 @@
### Enhancements
- [Snapshot] Confirmation message before creating a snapshot with memory [#4914](https://github.com/vatesfr/xen-orchestra/issues/4914) (PR [#4917](https://github.com/vatesfr/xen-orchestra/pull/4917))
- Automatic generation of self signed certificate if `autoCert` is not `false` in `xo-server`'s configuration in the corresponding `http.listen` section (PR [#4954](https://github.com/vatesfr/xen-orchestra/pull/4954))
- Automatic generation of self-signed certificate if `autoCert` is not `false` in `xo-server`'s configuration in the corresponding `http.listen` section (PR [#4954](https://github.com/vatesfr/xen-orchestra/pull/4954))
- [Self] Better error when not enough available resources (PR [#4952](https://github.com/vatesfr/xen-orchestra/pull/4952))
- [Backup/run job] Confirmation modal: show the number of VMs that will be backed up (PR [#4875](https://github.com/vatesfr/xen-orchestra/pull/4875))
@@ -1451,7 +1451,7 @@
- [VM/disks] Don't hide disks that are attached to the same VM twice [#4400](https://github.com/vatesfr/xen-orchestra/issues/4400) (PR [#4414](https://github.com/vatesfr/xen-orchestra/pull/4414))
- [SDN Controller] Ability to configure MTU for private networks (PR [#4491](https://github.com/vatesfr/xen-orchestra/pull/4491))
- [VM Export] Filenames are now prefixed with datetime [#4503](https://github.com/vatesfr/xen-orchestra/issues/4503)
- [Settings/Logs] Differenciate XS/XCP-ng errors from XO errors [#4101](https://github.com/vatesfr/xen-orchestra/issues/4101) (PR [#4385](https://github.com/vatesfr/xen-orchestra/pull/4385))
- [Settings/Logs] Differentiate XS/XCP-ng errors from XO errors [#4101](https://github.com/vatesfr/xen-orchestra/issues/4101) (PR [#4385](https://github.com/vatesfr/xen-orchestra/pull/4385))
- [Backups] Improve performance by caching logs consolidation (PR [#4541](https://github.com/vatesfr/xen-orchestra/pull/4541))
- [New VM] Cloud Init available for all plans (PR [#4543](https://github.com/vatesfr/xen-orchestra/pull/4543))
- [Servers] IPv6 addresses can be used [#4520](https://github.com/vatesfr/xen-orchestra/issues/4520) (PR [#4521](https://github.com/vatesfr/xen-orchestra/pull/4521)) \
@@ -2244,7 +2244,7 @@
### Bug fixes
- [Backup Reports] Report not sent if reportWhen failure and at least a VM is successfull [#3181](https://github.com/vatesfr/xen-orchestra/issues/3181) (PR [#3185](https://github.com/vatesfr/xen-orchestra/pull/3185))
- [Backup Reports] Report not sent if reportWhen failure and at least a VM is successful [#3181](https://github.com/vatesfr/xen-orchestra/issues/3181) (PR [#3185](https://github.com/vatesfr/xen-orchestra/pull/3185))
- [Backup NG] Correctly migrate report setting from legacy jobs [#3180](https://github.com/vatesfr/xen-orchestra/issues/3180) (PR [#3206](https://github.com/vatesfr/xen-orchestra/pull/3206))
- [Backup NG] remove incomplete XVA files [#3159](https://github.com/vatesfr/xen-orchestra/issues/3159) (PR [#3215](https://github.com/vatesfr/xen-orchestra/pull/3215))
- [Backup NG form] Ability to edit a schedule's state [#3223](https://github.com/vatesfr/xen-orchestra/issues/3223) (PR [#3228](https://github.com/vatesfr/xen-orchestra/pull/3228))
@@ -2305,7 +2305,7 @@
### Enhancements
- Hide legacy backup creation view [#2956](https://github.com/vatesfr/xen-orchestra/issues/2956)
- [Delta Backup NG logs] Display wether the export is a full or a delta [#2711](https://github.com/vatesfr/xen-orchestra/issues/2711)
- [Delta Backup NG logs] Display whether the export is a full or a delta [#2711](https://github.com/vatesfr/xen-orchestra/issues/2711)
- Copy VDIs' UUID from SR/disks view [#3051](https://github.com/vatesfr/xen-orchestra/issues/3051)
- [Backup NG] New option to shutdown VMs before snapshotting them [#3058](https://github.com/vatesfr/xen-orchestra/issues/3058#event-1673756438)
- [Backup NG form] Improve feedback [#2711](https://github.com/vatesfr/xen-orchestra/issues/2711)
@@ -2315,7 +2315,7 @@
- Add Backup deprecation message and link to Backup NG migration blog post [#3089](https://github.com/vatesfr/xen-orchestra/issues/3089)
- [Backup NG] Ability to cancel a running backup job [#3047](https://github.com/vatesfr/xen-orchestra/issues/3047)
- [Backup NG form] Ability to enable/disable a schedule [#3062](https://github.com/vatesfr/xen-orchestra/issues/3062)
- New backup/health view with non-existent backup snapshots table [#3090](https://github.com/vatesfr/xen-orchestra/issues/3090)
- New backup/health view with nonexistent backup snapshots table [#3090](https://github.com/vatesfr/xen-orchestra/issues/3090)
- Disable cancel/destroy tasks when not allowed [#3076](https://github.com/vatesfr/xen-orchestra/issues/3076)
- Default remote type is NFS [#3103](https://github.com/vatesfr/xen-orchestra/issues/3103) (PR [#3114](https://github.com/vatesfr/xen-orchestra/pull/3114))
- Add legacy backups snapshots to backup/health [#3082](https://github.com/vatesfr/xen-orchestra/issues/3082) (PR [#3111](https://github.com/vatesfr/xen-orchestra/pull/3111))
@@ -2404,7 +2404,7 @@
- Backup paths should not contain tags but job ids [#1854](https://github.com/vatesfr/xen-orchestra/issues/1854)
- Add a button to delete a backup [#1751](https://github.com/vatesfr/xen-orchestra/issues/1751)
- Dashboard available for Pool and Host level [#1631](https://github.com/vatesfr/xen-orchestra/issues/1631)
- UI Enhancement - VM list - Allways show the Toolbar [#1581](https://github.com/vatesfr/xen-orchestra/issues/1581)
- UI Enhancement - VM list - Always show the Toolbar [#1581](https://github.com/vatesfr/xen-orchestra/issues/1581)
- xoa-updater --register: unable to define proxy using the CLI [#873](https://github.com/vatesfr/xen-orchestra/issues/873)
### Bugs
@@ -2563,7 +2563,7 @@
- Allow xo-server-recover-account to generate a random password [#2360](https://github.com/vatesfr/xen-orchestra/issues/2360)
- Add disk in existing VM as self user [#2348](https://github.com/vatesfr/xen-orchestra/issues/2348)
- Sorted table for Settings/server [#2340](https://github.com/vatesfr/xen-orchestra/issues/2340)
- Sign in should be case insensitive [#2337](https://github.com/vatesfr/xen-orchestra/issues/2337)
- Sign in should be case-insensitive [#2337](https://github.com/vatesfr/xen-orchestra/issues/2337)
- [SortedTable] Extend checkbox click to whole column [#2329](https://github.com/vatesfr/xen-orchestra/issues/2329)
- [SortedTable] Ability to select all items (across pages) [#2324](https://github.com/vatesfr/xen-orchestra/issues/2324)
- [SortedTable] Range selection [#2323](https://github.com/vatesfr/xen-orchestra/issues/2323)
@@ -2580,7 +2580,7 @@
- Errors in VM copy are not properly reported [#2347](https://github.com/vatesfr/xen-orchestra/issues/2347)
- Removing a PIF IP fails [#2346](https://github.com/vatesfr/xen-orchestra/issues/2346)
- Review and fix creating a VM from a snapshot [#2343](https://github.com/vatesfr/xen-orchestra/issues/2343)
- iSCSI LUN Detection fails with authentification [#2339](https://github.com/vatesfr/xen-orchestra/issues/2339)
- iSCSI LUN Detection fails with authentication [#2339](https://github.com/vatesfr/xen-orchestra/issues/2339)
- Fix PoolActionBar to add a new SR [#2307](https://github.com/vatesfr/xen-orchestra/issues/2307)
- [VM migration] Error if default SR not accessible to target host [#2180](https://github.com/vatesfr/xen-orchestra/issues/2180)
- A job shouldn't executable more than once at the same time [#2053](https://github.com/vatesfr/xen-orchestra/issues/2053)
@@ -2635,7 +2635,7 @@
- IP pool UI improvement [\#2203](https://github.com/vatesfr/xen-orchestra/issues/2203)
- Ability to clear "Auto power on" flag for DR-ed VM [\#2097](https://github.com/vatesfr/xen-orchestra/issues/2097)
- [Delta backup restoration] Choose SR for each VDIs [\#2070](https://github.com/vatesfr/xen-orchestra/issues/2070)
- Ability to forget an host (even if no longer present) [\#1934](https://github.com/vatesfr/xen-orchestra/issues/1934)
- Ability to forget a host (even if no longer present) [\#1934](https://github.com/vatesfr/xen-orchestra/issues/1934)
### Bug fixes
@@ -2765,7 +2765,7 @@ Reporting, LVM File level restore.
- Do not stop patches install if already applied [\#1904](https://github.com/vatesfr/xen-orchestra/issues/1904)
- Improve scheduling UI [\#1893](https://github.com/vatesfr/xen-orchestra/issues/1893)
- Smart backup and tag [\#1885](https://github.com/vatesfr/xen-orchestra/issues/1885)
- Missing embeded API documention [\#1882](https://github.com/vatesfr/xen-orchestra/issues/1882)
- Missing embedded API documentation [\#1882](https://github.com/vatesfr/xen-orchestra/issues/1882)
- Add local DVD in CD selector [\#1880](https://github.com/vatesfr/xen-orchestra/issues/1880)
- File level restore for LVM [\#1878](https://github.com/vatesfr/xen-orchestra/issues/1878)
- Restore multiple files from file level restore [\#1877](https://github.com/vatesfr/xen-orchestra/issues/1877)
@@ -2842,7 +2842,7 @@ File level restore.
- Expose XAPI exceptions in the UI [\#1481](https://github.com/vatesfr/xen-orchestra/issues/1481)
- Running VMs in the host overview, all VMs in the pool overview [\#1432](https://github.com/vatesfr/xen-orchestra/issues/1432)
- Move location of NFS mount point [\#1405](https://github.com/vatesfr/xen-orchestra/issues/1405)
- Home: Pool list - additionnal informations for pool [\#1226](https://github.com/vatesfr/xen-orchestra/issues/1226)
- Home: Pool list - additional informations for pool [\#1226](https://github.com/vatesfr/xen-orchestra/issues/1226)
- Modify VLAN of an existing network [\#1092](https://github.com/vatesfr/xen-orchestra/issues/1092)
- Wrong instructions for CLI upgrade [\#787](https://github.com/vatesfr/xen-orchestra/issues/787)
- Ability to export/import XO config [\#786](https://github.com/vatesfr/xen-orchestra/issues/786)
@@ -2934,7 +2934,7 @@ File level restore.
- Backup restore stalled on some SMB shares [\#1412](https://github.com/vatesfr/xen-orchestra/issues/1412)
- Wrong bond display [\#1156](https://github.com/vatesfr/xen-orchestra/issues/1156)
- Multiple reboot selection doesn't work [\#1562](https://github.com/vatesfr/xen-orchestra/issues/1562)
- Server logs should be displayed in reverse chonological order [\#1547](https://github.com/vatesfr/xen-orchestra/issues/1547)
- Server logs should be displayed in reverse chronological order [\#1547](https://github.com/vatesfr/xen-orchestra/issues/1547)
- Cannot create resource sets without limits [\#1537](https://github.com/vatesfr/xen-orchestra/issues/1537)
- UI - Weird display when editing long VM desc [\#1528](https://github.com/vatesfr/xen-orchestra/issues/1528)
- Useless iso selector in host console [\#1527](https://github.com/vatesfr/xen-orchestra/issues/1527)
@@ -3106,7 +3106,7 @@ File level restore.
- Missing SRs [\#1123](https://github.com/vatesfr/xen-orchestra/issues/1123)
- Continuous replication email alert does not obey per job setting [\#1121](https://github.com/vatesfr/xen-orchestra/issues/1121)
- Safari XO5 issue [\#1120](https://github.com/vatesfr/xen-orchestra/issues/1120)
- ACLs shoud be available in Enterprise Edition [\#1118](https://github.com/vatesfr/xen-orchestra/issues/1118)
- ACLs should be available in Enterprise Edition [\#1118](https://github.com/vatesfr/xen-orchestra/issues/1118)
- SR edit name or description doesn't work [\#1116](https://github.com/vatesfr/xen-orchestra/issues/1116)
- Bad RRD parsing for VIFs [\#969](https://github.com/vatesfr/xen-orchestra/issues/969)
@@ -3129,7 +3129,7 @@ File level restore.
- ACL: Ability to view/sort/group by User/Group, Objects or Role [\#875](https://github.com/vatesfr/xen-orchestra/issues/875)
- ACL: Ability to select multiple users & group when creating a rule [\#874](https://github.com/vatesfr/xen-orchestra/issues/874)
- Translation [\#839](https://github.com/vatesfr/xen-orchestra/issues/839)
- XO offer useless network interfaces for XenMontion [\#833](https://github.com/vatesfr/xen-orchestra/issues/833)
- XO offer useless network interfaces for XenMotion [\#833](https://github.com/vatesfr/xen-orchestra/issues/833)
- Show HVM, PVM, PVHVM modes in guest details [\#806](https://github.com/vatesfr/xen-orchestra/issues/806)
- Tree view: display cpu available/total for each host [\#696](https://github.com/vatesfr/xen-orchestra/issues/696)
- Greenkeeper integration [\#667](https://github.com/vatesfr/xen-orchestra/issues/667)
@@ -3215,7 +3215,7 @@ Load balancing, SMB delta support, advanced network operations...
- Self service: should the user be able to set the CPU weight? [\#767](https://github.com/vatesfr/xen-orchestra/issues/767)
- host & pool Citrix license status [\#763](https://github.com/vatesfr/xen-orchestra/issues/763)
- pool view: Provide "updates" section [\#762](https://github.com/vatesfr/xen-orchestra/issues/762)
- XOA ISO image: ambigious root disk label [\#761](https://github.com/vatesfr/xen-orchestra/issues/761)
- XOA ISO image: ambiguous root disk label [\#761](https://github.com/vatesfr/xen-orchestra/issues/761)
- Host info: provide system serial number [\#760](https://github.com/vatesfr/xen-orchestra/issues/760)
- CIFS ISO SR Creation [\#731](https://github.com/vatesfr/xen-orchestra/issues/731)
- MAC address not preserved on VM restore [\#707](https://github.com/vatesfr/xen-orchestra/issues/707)
@@ -3335,7 +3335,7 @@ Delta backup, CloudInit...
- Visible list of SR inside a VM [\#601](https://github.com/vatesfr/xen-orchestra/issues/601)
- VDI move [\#591](https://github.com/vatesfr/xen-orchestra/issues/591)
- Edit pre-existing disk configuration during VM creation [\#589](https://github.com/vatesfr/xen-orchestra/issues/589)
- Edit preexisting disk configuration during VM creation [\#589](https://github.com/vatesfr/xen-orchestra/issues/589)
- Allow disk size edition [\#587](https://github.com/vatesfr/xen-orchestra/issues/587)
- Better VDI resize support [\#585](https://github.com/vatesfr/xen-orchestra/issues/585)
- Remove manual VM export metadata in UI [\#580](https://github.com/vatesfr/xen-orchestra/issues/580)
@@ -3400,7 +3400,7 @@ Job management, email notifications, CoreOS/Docker, Quiesce snapshots...
- Logs from CLI ([xo-web#486](https://github.com/vatesfr/xen-orchestra/issues/486))
- Save disconnected servers ([xo-web#489](https://github.com/vatesfr/xen-orchestra/issues/489))
- Snapshot with quiesce ([xo-web#491](https://github.com/vatesfr/xen-orchestra/issues/491))
- Start VM in reovery mode ([xo-web#495](https://github.com/vatesfr/xen-orchestra/issues/495))
- Start VM in recovery mode ([xo-web#495](https://github.com/vatesfr/xen-orchestra/issues/495))
- Username in logs ([xo-web#498](https://github.com/vatesfr/xen-orchestra/issues/498))
- Delete associated tokens with user ([xo-web#500](https://github.com/vatesfr/xen-orchestra/issues/500))
- Validate plugin configuration ([xo-web#503](https://github.com/vatesfr/xen-orchestra/issues/503))
@@ -3673,7 +3673,7 @@ it.
### Bug fixes
- wrong calulation of RAM amounts ([xo-web#51](https://github.com/vatesfr/xen-orchestra/issues/51))
- wrong calculation of RAM amounts ([xo-web#51](https://github.com/vatesfr/xen-orchestra/issues/51))
- checkbox not aligned ([xo-web#253](https://github.com/vatesfr/xen-orchestra/issues/253))
- VM stats behavior more robust ([xo-web#250](https://github.com/vatesfr/xen-orchestra/issues/250))
- XO not on the root of domain ([xo-web#254](https://github.com/vatesfr/xen-orchestra/issues/254))
@@ -3820,7 +3820,7 @@ _[XO-Web](https://www.npmjs.org/package/xo-web) and [XO-Server](https://www.npmj
- settings page now only accessible to admin ([#77](https://github.com/vatesfr/xen-orchestra/issues/77))
- redirection to the home page when a VM is deleted from its own page ([#56](https://github.com/vatesfr/xen-orchestra/issues/56))
- XO-Web published on npm ([#123](https://github.com/vatesfr/xen-orchestra/issues/123))
- buid process now use Browserify (([#125](https://github.com/vatesfr/xen-orchestra/issues/125), [#135](https://github.com/vatesfr/xen-orchestra/issues/135)))
- build process now use Browserify (([#125](https://github.com/vatesfr/xen-orchestra/issues/125), [#135](https://github.com/vatesfr/xen-orchestra/issues/135)))
- view are now written in Jade instead of HTML ([#124](https://github.com/vatesfr/xen-orchestra/issues/124))
- CSS autoprefixer to improve compatibility ([#132](https://github.com/vatesfr/xen-orchestra/issues/132), [#137](https://github.com/vatesfr/xen-orchestra/issues/137))

View File

@@ -1,6 +1,6 @@
# ACLs
ACLs are permissions that apply to pre-existing objects. Only a super admin (XO administrator) can create objects.
ACLs are permissions that apply to preexisting objects. Only a super admin (XO administrator) can create objects.
ACLs are the permissions for your users or groups. The ACLs view can be accessed in the "Settings" panel.

View File

@@ -252,7 +252,7 @@ When the power outage is over, all you need to do is:
Terraform is a cloud/platform agnostic tool for building, changing, and versioning infrastructure. Terraform can manage existing and popular service providers as well as custom in-house solutions (like Xen Orchestra). It can manage resources through their entire lifecycle or even manage infrastructure it didn't initially create.
We sponsored a developer to build a [Xen Orchestra provider for Terraform](https://registry.terraform.io/providers/vatesfr/xenorchestra/latest), so you can use it as a central point for your whole virtualized infrastructure. The source code is [available on Github](https://github.com/vatesfr/terraform-provider-xenorchestra/), and contributions are welcome!
We sponsored a developer to build a [Xen Orchestra provider for Terraform](https://registry.terraform.io/providers/vatesfr/xenorchestra/latest), so you can use it as a central point for your whole virtualized infrastructure. The source code is [available on GitHub](https://github.com/vatesfr/terraform-provider-xenorchestra/), and contributions are welcome!
:::tip
Don't miss [our blog post series about it](https://xen-orchestra.com/blog/author/ddelnano/), written by Dom Del Nano, the original developer of this provider!

View File

@@ -257,7 +257,7 @@ Usage:
Full path of the action to execute
<name>=<value>...
Paramaters to pass to the action
Parameters to pass to the action
Examples:
xo-cli rest post tasks/<task id>/actions/abort

View File

@@ -35,7 +35,7 @@ Without this detection, you could have 2 potential issues:
The first issue is a chain that contains more than 30 elements (fixed XCP-ng/XenServer limit), and the other one means it's full because the "coalesce" process couldn't keep up the pace and the storage filled up.
In the end, this message is a **protection mechanism preventing damage to your SR**. The backup job will fail, but XCP-ng/XenServer itself should eventually automatically coalesce the snapshot chain, and the the next time the backup job should complete.
In the end, this message is a **protection mechanism preventing damage to your SR**. The backup job will fail, but XCP-ng/XenServer itself should eventually automatically coalesce the snapshot chain, and the next time the backup job should complete.
Just remember this: **a coalesce should happen every time a snapshot is removed**.
@@ -117,7 +117,7 @@ To solve this issue, we recommend that you:
This error occurs when XO tries to fetch data from a host, via the HTTP GET method. This error essentially means that the host (dom0 specifically) isn't responding anymore, after we asked it to expose the disk to be exported. This could be a symptom of having an overloaded dom0 that couldn't respond fast enough. It can also be caused by dom0 having trouble attaching the disk in question to expose it for fetching via HTTP, or just not having enough resources to answer our GET request.
::: warning
As a temporary workaround you can increase the timeout higher than the default value, to allow the host more time to respond. But you will need to eventually diagnose the root cause of the slow host response or else you risk the issue returning.
As a temporary workaround you can increase the timeout greater than the default value, to allow the host more time to respond. But you will need to eventually diagnose the root cause of the slow host response or else you risk the issue returning.
:::
Create the following file:

View File

@@ -256,7 +256,7 @@ Xen Orchestra supports Amazon S3 storage and other S3-compatible providers, so y
## Restore a backup
All your scheduled backups are acccessible in the "Restore" view in the backup section of Xen Orchestra.
All your scheduled backups are accessible in the "Restore" view in the backup section of Xen Orchestra.
1. Search the VM Name and click on the blue button with a white arrow
2. Choose the backup you want to restore
@@ -537,7 +537,7 @@ If a VM has the tag **xo-backup-healthcheck-xenstore** during a backup health ch
In case of `failure`, it will mark the health check as failed, and will show the (optional) message contained in `vm-data/xo-backup-health-check-error`
The script needs to be planned on boot. It can check if the record `vm-data/xo-backup-health-check` of the local xenstore contains `planned`
to differenciate a normal boot and a boot during health check.
to differentiate a normal boot and a boot during health check.
On success it must write `success`in `vm-data/xo-backup-health-check`.
On failure it must write `failure` in `vm-data/xo-backup-health-check`, and may optionally add details in `vm-data/xo-backup-health-check-error` .
@@ -545,7 +545,7 @@ The total timeout of a backup health check (boot + guest tools + scripts) is 10m
The restored VM is then deleted.
An example in bash is shown in `@xen-orchestra/backups/docs/healtcheck example/wait30seconds.sh`
An example in bash is shown in `@xen-orchestra/backups/docs/healthcheck example/wait30seconds.sh`
### Running Health checks

View File

@@ -14,7 +14,7 @@ Full backups are space consuming! But they allow a very simple restoration witho
### Restore backups
All your scheduled backup are acccessible in the "Restore" view in backup section of Xen Orchestra.
All your scheduled backup are accessible in the "Restore" view in backup section of Xen Orchestra.
1. Select your mountpoint
2. Choose the file you want to restore

View File

@@ -63,7 +63,7 @@ This advanced setting defines the number of backups after which a key backup is
For example, with a value of 2, the first two backups will be a key and a delta, and the third will start a new chain with a full backup.
This is important because on rare occasions a backup can be corrupted, and in the case of incremetnal backups, this corruption might impact all the following backups in the chain. Occasionally performing a full backup limits how far a corrupted delta backup can propagate.
This is important because on rare occasions a backup can be corrupted, and in the case of incremental backups, this corruption might impact all the following backups in the chain. Occasionally performing a full backup limits how far a corrupted delta backup can propagate.
The value to use depends on your storage constraints and the frequency of your backups, but a value of 20 is a good start.

View File

@@ -61,7 +61,7 @@ This advanced setting defines the number of backups after which a key backup is
For example, with a value of 2, the first two backups will be a key and a delta, and the third will start a new chain with a full backup.
This is important because on rare occasions a backup can be corrupted, and in the case of incremetnal backups, this corruption might impact all the following backups in the chain. Occasionally performing a full backup limits how far a corrupted delta backup can propagate.
This is important because on rare occasions a backup can be corrupted, and in the case of incremental backups, this corruption might impact all the following backups in the chain. Occasionally performing a full backup limits how far a corrupted delta backup can propagate.
The value to use depends on your storage constraints and the frequency of your backups, but a value of 20 is a good start.

View File

@@ -29,7 +29,7 @@ Once you have started the VM, you can access the web UI by putting the IP you co
### Registration
**The first thing** you need to do with your XOA is register. [Read the documentation on the page dedicated to the updater/register inferface](updater.md#register).
**The first thing** you need to do with your XOA is register. [Read the documentation on the page dedicated to the updater/register interface](updater.md#register).
:::tip
We don't generate virtual appliances every month (unlike XO code itself). It's very likely you'll need to update Xen Orchestra after the initial deploy. You need to register to do so!
@@ -83,7 +83,7 @@ This installation has been validated against a fresh Debian 12 (Bookworm) x64 in
As you may have seen in other parts of the documentation, XO is composed of two parts: [xo-server](https://github.com/vatesfr/xen-orchestra/tree/master/packages/xo-server/) and [xo-web](https://github.com/vatesfr/xen-orchestra/tree/master/packages/xo-web/). They can be installed separately, even on different machines, but for the sake of simplicity we will set them up together.
### Packages and Pre-requisites
### Packages and Prerequisites
#### NodeJS
@@ -292,7 +292,7 @@ That's why we have to notify these companies about XOA: it's better to run XO wi
As a home user, you can support the XO project in a lot of ways: spreading the word, giving your feedback, finding bugs and ultimately contribute to the code. Keeping this banner is also a way to support us!
:::tip
Exceptional individual contributers are awarded with a free XOA Premium subscription. If you think you deserve it, feel free to contact us!
Exceptional individual contributors are awarded with a free XOA Premium subscription. If you think you deserve it, feel free to contact us!
:::
### Troubleshooting
@@ -369,7 +369,7 @@ ulimit -n 10240
ln -s /usr/local/bin/node /tmp/node
```
If `yarn` cannot find Python, give it an hand :
If `yarn` cannot find Python, give it a hand :
```sh
PYTHON=/usr/local/bin/python2 yarn

View File

@@ -8,7 +8,7 @@ Xen Orchestra is an Open Source project created by [Olivier Lambert](https://www
## Initial idea
The idea of Xen Orchestra was origally born in 2009, see the original announcement on [Xen User mailing list](https://lists.xenproject.org/archives/html/xen-users/2009-09/msg00537.html). It worked on Xen and `xend` (now deprecated).
The idea of Xen Orchestra was originally born in 2009, see the original announcement on [Xen User mailing list](https://lists.xenproject.org/archives/html/xen-users/2009-09/msg00537.html). It worked on Xen and `xend` (now deprecated).
## XO reboot for XCP-ng/XenServer
@@ -24,4 +24,4 @@ After Citrix decided to close at lot of XenServer features, Olivier Lambert deci
## Team and contributors
See the [dedicated Github page](https://github.com/vatesfr/xen-orchestra/graphs/contributors) for all contributors.
See the [dedicated GitHub page](https://github.com/vatesfr/xen-orchestra/graphs/contributors) for all contributors.

View File

@@ -113,7 +113,7 @@ The default performance plan attempts to migrate VMs only when critical usage of
#### vCPU balancing
When the pool's load is low (under 40% CPU usage), this option attempts to pre-emptively distribute your VMs across hosts to avoid excessive disparities in the number of vCPUs per CPU, instead of just waiting for a host to be overloaded. In this way, VMs are pre-positioned in a way that is likely to trigger less migrations when the load increases.
When the pool's load is low (under 40% CPU usage), this option attempts to preemptively distribute your VMs across hosts to avoid excessive disparities in the number of vCPUs per CPU, instead of just waiting for a host to be overloaded. In this way, VMs are pre-positioned in a way that is likely to trigger less migrations when the load increases.
## VM anti-affinity

View File

@@ -131,7 +131,7 @@ Simply type the string, if it contains special characters just surround it with
- `"string with special characters like whitespaces"`
:::tip
The search is recursive, case insensitive and non-anchored (i.e. matches if the pattern is contained in a string).
The search is recursive, case-insensitive and non-anchored (i.e. matches if the pattern is contained in a string).
:::
A simple string can also contain a wildcard character (`*`) to match any character in a portion of the string:
@@ -296,7 +296,7 @@ This is the network section of the VM configuration: in general, MAC field is ke
This section is for configuring new or existing disks (according to your selected template).
:::tip
Protip: avoid using large disks for your VMs. Want to store a lot of files? Use a network share for that (NFS, SMB) and keep using VMs with small system disks. It's far easier to maintain, migrate, backup and restore!
Pro tip: avoid using large disks for your VMs. Want to store a lot of files? Use a network share for that (NFS, SMB) and keep using VMs with small system disks. It's far easier to maintain, migrate, backup and restore!
:::
## VM management
@@ -426,7 +426,7 @@ You can create a snapshot with one click. It will be named automatically. After
- delete this snapshot
:::tip
By default, XOA will try to make a snapshot with quiesce. If the VM does not support it, it will fallback to the default snapshot system.
By default, XOA will try to make a snapshot with quiesce. If the VM does not support it, it will fall back to the default snapshot system.
:::
## VM import and export
@@ -501,7 +501,7 @@ To prevent a virtual machine from migrating:
1. Go to the VM's configuration page.
2. Go to the **Advanced** tab.
3. Activate the **Prevent migration** toggle switch.
3. Activate the **Prevent migration** toggle switch.
When this option is enabled, the VM won't be able to migrate to another host.
@@ -773,7 +773,7 @@ If your infrastructure works properly, this view should be empty. If not, the ca
### Orphan VDIs
Orphan VDIs are are disks not associated with a VM. If you're sure you don't need it, you can easily delete them using the trash icon.
Orphan VDIs are disks not associated with a VM. If you're sure you don't need it, you can easily delete them using the trash icon.
### VDIs attached to Control Domain

View File

@@ -2,7 +2,7 @@
### Deploy new appliance
First step, you have to deploy a new appliance. All needed information is [here](installation.md)
First step, you have to deploy a new appliance. All necessary information can be found in [installation](installation.md).
### Export configuration

View File

@@ -18,7 +18,7 @@ If you have full and incremental backups on a remote, you must configure 2 mirro
## synchronizing algorithm for full backups
Any new backup on the source is transfered to the remote
Any new backup on the source is transferred to the remote
_key backup(full) are in upper case, delta backup are in lowercase_ . _Source has a retention of 3, destination has 4_
@@ -31,7 +31,7 @@ _key backup(full) are in upper case, delta backup are in lowercase_ . _Source ha
will transfer in order A , then B, and C. Destination will contains ABC
> **Limitation:** if the mirror retention is lower than the backup retention on the source remote, more data than necessary may be transferred during the first run, since all the backups of the source will be transfered to the destinations. Then the older backups will be purged on the destinations.
> **Limitation:** if the mirror retention is lower than the backup retention on the source remote, more data than necessary may be transferred during the first run, since all the backups of the source will be transferred to the destinations. Then the older backups will be purged on the destinations.
### Second transfer
@@ -75,7 +75,7 @@ _key backup(full) are in upper case, delta backup are in lowercase_ . _Source ha
will transfer in order A , then b, and c. Destination will contains Abc
> **Limitation:** if the mirror retention is lower than the backup retention on the source remote, more data than necessary may be transferred during the first run, since all the backups of the source will be transfered to the destinations. Then the older backups will be purged on the destinations.
> **Limitation:** if the mirror retention is lower than the backup retention on the source remote, more data than necessary may be transferred during the first run, since all the backups of the source will be transferred to the destinations. Then the older backups will be purged on the destinations.
### Second transfer

View File

@@ -138,7 +138,7 @@ If you choose a Stripe payment, you can always edit the credit card information
If you want to upgrade your active plan to a higher version of Xen Orchestra, you can do it from your **personal space**.
### Step by step:
### Step by step
1. Connect on your personal account on the [website](https://xen-orchestra.com/#!/login?source=member.index).
@@ -156,7 +156,7 @@ If you want to upgrade your active plan to a higher version of Xen Orchestra, yo
![](./assets/upgradestep4.png)
5. If you chosse wire transfer, you have now the possibility to download a quote. As you can see, the remaining period of your previous plan is now a credit note applied on this upgrade.
5. If you choose wire transfer, you have now the possibility to download a quote. As you can see, the remaining period of your previous plan is now a credit note applied on this upgrade.
![](./assets/upgradestep5.png)
@@ -167,5 +167,5 @@ If you want to upgrade your active plan to a higher version of Xen Orchestra, yo
7. **Enjoy your new plan!**
:::tip
As a reseller, the process is quite the same. The only difference is that you have to pick your customer line into you reseller space an not your personal space.
As a reseller, the process is quite the same. The only difference is that you have to pick your customer line into you reseller space and not your personal space.
:::

View File

@@ -11,7 +11,7 @@ XOA (**X**en **O**rchestra virtual **A**ppliance) is the pre-installed VM with:
- complete QA (tested) to guarantee it will work
- a web updater
- bundled remote support capabilities
- extra services (XO Hub, XO Recipies, Advanced metrics, XOSAN…)
- extra services (XO Hub, XO Recipes, Advanced metrics, XOSAN…)
- secured system (sudo, firewall)
It's really trivial to deploy it, as you can see [in the XOA install section](installation.md#xoa).
@@ -24,7 +24,7 @@ In any case, we suggest that you try XOA first, regardless your future usage. It
See the [updates dedicated section](updater.md) to learn how to keep your XOA up to date.
## Github updates
## GitHub updates
If you decide to install it [from the sources](installation.md#from-the-sources), please **always** try to stick to `master` as possible. Before opening any bug report or topic on the forum, update to the latest commit.

View File

@@ -125,7 +125,7 @@ Content-Type: application/x-ndjson
### Specific task
When fetching a task record, the special `wait` query string can be used. If its value is `result` it will wait for the task to be resolved (either success or failure) before returning, otherwise it will wait for the next change of state.
When fetching a task record, the special `wait` query string can be used. If its value is `result` it will wait for the task to be resolved (either success or failure) before returning; otherwise, it will wait for the next change of state.
```sh
curl \
@@ -405,7 +405,7 @@ The Swagger API documentation is still a work in progress. Not all endpoints are
#### Accessing the Xen Orchestra API documentation in Swagger
Both versions of the API are now available at `/rest/v0`. However, only the endpoints that have been migrated to the new Swagger setup will show up in the documentation at `/rest/v0/docs`.
Both versions of the API are now available at `/rest/v0`. However, only the endpoints that have been migrated to the new Swagger setup will show up in the documentation at `/rest/v0/docs`.
The Swagger UI doesn't just provide documentation of available endpoints. It also **lets you test them directly from the interface**, making it easier to experiment with the API without writing any code.

View File

@@ -4,7 +4,7 @@ The SDN Controller enables a user to **create pool-wide and cross-pool private n
## Global Private Networks
Interconnect your VMs and hosts within a dedicated and secured private network, even accross different pools all around the world. This is a great way to protect "private links" (eg between applications and databases, management networks etc.) without any complicated deployment.
Interconnect your VMs and hosts within a dedicated and secured private network, even across different pools all around the world. This is a great way to protect "private links" (eg between applications and databases, management networks etc.) without any complicated deployment.
![](./assets/gpn.png)

View File

@@ -85,7 +85,7 @@ Please enter your xen-orchestra.com identifiers to register your XOA:
? Email: myemail@example.net
? Password: *****
ℹ Your Xen Orchestra Appliance has been succesfully registered
ℹ Your Xen Orchestra Appliance has been successfully registered
```
#### Check for new versions

Some files were not shown because too many files have changed in this diff Show More