function assertValidGkeConfigMapFile()

in projects/alloydb-autoscaler/src/autoscaler-config-validator/config-validator-cli.ts [57:107]


function assertValidGkeConfigMapFile(
  configValidator: ConfigValidator,
  filename: string
) {
  // Allow any type since the configMap is not in our control.
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  let configMap: any;

  try {
    const configText = fs.readFileSync(filename, 'utf-8');
    configMap = yaml.load(configText) as object;
  } catch (e) {
    console.error(`Could not parse YAML from ${filename}: ${e}`);
    throw e;
  }

  if (configMap?.kind !== 'ConfigMap') {
    console.error(`${filename} is not a GKE ConfigMap`);
    throw new Error(`${filename} is not a GKE ConfigMap`);
  }

  let success = true;
  for (const configMapFile of Object.keys(configMap?.data)) {
    const configMapData = configMap?.data[configMapFile];
    try {
      const config = yaml.load(configMapData);
      configValidator.parseAndAssertValidConfig(JSON.stringify(config));
    } catch (e) {
      if (e instanceof ValidationError) {
        console.error(
          `Validation of configMap entry data.${configMapFile} in file ` +
            `${filename} failed:\n${e.message}`
        );
      } else if (e instanceof yaml.YAMLException) {
        console.error(
          'Could not parse YAML from value data. ' +
            `${configMapFile} in ${filename}: ${e}`
        );
      } else {
        console.error(
          `Processing of configMap entry data.${configMapFile} in file ` +
            `${filename} failed: ${e}`
        );
      }
      success = false;
    }
  }
  if (!success) {
    throw new Error(`${filename} Failed validation`);
  }
}