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