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  }