constructor()

in compute/instances/custom-machine-type/createWithHelper.js [46:176]


    constructor(zone, cpuSeries, coreCount, memory) {
      this.zone = zone;
      this.cpuSeries = cpuSeries;
      this.coreCount = coreCount;
      this.memory = memory;

      this.N1 = 'custom';
      this.N2 = 'n2-custom';
      this.N2D = 'n2d-custom';
      this.E2 = 'e2-custom';
      this.E2Micro = 'e2-custom-micro';
      this.E2Small = 'e2-custom-small';
      this.E2Medium = 'e2-custom-medium';

      this.CpuSeriesE2Limit = {
        allowedCores: range(2, 33, 2),
        minMemPerCore: 512,
        maxMemPerCore: 8192,
        allowExtraMemory: false,
        extraMemoryLimit: 0,
      };

      this.CpuSeriesE2MicroLimit = {
        allowedCores: [],
        minMemPerCore: 1024,
        maxMemPerCore: 2048,
        allowExtraMemory: false,
        extraMemoryLimit: 0,
      };

      this.CpuSeriesE2SmallLimit = {
        allowedCores: [],
        minMemPerCore: 2048,
        maxMemPerCore: 4096,
        allowExtraMemory: false,
        extraMemoryLimit: 0,
      };

      this.CpuSeriesE2MediumLimit = {
        allowedCores: [],
        minMemPerCore: 4096,
        maxMemPerCore: 8192,
        allowExtraMemory: false,
        extraMemoryLimit: 0,
      };

      this.CpuSeriesN2Limit = {
        allowedCores: [...range(2, 33, 2), ...range(36, 129, 4)],
        minMemPerCore: 512,
        maxMemPerCore: 8192,
        allowExtraMemory: true,
        extraMemoryLimit: 624 << 10,
      };

      this.CpuSeriesN2DLimit = {
        allowedCores: [2, 4, 8, 16, 32, 48, 64, 80, 96],
        minMemPerCore: 512,
        maxMemPerCore: 8192,
        allowExtraMemory: true,
        extraMemoryLimit: 768 << 10,
      };

      this.CpuSeriesN1Limit = {
        allowedCores: [1, range(2, 97, 2)],
        minMemPerCore: 922,
        maxMemPerCore: 6656,
        allowExtraMemory: true,
        extraMemoryLimit: 624 << 10,
      };

      this.TYPE_LIMITS = {
        [this.N1]: this.CpuSeriesN1Limit,
        [this.N2]: this.CpuSeriesN2Limit,
        [this.N2D]: this.CpuSeriesN2DLimit,
        [this.E2]: this.CpuSeriesE2Limit,
        [this.E2Micro]: this.CpuSeriesE2MicroLimit,
        [this.E2Small]: this.CpuSeriesE2SmallLimit,
        [this.E2Medium]: this.CpuSeriesE2MediumLimit,
      };

      if (![this.E2, this.N1, this.N2, this.N2D].includes(cpuSeries)) {
        throw new Error(`Incorrect CPU type: ${this.cpuSeries}`);
      }

      this.typeLimit = this.TYPE_LIMITS[this.cpuSeries];

      // Check whether the requested parameters are allowed.
      // Find more information about limitations of custom machine types at:
      // https://cloud.google.com/compute/docs/general-purpose-machines#custom_machine_types

      // Check the number of cores
      if (
        this.typeLimit.allowedCores.length > 0 &&
        !this.typeLimit.allowedCores.includes(coreCount)
      ) {
        throw new Error(
          `Invalid number of cores requested. Allowed number of cores for ${this.cpuSeries} is: ${this.typeLimit.allowedCores}`
        );
      }

      // Memory must be a multiple of 256 MB
      if (this.memory % 256 !== 0) {
        throw new Error('Requested memory must be a multiple of 256 MB');
      }

      // Check if the requested memory isn't too little
      if (this.memory < this.coreCount * this.typeLimit.minMemPerCore) {
        throw new Error(
          `Requested memory is too low. Minimal memory for ${this.cpuSeries} is ${this.typeLimit.minMemPerCore} MB per core`
        );
      }

      // Check if the requested memory isn't too much
      if (
        this.memory > this.coreCount * this.typeLimit.maxMemPerCore &&
        !this.typeLimit.allowExtraMemory
      ) {
        throw new Error(
          `Requested memory is too large.. Maximum memory allowed for ${this.cpuSeries} is ${this.typeLimit.maxMemPerCore} MB per core`
        );
      }

      if (
        this.memory > this.typeLimit.extraMemoryLimit &&
        this.typeLimit.allowExtraMemory
      ) {
        throw new Error(
          `Requested memory is too large.. Maximum memory allowed for ${this.cpuSeries} is ${this.typeLimit.extraMemoryLimit} MB`
        );
      }
    }