@pubgcorp/pk-template
Version:
p template engine for kubernetes
181 lines • 13.3 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildPkd = exports.isVirtualObject = exports.pkIoApiVersion = void 0;
const pkyaml = __importStar(require("../pk-yaml"));
const lazy_1 = require("../lazy");
const pkt_1 = require("../pkt/pkt");
const utils_1 = require("../pk-template/utils");
exports.pkIoApiVersion = 'pk.io/v1';
const isVirtualObject = (o) => o.apiVersion === exports.pkIoApiVersion;
exports.isVirtualObject = isVirtualObject;
const objectError = (object, err) => {
console.log(pkyaml.dumpYaml(object));
console.error((0, lazy_1.getChalk)().red('ERROR: ' + err));
process.exit(1);
};
const buildCatalog = (buildInfo, objects) => {
const catalog = objects
.filter(o => !(0, exports.isVirtualObject)(o))
.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']) || (0, 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: (0, utils_1.repository)(),
path: (0, utils_1.repositoryPath)('./app.pkt'),
},
app: {
name: app.name,
id: app.id,
},
env: envName,
};
if (app.owner) {
buildSpec.app.owner = app.owner;
}
return buildSpec;
};
const buildPkd = (conf, appName, envName, clusterName) => __awaiter(void 0, 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 (0, 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;
});
exports.buildPkd = buildPkd;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGstZGVwbG95L2J1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQXFDO0FBQ3JDLGtDQUFtQztBQUluQyxvQ0FBc0M7QUFDdEMsZ0RBQTBFO0FBRzdELFFBQUEsY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQVUsRUFBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxzQkFBYyxDQUFDO0FBQTNFLFFBQUEsZUFBZSxtQkFBNEQ7QUFFeEYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFlLEVBQUUsR0FBVyxFQUFFLEVBQUU7SUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFBLGVBQVEsR0FBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLENBQUMsQ0FBQTtBQUVELE1BQU0sWUFBWSxHQUFHLENBQUMsU0FBOEIsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFFMUUsTUFBTSxPQUFPLEdBQUcsT0FBTztTQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUEsdUJBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNoQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDUCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLEdB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