/** * Copyright (c) HashiCorp, Inc. * SPDX-License-Identifier: MPL-2.0 */ import Watchable from './watchable'; import addToPath from 'nomad-ui/utils/add-to-path'; import classic from 'ember-classic-decorator'; @classic export default class NodeAdapter extends Watchable { setEligible(node) { return this.setEligibility(node, true); } setIneligible(node) { return this.setEligibility(node, false); } setEligibility(node, isEligible) { const url = addToPath( this.urlForFindRecord(node.id, 'node'), '/eligibility' ); return this.ajax(url, 'POST', { data: { NodeID: node.id, Eligibility: isEligible ? 'eligible' : 'ineligible', }, }); } // Force: -1s deadline // No Deadline: 0 deadline drain(node, drainSpec) { const url = addToPath(this.urlForFindRecord(node.id, 'node'), '/drain'); return this.ajax(url, 'POST', { data: { NodeID: node.id, DrainSpec: Object.assign( { Deadline: 0, IgnoreSystemJobs: true, }, drainSpec ), }, }); } forceDrain(node, drainSpec) { return this.drain( node, Object.assign({}, drainSpec, { Deadline: -1, }) ); } cancelDrain(node) { const url = addToPath(this.urlForFindRecord(node.id, 'node'), '/drain'); return this.ajax(url, 'POST', { data: { NodeID: node.id, DrainSpec: null, }, }); } addMeta(node, newMeta) { const url = `/v1/client/metadata?node_id=${node.id}`; return this.ajax(url, 'POST', { data: { Meta: newMeta }, }); } }