diff --git a/bin/renderlocal b/bin/renderlocal index d1b039f..9904233 100755 --- a/bin/renderlocal +++ b/bin/renderlocal @@ -3,9 +3,8 @@ const nopt = require('nopt'); const path = require('path'); -const { FetchEnvs, MockController } = require('@razee/razeedeploy-core'); -const IOUtils = require('../src/IOUtils'); -const LocalMustacheTemplateController = require('../src/LocalMustacheTemplateController'); +const IOUtils = require('../test/lib/IOUtils'); +const LocalRenderer = require('../test/lib/LocalRenderer'); const args = nopt( { @@ -27,29 +26,12 @@ if (args.env === undefined || args.env.length < 1) { } async function renderLocal() { - const mtp = await IOUtils.readYamlFile(args.mtp); - const kubeData = await IOUtils.kubeDataFromYamlFiles(...args.env); - - const eventData = { - type: 'ADDED', - object: mtp[0] - } - - const fetchEnvs = new FetchEnvs(new MockController(eventData, kubeData)); - const view = await fetchEnvs.get('spec'); - - const mtpController = new LocalMustacheTemplateController({eventData: eventData, kubeData: kubeData}); - let templates = mtpController.concatTemplates(); - await mtpController.processTemplate(templates, view); - - if (templates.length > 1) { - throw Error("can only handle one template!"); - } + const data = await new LocalRenderer(args.mtp, ...args.env).render(); if (args.out === undefined) { - await IOUtils.printYaml(templates[0]); + await IOUtils.printYaml(data); } else { - await IOUtils.writeYamlFile(templates[0], args.out) + await IOUtils.writeYamlFile(data, args.out) } }; diff --git a/src/index.js b/src/index.js index 82f4777..4335e29 100644 --- a/src/index.js +++ b/src/index.js @@ -18,6 +18,7 @@ const { EventHandler, KubeClass } = require('@razee/kubernetes-util'); const ControllerString = 'MustacheTemplate'; const Controller = require(`./${ControllerString}Controller`); +const LocalRenderer = require('../test/lib/LocalRenderer'); const log = require('./logger').createLogger(ControllerString); async function createNewEventHandler(kc) { @@ -71,5 +72,6 @@ async function run() { module.exports = { run, + LocalRenderer, MustacheTemplateController: Controller }; diff --git a/src/IOUtils.js b/test/lib/IOUtils.js similarity index 72% rename from src/IOUtils.js rename to test/lib/IOUtils.js index 87736da..9b0de6a 100644 --- a/src/IOUtils.js +++ b/test/lib/IOUtils.js @@ -1,4 +1,4 @@ -const fs = require('fs'); +const {promises: fs} = require('fs'); const yaml = require('js-yaml'); async function kubeDataFromYamlFiles(...filePaths) { @@ -11,6 +11,11 @@ async function kubeDataFromYamlFiles(...filePaths) { kubeData[kind] = []; } kubeData[kind].push(element); + if (element.metadata.namespace === undefined) { + const msg = `assuming "default" namespace missing from ${element.kind}/${element.metadata.name} in ${filePath}`; + console.warn(msg); + element.metadata.namespace = 'default'; + } } } return kubeData; @@ -25,7 +30,7 @@ async function printYaml(asObj) { } async function readFile(filePath) { - return await fs.promises.readFile(filePath); + return await fs.readFile(filePath); } async function readYamlFile(filePath) { @@ -33,7 +38,7 @@ async function readYamlFile(filePath) { } async function writeFile(contents, filePath) { - fs.writeFile(filePath, contents, (err) => { console.error(err); }); + await fs.writeFile(filePath, contents); } async function writeYamlFile(asObj, filePath) { diff --git a/src/LocalMustacheTemplateController.js b/test/lib/LocalMustacheTemplateController.js similarity index 86% rename from src/LocalMustacheTemplateController.js rename to test/lib/LocalMustacheTemplateController.js index 6755df4..119086a 100644 --- a/src/LocalMustacheTemplateController.js +++ b/test/lib/LocalMustacheTemplateController.js @@ -1,5 +1,5 @@ const { MockKubeResourceMeta } = require('@razee/razeedeploy-core'); -const MustacheTemplateController = require('../src/MustacheTemplateController'); +const MustacheTemplateController = require('../../src/MustacheTemplateController'); module.exports = class LocalMustacheTemplateController extends MustacheTemplateController { constructor(params) { diff --git a/test/lib/LocalRenderer.js b/test/lib/LocalRenderer.js new file mode 100644 index 0000000..ed5f5a3 --- /dev/null +++ b/test/lib/LocalRenderer.js @@ -0,0 +1,34 @@ +const IOUtils = require('./IOUtils'); +const LocalMustacheTemplateController = require('./LocalMustacheTemplateController'); + +const { FetchEnvs, MockController } = require('@razee/razeedeploy-core'); + +module.exports = class LocalRenderer { + constructor(mtpPath, ...envPaths) { + this.mtpPath = mtpPath; + this.envPaths = envPaths; + } + + async render() { + const mtp = await IOUtils.readYamlFile(this.mtpPath); + const kubeData = await IOUtils.kubeDataFromYamlFiles(...this.envPaths); + + const eventData = { + type: 'ADDED', + object: mtp[0] + } + + const fetchEnvs = new FetchEnvs(new MockController(eventData, kubeData)); + const view = await fetchEnvs.get('spec'); + + const mtpController = new LocalMustacheTemplateController({eventData: eventData, kubeData: kubeData}); + let templates = mtpController.concatTemplates(); + templates = await mtpController.processTemplate(templates, view); + + if (templates.length > 1) { + throw Error("can only handle one template!"); + } + + return templates[0]; + } +} diff --git a/test/mustache-template-tests.js b/test/mustache-template-tests.js index 108da50..9f96405 100644 --- a/test/mustache-template-tests.js +++ b/test/mustache-template-tests.js @@ -1,5 +1,5 @@ var assert = require('chai').assert; -var Controller = require('../src/LocalMustacheTemplateController'); +var Controller = require('../test/lib/LocalMustacheTemplateController'); describe('#processTemplates', async function () { const eventData = {