github.com/hernad/nomad@v1.6.112/ui/mirage/common.js (about) 1 /** 2 * Copyright (c) HashiCorp, Inc. 3 * SPDX-License-Identifier: MPL-2.0 4 */ 5 6 import faker from 'nomad-ui/mirage/faker'; 7 import { provide } from './utils'; 8 9 faker.seed(1); 10 11 // Realistically, resource reservations have a low cardinality 12 const CPU_RESERVATIONS = [250, 500, 1000, 2000, 2500, 4000]; 13 const MEMORY_RESERVATIONS = [256, 512, 1024, 2048, 4096, 8192]; 14 const DISK_RESERVATIONS = [200, 500, 1000, 2000, 5000, 10000, 100000]; 15 16 // There is also a good chance that certain resource restrictions are unbounded 17 DISK_RESERVATIONS.push(...Array(500).fill(0)); 18 19 const NETWORK_MODES = ['bridge', 'host']; 20 21 export const DATACENTERS = provide( 22 15, 23 (n, i) => `${faker.address.countryCode().toLowerCase()}${i}` 24 ); 25 26 export const HOSTS = provide(100, () => { 27 const ip = faker.random.boolean() 28 ? faker.internet.ip() 29 : `[${faker.internet.ipv6()}]`; 30 return `${ip}:${faker.random.number({ min: 4000, max: 4999 })}`; 31 }); 32 33 export const STORAGE_PROVIDERS = ['ebs', 'zfs', 'nfs', 'cow', 'moo']; 34 35 export function generateResources(options = {}) { 36 const resources = { 37 Cpu: { 38 CpuShares: options.CPU || faker.helpers.randomize(CPU_RESERVATIONS), 39 }, 40 Memory: { 41 MemoryMB: 42 options.MemoryMB || faker.helpers.randomize(MEMORY_RESERVATIONS), 43 }, 44 Disk: { 45 DiskMB: options.DiskMB || faker.helpers.randomize(DISK_RESERVATIONS), 46 }, 47 Networks: generateNetworks(options.networks), 48 Ports: generatePorts(options.networks), 49 }; 50 51 if (faker.random.boolean()) { 52 const higherMemoryReservations = MEMORY_RESERVATIONS.filter( 53 (mb) => mb > resources.Memory.MemoryMB 54 ); 55 resources.Memory.MemoryMaxMB = 56 faker.helpers.randomize(higherMemoryReservations) || 57 resources.Memory.MemoryMB + 1; 58 } else { 59 resources.Memory.MemoryMaxMB = 0; 60 } 61 62 return resources; 63 } 64 65 export function generateNetworks(options = {}) { 66 return Array(faker.random.number({ min: 1, max: 3 })) 67 .fill(null) 68 .map(() => ({ 69 Device: `eth${faker.random.number({ max: 5 })}`, 70 CIDR: '', 71 IP: faker.internet.ip(), 72 MBits: 10, 73 Mode: faker.helpers.randomize(NETWORK_MODES), 74 ReservedPorts: Array( 75 faker.random.number({ 76 min: options.minPorts != null ? options.minPorts : 0, 77 max: options.maxPorts != null ? options.maxPorts : 2, 78 }) 79 ) 80 .fill(null) 81 .map(() => ({ 82 Label: faker.hacker.noun(), 83 Value: faker.random.number({ min: 5000, max: 60000 }), 84 To: faker.random.number({ min: 5000, max: 60000 }), 85 })), 86 DynamicPorts: Array( 87 faker.random.number({ 88 min: options.minPorts != null ? options.minPorts : 0, 89 max: options.maxPorts != null ? options.maxPorts : 2, 90 }) 91 ) 92 .fill(null) 93 .map(() => ({ 94 Label: faker.hacker.noun(), 95 Value: faker.random.number({ min: 5000, max: 60000 }), 96 To: faker.random.number({ min: 5000, max: 60000 }), 97 })), 98 })); 99 } 100 101 export function generatePorts(options = {}) { 102 return Array( 103 faker.random.number({ 104 min: options.minPorts != null ? options.minPorts : 0, 105 max: options.maxPorts != null ? options.maxPorts : 2, 106 }) 107 ) 108 .fill(null) 109 .map(() => ({ 110 Label: faker.hacker.noun(), 111 Value: faker.random.number({ min: 5000, max: 60000 }), 112 To: faker.random.number({ min: 5000, max: 60000 }), 113 HostIP: faker.random.boolean() 114 ? faker.internet.ip() 115 : faker.internet.ipv6(), 116 })); 117 }