github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/app/models/task.js (about) 1 import { attr } from '@ember-data/model'; 2 import Fragment from 'ember-data-model-fragments/fragment'; 3 import { 4 fragment, 5 fragmentArray, 6 fragmentOwner, 7 } from 'ember-data-model-fragments/attributes'; 8 import { computed } from '@ember/object'; 9 10 export default class Task extends Fragment { 11 @fragmentOwner() taskGroup; 12 13 @attr('string') name; 14 @attr('string') driver; 15 @attr('string') kind; 16 17 @attr() meta; 18 19 @computed('taskGroup.mergedMeta', 'meta') 20 get mergedMeta() { 21 return { 22 ...this.taskGroup.mergedMeta, 23 ...this.meta, 24 }; 25 } 26 27 @fragment('lifecycle') lifecycle; 28 29 @computed('lifecycle', 'lifecycle.sidecar') 30 get lifecycleName() { 31 if (this.lifecycle) { 32 const { hook, sidecar } = this.lifecycle; 33 34 if (hook === 'prestart') { 35 return sidecar ? 'prestart-sidecar' : 'prestart-ephemeral'; 36 } else if (hook === 'poststart') { 37 return sidecar ? 'poststart-sidecar' : 'poststart-ephemeral'; 38 } else if (hook === 'poststop') { 39 return 'poststop'; 40 } 41 } 42 43 return 'main'; 44 } 45 46 @attr('number') reservedMemory; 47 @attr('number') reservedMemoryMax; 48 @attr('number') reservedCPU; 49 @attr('number') reservedDisk; 50 @attr('number') reservedEphemeralDisk; 51 @fragmentArray('service-fragment') services; 52 53 @fragmentArray('volume-mount', { defaultValue: () => [] }) volumeMounts; 54 55 async _fetchParentJob() { 56 let job = await this.store.findRecord('job', this.taskGroup.job.id, { 57 reload: true, 58 }); 59 this._job = job; 60 } 61 62 get pathLinkedVariable() { 63 if (!this._job) { 64 this._fetchParentJob(); 65 return null; 66 } else { 67 let jobID = this._job.plainId; 68 if (this._job.parent.get('plainId')) { 69 jobID = this._job.parent.get('plainId'); 70 } 71 return this._job.variables?.findBy( 72 'path', 73 `nomad/jobs/${jobID}/${this.taskGroup.name}/${this.name}` 74 ); 75 } 76 } 77 }