diff --git a/packages/xo-server-load-balancer/src/density-plan.js b/packages/xo-server-load-balancer/src/density-plan.js index 25019c1c0..c3064ec76 100644 --- a/packages/xo-server-load-balancer/src/density-plan.js +++ b/packages/xo-server-load-balancer/src/density-plan.js @@ -3,9 +3,7 @@ import clone from 'lodash.clonedeep' import { default as mapToArray } from 'lodash.map' import Plan from './plan' -import { - debug -} from './utils' +import { debug } from './utils' // =================================================================== diff --git a/packages/xo-server-load-balancer/src/performance-plan.js b/packages/xo-server-load-balancer/src/performance-plan.js index 981a2e627..f372c2d21 100644 --- a/packages/xo-server-load-balancer/src/performance-plan.js +++ b/packages/xo-server-load-balancer/src/performance-plan.js @@ -1,5 +1,6 @@ import filter from 'lodash.filter' import find from 'lodash.find' +import { default as mapToArray } from 'lodash.map' import Plan from './plan' import { debug } from './utils' @@ -36,6 +37,21 @@ export default class PerformancePlan extends Plan { } async execute () { + // Try to power on a hosts set. + try { + await Promise.all( + mapToArray( + filter(this._getHosts({ powerState: 'Halted' }), host => host.powerOnMode !== ''), + host => { + const { id } = host + return this.xo.getXapi(id).powerOnHost(id) + } + ) + ) + } catch (error) { + console.error(error) + } + const results = await this._findHostsToOptimize() if (!results) { diff --git a/packages/xo-server-load-balancer/src/plan.js b/packages/xo-server-load-balancer/src/plan.js index 2f24b0ce9..274368355 100644 --- a/packages/xo-server-load-balancer/src/plan.js +++ b/packages/xo-server-load-balancer/src/plan.js @@ -186,11 +186,11 @@ export default class Plan { } // Compute hosts for each pool. They can change over time. - _getHosts () { + _getHosts ({ powerState = 'Running' } = {}) { return filter(this.xo.getObjects(), object => ( object.type === 'host' && includes(this._poolIds, object.$poolId) && - object.power_state !== 'Halted' && + object.power_state === powerState && !includes(this._excludedHosts, object.id) )) }