github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/app/adapters/job.js (about) 1 import WatchableNamespaceIDs from './watchable-namespace-ids'; 2 import addToPath from 'nomad-ui/utils/add-to-path'; 3 import { base64EncodeString } from 'nomad-ui/utils/encode'; 4 import classic from 'ember-classic-decorator'; 5 6 @classic 7 export default class JobAdapter extends WatchableNamespaceIDs { 8 relationshipFallbackLinks = { 9 summary: '/summary', 10 }; 11 12 fetchRawDefinition(job) { 13 const url = this.urlForFindRecord(job.get('id'), 'job'); 14 return this.ajax(url, 'GET'); 15 } 16 17 forcePeriodic(job) { 18 if (job.get('periodic')) { 19 const url = addToPath( 20 this.urlForFindRecord(job.get('id'), 'job'), 21 '/periodic/force' 22 ); 23 return this.ajax(url, 'POST'); 24 } 25 } 26 27 stop(job) { 28 const url = this.urlForFindRecord(job.get('id'), 'job'); 29 return this.ajax(url, 'DELETE'); 30 } 31 32 purge(job) { 33 const url = this.urlForFindRecord(job.get('id'), 'job') + '?purge=true'; 34 return this.ajax(url, 'DELETE'); 35 } 36 37 parse(spec) { 38 const url = addToPath(this.urlForFindAll('job'), '/parse?namespace=*'); 39 return this.ajax(url, 'POST', { 40 data: { 41 JobHCL: spec, 42 Canonicalize: true, 43 }, 44 }); 45 } 46 47 plan(job) { 48 const jobId = job.get('id') || job.get('_idBeforeSaving'); 49 const store = this.store; 50 const url = addToPath(this.urlForFindRecord(jobId, 'job'), '/plan'); 51 52 return this.ajax(url, 'POST', { 53 data: { 54 Job: job.get('_newDefinitionJSON'), 55 Diff: true, 56 }, 57 }).then((json) => { 58 json.ID = jobId; 59 store.pushPayload('job-plan', { jobPlans: [json] }); 60 return store.peekRecord('job-plan', jobId); 61 }); 62 } 63 64 // Running a job doesn't follow REST create semantics so it's easier to 65 // treat it as an action. 66 run(job) { 67 return this.ajax(this.urlForCreateRecord('job'), 'POST', { 68 data: { 69 Job: job.get('_newDefinitionJSON'), 70 }, 71 }); 72 } 73 74 update(job) { 75 const jobId = job.get('id') || job.get('_idBeforeSaving'); 76 return this.ajax(this.urlForUpdateRecord(jobId, 'job'), 'POST', { 77 data: { 78 Job: job.get('_newDefinitionJSON'), 79 }, 80 }); 81 } 82 83 scale(job, group, count, message) { 84 const url = addToPath( 85 this.urlForFindRecord(job.get('id'), 'job'), 86 '/scale' 87 ); 88 return this.ajax(url, 'POST', { 89 data: { 90 Count: count, 91 Message: message, 92 Target: { 93 Group: group, 94 }, 95 Meta: { 96 Source: 'nomad-ui', 97 }, 98 }, 99 }); 100 } 101 102 dispatch(job, meta, payload) { 103 const url = addToPath( 104 this.urlForFindRecord(job.get('id'), 'job'), 105 '/dispatch' 106 ); 107 return this.ajax(url, 'POST', { 108 data: { 109 Payload: base64EncodeString(payload), 110 Meta: meta, 111 }, 112 }); 113 } 114 }