feat(xo-server/host): ability to enable/disable multipathing (#3858)

See #3659
This commit is contained in:
badrAZ 2019-01-14 15:01:44 +01:00 committed by Julien Fontanet
parent 270185d9dc
commit ea48136797
2 changed files with 44 additions and 2 deletions

View File

@ -2,14 +2,22 @@ import { format } from 'json-rpc-peer'
// =================================================================== // ===================================================================
export function set({ export async function set({
host, host,
multipathing,
// TODO: use camel case. // TODO: use camel case.
name_label: nameLabel, name_label: nameLabel,
name_description: nameDescription, name_description: nameDescription,
}) { }) {
return this.getXapi(host).setHostProperties(host._xapiId, { const xapi = this.getXapi(host)
const hostId = host._xapiId
if (multipathing !== undefined) {
await xapi.setHostMultipathing(hostId, multipathing)
}
return xapi.setHostProperties(hostId, {
nameLabel, nameLabel,
nameDescription, nameDescription,
}) })
@ -27,6 +35,10 @@ set.params = {
type: 'string', type: 'string',
optional: true, optional: true,
}, },
multipathing: {
type: 'boolean',
optional: true,
},
} }
set.resolve = { set.resolve = {

View File

@ -415,6 +415,36 @@ export default class Xapi extends XapiBase {
await this.call('host.enable', this.getObject(hostId).$ref) await this.call('host.enable', this.getObject(hostId).$ref)
} }
@deferrable.onError(log.warn)
async setHostMultipathing($defer, hostId, multipathing) {
const host = this.getObject(hostId)
const pluggedPbds = host.$PBDs.filter(pbd => pbd.currently_attached)
await asyncMap(pluggedPbds, async pbd => {
const ref = pbd.$ref
await this.unplugPbd(ref)
$defer(() => this.plugPbd(ref))
})
if (host.enabled) {
await this.disableHost(hostId)
$defer(() => this.enableHost(hostId))
}
return this._updateObjectMapProperty(
host,
'other_config',
multipathing
? {
multipathing: 'true',
multipathhandle: 'dmp',
}
: {
multipathing: 'false',
}
)
}
async powerOnHost(hostId) { async powerOnHost(hostId) {
await this.call('host.power_on', this.getObject(hostId).$ref) await this.call('host.power_on', this.getObject(hostId).$ref)
} }