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  }