77 lines
1.6 KiB
JavaScript
77 lines
1.6 KiB
JavaScript
/**
|
|
* 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 },
|
|
});
|
|
}
|
|
}
|