chore(api): decaffeinate host (#641)
This commit is contained in:
parent
d5deaf72f7
commit
a601154fc7
@ -1,321 +0,0 @@
|
||||
$debug = (require 'debug') 'xo:api:vm'
|
||||
$find = require 'lodash/find'
|
||||
$findIndex = require 'lodash/findIndex'
|
||||
$forEach = require 'lodash/forEach'
|
||||
endsWith = require 'lodash/endsWith'
|
||||
startsWith = require 'lodash/startsWith'
|
||||
{coroutine: $coroutine} = require 'bluebird'
|
||||
{format} = require 'json-rpc-peer'
|
||||
{
|
||||
extractProperty,
|
||||
mapToArray,
|
||||
parseXml
|
||||
} = require '../utils'
|
||||
|
||||
#=====================================================================
|
||||
|
||||
set = ({
|
||||
host,
|
||||
|
||||
# TODO: use camel case.
|
||||
name_label: nameLabel,
|
||||
name_description: nameDescription
|
||||
}) ->
|
||||
return @getXapi(host).setHostProperties(host._xapiId, {
|
||||
nameLabel,
|
||||
nameDescription
|
||||
})
|
||||
|
||||
set.description = 'changes the properties of an host'
|
||||
|
||||
set.params =
|
||||
id: type: 'string'
|
||||
name_label:
|
||||
type: 'string'
|
||||
optional: true
|
||||
name_description:
|
||||
type: 'string'
|
||||
optional: true
|
||||
|
||||
set.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
exports.set = set
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
# FIXME: set force to false per default when correctly implemented in
|
||||
# UI.
|
||||
restart = ({host, force = true}) ->
|
||||
return @getXapi(host).rebootHost(host._xapiId, force)
|
||||
|
||||
restart.description = 'restart the host'
|
||||
|
||||
restart.params = {
|
||||
id: { type: 'string' },
|
||||
force: {
|
||||
type: 'boolean',
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
|
||||
restart.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
exports.restart = restart
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
restartAgent = ({host}) ->
|
||||
return @getXapi(host).restartHostAgent(host._xapiId)
|
||||
|
||||
restartAgent.description = 'restart the Xen agent on the host'
|
||||
|
||||
restartAgent.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
restartAgent.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
# TODO camel case
|
||||
exports.restart_agent = restartAgent
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
start = ({host}) ->
|
||||
return @getXapi(host).powerOnHost(host._xapiId)
|
||||
|
||||
start.description = 'start the host'
|
||||
|
||||
start.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
start.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
exports.start = start
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
stop = ({host}) ->
|
||||
return @getXapi(host).shutdownHost(host._xapiId)
|
||||
|
||||
stop.description = 'stop the host'
|
||||
|
||||
stop.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
stop.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
exports.stop = stop
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
detach = ({host}) ->
|
||||
return @getXapi(host).ejectHostFromPool(host._xapiId)
|
||||
|
||||
detach.description = 'eject the host of a pool'
|
||||
|
||||
detach.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
detach.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
exports.detach = detach
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
enable = ({host}) ->
|
||||
return @getXapi(host).enableHost(host._xapiId)
|
||||
|
||||
enable.description = 'enable to create VM on the host'
|
||||
|
||||
enable.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
enable.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
exports.enable = enable
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
disable = ({host}) ->
|
||||
return @getXapi(host).disableHost(host._xapiId)
|
||||
|
||||
disable.description = 'disable to create VM on the hsot'
|
||||
|
||||
disable.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
disable.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
exports.disable = disable
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
forget = ({host}) ->
|
||||
return @getXapi(host).forgetHost(host._xapiId)
|
||||
|
||||
forget.description = 'remove the host record from XAPI database'
|
||||
|
||||
forget.params = {
|
||||
id: { type: 'string' }
|
||||
}
|
||||
|
||||
forget.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
exports.forget = forget
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# Returns an array of missing new patches in the host
|
||||
# Returns an empty array if up-to-date
|
||||
# Throws an error if the host is not running the latest XS version
|
||||
|
||||
listMissingPatches = ({host}) ->
|
||||
return @getXapi(host).listMissingPoolPatchesOnHost(host._xapiId)
|
||||
|
||||
listMissingPatches.params = {
|
||||
host: { type: 'string' }
|
||||
}
|
||||
|
||||
listMissingPatches.resolve = {
|
||||
host: ['host', 'host', 'view'],
|
||||
}
|
||||
|
||||
exports.listMissingPatches = listMissingPatches
|
||||
|
||||
listMissingPatches.description = 'return an array of missing new patches in the host'
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
installPatch = ({host, patch: patchUuid}) ->
|
||||
return @getXapi(host).installPoolPatchOnHost(patchUuid, host._xapiId)
|
||||
|
||||
installPatch.description = 'install a patch on an host'
|
||||
|
||||
installPatch.params = {
|
||||
host: { type: 'string' }
|
||||
patch: { type: 'string' }
|
||||
}
|
||||
|
||||
installPatch.resolve = {
|
||||
host: ['host', 'host', 'administrate']
|
||||
}
|
||||
|
||||
exports.installPatch = installPatch
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
installAllPatches = ({host}) ->
|
||||
return @getXapi(host).installAllPoolPatchesOnHost(host._xapiId)
|
||||
|
||||
installAllPatches.description = 'install all the missing patches on a host'
|
||||
|
||||
installAllPatches.params = {
|
||||
host: { type: 'string' }
|
||||
}
|
||||
|
||||
installAllPatches.resolve = {
|
||||
host: ['host', 'host', 'administrate']
|
||||
}
|
||||
|
||||
exports.installAllPatches = installAllPatches
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
emergencyShutdownHost = ({host}) ->
|
||||
return @getXapi(host).emergencyShutdownHost(host._xapiId)
|
||||
|
||||
emergencyShutdownHost.description = 'suspend all VMs and shutdown host'
|
||||
|
||||
emergencyShutdownHost.params = {
|
||||
host: { type: 'string' }
|
||||
}
|
||||
|
||||
emergencyShutdownHost.resolve = {
|
||||
host: ['host', 'host', 'administrate']
|
||||
}
|
||||
|
||||
exports.emergencyShutdownHost = emergencyShutdownHost
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
stats = ({host, granularity}) ->
|
||||
return @getXapiHostStats(host, granularity)
|
||||
|
||||
stats.description = 'returns statistic of the host'
|
||||
|
||||
stats.params = {
|
||||
host: { type: 'string' },
|
||||
granularity: {
|
||||
type: 'string',
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
|
||||
stats.resolve = {
|
||||
host: ['host', 'host', 'view']
|
||||
}
|
||||
|
||||
exports.stats = stats;
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
|
||||
handleInstallSupplementalPack = $coroutine (req, res, { hostId }) ->
|
||||
xapi = @getXapi(hostId)
|
||||
|
||||
# Timeout seems to be broken in Node 4.
|
||||
# See https://github.com/nodejs/node/issues/3319
|
||||
req.setTimeout(43200000) # 12 hours
|
||||
req.length = req.headers['content-length']
|
||||
|
||||
try
|
||||
yield xapi.installSupplementalPack(req, { hostId })
|
||||
res.end(format.response(0))
|
||||
catch e
|
||||
res.writeHead(500)
|
||||
res.end(format.error(0, new Error(e.message)))
|
||||
|
||||
return
|
||||
|
||||
installSupplementalPack = $coroutine ({host}) ->
|
||||
return {
|
||||
$sendTo: yield @registerHttpRequest(handleInstallSupplementalPack, { hostId: host.id })
|
||||
}
|
||||
|
||||
installSupplementalPack.description = 'installs supplemental pack from ISO file'
|
||||
|
||||
installSupplementalPack.params = {
|
||||
host: { type: 'string' }
|
||||
}
|
||||
|
||||
installSupplementalPack.resolve = {
|
||||
host: ['host', 'host', 'admin']
|
||||
}
|
||||
|
||||
exports.installSupplementalPack = installSupplementalPack;
|
||||
|
||||
#=====================================================================
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
})
|
295
src/api/host.js
Normal file
295
src/api/host.js
Normal file
@ -0,0 +1,295 @@
|
||||
|
||||
import {format} from 'json-rpc-peer'
|
||||
|
||||
// ===================================================================
|
||||
|
||||
export function set ({
|
||||
host,
|
||||
|
||||
// TODO: use camel case.
|
||||
name_label: nameLabel,
|
||||
name_description: nameDescription,
|
||||
}) {
|
||||
return this.getXapi(host).setHostProperties(host._xapiId, {
|
||||
nameLabel,
|
||||
nameDescription,
|
||||
})
|
||||
}
|
||||
|
||||
set.description = 'changes the properties of an host'
|
||||
|
||||
set.params = {
|
||||
id: { type: 'string' },
|
||||
name_label: {
|
||||
type: 'string',
|
||||
optional: true,
|
||||
},
|
||||
name_description: {
|
||||
type: 'string',
|
||||
optional: true,
|
||||
},
|
||||
}
|
||||
|
||||
set.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
// FIXME: set force to false per default when correctly implemented in
|
||||
// UI.
|
||||
export function restart ({ host, force = true }) {
|
||||
return this.getXapi(host).rebootHost(host._xapiId, force)
|
||||
}
|
||||
|
||||
restart.description = 'restart the host'
|
||||
|
||||
restart.params = {
|
||||
id: { type: 'string' },
|
||||
force: {
|
||||
type: 'boolean',
|
||||
optional: true,
|
||||
},
|
||||
}
|
||||
|
||||
restart.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function restartAgent ({host}) {
|
||||
return this.getXapi(host).restartHostAgent(host._xapiId)
|
||||
}
|
||||
|
||||
restartAgent.description = 'restart the Xen agent on the host'
|
||||
|
||||
restartAgent.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
restartAgent.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// TODO: remove deprecated alias
|
||||
export { restartAgent as restart_agent } // eslint-disable-line camelcase
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function start ({host}) {
|
||||
return this.getXapi(host).powerOnHost(host._xapiId)
|
||||
}
|
||||
|
||||
start.description = 'start the host'
|
||||
|
||||
start.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
start.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function stop ({host}) {
|
||||
return this.getXapi(host).shutdownHost(host._xapiId)
|
||||
}
|
||||
|
||||
stop.description = 'stop the host'
|
||||
|
||||
stop.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
stop.resolve = {
|
||||
host: ['id', 'host', 'operate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function detach ({host}) {
|
||||
return this.getXapi(host).ejectHostFromPool(host._xapiId)
|
||||
}
|
||||
|
||||
detach.description = 'eject the host of a pool'
|
||||
|
||||
detach.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
detach.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function enable ({host}) {
|
||||
return this.getXapi(host).enableHost(host._xapiId)
|
||||
}
|
||||
|
||||
enable.description = 'enable to create VM on the host'
|
||||
|
||||
enable.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
enable.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function disable ({host}) {
|
||||
return this.getXapi(host).disableHost(host._xapiId)
|
||||
}
|
||||
|
||||
disable.description = 'disable to create VM on the hsot'
|
||||
|
||||
disable.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
disable.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function forget ({host}) {
|
||||
return this.getXapi(host).forgetHost(host._xapiId)
|
||||
}
|
||||
|
||||
forget.description = 'remove the host record from XAPI database'
|
||||
|
||||
forget.params = {
|
||||
id: { type: 'string' },
|
||||
}
|
||||
|
||||
forget.resolve = {
|
||||
host: ['id', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
// Returns an array of missing new patches in the host
|
||||
// Returns an empty array if up-to-date
|
||||
// Throws an error if the host is not running the latest XS version
|
||||
export function listMissingPatches ({host}) {
|
||||
return this.getXapi(host).listMissingPoolPatchesOnHost(host._xapiId)
|
||||
}
|
||||
|
||||
listMissingPatches.description = 'return an array of missing new patches in the host'
|
||||
|
||||
listMissingPatches.params = {
|
||||
host: { type: 'string' },
|
||||
}
|
||||
|
||||
listMissingPatches.resolve = {
|
||||
host: ['host', 'host', 'view'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function installPatch ({host, patch: patchUuid}) {
|
||||
return this.getXapi(host).installPoolPatchOnHost(patchUuid, host._xapiId)
|
||||
}
|
||||
|
||||
installPatch.description = 'install a patch on an host'
|
||||
|
||||
installPatch.params = {
|
||||
host: { type: 'string' },
|
||||
patch: { type: 'string' },
|
||||
}
|
||||
|
||||
installPatch.resolve = {
|
||||
host: ['host', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function installAllPatches ({host}) {
|
||||
return this.getXapi(host).installAllPoolPatchesOnHost(host._xapiId)
|
||||
}
|
||||
|
||||
installAllPatches.description = 'install all the missing patches on a host'
|
||||
|
||||
installAllPatches.params = {
|
||||
host: { type: 'string' },
|
||||
}
|
||||
|
||||
installAllPatches.resolve = {
|
||||
host: ['host', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function emergencyShutdownHost ({host}) {
|
||||
return this.getXapi(host).emergencyShutdownHost(host._xapiId)
|
||||
}
|
||||
|
||||
emergencyShutdownHost.description = 'suspend all VMs and shutdown host'
|
||||
|
||||
emergencyShutdownHost.params = {
|
||||
host: { type: 'string' },
|
||||
}
|
||||
|
||||
emergencyShutdownHost.resolve = {
|
||||
host: ['host', 'host', 'administrate'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
export function stats ({host, granularity}) {
|
||||
return this.getXapiHostStats(host, granularity)
|
||||
}
|
||||
|
||||
stats.description = 'returns statistic of the host'
|
||||
|
||||
stats.params = {
|
||||
host: { type: 'string' },
|
||||
granularity: {
|
||||
type: 'string',
|
||||
optional: true,
|
||||
},
|
||||
}
|
||||
|
||||
stats.resolve = {
|
||||
host: ['host', 'host', 'view'],
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
async function handleInstallSupplementalPack (req, res, { hostId }) {
|
||||
const xapi = this.getXapi(hostId)
|
||||
|
||||
// Timeout seems to be broken in Node 4.
|
||||
// See https://github.com/nodejs/node/issues/3319
|
||||
req.setTimeout(43200000) // 12 hours
|
||||
req.length = req.headers['content-length']
|
||||
|
||||
try {
|
||||
await xapi.installSupplementalPack(req, { hostId })
|
||||
res.end(format.response(0))
|
||||
} catch (e) {
|
||||
res.writeHead(500)
|
||||
res.end(format.error(0, new Error(e.message)))
|
||||
}
|
||||
}
|
||||
|
||||
export async function installSupplementalPack ({host}) {
|
||||
return {
|
||||
$sendTo: (await this.registerHttpRequest(handleInstallSupplementalPack, { hostId: host.id })),
|
||||
}
|
||||
}
|
||||
|
||||
installSupplementalPack.description = 'installs supplemental pack from ISO file'
|
||||
|
||||
installSupplementalPack.params = {
|
||||
host: { type: 'string' },
|
||||
}
|
||||
|
||||
installSupplementalPack.resolve = {
|
||||
host: ['host', 'host', 'admin'],
|
||||
}
|
Loading…
Reference in New Issue
Block a user