github.com/aminovpavel/nomad@v0.11.8/ui/mirage/scenarios/default.js (about)

     1  import config from 'nomad-ui/config/environment';
     2  import { pickOne } from '../utils';
     3  
     4  const withNamespaces = getConfigValue('mirageWithNamespaces', false);
     5  const withTokens = getConfigValue('mirageWithTokens', true);
     6  const withRegions = getConfigValue('mirageWithRegions', false);
     7  
     8  const allScenarios = {
     9    smallCluster,
    10    mediumCluster,
    11    largeCluster,
    12    massiveCluster,
    13    allJobTypes,
    14    allNodeTypes,
    15    everyFeature,
    16    emptyCluster,
    17  };
    18  
    19  const scenario = getConfigValue('mirageScenario', 'emptyCluster');
    20  
    21  export default function(server) {
    22    const activeScenario = allScenarios[scenario];
    23    if (!activeScenario) {
    24      throw new Error(
    25        `Selected Mirage scenario does not exist.\n\n${scenario} not in list: \n\n\t${Object.keys(
    26          allScenarios
    27        ).join('\n\t')}`
    28      );
    29    }
    30  
    31    if (withNamespaces) createNamespaces(server);
    32    if (withTokens) createTokens(server);
    33    if (withRegions) createRegions(server);
    34    activeScenario(server);
    35  }
    36  
    37  // Scenarios
    38  
    39  function smallCluster(server) {
    40    server.createList('agent', 3);
    41    server.createList('node', 5);
    42    server.createList('job', 5);
    43    server.createList('allocFile', 5);
    44    server.create('allocFile', 'dir', { depth: 2 });
    45    server.createList('csi-plugin', 2);
    46  
    47    const csiAllocations = server.createList('allocation', 5);
    48    const volumes = server.schema.csiVolumes.all().models;
    49    csiAllocations.forEach(alloc => {
    50      const volume = pickOne(volumes);
    51      volume.writeAllocs.add(alloc);
    52      volume.readAllocs.add(alloc);
    53      volume.save();
    54    });
    55  }
    56  
    57  function mediumCluster(server) {
    58    server.createList('agent', 3);
    59    server.createList('node', 50);
    60    server.createList('job', 25);
    61  }
    62  
    63  // Due to Mirage performance, large cluster scenarios will be slow
    64  function largeCluster(server) {
    65    server.createList('agent', 5);
    66    server.createList('node', 1000);
    67    server.createList('job', 100);
    68  }
    69  
    70  function massiveCluster(server) {
    71    server.createList('agent', 7);
    72    server.createList('node', 5000);
    73    server.createList('job', 2000);
    74  }
    75  
    76  function allJobTypes(server) {
    77    server.createList('agent', 3);
    78    server.createList('node', 5);
    79  
    80    server.create('job', { type: 'service' });
    81    server.create('job', { type: 'batch' });
    82    server.create('job', { type: 'system' });
    83    server.create('job', 'periodic');
    84    server.create('job', 'parameterized');
    85    server.create('job', { failedPlacements: true });
    86  }
    87  
    88  function allNodeTypes(server) {
    89    server.createList('agent', 3);
    90  
    91    server.create('node');
    92    server.create('node', 'forceIPv4');
    93    server.create('node', 'draining');
    94    server.create('node', 'forcedDraining');
    95    server.create('node', 'noDeadlineDraining');
    96    server.create('node', 'withMeta');
    97  
    98    server.createList('job', 3);
    99  }
   100  
   101  function everyFeature(server) {
   102    server.createList('agent', 3);
   103  
   104    server.create('node', 'forceIPv4');
   105    server.create('node', 'draining');
   106    server.create('node', 'forcedDraining');
   107    server.create('node', 'noDeadlineDraining');
   108    server.create('node', 'withMeta');
   109  
   110    const job1 = server.create('job', {
   111      type: 'service',
   112      activeDeployment: true,
   113      namespaceId: 'default',
   114      createAllocations: false,
   115    });
   116    server.create('job', { type: 'batch', failedPlacements: true, namespaceId: 'default' });
   117    server.create('job', { type: 'system', namespaceId: 'default' });
   118    server.create('job', 'periodic', { namespaceId: 'default' });
   119    server.create('job', 'parameterized', { namespaceId: 'default' });
   120  
   121    server.create('allocation', 'rescheduled', { jobId: job1.id });
   122    server.create('allocation', 'preempter', { jobId: job1.id });
   123    server.create('allocation', 'preempted', { jobId: job1.id });
   124  }
   125  
   126  function emptyCluster(server) {
   127    server.create('agent');
   128    server.create('node');
   129  }
   130  
   131  // Behaviors
   132  
   133  function createTokens(server) {
   134    server.createList('token', 3);
   135    logTokens(server);
   136  }
   137  
   138  function createNamespaces(server) {
   139    server.createList('namespace', 3);
   140  }
   141  
   142  function createRegions(server) {
   143    ['americas', 'europe', 'asia', 'some-long-name-just-to-test'].forEach(id => {
   144      server.create('region', { id });
   145    });
   146  }
   147  
   148  /* eslint-disable */
   149  function logTokens(server) {
   150    console.log('TOKENS:');
   151    server.db.tokens.forEach(token => {
   152      console.log(`
   153  Name: ${token.name}
   154  Secret: ${token.secretId}
   155  Accessor: ${token.accessorId}
   156  
   157  `);
   158    });
   159  }
   160  
   161  function getConfigValue(variableName, defaultValue) {
   162    const value = config.APP[variableName];
   163    if (value !== undefined) return value;
   164  
   165    console.warn(
   166      `No ENV.APP value set for "${variableName}". Defaulting to "${defaultValue}". To set a custom value, modify config/environment.js`
   167    );
   168    return defaultValue;
   169  }
   170  /* eslint-enable */