github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/ui/mirage/factories/task.js (about)

     1  import { Factory } from 'ember-cli-mirage';
     2  import faker from 'nomad-ui/mirage/faker';
     3  import { generateResources } from '../common';
     4  import { dasherize } from '@ember/string';
     5  import { pickOne } from '../utils';
     6  
     7  const DRIVERS = ['docker', 'java', 'rkt', 'qemu', 'exec', 'raw_exec'];
     8  
     9  export default Factory.extend({
    10    createRecommendations: false,
    11  
    12    withServices: false,
    13  
    14    // Hidden property used to compute the Summary hash
    15    groupNames: [],
    16  
    17    // Set in the TaskGroup factory
    18    volumeMounts: [],
    19  
    20    JobID: '',
    21  
    22    name: (id) => `task-${dasherize(faker.hacker.noun())}-${id}`,
    23    driver: () => faker.helpers.randomize(DRIVERS),
    24  
    25    originalResources: generateResources,
    26    resources: function () {
    27      // Generate resources the usual way, but transform to the old
    28      // shape because that's what the job spec uses.
    29      const resources = this.originalResources;
    30      return {
    31        CPU: resources.Cpu.CpuShares,
    32        MemoryMB: resources.Memory.MemoryMB,
    33        MemoryMaxMB: resources.Memory.MemoryMaxMB,
    34        DiskMB: resources.Disk.DiskMB,
    35      };
    36    },
    37  
    38    Lifecycle: (i) => {
    39      const cycle = i % 6;
    40  
    41      if (cycle === 0) {
    42        return null;
    43      } else if (cycle === 1) {
    44        return { Hook: 'prestart', Sidecar: false };
    45      } else if (cycle === 2) {
    46        return { Hook: 'prestart', Sidecar: true };
    47      } else if (cycle === 3) {
    48        return { Hook: 'poststart', Sidecar: false };
    49      } else if (cycle === 4) {
    50        return { Hook: 'poststart', Sidecar: true };
    51      } else if (cycle === 5) {
    52        return { Hook: 'poststop' };
    53      }
    54    },
    55  
    56    afterCreate(task, server) {
    57      if (task.createRecommendations) {
    58        const recommendations = [];
    59  
    60        if (faker.random.number(10) >= 1) {
    61          recommendations.push(
    62            server.create('recommendation', { task, resource: 'CPU' })
    63          );
    64        }
    65  
    66        if (faker.random.number(10) >= 1) {
    67          recommendations.push(
    68            server.create('recommendation', { task, resource: 'MemoryMB' })
    69          );
    70        }
    71  
    72        task.save({ recommendationIds: recommendations.mapBy('id') });
    73      }
    74  
    75      if (task.withServices) {
    76        const services = server.createList('service-fragment', 1, {
    77          provider: 'nomad',
    78          taskName: task.name,
    79        });
    80  
    81        services.push(
    82          server.create('service-fragment', {
    83            provider: 'consul',
    84            taskName: task.name,
    85          })
    86        );
    87        services.forEach((fragment) => {
    88          server.createList('service', 5, {
    89            serviceName: fragment.name,
    90          });
    91        });
    92        task.update({ services });
    93      }
    94    },
    95  });