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 });