From f60e24edd039d6fb31586430d7baeccef5d24a98 Mon Sep 17 00:00:00 2001 From: mathieuRA Date: Tue, 26 Dec 2023 10:11:53 +0100 Subject: [PATCH] feat(xo-server/PIF): add XO tasks for PIF.reconfigureIp --- packages/xo-server/src/api/pif.mjs | 40 +++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/packages/xo-server/src/api/pif.mjs b/packages/xo-server/src/api/pif.mjs index 2e98faaa3c4..08e5ff94aa4 100644 --- a/packages/xo-server/src/api/pif.mjs +++ b/packages/xo-server/src/api/pif.mjs @@ -2,6 +2,7 @@ import filter from 'lodash/filter.js' import find from 'lodash/find.js' +import { Task } from '@xen-orchestra/mixins/Tasks.mjs' import { IPV4_CONFIG_MODES, IPV6_CONFIG_MODES } from '../xapi/index.mjs' @@ -74,18 +75,33 @@ connect.resolve = { // Reconfigure IP export async function reconfigureIp({ pif, mode, ip = '', netmask = '', gateway = '', dns = '', ipv6, ipv6Mode }) { - const xapi = this.getXapi(pif) - - if ((ipv6 !== '' && pif.ipv6?.[0] !== ipv6) || (ipv6Mode !== undefined && ipv6Mode !== pif.ipv6Mode)) { - await xapi.call('PIF.reconfigure_ipv6', pif._xapiRef, ipv6Mode, ipv6, gateway, dns) - } - - if (mode !== undefined && mode !== pif.mode) { - await xapi.call('PIF.reconfigure_ip', pif._xapiRef, mode, ip, netmask, gateway, dns) - } - if (pif.management) { - await xapi.call('host.management_reconfigure', pif._xapiRef) - } + const task = this.tasks.create({ + name: `reconfigure ip of: ${pif.device}`, + objectId: pif.uuid, + type: 'xo:pif:reconfigureIp', + }) + await task.run(async () => { + const xapi = this.getXapi(pif) + + if ((ipv6 !== '' && pif.ipv6?.[0] !== ipv6) || (ipv6Mode !== undefined && ipv6Mode !== pif.ipv6Mode)) { + await Task.run( + { properties: { name: 'reconfigure IPv6', mode: ipv6Mode, ipv6, gateway, dns, objectId: pif.uuid } }, + () => xapi.call('PIF.reconfigure_ipv6', pif._xapiRef, ipv6Mode, ipv6, gateway, dns) + ) + } + + if (mode !== undefined && mode !== pif.mode) { + await Task.run( + { properties: { name: 'reconfigure IPv4', mode, ip, netmask, gateway, dns, objectId: pif.uuid } }, + () => xapi.call('PIF.reconfigure_ip', pif._xapiRef, mode, ip, netmask, gateway, dns) + ) + } + if (pif.management) { + await Task.run({ properties: { name: 'reconfigure PIF management', objectId: pif.uuid } }, () => + xapi.call('host.management_reconfigure', pif._xapiRef) + ) + } + }) } reconfigureIp.params = {