pk-template
Version:
p template engine for kubernetes
158 lines • 11.8 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const pkyaml = __importStar(require("../pk-yaml"));
const lazy_1 = require("../lazy");
const pkt_1 = require("../pkt/pkt");
const utils_1 = require("../pk-template/utils");
const objectError = (object, err) => {
console.log(pkyaml.dumpYaml(object));
console.error(lazy_1.getChalk().red('ERROR: ' + err));
process.exit(1);
};
const buildCatalog = (buildInfo, objects) => {
const catalog = objects
.map(o => {
const kind = o.kind;
const avs = o.apiVersion.split('/');
const apiGroup = avs.length == 2 ? avs[0] : '';
const namespace = o.metadata.namespace || '';
const name = o.metadata.name;
const sha = (o.metadata.annotations && o.metadata.annotations['pk.io/sha']) || utils_1.sha256(o, 8);
return `${kind}/${apiGroup}/${name}/${namespace}/${sha}`;
})
.join('\n');
return {
apiVersion: "v1",
kind: "ConfigMap",
metadata: {
name: buildInfo.name,
namespace: "pk-deployments",
annotations: {
"pkt.io/type": "pk-deployment",
"pkt.io/pk-deployment-id": buildInfo.id,
"pkt.io/pk-deployment-name": buildInfo.name,
},
},
data: {
header: '\n' +
'#--------------------------------------------------------\n' +
'# DEPLOYMENT SPEC\n' +
'#--------------------------------------------------------\n' +
'\n' +
pkyaml.dumpYaml(buildInfo) +
'\n' +
'#--------------------------------------------------------\n' +
'\n',
catalog: catalog,
},
};
};
const expandNamespaceSpec = (namespaceSpec, conf, app, envName, clusterName) => {
return namespaceSpec.replace(/({\w+})/g, (m, p1, p2) => {
const key = m.substr(1, m.length - 2);
if (key == 'project') {
return conf.data.project.name;
}
if (key == 'app') {
return app.name;
}
if (key == 'env') {
return envName;
}
if (key == 'cluster') {
return clusterName;
}
throw new Error(`unknown key from namespace {${key}}`);
});
};
const validateObjects = (objects) => {
for (const o of objects) {
if (!o.metadata) {
objectError(o, 'object does not have metadata');
}
if (!o.kind) {
objectError(o, 'object does not have kind');
}
if (!o.apiVersion) {
objectError(o, 'object does not have apiVersion');
}
if (!o.metadata.name) {
objectError(o, 'object does not have name');
}
}
};
const makeBuildSpec = (conf, app, envName, clusterName) => {
const namespaceSpec = app.namespace || conf.data.namespace || '{project}-{app}-{env}';
const namespace = expandNamespaceSpec(namespaceSpec, conf, app, envName, clusterName);
const deploymentName = `${conf.data.project.name}-${app.name}-${envName}-${clusterName}`;
const deploymentId = `${app.id}-${envName}-${clusterName}`;
const buildSpec = {
id: deploymentId,
name: deploymentName,
created: new Date().toJSON(),
project: conf.data.project,
cluster: clusterName,
namespace,
git: {
repo: utils_1.repository(),
path: utils_1.repositoryPath('./app.pkt'),
},
app: {
name: app.name,
id: app.id,
},
env: envName,
};
if (app.owner) {
buildSpec.app.owner = app.owner;
}
return buildSpec;
};
exports.buildPkd = (conf, appName, envName, clusterName) => __awaiter(this, void 0, void 0, function* () {
const app = conf.getApp(appName);
if (!app) {
throw new Error(`app ${appName} not exits`);
}
const env = conf.getMergedEnv(appName, envName, clusterName);
if (!env) {
throw new Error(`app ${appName} does not have env ${envName}`);
}
const buildSpec = makeBuildSpec(conf, app, envName, clusterName);
let objects = yield pkt_1.generate({
options: {},
file: `app.pkt`,
env: env.name,
values: {
// ...env.values,
namespace: buildSpec.namespace,
env: env.name,
cluster: clusterName,
deployment: buildSpec,
},
});
objects = objects.map(o => o);
validateObjects(objects);
const catalogObject = buildCatalog(buildSpec, objects);
objects.push(catalogObject);
const pkd = {
header: buildSpec,
objects,
};
return pkd;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstZGVwbG95L2J1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQXFDO0FBQ3JDLGtDQUFtQztBQUluQyxvQ0FBc0M7QUFDdEMsZ0RBQTBFO0FBRzFFLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBZSxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUE4QixFQUFFLE9BQWtCLEVBQUUsRUFBRTtJQUUxRSxNQUFNLE9BQU8sR0FBRyxPQUFPO1NBQ3BCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNQLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9DLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMs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