2020-06-12 05:19:08 +00:00
|
|
|
import WatchableNamespaceIDs from './watchable-namespace-ids';
|
2019-05-15 22:33:58 +00:00
|
|
|
import addToPath from 'nomad-ui/utils/add-to-path';
|
2021-07-20 22:27:41 +00:00
|
|
|
import { base64EncodeString } from 'nomad-ui/utils/encode';
|
2022-03-08 17:28:36 +00:00
|
|
|
import classic from 'ember-classic-decorator';
|
2017-09-19 14:47:10 +00:00
|
|
|
|
2022-03-08 17:28:36 +00:00
|
|
|
@classic
|
2020-06-11 21:23:00 +00:00
|
|
|
export default class JobAdapter extends WatchableNamespaceIDs {
|
2020-06-12 20:48:52 +00:00
|
|
|
relationshipFallbackLinks = {
|
2018-03-23 01:57:20 +00:00
|
|
|
summary: '/summary',
|
2020-06-12 20:48:52 +00:00
|
|
|
};
|
2018-03-23 01:57:20 +00:00
|
|
|
|
2017-09-19 14:47:10 +00:00
|
|
|
fetchRawDefinition(job) {
|
2018-07-05 19:29:29 +00:00
|
|
|
const url = this.urlForFindRecord(job.get('id'), 'job');
|
2018-07-05 18:24:14 +00:00
|
|
|
return this.ajax(url, 'GET');
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-01-26 22:32:11 +00:00
|
|
|
|
|
|
|
forcePeriodic(job) {
|
|
|
|
if (job.get('periodic')) {
|
2021-12-28 16:08:12 +00:00
|
|
|
const url = addToPath(
|
|
|
|
this.urlForFindRecord(job.get('id'), 'job'),
|
|
|
|
'/periodic/force'
|
|
|
|
);
|
2018-01-26 22:32:11 +00:00
|
|
|
return this.ajax(url, 'POST');
|
|
|
|
}
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-04-18 19:17:55 +00:00
|
|
|
|
|
|
|
stop(job) {
|
|
|
|
const url = this.urlForFindRecord(job.get('id'), 'job');
|
|
|
|
return this.ajax(url, 'DELETE');
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-08-15 00:29:51 +00:00
|
|
|
|
|
|
|
parse(spec) {
|
|
|
|
const url = addToPath(this.urlForFindAll('job'), '/parse');
|
|
|
|
return this.ajax(url, 'POST', {
|
|
|
|
data: {
|
|
|
|
JobHCL: spec,
|
|
|
|
Canonicalize: true,
|
|
|
|
},
|
|
|
|
});
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-08-15 00:29:51 +00:00
|
|
|
|
|
|
|
plan(job) {
|
2019-10-08 18:44:19 +00:00
|
|
|
const jobId = job.get('id') || job.get('_idBeforeSaving');
|
2019-03-26 07:46:44 +00:00
|
|
|
const store = this.store;
|
2018-08-23 22:40:42 +00:00
|
|
|
const url = addToPath(this.urlForFindRecord(jobId, 'job'), '/plan');
|
|
|
|
|
2018-08-15 00:29:51 +00:00
|
|
|
return this.ajax(url, 'POST', {
|
|
|
|
data: {
|
|
|
|
Job: job.get('_newDefinitionJSON'),
|
|
|
|
Diff: true,
|
|
|
|
},
|
2021-12-28 14:45:20 +00:00
|
|
|
}).then((json) => {
|
2018-08-23 22:40:42 +00:00
|
|
|
json.ID = jobId;
|
|
|
|
store.pushPayload('job-plan', { jobPlans: [json] });
|
|
|
|
return store.peekRecord('job-plan', jobId);
|
2018-08-15 00:29:51 +00:00
|
|
|
});
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-08-15 01:26:26 +00:00
|
|
|
|
|
|
|
// Running a job doesn't follow REST create semantics so it's easier to
|
|
|
|
// treat it as an action.
|
|
|
|
run(job) {
|
|
|
|
return this.ajax(this.urlForCreateRecord('job'), 'POST', {
|
|
|
|
data: {
|
|
|
|
Job: job.get('_newDefinitionJSON'),
|
|
|
|
},
|
|
|
|
});
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2018-08-21 23:39:47 +00:00
|
|
|
|
|
|
|
update(job) {
|
2019-10-08 18:44:19 +00:00
|
|
|
const jobId = job.get('id') || job.get('_idBeforeSaving');
|
|
|
|
return this.ajax(this.urlForUpdateRecord(jobId, 'job'), 'POST', {
|
2018-08-21 23:39:47 +00:00
|
|
|
data: {
|
|
|
|
Job: job.get('_newDefinitionJSON'),
|
|
|
|
},
|
|
|
|
});
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|
2020-06-17 08:48:10 +00:00
|
|
|
|
2020-07-30 15:43:15 +00:00
|
|
|
scale(job, group, count, message) {
|
2021-12-28 16:08:12 +00:00
|
|
|
const url = addToPath(
|
|
|
|
this.urlForFindRecord(job.get('id'), 'job'),
|
|
|
|
'/scale'
|
|
|
|
);
|
2020-06-17 08:48:10 +00:00
|
|
|
return this.ajax(url, 'POST', {
|
|
|
|
data: {
|
|
|
|
Count: count,
|
2020-07-30 15:43:15 +00:00
|
|
|
Message: message,
|
2020-06-17 08:48:10 +00:00
|
|
|
Target: {
|
|
|
|
Group: group,
|
|
|
|
},
|
|
|
|
Meta: {
|
|
|
|
Source: 'nomad-ui',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
2021-07-20 22:27:41 +00:00
|
|
|
|
|
|
|
dispatch(job, meta, payload) {
|
2021-12-28 16:08:12 +00:00
|
|
|
const url = addToPath(
|
|
|
|
this.urlForFindRecord(job.get('id'), 'job'),
|
|
|
|
'/dispatch'
|
|
|
|
);
|
2021-07-20 22:27:41 +00:00
|
|
|
return this.ajax(url, 'POST', {
|
|
|
|
data: {
|
|
|
|
Payload: base64EncodeString(payload),
|
|
|
|
Meta: meta,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
2020-06-11 21:23:00 +00:00
|
|
|
}
|