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  }