open-nomad/ui/app/adapters/node.js
2023-04-10 15:36:59 +00:00

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 },
});
}
}