diff --git a/@xen-orchestra/vmware-explorer/esxi.mjs b/@xen-orchestra/vmware-explorer/esxi.mjs index d5ca1d9e5..5ce10f28d 100644 --- a/@xen-orchestra/vmware-explorer/esxi.mjs +++ b/@xen-orchestra/vmware-explorer/esxi.mjs @@ -1,4 +1,5 @@ import { Client } from '@vates/node-vsphere-soap' +import { createLogger } from '@xen-orchestra/log' import { dirname } from 'node:path' import { EventEmitter } from 'node:events' import { strictEqual, notStrictEqual } from 'node:assert' @@ -9,6 +10,8 @@ import parseVmdk from './parsers/vmdk.mjs' import parseVmsd from './parsers/vmsd.mjs' import parseVmx from './parsers/vmx.mjs' +const { warn } = createLogger('xo:vmware-explorer:esxi') + export default class Esxi extends EventEmitter { #client #cookies @@ -64,7 +67,7 @@ export default class Esxi extends EventEmitter { }) } - async download(dataStore, path, range) { + async #download(dataStore, path, range) { strictEqual(this.#ready, true) notStrictEqual(this.#dcPath, undefined) const url = new URL('https://localhost') @@ -102,6 +105,24 @@ export default class Esxi extends EventEmitter { return res } + async download(dataStore, path, range) { + let tries = 5 + let lastError + while (tries > 0) { + try { + const res = await this.#download(dataStore, path, range) + return res + } catch (error) { + warn('got error , will retry in 2 seconds', { error }) + lastError = error + } + await new Promise(resolve => setTimeout(() => resolve(), 2000)) + tries-- + } + + throw lastError + } + // inspired from https://github.com/reedog117/node-vsphere-soap/blob/master/test/vsphere-soap.test.js#L95 async search(type, properties) { // get property collector diff --git a/@xen-orchestra/vmware-explorer/package.json b/@xen-orchestra/vmware-explorer/package.json index 68deb3461..82e2dd21c 100644 --- a/@xen-orchestra/vmware-explorer/package.json +++ b/@xen-orchestra/vmware-explorer/package.json @@ -4,11 +4,12 @@ "version": "0.2.3", "name": "@xen-orchestra/vmware-explorer", "dependencies": { - "@vates/task": "^0.2.0", + "@vates/node-vsphere-soap": "^1.0.0", "@vates/read-chunk": "^1.1.1", + "@vates/task": "^0.2.0", + "@xen-orchestra/log": "^0.6.0", "lodash": "^4.17.21", "node-fetch": "^3.3.0", - "@vates/node-vsphere-soap": "^1.0.0", "vhd-lib": "^4.5.0" }, "engines": { diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 21bacbd64..a0da8116f 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -38,6 +38,7 @@ - @vates/nbd-client major - @vates/node-vsphere-soap major - @xen-orchestra/backups minor +- @xen-orchestra/vmware-explorer minor - @xen-orchestra/xapi major - complex-matcher patch - xen-api patch